37
Criptanálise de Criptanálise de MD4 MD4 Mads Rasmussen Mads Rasmussen [email protected] [email protected]

Criptanálise de MD4 Mads Rasmussen [email protected]

Embed Size (px)

Citation preview

Page 1: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Criptanálise de MD4Criptanálise de MD4

Mads RasmussenMads Rasmussen

[email protected]@ime.usp.br

Page 2: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Funções de Hash PopularesFunções de Hash Populares

A Família SHA (NSA e NIST) SHA-0 (colisão descoberta em Agosto 2004) SHA-1 (segurança reduzida para 2^69 em 2005) SHA-256 e irmãs

A Família MD (RSA Labs – Ronald Rivest) MD2 (ataque pré-imagem em 2004, colisão reduzida em 2005) MD4 (colisão descoberta em 1996) MD5 (colisão descoberta em 2004)

Outras Funções RIPEMD (colisão descoberta em 2004) HAVAL (colisão descoberta em 2004) Whirlpool

Page 3: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

A função MD4A função MD4

Elaborada pelo Ronald Rivest (RSA)Elaborada pelo Ronald Rivest (RSA) CRYPTO '90 CRYPTO '90 RFC 1186 (’90) e RFC 1320 (’92)RFC 1186 (’90) e RFC 1320 (’92)

Ainda utilizada Ainda utilizada PRNG da MicrosoftPRNG da Microsoft Hash de arquivos no eDonkey (P2P)Hash de arquivos no eDonkey (P2P)

Page 4: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Resultado a ser mostradoResultado a ser mostrado

Fácil criar pseudo colisõesFácil criar pseudo colisões

Pseudo colisão facilita uma ataque diferencialPseudo colisão facilita uma ataque diferencial

Resultado:Resultado:

Colisão de MD4 em poucos minutosColisão de MD4 em poucos minutos

Hans Dobbertin, Hans Dobbertin, J. Cryptology (1998) 11: 253–271

Page 5: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Função de HashFunção de Hash

Supostamente inventado pelo H. P. Luhn da IBM (1953) de acordo com o KnuthSupostamente inventado pelo H. P. Luhn da IBM (1953) de acordo com o Knuth

EntradaEntrada Mensagem de tamanho arbitrário Mensagem de tamanho arbitrário

Saída Saída Mensagem de tamanho fixo (128 no caso MD4)Mensagem de tamanho fixo (128 no caso MD4)

H : {0,1}* {0,1}128

Page 6: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Segurança de Funções Hash Segurança de Funções Hash CriptográficasCriptográficas

Resistência a Colisões Deve ser difícil achar M e M’ assim que H(M) =

H(M’)

Resistência a Segunda Pré-Imagem Dado um M, deve ser difícil achar M’ assim que

H(M) = H(M’)

Resistência a Pré-Imagem Dado um h, deve ser difícil achar M assim que

H(M) = h

Page 7: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Tipos de ColisõesTipos de Colisões

Almost Collision: (quase colisão)Almost Collision: (quase colisão)2 mensagens de entrada que entre as saídas da compressão tem diferencia de 2 mensagens de entrada que entre as saídas da compressão tem diferencia de Hamming (poucos bits diferem)Hamming (poucos bits diferem)

Inner-Almost Collision (quase colisão interna): Inner-Almost Collision (quase colisão interna): Colisões ou quase colisões para os valores temporários dos variáveis de cadeia Colisões ou quase colisões para os valores temporários dos variáveis de cadeia para duas mensagens distintas para duas mensagens distintas

Pseudo Colisão:Pseudo Colisão:Colisão na função de compressão só – não na hash completaColisão na função de compressão só – não na hash completaDuas mensagens distintas gera o mesmo valor aplicando a função compress.Duas mensagens distintas gera o mesmo valor aplicando a função compress.

Colisão Colisão Colisão na hash completa, duas mensagens gera o mesmo valor hashColisão na hash completa, duas mensagens gera o mesmo valor hash

Page 8: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Função de compressãoFunção de compressão

Ponto central é uma função F de compressãoPonto central é uma função F de compressão

Tamanho do bloco da mensagem 512 bits (MD4)Tamanho do bloco da mensagem 512 bits (MD4)

F

Bloco deMensagem Mi

Hash Intermediário Hi

Hash Intermediário Hi+1

Page 9: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Funções de hash IteradosFunções de hash Iterados

F F F

IV M0 M1 Mn

H0 H1 Hn-1 Hn

Hash

Page 10: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Funções hash IteradosFunções hash Iterados

Page 11: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

O hash MD4O hash MD4

Little endian (arch x86)Little endian (arch x86)

