flip a bit grab a key
play

Flip a bit, grab a key: Symbolic execution edition Jasper van - PowerPoint PPT Presentation

Flip a bit, grab a key: Symbolic execution edition Jasper van Woudenberg @jzvw CTO Riscure North America public Concrete execution r1 = 0xBE; r2 = 0x08 mov r1,r2 add r1,0x10 r1 = 0x18; r2 = 0x08 public 2 Symbolic execution r1 = 0xBE;


  1. Flip a bit, grab a key: Symbolic execution edition Jasper van Woudenberg @jzvw CTO Riscure North America public

  2. Concrete execution r1 = 0xBE; r2 = 0x08 mov r1,r2 add r1,0x10 r1 = 0x18; r2 = 0x08 public 2

  3. Symbolic execution r1 = 0xBE; r2 = 0x?? mov r1,r2 add r1,0x10 r1 = r2 + 0x10; r2 = 0x?? Program Equations public 3

  4. Symbolic execution r1 = 0xBE; r2 = 0x?? mov r1,r2 add r1,0x10 beq r1,0x20,A: mov r3,0x00 b B: A: mov r3,0x01 B: r2==0x10: r1 = r2 + 0x10; r2 = 0x??; r3=0x00 r2!=0x10: r1 = r2 + 0x10; r2 = 0x??; r3=0x01 public Program Equations Solver 4

  5. Fault injection r1 = 0xBE; r2 = 0x08 mov r1,r2 add r1,0x10 r1 = 0xCE; r2 = 0x08 Cause a(n exploitable) corruption on a device public 5

  6. Fault injection (hardwear) Cause a(n exploitable) corruption on a device public 6

  7. Fault injection (softwear) public 7

  8. Differential Fault Analysis (DES) When R15 faulted, only a few K16 will match both outputs public 8

  9. Inside F function… Track fault to sbox; calculate faulted sbox ⊕ normal sbox public 9

  10. Fault match K 0 1 2 3 4 5 6 7 8 9 A B C D E F S B 7 E 0 1 4 7 A 6 1 0 D 8 B D 6 S’ 6 1 0 D 8 B D 6 B 7 E 0 1 4 7 A  D 6 E D 9 F A C D 6 E D 9 F A C K 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F S 4 9 3 E 2 F C 5 9 2 5 8 F C A 3 S’ 9 2 5 8 F C A 3 4 9 3 E 2 F C 5  D B 6 6 D 3 6 6 D B 6 6 D 3 6 6 K 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F S 6 0 1 D D 3 E 4 0 E B 7 3 5 8 B S’ 0 E B 7 3 5 8 B 6 0 1 D D 3 E 4  6 E A A E 6 6 F 6 E A A E 6 6 F K 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F S A C F 1 4 A 2 F 7 9 C 2 9 6 5 8 S’ 7 9 C 2 9 6 5 8 A C F 1 4 A 2 F  D 5 3 3 D C 7 7 D 5 3 3 D C 7 7

  11. DFA on AES math (1) • Fault is injected in A E I M Substitute penultimate round B F J N • State before is: Fault C G K O ShiftRow D H L P • Hit byte ‘A’ X E I M MixColumn 9 th round B F J N • State becomes: C G K O 10 th round AddKey D H L P • Apply MixColumn, and get Substitute 2X  3B  C  D 2E  3F  G  H 2I  3J  K  L 2M  3N  O  P 2B  3C  D  X 2F  3G  H  E 2J  3K  L  I 2N  3O  P  M ShiftRow 2C  3D  X  B 2G  3H  E  F 2K  3L  I  J 2O  3P  M  N 2D  3X  B  C 2H  3E  F  G 2L  3I  J  K 2P  3M  N  O AddKey Output

  12. DFA on AES math (2) • Apply AddKey, get for 1 st column Substitute 2X  3B  C  D  K 10,0 2B  3C  D  X  K 10,1 Fault ShiftRow 2C  3D  X  B  K 10,2 2D  3X  B  C  K 10,3 • Apply Substitute and get MixColumn 9 th round S(2X  3B  C  D  K 10,0 ) 10 th round S(2B  3C  D  X  K 10,1 ) AddKey S(2C  3D  X  B  K 10,2 ) S(2D  3X  B  C  K 10,3 ) Substitute • ShiftRow only moves cell position • Apply final AddKey, and get ShiftRow S(2X  3B  C  D  K 10,0 )  K 11,0 AddKey S(2B  3C  D  X  K 10,1 )  K 11,13 S(2C  3D  X  B  K 10,2 )  K 11,10 S(2D  3X  B  C  K 10,3 )  K 11,7 Output

  13. DFA on AES math (3) S(2A ⊕ 3B ⊕ C ⊕ D ⊕ K 10,0 ) ⊕ K 11,0 = O 0 Normal AES S(2X ⊕ 3B ⊕ C ⊕ D ⊕ K 10,0 ) ⊕ K 11,0 = O’ 0 Faulted AES S(Y 0 ) ⊕ S(2Z ⊕ Y 0 ) = O 0 ⊕ O’ 0 Solve for Z, K Manual Rewrite to solve Faulted cipher equations for key

  14. The insight Symbolic execution Program Equations Solver Differential fault analysis Manual Rewrite to solve Faulted cipher equations for key

  15. The insight Use SE for DFA Faulted cipher Equations Solver

  16. First experiments Symbolic state, fault, key ShiftRow Equations: MixColumn • pAES(state,key)=output_0 9 th round … 10 th round AddKey • pAES(state ⊕ fault_n,key)=output_n Substitute Solve for key! ShiftRow AddKey Output

  17. FAIL… out=Sbox[in] If in==0 then 0x63, else if … else if in==0xff then 0x16

  18. Non-bitsliced crypto 1 0 1 0 ⊕ 0 1 0 0 = X

  19. Bitsliced crypto (slow) 1 ⊕ 0 = X0 0 ⊕ 1 = X1 1 ⊕ 0 = X2 0 ⊕ 0 = X3

  20. Bitsliced crypto (parallel) 1 0 1 0 0 1 0 1 ⊕ 0 1 1 0 1 0 0 1 = X0 0 1 0 0 1 1 0 0 ⊕ 1 1 0 0 1 1 0 1 = X1 1 1 1 1 0 1 1 0 ⊕ 0 1 1 0 0 1 1 0 = X2 0 1 1 0 1 0 1 0 ⊕ 0 1 0 0 0 1 1 1 = X3

  21. LUT based AES Sbox out=Sbox[in]

  22. Bitsliced AES Sbox T1 = U[7] ^ U[4]; T2 = U[7] ^ U[2]; T3 = U[7] ^ U[1]; T4 = U[4] ^ U[2]; T5 = U[3] ^ U[1]; T6 = T1 ^ T5; T7 = U[6] ^ U[5]; T8 = U[0] ^ T6; T9 = U[0] ^ T7; T10 = T6 ^ T7; T11 = U[6] ^ U[2]; T12 = U[5] ^ U[2]; T13 = T3 ^ T4; T14 = T6 ^ T11; T15 = T5 ^ T11; T16 = T5 ^ T12; T17 = T9 ^ T16; T18 = U[4] ^ U[0]; T19 = T7 ^ T18; T20 = T1 ^ T19; T21 = U[1] ^ U[0]; T22 = T7 ^ T21; T23 = T2 ^ T22; T24 = T2 ^ T10; T25 = T20 ^ T17; T26 = T3 ^ T16; T27 = T1 ^ T12; M1 = T13 & T6; M2 = T23 & T8; M3 = T14 ^ M1; M4 = T19 & U[0]; M5 = M4 ^ M1; M6 = T3 & T16; M7 = T22 & T9; M8 = T26 ^ M6; M9 = T20 & T17; M10 = M9 ^ M6; M11 = T1 & T15; M12 = T4 & T27; M13 = M12 ^ M11; M14 = T2 & T10; M15 = M14 ^ M11; M16 = M3 ^ M2; M17 = M5 ^ T24; M18 = M8 ^ M7; M19 = M10 ^ M15; M20 = M16 ^ M13; M21 = M17 ^ M15; M22 = M18 ^ M13; M23 = M19 ^ T25; M24 = M22 ^ M23; M25 = M22 & M20; M26 = M21 ^ M25; M27 = M20 ^ M21; M28 = M23 ^ M25; M29 = M28 & M27; M30 = M26 & M24; M31 = M20 & M23; M32 = M27 & M31; M33 = M27 ^ M25; M34 = M21 & M22; M35 = M24 & M34; M36 = M24 ^ M25; M37 = M21 ^ M29; M38 = M32 ^ M33; M39 = M23 ^ M30; M40 = M35 ^ M36; M41 = M38 ^ M40; M42 = M37 ^ M39; M43 = M37 ^ M38; M44 = M39 ^ M40; M45 = M42 ^ M41; M46 = M44 & T6; M47 = M40 & T8; M48 = M39 & U[0]; M49 = M43 & T16; M50 = M38 & T9; M51 = M37 & T17; M52 = M42 & T15; M53 = M45 & T27; M54 = M41 & T10; M55 = M44 & T13; M56 = M40 & T23; M57 = M39 & T19; M58 = M43 & T3; M59 = M38 & T22; M60 = M37 & T20; M61 = M42 & T1; M62 = M45 & T4; M63 = M41 & T2; L0 = M61 ^ M62; L1 = M50 ^ M56; L2 = M46 ^ M48; L3 = M47 ^ M55; L4 = M54 ^ M58; L5 = M49 ^ M61; L6 = M62 ^ L5; L7 = M46 ^ L3; L8 = M51 ^ M59; L9 = M52 ^ M53; L10 = M53 ^ L4; L11 = M60 ^ L2; L12 = M48 ^ M51; L13 = M50 ^ L0; L14 = M52 ^ M61; L15 = M55 ^ L1; L16 = M56 ^ L0; L17 = M57 ^ L1; L18 = M58 ^ L8; L19 = M63 ^ L4; L20 = L0 ^ L1; L21 = L1 ^ L7; L22 = L3 ^ L12; L23 = L18 ^ L2; L24 = L15 ^ L9; L25 = L6 ^ L10; L26 = L7 ^ L9; L27 = L8 ^ L10; L28 = L11 ^ L14; L29 = L11 ^ L17; S[7] = L6 ^ L24; S[6] = ~(L16 ^ L26); S[5] = ~(L19 ^ L28); S[4] = L6 ^ L21; S[3] = L20 ^ L22; S[2] = L25 ^ L29; S[1] = ~(L13 ^ L27); S[0] = ~(L6 ^ L23);

Recommend


More recommend