The stream ciphers are algorithms that can to perform encryption incrementally converting plaintext into ciphertext bitwise.
To accomplish this we construct a keystream generator (bit sequence undefined size which can be used to encrypt the data stream by combining the keystream to the data stream using the XOR function).
If the key stream is secure, encrypted data flow will be too.
For this week commissioned us choose a stream cipher and explain, for this occasion I chose:ISAAC.
Stream Cipher ISAAC
The letters are an acronym of ISAAC Indirection, Shift, Accumulate, Add, and Count, this was created in 1996 by Robert John Jenkins Jr.
This is not only a stream cipher safe but also a pseudorandom number generator.
This encryption shares many similarities with the RC4.
ISAAC is used by Unix Shred as a tool to overwrite data securely.
Description oh the Cipher
It consists of an array of 256 of 4-bit integers (known as 'mm') as input, writing the results in another vector of 256 integers (known as 'm'), which are read one at a time until it is empty, and is then recomputed.
The calculation is to alter the vector mm [i] with (i ⊕ 128) to each vector element, two elements are found by vector mm indirectly, an accumulator and a counter, for all values of i from 0 to 255 .
As you only need 19 operations of 32 bits for each output word of 32 bits, is extremely fast 32-bit computers.
Atacks y/o Vulnerabilitys
In 2001, Marina Pudovkina in said an attack can recover the input data about a complexity less than the time required to search through the square root of all possible initial states.
To achieve such an attack would mean that this attack needs time instead .This result has no practical impact on the security of ISAAC .
Among the most important is that in 2006, Jean-Philippe Aumasson discovered several series of weak states in the encryption, as this is based on RC4 has a weakness like this (this exit leads to a very similar to the ISAAC first round, and allows the derivation of the internal state, so that they could detect the input data).
Although it is unclear whether this weakness an attacker can ensure the output only if the generator is in one of these states or weak.
There is an attack on this cipher ISAAC in 2006 in Asiacrypt'06 by Paul and Bart Preneel Souradyuti, this attack demonstrate that it is of great importance, since it is based on an algorithm wrong.
Finally, a modified algorithm is proposed to fix the weaknesses discovered in the states, this change arises in an improved version called ISAAC +.
So far not been a successful attack, but that does not ensure that in the future there is the possibility of an attack.
Start the Cipher
For explanation it will be used encryption 8 data entry is required because the key which is required in the same length as the output, so that the size of the key will be the same size or 8.
Before encryption must consider a few things that you use this:
Size: The size of the key and, on this occasion is 8.
mm: Fix input
m: Output Agreement
It makes use of a process that is widely used, this is known as mix ():
This use elements of the key y save in variable (a ... h)
Another important function is the function rngstep (), this is the most important of this encryption key generator.
This does the following:
- Stores the current memory into a register
- Set the new value of the accumulator
- Set the next memory bit to the addition of 2-9 bits xo current memory and the accumulator with the above result.
- Finally, the results of the matrix is increased and began adding bits x 10 -17 and right scroll 8 bits.
This code form and in visual form:
Firsth.- Load the eight elements of the key variables, run the mix () to randomize them, the results are loaded into the eight elements of the array. This process is repeated until the key has expired.
Second.- The same process is made to mix more thoroughly, but now load the items in the array instead of the key elements in integers.
All this was to hold the keys and mixing arrangement as possible.
Would then process the main part, this has two steps:
Firsth.- It adds a counter called B, then calls the function rngstep () four times with different bitshifts of A for which the mix is best.
Second.- Make a second M2 for but, going from the first element to be repaired, calling rngstep () four times in each iteration.
This step is designed to Ensure That m2 at each array is at least one index for rngstep ().
Aquí puedes encontrar el código de este cifrado en distintos lenguajes.