4 variáveis de cadeia (chaining vars), A, B,C, D4 variáveis de cadeia (chaining vars), A, B,C, D 32 bits cada (4*32 = 128 bits de saída)32 bits cada (4*32 = 128 bits de saída)

IV = 67452301x EFCDAB89x 98BADCFEx 10325476xIV = 67452301x EFCDAB89x 98BADCFEx 10325476x

Regra de padding da mensagem para deixar Regra de padding da mensagem para deixar ela múltiplo de 64 bytes inclui o tamanho da ela múltiplo de 64 bytes inclui o tamanho da mensagem originalmensagem original

Page 12: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

MD4 compressãoMD4 compressão

Utiliza 3 funções booleanasUtiliza 3 funções booleanas F(U,V,W) = (U & V) | (F(U,V,W) = (U & V) | (¬¬U & W) U & W) // select// select G(U,V,W) = (U & V) | (U & W) & (V & W) G(U,V,W) = (U & V) | (U & W) & (V & W) // majority// majority H(U,V,W) = U ^ V ^ W H(U,V,W) = U ^ V ^ W // parity// parity

Page 13: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

MD4MD4

1.1. PaddingPadding2. A = 67452301;B = EFCDAB89;C = 98BADCFE;D = 10325476. //IV3. Processar a mensagem em blocos de 16-palavras (512 bits):

for i = 0 to (n/16) - 1 dobegin for j = 0 to 15 do

X[j] = M[16i + j];(AA,BB,CC,DD) = (A,B,C,D);Round 1;Round 2;Round 3;A = A + AA;B = B + BB;C = C + CC;D = D + DD;

end;4. Saída é o buffer de 4 variáveis (A,B,C,D).

Page 14: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Ataque em detalhesAtaque em detalhes

X = (XX = (Xii), i < 16), i < 16Cria blocos de mensagens Cria blocos de mensagens X e ~X, onde X e ~X, onde

~X~Xii = X = Xii , i , i ≠≠1212

~ X~ X1212 = X = X1212 + 1 + 1

Resultado do ataque:Resultado do ataque:

MD4(X) = MD4(~X)MD4(X) = MD4(~X)

Page 15: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Ataque em detalhesAtaque em detalhes

1.1. Inner-Almost CollisionInner-Almost Collision

2.2. Ataque DiferencialAtaque Diferencial

3.3. Acertar valores iniciais corretosAcertar valores iniciais corretos

Page 16: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Parte IParte I(A(Aii,B,Bii,C,Cii,D,Dii) = valores dos variáveis de cadeia depois passo i) = valores dos variáveis de cadeia depois passo i

ΔΔi = i = (A(Aii,B,Bii,C,Cii,D,Dii) - (~A) - (~Aii,~B,~Bii,~C,~Cii,~D,~Dii) = (A) = (Aii- ~A- ~Aii,B,Bii- ~B- ~Bii,C,Cii- ~C- ~Cii,D,Dii- ~D- ~Dii))

XX1212 utilizado em passos 12, 19 e 35 utilizado em passos 12, 19 e 35

Colisão se Colisão se ΔΔ35 = 035 = 0

Achar uma “quase” colisão para 2 rounds (foca nos passos 12-19)Achar uma “quase” colisão para 2 rounds (foca nos passos 12-19) ΔΔ19 = (0,119 = (0,1<<25<<25, -1, -1<<5<<5,0), ,0), OBS: -1 = 0xFFFF FFFF (little endian)OBS: -1 = 0xFFFF FFFF (little endian)

Compress_{12-19} (X) = Compress_{12-19} (~X) com diferênciaCompress_{12-19} (X) = Compress_{12-19} (~X) com diferência ΔΔ1919

Page 17: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Compress(X e ~X)_{12-19}Compress(X e ~X)_{12-19}Olhando na função de compresão:Olhando na função de compresão:

FF (a, b, c, d, x[12], 3); FF (a, b, c, d, x[12], 3); /* 12 */ ou ~x[12] = x[12]+1/* 12 */ ou ~x[12] = x[12]+1FF (d, a, b, c, x[13], 7); FF (d, a, b, c, x[13], 7); /* 13 */ /* 13 */ FF (c, d, a, b, x[14], 11); FF (c, d, a, b, x[14], 11); /* 14 */ /* 14 */ FF (b, c, d, a, x[15], 19); FF (b, c, d, a, x[15], 19); /* 15 *//* 15 */GG (a, b, c, d, x[ 0], 3); GG (a, b, c, d, x[ 0], 3); /* 16 */ /* 16 */ GG (d, a, b, c, x[ 4], 5); GG (d, a, b, c, x[ 4], 5); /* 17 */ /* 17 */ GG (c, d, a, b, x[ 8], 9); GG (c, d, a, b, x[ 8], 9); /* 18 */ /* 18 */ GG (b, c, d, a, x[12], 13); GG (b, c, d, a, x[12], 13); /* 19 */ /* 19 */ ou ~x[12] = x[12]+1ou ~x[12] = x[12]+1

