state-recovery analysis of spritz Stefan Klbl 2 rc4 and tls RC4 - - PowerPoint PPT Presentation

state recovery analysis of spritz
SMART_READER_LITE
LIVE PREVIEW

state-recovery analysis of spritz Stefan Klbl 2 rc4 and tls RC4 - - PowerPoint PPT Presentation

Ralph Ankele 1 Christian Rechberger 2 August 25, 2015 1 RHUL, Royal Holloway University of London, United Kingdom 2 DTU Compute, Technical University of Denmark, Denmark state-recovery analysis of spritz Stefan Klbl 2 rc4 and tls RC4


slide-1
SLIDE 1

state-recovery analysis of spritz

Ralph Ankele1 Stefan Kölbl2 Christian Rechberger2 August 25, 2015

1RHUL, Royal Holloway University of London, United Kingdom 2DTU Compute, Technical University of Denmark, Denmark

slide-2
SLIDE 2

rc4 and tls

slide-3
SLIDE 3

RC4

RC4 ∙ Stream Cipher ∙ Designed in 1987 by Ron Rivest ∙ Fast in Software ∙ Used in TLS (Transport Layer Security) Produces key stream z = z0||z1|| . . . ||zk (1)

2

slide-4
SLIDE 4

RC4

Output bytes zi of RC4 are biased ∙ Pr[z2 = 0] ≈

1 128 [FMS01]

∙ Distribution of z1 [Mir02] ∙ Pr[zl = 256 − l] ≥

1 256 + 1 2562 [GMPS11]

Attack on TLS using RC4 ∙ Plaintext recovery for TLS using RC4 [ABP 13] ∙ Needs around 230 sessions. Usenix’15 ∙ Break WPA-TKIP and decrypt cookies in 75 hours [MF15] 1. ∙ Password Recovery TLS [CPdMT15]

1https://www.rc4nomore.com

3

slide-5
SLIDE 5

RC4

Output bytes zi of RC4 are biased ∙ Pr[z2 = 0] ≈

1 128 [FMS01]

∙ Distribution of z1 [Mir02] ∙ Pr[zl = 256 − l] ≥

1 256 + 1 2562 [GMPS11]

Attack on TLS using RC4 ∙ Plaintext recovery for TLS using RC4 [ABP+13] ∙ Needs around 230 sessions. Usenix’15 ∙ Break WPA-TKIP and decrypt cookies in 75 hours [MF15] 1. ∙ Password Recovery TLS [CPdMT15]

1https://www.rc4nomore.com

3

slide-6
SLIDE 6

RC4

Output bytes zi of RC4 are biased ∙ Pr[z2 = 0] ≈

1 128 [FMS01]

∙ Distribution of z1 [Mir02] ∙ Pr[zl = 256 − l] ≥

1 256 + 1 2562 [GMPS11]

Attack on TLS using RC4 ∙ Plaintext recovery for TLS using RC4 [ABP+13] ∙ Needs around 230 sessions. Usenix’15 ∙ Break WPA-TKIP and decrypt cookies in 75 hours [MF15] 1. ∙ Password Recovery TLS [CPdMT15]

1https://www.rc4nomore.com

3

slide-7
SLIDE 7

RC4

RC4 should NOT be used anymore! ∙ In July 2014, 10% of servers do not support RC4. ∙ In July 2015, 40% of servers do not support RC42. ∙ IETF Draft to remove RC4 from TLS RFC7465.

2SSL Pulse, July 07, 2015

4

slide-8
SLIDE 8

RC4

RC4

5

slide-9
SLIDE 9

spritz

slide-10
SLIDE 10

Spritz

A redesign of RC4 by Ron Rivest and Jacob C. N. Schuldt ∙ Avoid statistical weakness of RC4. ∙ Update function chosen using extensive computations. ∙ Uses a Sponge-like construction. RC4

i = i + 1 j = j + S[i] SWAP(S[i], S[j]) z = S[S[i] + S[j]] return z

Spritz

i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z 7

slide-11
SLIDE 11

Spritz

Table 1: Performance of stream ciphers for Software.

Cipher Long Msg. Short Msg.3 RC4 293 MB/s 142 MB/s Spritz 95 MB/s 32 MB/s Salsa20 296 MB/s 268 MB/s AES-CTR 152 MB/s 146 MB/s Spritz implementation is not optimized in this comparison.

