Threefish
Threefish is a symmetric-key tweakable block cipher designed as part of the Skein hash function, an entry in the NIST hash function competition. Threefish uses no S-boxes or other table lookups in order to avoid cache timing attacks; its nonlinearity comes from alternating additions with exclusive ORs. In that respect, it is similar to Salsa20, TEA, and the SHA-3 candidates CubeHash and BLAKE. Threefish and the Skein hash function were designed by Bruce Schneier, Niels Ferguson, Stefan Lucks, Doug Whiting, Mihir Bellare, Tadayoshi Kohno, Jon Callas, and Jesse Walker. Description of the cipher. Threefish works on words  of 64 bits (unsigned Little endian integers). formula_1 is the number of plaintext words and also of key words. The tweak consists of two words. All additions and subtractions are defined modulo formula_2. Key schedule. Threefish encrypts in formula_3 rounds and uses formula_4 different round keys. After every four rounds, and before the first, formula_5 round key words are added to the formula_5 data words. To calculate the round keys an additional key word formula_7 is appended to the original key words formula_8. Also, an additional tweak word formula_9 is appended to the tweak words formula_10. The purpose of the  seemingly arbitrary constant formula_13 is to frustrate some attacks that take advantage of the relationship between formula_7 and the other keywords. The round key words formula_15 are now defined like this: formula_16 Here formula_17, where formula_18 is the number of the round in which the round key word formula_19 is used. Mix function. The mix function takes a tuple of words formula_20 and returns another tuple of words formula_21. The function is defined like this: formula_22 formula_23 formula_24 is a fixed set of rotation constants chosen to achieve quick diffusion. Permute. The permutation step swaps the positions of the words  according to a constant pattern. Bit-level permutation is not achieved in this step, but this is not necessary since the MIX functions provides bit-level permutations in the form of bitwise rotations. The Permute step and rotation constants in the MIX functions are chosen in such a way that the overall effect is complete diffusion of all the bits in a data block. Because this permutation is fixed and independent of the key, the time needed to compute it does not provide information about the key or plaintext. This is important because on most modern microprocessors performance optimisations can  make the time taken to compute an array operation dependent on where the data is stored in memory. In ciphers where array lookup depends on either the key or plaintext (as is the case for the substitution step in AES), it can make the cipher vulnerable to timing attacks by examining the time required for encryption. The permutation is therefore deliberately designed to ensure that it should execute in the same fashion independent of the key being used or the data encrypted. A full Threefish round. Threefish256 and Threefish512 apply this round formula_31 times (formula_32). Threefish1024 applies it 80 times  (formula_33). Final operations. After all rounds are applied, the last round key words formula_34 are added to the words and the words are converted back to a string of bytes. Security. In October 2010, an attack that combines rotational cryptanalysis with the rebound attack was published. The attack mounts a known-key distinguisher against 53 of 72 rounds in Threefish-256, and 57 of 72 rounds in Threefish-512. It also affects the Skein hash function. This is a follow-up to the earlier attack published in February, which breaks 39 and 42 rounds respectively. In response to this attack, the Skein  team tweaked the rotation constants used in Threefish and thereby the key schedule constants for round 3 of the NIST hash function competition. In 2009, a related key boomerang attack against a reduced round Threefish version was published. For the 32-round version, the time complexity is formula_35 and the memory complexity is formula_36; for the 33-round version, the time complexity is formula_37 with a negligible memory usage. The attacks also work against the tweaked version of Threefish: for the 32-round version, the time complexity is formula_38 and the memory complexity is formula_36; for the 33-round version , the time complexity is formula_40 with a negligible memory usage.