F(U,V,W) = (U & V) | (F(U,V,W) = (U & V) | (¬¬U & W) U & W) // select// selectG(U,V,W) = (U & V) | (U & W) & (V & W) G(U,V,W) = (U & V) | (U & W) & (V & W) // majority// majorityK1 = 0x 5a827999K1 = 0x 5a827999

A* = AA* = A1919, B* = B, B* = B1919, C* = C, C* = C1919, D* = D, D* = D1919, , U = AU = A1212, V = D, V = D1313, W = C, W = C1414, Z = B, Z = B1515

~U = ~A~U = ~A1212, ~V = ~D, ~V = ~D1313, ~W = ~C, ~W = ~C1414, ~Z = ~B, ~Z = ~B1515

Precisa: ~B* + 1Precisa: ~B* + 1<<25<<25 = B* e C* + 1 = B* e C* + 1<<5<<5 = ~C* por causa da = ~C* por causa da ΔΔ19 19

Page 18: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

StepStep AA BB CC DD InputInput ShiftShift FuncFunc ConstConst

1212 U U ~U~U

BB CC DD X12X12 33 FF 00

1313 U U ~U~U

BB CC VV

~V~VX13X13 77 FF 00

1414 U U ~U~U

BB WW

~W~WVV

~V~V

X14X14 1111 FF 00

1515 U U ~U~U

ZZ

~Z~ZWW

~W~W

VV

~V~V

X15X15 1919 FF 00

1616 A*A* ZZ

~Z~Z

WW

~W~W

VV

~V~V

X0X0 33 GG K1K1

1717 A*A* ZZ

~Z~Z

WW

~W~W

D*D* X4X4 55 GG K1K1

1818 A*A* ZZ

~Z~Z

C*C*

~C*~C*D*D* X8X8 99 GG K1K1

1919 A*A* B*B*

~B*~B*C*C*

~C*~C*

D*D* X12X12 1313 GG K1K1

Page 19: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

ReduzindoReduzindo

Do (12) obtemos:Do (12) obtemos:

~U – U = (A~U – U = (A88 + F(B + F(B1111,C,C1010,D,D99) + X[12] +1)) + X[12] +1)<<3<<3 – (A – (A88 + F(B + F(B1111,C,C1010,D,D99) + X[12])) + X[12])<<3<<3

~U~U>>3>>3 – U – U>>3>>3 = (A = (A88 + F(B + F(B1111,C,C1010,D,D99) + X[12] +1) – (A) + X[12] +1) – (A88 + F(B + F(B1111,C,C1010,D,D99) + X[12]) = 1) + X[12]) = 1

~U~U<< 29<< 29 – U – U<< 29<< 29 = 1 [ = 1 [OBS: A OBS: A >> x>> x = A = A << (32-x)<< (32-x) como A é de 32 bits como A é de 32 bits]]

Do (13) obtemos:Do (13) obtemos:

~V – V = ~V – V = ((D((D99 + F(~U, B + F(~U, B1111, C, C1010) + x[13]) ) + x[13]) << 7<< 7) - ((D) - ((D99 + F(U, B + F(U, B1111, C, C1010) + x[13]) ) + x[13]) << 7<< 7))

~V~V>>7>>7 – V – V>>7>>7 = = F(~U, BF(~U, B1111, C, C1010) - F(U, B) - F(U, B1111, C, C1010))

~V~V<<25<<25 – V – V<<25<<25 = = F(~U, BF(~U, B1111, C, C1010) - F(U, B) - F(U, B1111, C, C1010))

Page 20: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

ReduzindoReduzindoDo (19) obtemos:Do (19) obtemos:~B* - B* = (~Z + G(~C*, D*, A*) + x[12] + 1) ~B* - B* = (~Z + G(~C*, D*, A*) + x[12] + 1) << 13<< 13) - (Z + G(C*, D*, A*) + x[12]) ) - (Z + G(C*, D*, A*) + x[12]) << 13<< 13))~B*~B*>>13>>13 - B* - B*>>13>>13 = ~Z - Z + G(~C*, D*, A*) - G(C*, D*, A*) + 1 = ~Z - Z + G(~C*, D*, A*) - G(C*, D*, A*) + 1~B*~B*<<19<<19 - B* - B*<<19<<19 = ~Z - Z + G(~C*, D*, A*) - G(C*, D*, A*) + 1 = ~Z - Z + G(~C*, D*, A*) - G(C*, D*, A*) + 1