316 byte key, 512 bytes

8

slide-12
SLIDE 12

Spritz

Internal structure: ∙ Six registers: i, j, k, w, z and a. ∙ Permutation: S: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 j i k

9

slide-13
SLIDE 13

Spritz

Sponge-like construction supports many applications ∙ Encryption ∙ Hashing ∙ MAC Example Encryption:

Encrypt(M, K): InitializeState() Absorb(K) C = M + Squeeze(M.length) 10

slide-14
SLIDE 14

Spritz

InitializeState() ∙ First all registers are initialized: i = j = k = z = a = 0, w = 1 ∙ Initialize Permutation: S: 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 i, j, k

11

slide-15
SLIDE 15

Spritz

Absorb(x) using x = 2||0||1||2 ∙ Swap(S[a], S[N/2 + x]) ∙ a = a + 1 Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a N 2 x Absorb 2 S0: 10 1 2 3 4 5 6 7 8 9 11 12 13 14 15 a N 2 x Absorb 0 S1: 10 8 2 3 4 5 6 7 1 9 11 12 13 14 15 a N 2 x Absorb 1 S2: 10 8 9 3 4 5 6 7 1 2 11 12 13 14 15 a N 2 x Absorb 2 S3: 10 8 9 4 5 6 7 1 2 3 11 12 13 14 15 a N 2 x S4:

12

slide-16
SLIDE 16

Spritz

Absorb(x) using x = 2||0||1||2 ∙ Swap(S[a], S[N/2 + x]) ∙ a = a + 1 Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a N/2 + x Absorb 2 S0: 10 1 2 3 4 5 6 7 8 9 11 12 13 14 15 a N 2 x Absorb 0 S1: 10 8 2 3 4 5 6 7 1 9 11 12 13 14 15 a N 2 x Absorb 1 S2: 10 8 9 3 4 5 6 7 1 2 11 12 13 14 15 a N 2 x Absorb 2 S3: 10 8 9 4 5 6 7 1 2 3 11 12 13 14 15 a N 2 x S4:

12

slide-17
SLIDE 17

Spritz

Absorb(x) using x = 2||0||1||2 ∙ Swap(S[a], S[N/2 + x]) ∙ a = a + 1 Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a N 2 x Absorb 2 S0: 10 1 2 3 4 5 6 7 8 9 11 12 13 14 15 a N/2 + x Absorb 0 S1: 10 8 2 3 4 5 6 7 1 9 11 12 13 14 15 a N 2 x Absorb 1 S2: 10 8 9 3 4 5 6 7 1 2 11 12 13 14 15 a N 2 x Absorb 2 S3: 10 8 9 4 5 6 7 1 2 3 11 12 13 14 15 a N 2 x S4:

12

slide-18
SLIDE 18

Spritz

Absorb(x) using x = 2||0||1||2 ∙ Swap(S[a], S[N/2 + x]) ∙ a = a + 1 Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a N 2 x Absorb 2 S0: 10 1 2 3 4 5 6 7 8 9 11 12 13 14 15 a N 2 x Absorb 0 S1: 10 8 2 3 4 5 6 7 1 9 11 12 13 14 15 a N/2 + x Absorb 1 S2: 10 8 9 3 4 5 6 7 1 2 11 12 13 14 15 a N 2 x Absorb 2 S3: 10 8 9 4 5 6 7 1 2 3 11 12 13 14 15 a N 2 x S4:

12

slide-19
SLIDE 19

Spritz

Absorb(x) using x = 2||0||1||2 ∙ Swap(S[a], S[N/2 + x]) ∙ a = a + 1 Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a N 2 x Absorb 2 S0: 10 1 2 3 4 5 6 7 8 9 11 12 13 14 15 a N 2 x Absorb 0 S1: 10 8 2 3 4 5 6 7 1 9 11 12 13 14 15 a N 2 x Absorb 1 S2: 10 8 9 3 4 5 6 7 1 2 11 12 13 14 15 a N/2 + x Absorb 2 S3: 10 8 9 4 5 6 7 1 2 3 11 12 13 14 15 a N 2 x S4:

12

slide-20
SLIDE 20

Spritz

