Post on 18-Apr-2015
Criptanálise de MD4Criptanálise de MD4
Mads RasmussenMads Rasmussen
Mads@ime.usp.brMads@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
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)
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
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
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
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
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
Funções de hash IteradosFunções de hash Iterados
F F F
IV M0 M1 Mn
H0 H1 Hn-1 Hn
Hash
Funções hash IteradosFunções hash Iterados
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
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
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).
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)
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
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
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
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
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))
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*)
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
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
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 ....) ....)
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
ProbabilidadesProbabilidades
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
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
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
DEMODEMO
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
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““
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
Perguntas?Perguntas?
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
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 */
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 */
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 */