No final obtemos: (dos passos 12-19)No final obtemos: (dos passos 12-19)

~U ~U << 29<< 29 – U – U << 29<< 29 = 1 = 1~V~V<<25<<25 – V – V<<25<<25 = = F(~U, B11, C10) - F(U, B11, C10)F(~U, B11, C10) - F(U, B11, C10)~W~W<<21<<21 – W – W<<21<<21 = F(~V, ~U, B11) – F(V,U,B11) = F(~V, ~U, B11) – F(V,U,B11)~Z~Z<<13<<13 – Z – Z<<13<<13 = F(~W,~V,~U) - F(W,V,U) = F(~W,~V,~U) - F(W,V,U)U - ~U = G(~Z,~W,~V) – G(Z,W,V)U - ~U = G(~Z,~W,~V) – G(Z,W,V)V - ~V = G(A*,~Z,~W) – G(A*,Z,W)V - ~V = G(A*,~Z,~W) – G(A*,Z,W)W - ~W + ~C*W - ~W + ~C*<<23<<23 – C* – C*<<23<<23 = G(D*,A*,~Z) – G(D*,A*,Z) = G(D*,A*,~Z) – G(D*,A*,Z)Z - ~Z + ~B*Z - ~Z + ~B*<<19<<19 – B* – B*<<19<<19 – 1 = G(~C*,D*,A*) – G(C*,D*,A*) – 1 = G(~C*,D*,A*) – G(C*,D*,A*)

Page 21: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

QuaseQuase colisãocolisão

Uma solução desse sistema leva numa quase colisão Uma solução desse sistema leva numa quase colisão

XX1313 = random = random

XX1414 = W = W<<21<<21 – C – C1010 – F(V,U,B – F(V,U,B1111))

XX1515 = Z = Z<<13<<13 – B – B1111 – F(W,V,U) – F(W,V,U)

XX00 = A* = A*<<29<<29 – U – F(Z,W,V) – K – U – F(Z,W,V) – K11

XX44 = D* = D*<<27<<27 - V - G(A*,Z,W) – K - V - G(A*,Z,W) – K11

XX88 = C* = C*<<23<<23 - W – G(C*,A*,Z) – K - W – G(C*,A*,Z) – K11

XX1212 = B* = B*<<19<<19 – Z- G(C*,D*,A*) – K – Z- G(C*,D*,A*) – K11

D = VD = V<<25<<25 – F(U,B – F(U,B1111,C,C1010) – X) – X1313

A = UA = U<<19<<19 – F(B – F(B1111,C,C1010,D,D99) – X) – X12 12

Page 22: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

FacilitandoFacilitando

SejaSeja

~U = -1 = 0xFFFF FFFF~U = -1 = 0xFFFF FFFF

U = 0U = 0

B = 0B = 0

Então o sistemas de equações ficam reduzidas á: (só reduzindo) – passo 18-24Então o sistemas de equações ficam reduzidas á: (só reduzindo) – passo 18-24

~Z = Z - ~Z = Z - G(~C*,D*,A*) + G(C*,D*,A*)G(~C*,D*,A*) + G(C*,D*,A*) + + ~B*~B*<<19<<19 – B* – B*<<19<<19 – 1 – 1

~W = W - G(D*,A*,~Z) + G(D*,A*,Z) + ~C*~W = W - G(D*,A*,~Z) + G(D*,A*,Z) + ~C*<<23<<23 – C* – C*<<23<<23

V = WV = W<<21<<21 – ~W – ~W<<21<<21

~V = V - G(A*,~Z,~W) – G(A*,Z,W)~V = V - G(A*,~Z,~W) – G(A*,Z,W)

C = VC = V<<25<<25 – ~V – ~V<<25<<25

MaisMais

G(Z, W, V) = G(~Z, ~W, ~V) = 1G(Z, W, V) = G(~Z, ~W, ~V) = 1

F(~W, ~V, -1) – F(W, V, 0) - ~ZF(~W, ~V, -1) – F(W, V, 0) - ~Z<<13<<13 + Z + Z<<13<<13 = 0 = 0

Page 23: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Algoritmo IAlgoritmo I

1.1. Escolhe A*, B*, C*, D*, Z e W aleatóriamente, calcula ~Z, ~W, V e ~VEscolhe A*, B*, C*, D*, Z e W aleatóriamente, calcula ~Z, ~W, V e ~V

de acordo com (18-21) e verifica (23)de acordo com (18-21) e verifica (23)

se true goto 2se true goto 2

