Threefish | |
Designers: | Bruce Schneier, Niels Ferguson, Stefan Lucks, Doug Whiting, Mihir Bellare, Tadayoshi Kohno, Jon Callas, Jesse Walker |
Publish Date: | 2008 |
Related To: | Blowfish, Twofish |
Key Size: | 256, 512 or 1024 bits (key size is equal to block size) |
Block Size: | 256, 512 or 1024 bits |
Rounds: | 72 (80 for 1024-bit block size) |
Speed: | 6.1 cpb on Core 2. |
Cryptanalysis: | 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. |
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;[1] 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 works on words of 64 bits (unsigned Little endian integers).
w\in\{4,8,16\}
264
Threefish encrypts in
r
r | |
4 |
+1
w
w
kw
k0,k1,...,kw
t2
t0,t1
kw=C ⊕ k0 ⊕ k1 ⊕ ... ⊕ kw; C=0x1BD11BDAA9FC1A22
t2=t0 ⊕ t1
The purpose of the seemingly arbitrary constant
C
kw
The round key words
ks,
ks,= \begin{cases} k(s+i)&i=0,...,w-4\\ k(s+i)+ts&i=w-3\\ k(s+i)+t(s&i=w-2\\ k(s+i)+s&i=w-1 \end{cases}
Here
s=0,1,...,r/4
4s
ks,i
The mix function takes a tuple of words
(x0,x1)
(y0,y1)
y0=(x0+x1)\bmod264
y1=(x1\lllR(d) ⊕ y0
Rd,
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 functionsprovides bit-level permutations in the form of bitwise rotations. The Permute step and rotation constantsin the MIX functions are chosen in such a way that the overall effect is complete diffusion of all the bitsin 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 requiredfor encryption. The permutation is therefore deliberately designed to ensure that it should execute in the same fashionindependent of the key being used or the data encrypted.
d \bmod 4=0
kd/4,i
i
Rd
d
j\in\{0, … ,w/2-1\}
Threefish256 and Threefish512 apply this round
r=72
d=0,1,...,71
d=0,1,...,79
After all rounds are applied, the last round key words
kr/4,i
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.[2] This is a follow-up to the earlier attack published in February, which breaks 39 and 42 rounds respectively.[3] 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
2226
212
2352.17
2222
212
2355.5