Using the same algorithm multiple times does not necessarily give you as much extra security as you might expect: The reason is that it allows "meet in the middle attacks". Let me quote a part from the referenced link:
"When trying to improve the security of a block cipher, a tempting
idea is to simply use several independent keys to encrypt the data
several times using a sequence of functions (encryptions). Then one
might think that this doubles or even n-tuples the security of the
multiple-encryption scheme, depending on the number of encryptions the
data must go through.
The Meet-in-the-Middle attack attempts to find
a value using both of the range (ciphertext) and domain (plaintext) of
the composition of several functions (or block ciphers) such that the
forward mapping through the first functions is the same as the
backward mapping (inverse image) through the last functions, quite
literally meeting in the middle of the composed function."
The old-fashioned TripleDES algorithm did it the following way:
ciphertext = EK3(DK2(EK1(plaintext))), plaintext = DK1(EK2(DK3(ciphertext)))
where K1, K2, K3 are independent keys, E is the encryption and D the decryption function.
But you are probably looking for cascades to strengthen the encryption algorithm.
TrueCrypt and the newer VeraCrypt provide this by implementing the following cascades:
- AES-Twofish
- AES-Twofish-Serpent
- Serpent-AES
- Serpent-Twofish-AES
- Twofish-Serpent
The idea behind is that if there are any weaknesses revealed in the future, your data is still being protected by a second (or third) independent encryption algorithm.
Another technique is protecting the random key in the header by using a SALT and by increasing the number of iterations to > 1000 (SALT protects against rainbow table attacks by increasing the number of possible combinations you have to try in a brute-force attack, while increasing the number of iterations protects you by "slowing down" the algorithm: you have to loop through all iterations in order to decrypt the header: slowing it down means you have less "tries" per second and the brute force runs longer).
Update: (On the question: "How is applying iterations different from applying AES multiple times?")
Block ciphers like AES repeat their transformations multiple times depending on the key size (so called cycles or iterations) to increase the entropy of the encryption (10 cycles for 128 bit keys, 14 cycles or iterations for 256-bit keys). This is not the same as applying AES multiple times, because the cycles are part of the algorithm itself. If you implement the algorithm you can increase the number of cycles, but note that you change the standard implementation if you do that.
A key derivation function like PBKDF2 is defined as follows:
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
One of the parameters is c, and specifies the number of cycles (iterations), which is used to strenghen the algorithm, because an arbitrarily large amount of computing time is needed if the parameter c is chosen large enough. But note that in the same Wikipedia article it is noted that one of the weaknesses of PBKDF2 is that ASIC and GPU attacks can be used to break it. This means that increasing the number of iterations are not guaranteeing that the strength increases automatically.
Update: Replaced the old truecrypt.org URL by the new one hosted in Switzerland because the original developers are not continuing their work. Later added veracrypt.fr URL, which is more up to date.