Absorb(x) using x = 2||0||1||2 ∙ Swap(S[a], S[N/2 + x]) ∙ a = a + 1 Example: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a N 2 x Absorb 2 S0: 10 1 2 3 4 5 6 7 8 9 11 12 13 14 15 a N 2 x Absorb 0 S1: 10 8 2 3 4 5 6 7 1 9 11 12 13 14 15 a N 2 x Absorb 1 S2: 10 8 9 3 4 5 6 7 1 2 11 12 13 14 15 a N 2 x Absorb 2 S3: 10 8 9 4 5 6 7 1 2 3 11 12 13 14 15 a N/2 + x S4:

12

slide-21
SLIDE 21

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i, j, k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-22
SLIDE 22

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i, j, k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-23
SLIDE 23

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j, k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-24
SLIDE 24

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j, k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-25
SLIDE 25

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-26
SLIDE 26

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-27
SLIDE 27

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-28
SLIDE 28

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-29
SLIDE 29

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z S 12 S 1 S 0 5 10 k i j

13

slide-30
SLIDE 30

Spritz

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

S0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 i j k 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 j k i 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 8 9 1 5 6 7 12 2 3 11 4 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 k i j 10 4 9 1 5 6 7 12 2 3 11 8 13 14 15 Keystream output: z = S[12 + S[1 + S[0 + 5]]] = 10 k i j

13

slide-31
SLIDE 31

Spritz

Spritz integrates the common practice of throwing away bytes of the keystream in the design.

Shuffle: Whip(2N) Crush() Whip(2N) Crush() Whip(2N)

∙ Whip: Calls Update and throws away output bytes. ∙ Crush: A simple many-to-one mapping.

14

slide-32
SLIDE 32

state recovery

slide-33
SLIDE 33

State Recovery

State Recovery for RC4 ∙ Allows to predict key stream ∙ Recover the initial state ∙ Different techniques and optimizations [KMP+98] [MK08]. ∙ Complexity is high

16

slide-34
SLIDE 34

State Recovery

Cipher Permutation size Time Reference RC4 32 253 [KMP+98] RC4 64 260 [MK08] RC4 128 2113 [MK08] RC4 256 2241 [MK08] How do these attacks perform in the case of Spritz?

17

slide-35
SLIDE 35

State Recovery

We adapt the method presented in [KMP+98] for Spritz ∙ We observe the sequence of output bytes z0, z1, . . . ∙ Simulate Update as long as we know the inputs. ∙ Guess any unknown values. Main differences to RC4 ∙ Need to guess more values of S in each step. ∙ Can only recover state up to last call of Crush().

18

slide-36
SLIDE 36

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i, k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-37
SLIDE 37

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-38
SLIDE 38

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-39
SLIDE 39

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-40
SLIDE 40

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-41
SLIDE 41

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-42
SLIDE 42

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-43
SLIDE 43

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-44
SLIDE 44

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-45
SLIDE 45

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-46
SLIDE 46

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-47
SLIDE 47

State Recovery

Registers: i0 = 0, w0 = 1, j0 = 7, k0 = 0, z0 = 0: S: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i k j ? 4 ? ? ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 4 ? 9 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 ? 4 ? ? ? ? ? ? ? 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? ? ? 1 3 ? ? ? ? i j k ? 9 5 4 ? ? ? ? 12 ? 1 3 ? ? ? ? i j k

Update: i = i + w j = k + S[j + S[i]] k = i + k + S[j] SWAP(S[i], S[j]) z = S[j + S[i + S[z + k]]] return z

Simulate Update: ∙ Guess S[i] and S[j + S[i]] ∙ Guess S[j] ∙ Guess S[z + k] and S[i + S[z + k]] ∙ S[j + S[i + S[z + k]]] = z1 = 12

19

slide-48
SLIDE 48

State Recovery

Continue until all values of S are known or a contradiction arises: ∙ An element occurs more than once. ∙ zt ̸= S[jt + S[it + S[zt−1 + kt]]] ∙ ... In the paper we compute the complexity of this procedure.

20

slide-49
SLIDE 49

State Recovery

Complexity for different sizes of the permutation table: N time comp. N! 8 213.7 215.2 16 244.3 244.2 32 299.8 2117.6 64 2249.0 2296 128 2599.4 2716.1 256 21400 21683.9 Data complexity is very low: O(N)

21

slide-50
SLIDE 50