senão goto 1senão goto 1

2.2. Valores básicos = os obtidos no 1. (A*, B*, C*, D*, Z e W)Valores básicos = os obtidos no 1. (A*, B*, C*, D*, Z e W)

troca um bit aleatóriamente nos valores e calcula ~Z, ~W, V e ~V etroca um bit aleatóriamente nos valores e calcula ~Z, ~W, V e ~V e

verifica se (23) ainda vale, verifica se (23) ainda vale,

se simse sim

verifica se os 4 bits mais direita do (24) = 0verifica se os 4 bits mais direita do (24) = 0

se sim se sim

Valores básicos novoValores básicos novo

Repita, se os 8 bits mais direita do (24) = 0, proximo 8, 12, Repita, se os 8 bits mais direita do (24) = 0, proximo 8, 12, 16 etc16 etc

3.3. Agora (23) e (24) são satisfeitosAgora (23) e (24) são satisfeitos

Quase Colisão Interna obtida se B = 0 e definindo A,C,D e XQuase Colisão Interna obtida se B = 0 e definindo A,C,D e X ii (X (Xii = =

0,4,8,12,13,14,15) como em cima0,4,8,12,13,14,15) como em cima

Válida se G(B*, C*, D*) = G(~B*, ~C*, D*) Válida se G(B*, C*, D*) = G(~B*, ~C*, D*) (B* = B(B* = B1919 ....) ....)

Page 24: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

AtaqueAtaque DifferencialDifferencial modmod 223232

Tendo uma quase colisão interna, a probabilidade que isto gera uma colisão Tendo uma quase colisão interna, a probabilidade que isto gera uma colisão para a função de compressão é aproximadamente p=2para a função de compressão é aproximadamente p=2-22-22

Lembrando que X e ~X gera uma colisão se Lembrando que X e ~X gera uma colisão se ΔΔ3535 = (0,0,0,0) = (0,0,0,0)

A diferência entre duas palavras é A diferência entre duas palavras é ΔΔ* = X - ~X (mod 2* = X - ~X (mod 23232), ), ΔΔ**ii é o diferencial é o diferencial

Vamos mostrar as diferencias entreVamos mostrar as diferencias entre

ΔΔ**1919 = (0,1 = (0,1<<25<<25, -1 , -1 << 5<< 5, 0), 0)

ee

ΔΔ**3535 = (0,0,0,0) = (0,0,0,0)

seja p{i-1,i} = a probabilidade de seja p{i-1,i} = a probabilidade de ΔΔii = = ΔΔ**ii assumindo que assumindo que ΔΔi-1i-1 = = ΔΔ**i-1i-1

Nota que (por causa da quase colisão interna)Nota que (por causa da quase colisão interna)

ΔΔ1919 = = ΔΔ**1919 e e ΔΔ2020 = = ΔΔ**2020, então p{24,35} = 1, então p{24,35} = 1

Page 25: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

ProbabilidadesProbabilidades

Page 26: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

ValorValor inicialinicial corretocorretoSuponha que existe uma quase colisão interna com valor inicial (A,B,C,D)Suponha que existe uma quase colisão interna com valor inicial (A,B,C,D)Já fixamos XJá fixamos X00, X, X44 e X e X88, então escolhe X, então escolhe X11, X, X22, X, X33 e X e X55 aleatóriamente e calcula aleatóriamente e calcula

compress{0,5}(IV, Xcompress{0,5}(IV, X00,,,X,,,X55))

Agora sabemos AAgora sabemos A55=A=A44,B,B55=B=B44=B=B33, C, C55=C=C44=C=C33=C=C22 e D e D55

Escolhe XEscolhe X66,X,X77,X,X99,X,X1010 e X e X1111 assim que assim quecompress{6,11}((Acompress{6,11}((A44,B,B33,C,C22,D,D55),X),X66,,,X,,,X1111)=(A,B,C,D))=(A,B,C,D)

Nos passos 9,10,11 ver que DNos passos 9,10,11 ver que D99=D,C=D,C1010=C e B=C e B1111=B, então escolhe X=B, então escolhe X99,X,X1010 e X e X1111 assim assim

Falta A=AFalta A=A88

Seja BSeja B77 = -1 e C = -1 e C66 = A = A<<29<<29 – A – A44 – X – X88

AA88 = (A = (A44+F(B+F(B77,C,C66,D,D55)+X)+X88))<<3<<3 = (A = (A44 + F(-1,A + F(-1,A<<29<<29-A-A44-X-X88,D,D55)+X)+X88))<<3<<3

= (A= (A44+A+A<<29<<29+A+A44-X-X88+X+X88))<<3<<3

= A= A

