Threefish
≈ 4 min read
Names in other languages
No names in other languages are held for this entry yet.
Article bodies are English and are not machine-translated. A name in another language is not a translation of the article.
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. "Threefish is unpatented, and the source code is uncopyrighted and license-free; it is free for all uses."
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. "Threefish is unpatented, and the source code is uncopyrighted and license-free; it is free for all uses." == Description of the cipher== Threefish works on words of 64 bits (unsigned Little endian integers). w \in \{4,8,16\} is the number of plaintext words and also of key words. The tweak consists of two words. All additions and subtractions are defined modulo 2^{64} . k_w = C \oplus k_0 \oplus k_1 \oplus \dots \oplus k_{w - 1}; \quad C = \text{0x1BD11BDAA9FC1A22} t_2 = t_0 \oplus t_1 The purpose of the seemingly arbitrary constant C is to frustrate some attacks that take advantage of the relationship between k_w and the other keywords. The round key words k_{s, i} are now defined like this: k_{s, i} = \begin{cases} k_{(s+i) \bmod (w + 1)} & i = 0, \dots, w - 4 \\ k_{(s+i) \bmod (w + 1)} + t_{s \bmod 3} & i = w - 3 \\ k_{(s+i) \bmod (w + 1)} + t_{(s + 1) \bmod 3} & i = w - 2 \\ k_{(s+i) \bmod (w + 1)} + s & i = w - 1 \end{cases} Here s = 0, 1, \dots , r/4 , where 4s is the number of the round in which the round key word k_{s,i} is used. y_0 = (x_0 + x_1) \bmod 2^{64} y_1 = (x_1 \lll R_{(d \bmod 8), j}) \oplus y_0 R_{d, j} is a fixed set of rotation constants chosen to achieve quick diffusion. if d\;\bmod\;4 = 0 the round key k_{d/4,i} is added to word i the mix function is applied to pairs of words, the rotation widths R_{d \bmod 8,j} depend on round number d and word pair j\in\{0,\cdots,w/2-1\} the words are permutated using a permutation independent from the round number Threefish256 and Threefish512 apply this round r=72 times ( d=0,1, \dots,71 ). Threefish1024 applies it 80 times ( d=0,1, \dots,79 ). ==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 2^{226} and the memory complexity is 2^{12} ; for the 33-round version, the time complexity is 2^{352.17} with a negligible memory usage. The attacks also work against the tweaked version of Threefish: for the 32-round version, the time complexity is 2^{222} and the memory complexity is 2^{12} ; for the 33-round version, the time complexity is 2^{355.5} with a negligible memory usage. ==See also== Twofish Blowfish (cipher) ==References==
Text derived from https://en.wikipedia.org/w/index.php?oldid=1263534488 under CC BY-SA 4.0; modifications have been made.