State Recovery

Comparision RC4 and Spritz 20 2200 2400 2600 2800 21000 21200 21400 21600 21800 8 16 32 64 128 256 Complexity Size of Permutation

N! RC4 KMP 98 Spritz RC4 MK08

22

slide-51
SLIDE 51

State Recovery

Comparision RC4 and Spritz 20 2200 2400 2600 2800 21000 21200 21400 21600 21800 8 16 32 64 128 256 Complexity Size of Permutation

N! RC4 [KMP+98] Spritz RC4 MK08

22

slide-52
SLIDE 52

State Recovery

Comparision RC4 and Spritz 20 2200 2400 2600 2800 21000 21200 21400 21600 21800 8 16 32 64 128 256 Complexity Size of Permutation

N! RC4 [KMP+98] Spritz RC4 MK08

22

slide-53
SLIDE 53

State Recovery

Comparision RC4 and Spritz 20 2200 2400 2600 2800 21000 21200 21400 21600 21800 8 16 32 64 128 256 Complexity Size of Permutation

N! RC4 [KMP+98] Spritz RC4 [MK08]

22

slide-54
SLIDE 54

State Recovery

Estimate complexity through experiments ∙ We also implemented the attack4. ∙ Count number of guesses until full state is recovered. ∙ Pre-assign values to reduce complexity for the experiments.

4https://github.com/ralphankele/Spritz

23

slide-55
SLIDE 55

State Recovery

Experimental results for |S| = 32: 20 25 210 215 220 225 230 235 240 245 2 4 6 8 10 12 14 16 Number of Guesses Unknown values in S

(N − x)! Theory Experimental

24

slide-56
SLIDE 56

State Recovery

Experimental results for |S| = 32: 20 25 210 215 220 225 230 235 240 245 2 4 6 8 10 12 14 16 Number of Guesses Unknown values in S

(N − x)! Theory Experimental

24

slide-57
SLIDE 57

State Recovery

Experimental results for |S| = 32: 20 25 210 215 220 225 230 235 240 245 2 4 6 8 10 12 14 16 Number of Guesses Unknown values in S

(N − x)! Theory Experimental

24

slide-58
SLIDE 58

Conclusion

Contributions: ∙ First insights on state recovery attacks on Spritz. ∙ Estimates for the complexity are very high. ∙ State-recovery more efficient in experiments. Possible Improvements: ∙ Use better search heuristics. ∙ Combine different methods. ∙ Utilize longer output stream.

25

slide-59
SLIDE 59

questions?

26

slide-60
SLIDE 60

References I

Nadhem J. AlFardan, Daniel J. Bernstein, Kenneth G. Paterson, Bertram Poettering, and Jacob C. N. Schuldt, On the security of RC4 in TLS, Proceedings of the 22th USENIX Security Symposium, Washington, DC, USA, August 14-16, 2013, 2013, pp. 305–320. Garman Christina, Kenneth G. Paterson, and Van der Merwe Thyla, Attacks only get better: Password recovery attacks against RC4 in TLS, 25th USENIX Security Symposium, 2015,

  • pp. 113–200.

Scott R. Fluhrer, Itsik Mantin, and Adi Shamir, Weaknesses in the key scheduling algorithm of RC4, Selected Areas in Cryptography, SAC 2001, 2001.

27

slide-61
SLIDE 61

References II

Sourav Sen Gupta, Subhamoy Maitra, Goutam Paul, and Santanu Sarkar, Proof of empirical RC4 biases and new key correlations, Selected Areas in Cryptography, SAC 2011, 2011. Lars R. Knudsen, Willi Meier, Bart Preneel, Vincent Rijmen, and Sven Verdoolaege, Analysis methods for (alleged) RC4, Advances in Cryptology - ASIACRYPT ’98, vol. 1514, 1998. Vanhoef Mathy and Piessens Frank, All your biases belong to us: Breaking RC4 in WPA-TKIP and TLS, 25th USENIX Security Symposium, 2015, pp. 97–112. Ilya Mironov, (not so) random shuffles of RC4, Advances in Cryptology - CRYPTO 2002, 2002.

28

slide-62
SLIDE 62

References III

Alexander Maximov and Dmitry Khovratovich, New state recovery attack on RC4, Advances in Cryptology – CRYPTO 2008, 2008.

29