Os valores de COs valores de C66 e B e B77 podem ser obtidas escolhendo valores apropriados para X podem ser obtidas escolhendo valores apropriados para X66 e X e X77

Page 27: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

ValorValor inicialinicial e de 0 ae de 0 a 1111Então obtemosEntão obtemos

XX66 = -C = -C22 –F(D –F(D55,A,A44,B,B33)+(A)+(A<<29<<29-A-A44-X-X88))<<21<<21

CC66 = (C = (C22+F(D+F(D55,A,A44,B,B33)+X)+X66))<<11<<11=A=A<<29<<29-A-A44-X-X88

XX77=-B=-B33-F(C-F(C66,D,D55,A,A44)-1)-1

BB77=(B=(B33+F(C+F(C66,D,D55,A,A44)+X)+X77))<<19<<19 = -1 = -1

AA88=A=A

XX99=D=D<<25<<25-D-D55-F(A,-1,C-F(A,-1,C66))

DD99=(D=(D55+F(A,-1,C+F(A,-1,C66)+X)+X99))<<7<<7=D=D

XX1010=C=C<<21<<21-C-C66-F(D,A,-1)-F(D,A,-1)

CC1010=(C=(C66+F(D,A,-1)+X+F(D,A,-1)+X1010))<<11<<11=C=C

XX1111=B=B<<13<<13+1-F(C,D,A)+1-F(C,D,A)

BB1111=(-1+F(C,D,A)+X=(-1+F(C,D,A)+X1111))<<19<<19=B=B

Assim obtemos queAssim obtemos que

Compress(IV,XCompress(IV,X00,,,X,,,X1111)=(A)=(A1111,B,B1111,C,C1111,D,D1111) = (A) = (A88,B,B1111,C,C1010,D,D99)=(A,B,C,D))=(A,B,C,D)

O valor que leve o IV para o começo do ataque de quase colisão internaO valor que leve o IV para o começo do ataque de quase colisão interna

Page 28: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Algoritmo FinalAlgoritmo Final1.1. Calcula a quase colisão internaCalcula a quase colisão interna

Calcula A,B,C,D,XCalcula A,B,C,D,X00,X,X44,X,X88,X,X1212,X,X1313,X,X1414 e X e X1515 fixando A fixando A1919,B,B1919,C,C1919,D,D1919 e e ~A~A1919,~B,~B1919,~C,~C1919,~D,~D1919 para próximo passo para próximo passo

2.2. Escolhe XEscolhe X11,X,X22,X,X33 e X e X55 aleatoriamente e calcula aleatoriamente e calcula

(A(A55,B,B55,C,C55,D,D55) = compress{0,5}(IV,X) = compress{0,5}(IV,X00,,,X,,,X55))

t = At = A<<29<<29 – A – A55 – X – X88

XX66 = t = t<<21<<21 – C – C55 – F(D – F(D55,A,A55,B,B55))

XX77 = -1 –B = -1 –B55 –F(t,D –F(t,D55,A,A55))

XX99 = D = D<<25<<25 – D – D55 – F(A,-1,t) – F(A,-1,t)

XX1010 = C = C<<21<<21 –t – F(D,A,-1) –t – F(D,A,-1)

XX1111 = B = B<<13<<13 + 1 – F(C,D,A) + 1 – F(C,D,A)

(A(A3535,B,B3535,C,C3535,D,D3535) = compress{20,35}(A) = compress{20,35}(A1919,B,B1919,C,C1919,D,D1919,X),X)

(~A(~A3535,~B,~B3535,~C,~C3535,~D,~D3535) = compress{20,35}(~A) = compress{20,35}(~A1919,~B,~B1919,~C,~C1919,~D,~D1919,~X),~X)

Δ35 = (AΔ35 = (A3535 – ~A – ~A3535, B, B3535 – ~B – ~B3535, C, C3535 – ~C – ~C3535, D, D3535 – ~D – ~D3535))

3.3. Se Δ35=(0,0,0,0) nós temos uma colisão, senão goto 2Se Δ35=(0,0,0,0) nós temos uma colisão, senão goto 2

Page 29: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

DEMODEMO

Page 30: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Crypto ’04Crypto ’04

A bad day at the Hash function factory

Wang, Feng, Lai, e Yu Colisões em MD4 em 28 operações Colisões em MD5 em 232 operações Colisões em RipeMD em 218 operações Colisões em HAVAL-128 em 27 operações Colisões em SHA-0 em 245 operações

Page 31: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Ataques no SHA-0Crypto ’98: Chabaud e Joux apresenta uma pseudo colisão com complexidade 261 (abordagem por força bruta é 280).12 de Agosto 2004: Joux, Carribault, Lemuet and Jalbyanunciou uma colisão para SHA-0.Uma maquina com 256 processadores de Intel-Itanium2 foi utilizada, o ataque precisava aproximadamente 80 000 horas CPU.A complexidade do ataque era por volta de 251.Crypto ’04: Wang, Feng, Lai, e Yu anunciou uma colisão de SHA-0 em 240 operaçõesEurocrypt ’05: Eli Biham, Rafi Chen, Antoine Joux, Patrick Carribault, William Jalby, e Christophe Lemuet, “Collisions of SHA-0 and Reduced SHA-1““

Page 32: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Novo ataque no SHANovo ataque no SHAFevereiro 15, 2005: Xiaoyun Wang, Yiqun Lisa Yin, e Hongbo Yu

(http://theory.csail.mit.edu/~yiqun/shanote.pdf)

Utilizando as técnicas desenvolvidas entre Crypto ’04 e hoje acharem novo ataque nas funções SHA-0 e SHA-1

Colisões no SHA-1 em 269 operações(bem menos do ataque por força-bruta de 280 operações, 2048 vezes menos)Colisões no SHA-0 em 239 operaçõesColisões no SHA-1 reduzida para 58 iterações em 233 operações

Schneier estimou que uma maquina custando 25 – 38 milhões de dollars podia fazer os 269 cálculos para quebrar o SHA-1 por volta de 56 horas.

Último noticia: reduziu ainda mais

Page 33: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Perguntas?Perguntas?

Page 34: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

Explicando a tabelaExplicando a tabela

Para verificar que p{34,35} = 1, nota que Para verificar que p{34,35} = 1, nota que Δ34 = (0,1,0,0) = Δ34* implicaΔ34 = (0,1,0,0) = Δ34* implica

BB3535 = B = B3434 + H(C + H(C3434,D,D3434,A,A3434) + X) + X1212 + K + K22<<15<<15

= (~B= (~B3434 + 1) + H(~C + 1) + H(~C3434,~D,~D3434,~A,~A3434) + X) + X1212 + K + K22<<15<<15

= ~B= ~B3434 + H(~C + H(~C3434,~D,~D3434,~A,~A3434) + (X) + (X1212+1) + K+1) + K22<<15<<15

= ~B= ~B3535

P{20,21} é calculado em seguinte maneiraP{20,21} é calculado em seguinte maneira

Quer mostrar que Quer mostrar que

Pr[Δ21=Δ*21] = Pr[G(APr[Δ21=Δ*21] = Pr[G(A2020,B,B2020,C,C2020) = G(A) = G(A2020, ~B, ~B2020, ~C, ~C2020)] ~= 1)] ~= 1 / 9/ 9

Page 35: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

MD4 Round 1MD4 Round 1

FF (a, b, c, d, x[ 0], 3); FF (a, b, c, d, x[ 0], 3); /* 0 */ /* 0 */ FF (d, a, b, c, x[ 1], 7); FF (d, a, b, c, x[ 1], 7); /* 1 */ /* 1 */ FF (c, d, a, b, x[ 2], 11); FF (c, d, a, b, x[ 2], 11); /* 2 */ /* 2 */ FF (b, c, d, a, x[ 3], 19); FF (b, c, d, a, x[ 3], 19); /* 3 */ /* 3 */ FF (a, b, c, d, x[ 4], 3); FF (a, b, c, d, x[ 4], 3); /* 4 */ /* 4 */ FF (d, a, b, c, x[ 5], 7); FF (d, a, b, c, x[ 5], 7); /* 5 */ /* 5 */ FF (c, d, a, b, x[ 6], 11); FF (c, d, a, b, x[ 6], 11); /* 6 */ /* 6 */ FF (b, c, d, a, x[ 7], 19);FF (b, c, d, a, x[ 7], 19); /* 7 */ /* 7 */ FF (a, b, c, d, x[ 8], 3); FF (a, b, c, d, x[ 8], 3); /* 8 */ /* 8 */ *FF (d, a, b, c, x[ 9], 7); *FF (d, a, b, c, x[ 9], 7); /* 9 */ /* 9 */ *FF (c, d, a, b, x[10], 11); *FF (c, d, a, b, x[10], 11); /* 10 */ /* 10 */ *FF (b, c, d, a, x[11], 19); *FF (b, c, d, a, x[11], 19); /* 11 */ /* 11 */ FF (a, b, c, d, x[12], 3); FF (a, b, c, d, x[12], 3); /* 12 */ /* 12 */ FF (d, a, b, c, x[13], 7); FF (d, a, b, c, x[13], 7); /* 13 */ /* 13 */ FF (c, d, a, b, x[14], 11); FF (c, d, a, b, x[14], 11); /* 14 */ /* 14 */ FF (b, c, d, a, x[15], 19); FF (b, c, d, a, x[15], 19); /* 15 *//* 15 */

Page 36: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

MD4 Round 2MD4 Round 2GG (a, b, c, d, x[ 0], 3); GG (a, b, c, d, x[ 0], 3); /* 16 */ /* 16 */ GG (d, a, b, c, x[ 4], 5); GG (d, a, b, c, x[ 4], 5); /* 17 */ /* 17 */ GG (c, d, a, b, x[ 8], 9); GG (c, d, a, b, x[ 8], 9); /* 18 */ /* 18 */ GG (b, c, d, a, x[12], 13); GG (b, c, d, a, x[12], 13); /* 19 */ /* 19 */ GG (a, b, c, d, x[ 1], 3); GG (a, b, c, d, x[ 1], 3); /* 20 */ /* 20 */ GG (d, a, b, c, x[ 5], 5); GG (d, a, b, c, x[ 5], 5); /* 21 */ /* 21 */ GG (c, d, a, b, x[ 9], 9); GG (c, d, a, b, x[ 9], 9); /* 22 */ /* 22 */ GG (b, c, d, a, x[13], 13); GG (b, c, d, a, x[13], 13); /* 23 */ /* 23 */ GG (a, b, c, d, x[ 2], 3); GG (a, b, c, d, x[ 2], 3); /* 24 */ /* 24 */ GG (d, a, b, c, x[ 6], 5); GG (d, a, b, c, x[ 6], 5); /* 25 */ /* 25 */ GG (c, d, a, b, x[10], 9); GG (c, d, a, b, x[10], 9); /* 26 */ /* 26 */ GG (b, c, d, a, x[14], 13); GG (b, c, d, a, x[14], 13); /* 27 */ /* 27 */ GG (a, b, c, d, x[ 3], 3); GG (a, b, c, d, x[ 3], 3); /* 28 */ /* 28 */ GG (d, a, b, c, x[ 7], 5); GG (d, a, b, c, x[ 7], 5); /* 29 */ /* 29 */ GG (c, d, a, b, x[11], 9); GG (c, d, a, b, x[11], 9); /* 30 */ /* 30 */ GG (b, c, d, a, x[15], 13); GG (b, c, d, a, x[15], 13); /* 31 *//* 31 */

Page 37: Criptanálise de MD4 Mads Rasmussen Mads@ime.usp.br

MD4 Round 3MD4 Round 3HH (a, b, c, d, x[ 0], 3); HH (a, b, c, d, x[ 0], 3); /* 32 */ /* 32 */ HH (d, a, b, c, x[ 8], 9); HH (d, a, b, c, x[ 8], 9); /* 33 */ /* 33 */ HH (c, d, a, b, x[ 4], 11); HH (c, d, a, b, x[ 4], 11); /* 34 */ /* 34 */ HH (b, c, d, a, x[12], 15);HH (b, c, d, a, x[12], 15); /* 35 */ /* 35 */ HH (a, b, c, d, x[ 2], 3); HH (a, b, c, d, x[ 2], 3); /* 36 */ /* 36 */ HH (d, a, b, c, x[10], 9); HH (d, a, b, c, x[10], 9); /* 37 */ /* 37 */ HH (c, d, a, b, x[ 6], 11); HH (c, d, a, b, x[ 6], 11); /* 38 */ /* 38 */ HH (b, c, d, a, x[14], 15); HH (b, c, d, a, x[14], 15); /* 39 */ /* 39 */ HH (a, b, c, d, x[ 1], 3); HH (a, b, c, d, x[ 1], 3); /* 40 */ /* 40 */ HH (d, a, b, c, x[ 9], 9); HH (d, a, b, c, x[ 9], 9); /* 41 */ /* 41 */ HH (c, d, a, b, x[ 5], 11); HH (c, d, a, b, x[ 5], 11); /* 42 */ /* 42 */ HH (b, c, d, a, x[13], 15); HH (b, c, d, a, x[13], 15); /* 43 */ /* 43 */ HH (a, b, c, d, x[ 3], 3); HH (a, b, c, d, x[ 3], 3); /* 44 */ /* 44 */ HH (d, a, b, c, x[11], 9); HH (d, a, b, c, x[11], 9); /* 45 */ /* 45 */ HH (c, d, a, b, x[ 7], 11); HH (c, d, a, b, x[ 7], 11); /* 46 */ /* 46 */ HH (b, c, d, a, x[15], 15); HH (b, c, d, a, x[15], 15); /* 47 *//* 47 */