Tiivistefunktiot Juha Taskinen Petri Tolonen Esityksen sislt Mik

  • Slides: 11
Download presentation
Tiivistefunktiot © Juha Taskinen & Petri Tolonen

Tiivistefunktiot © Juha Taskinen & Petri Tolonen

Esityksen sisältö • • • Mikä on tiivistefunktio Historia Tiivistysfunktion käyttö SHA-1 Esimerkki MD

Esityksen sisältö • • • Mikä on tiivistefunktio Historia Tiivistysfunktion käyttö SHA-1 Esimerkki MD 5 Esimerkki

Mikä on tiivistefunktio Yksisuuntaisen tiivistefunktion eli hash-funktion tarkoitus on tuottaa viestistä kiinteän mittainen, lyhyt

Mikä on tiivistefunktio Yksisuuntaisen tiivistefunktion eli hash-funktion tarkoitus on tuottaa viestistä kiinteän mittainen, lyhyt "tiivistelmä", joka edustaa koko viestiä sikäli, että on vaikea löytää mitään muuta viestiä, jolla olisi samanlainen tiiviste. Koska tiivisteen pituus on tyypillisesti 128 tai 160 bittiä ja viesti voi olla miten pitkä hyvänsä, on tietenkin olemassa runsaasti viestejä, joista tulee sama tiiviste, mutta oleellista on, ettei yhtään niistä pysty löytämään. Tiivisteestä käytetään myös nimityksiä 'digital fingerprint' tai 'message digest' (MD)

Ronald Rivest Historia NSA MD 4 (1991) MD 5 (1992) SHA (1993) SHA-1 (1995)

Ronald Rivest Historia NSA MD 4 (1991) MD 5 (1992) SHA (1993) SHA-1 (1995) SHA-2 (2001) Ext-MD 4 RIPE (EU Project) RIPEMD (1992) RIPEMD-160 (1996) RIPEMD-320 (1999) NSA = National Security Agency RIPE = RACE Integrity Primitives Evaluation Message Digest

Tiivistysfunktion käyttö Lähettäjä DATA Vastaanottaja DATA HASH

Tiivistysfunktion käyttö Lähettäjä DATA Vastaanottaja DATA HASH

SHA-1 Esimerkki “@” “ 9 a 78211436 f 6 d 425 ec 38 f

SHA-1 Esimerkki “@” “ 9 a 78211436 f 6 d 425 ec 38 f 5 c 4 e 02270801 f 3524 f 8”

Täydennys 512 bittiin Viesti: ”@” Length: 1 Data täydennetään pituuteen N mod 512 =

Täydennys 512 bittiin Viesti: ”@” Length: 1 Data täydennetään pituuteen N mod 512 = 448 Data: 40 h Jonka jälkeen dataan lisätään 64 bittinen luku joka ilmaisee alkuperäisen datan pituuden bitteinä. msg[0]=40800000 msg[1]=0000 msg[2]=0000 msg[3]=0000 msg[4]=0000 msg[5]=0000 msg[6]=0000 msg[7]=0000 msg[8]=0000 msg[9]=0000 msg[10]=0000 msg[11]=0000 msg[12]=0000 msg[13]=0000 msg[14]=0000 msg[15]=00000008

Täydennys 2560 bittiin W[0]=40800000 W[1]=0000 W[2]=0000 W[3]=0000 W[4]=0000 W[5]=0000 W[6]=0000 W[7]=0000 W[8]=0000 W[9]=0000 W[10]=0000

Täydennys 2560 bittiin W[0]=40800000 W[1]=0000 W[2]=0000 W[3]=0000 W[4]=0000 W[5]=0000 W[6]=0000 W[7]=0000 W[8]=0000 W[9]=0000 W[10]=0000 W[11]=0000 W[12]=0000 W[13]=0000 W[14]=0000 W[15]=00000008 W[16]=81000000 W[17]=0000 W[18]=00000010 W[19]=02000001 W[20]=0000 W[21]=00000020 W[22]=04000002 W[23]=00000010 W[24]=02000041 W[25]=08000004 W[26]=0000 W[27]=00000080 W[28]=10000008 W[29]=00000050 W[30]=0 a 000105 W[31]=20000020 W[32]=06000003 W[33]=00000200 W[34]=40000060 W[35]=08000144 W[36]=28000414 W[37]=80000000 W[38]=08000004 W[39]=00000840 W[40]=08000085 W[41]=00000500 W[42]=a 0001050 W[43]=00000222 W[44]=64000032 W[45]=00002040 W[46]=08000640 W[47]=880014 a 4 W[48]=9 c 00414 c W[49]=00000008 W[50]=80000100 W[51]=28008454 W[52]=88000854 W[53]=00005200 W[54]=4001052 a W[55]=00002360 W[56]=68000732 W[57]=80020400 W[58]=88006404 W[59]=80014208 W[60]=c 804144 c W[61]=000005 c 0 W[62]=a 800005 c W[63]=80084700 W[64]=e 800857 c W[65]=00050000 W[66]=001054 a 0 W[67]=80022240 W[68]=00003264 W[69]=00204000 W[70]=00064008 W[71]=0014 a 408 W[72]=10414 c 94 W[73]=00000 c 00 W[74]=800101 c 0 W[75]=20845238 W[76]=c 00854 e 8 W[77]=00520600 W[78]=c 1052 e 20 W[79]=80236 fc 0 W(i) = (w(i-3) xor w(i-8) xor w(i-4) xor w(i-16)) << 1

Vakiot: H 0 = 67452301 H 1 = efcdab 89 H 2 = 98

Vakiot: H 0 = 67452301 H 1 = efcdab 89 H 2 = 98 badcfe H 3 = 10325476 H 4 = c 3 d 2 e 1 f 0 Hash-muuttujat a = H 0 b = H 1 c = H 2 d = H 3 e = H 4 for i from 0 to 79 if 0 ≤ i ≤ 19 then f : = (b and c) or ((not b) and d) k : = 0 x 5 A 827999 else if 20 ≤ i ≤ 39 f : = b xor c xor d k : = 0 x 6 ED 9 EBA 1 else if 40 ≤ i ≤ 59 f : = (b and c) or (b and d) or (c and d) k : = 0 x 8 F 1 BBCDC else if 60 ≤ i ≤ 79 f : = b xor c xor d k : = 0 x. CA 62 C 1 D 6 temp : = (a << 5) + f + e + k + w(i) e : = d d : = c c : = b << 30 b : = a a : = temp

Iteraatiokierrokset Vakiot: A=67452301 B=efcdab 89 C=98 badcfe D=10325476 E=c 3 d 2 e 1

Iteraatiokierrokset Vakiot: A=67452301 B=efcdab 89 C=98 badcfe D=10325476 E=c 3 d 2 e 1 f 0 i=… i = 79 A=e 03498 b 3 B=67452301 C=7 bf 36 ae 2 D=98 badcfe E=10325476 ……………………………………… A=3332 fe 13 B=4729289 c C=537 e 18 c 6 D=cff 01 c 0 a E=5 b 624308 H 0+A=9 a 782114 H 1+B=36 f 6 d 425 H 2+C=ec 38 f 5 c 4 H 3+D=e 0227080 H 4+E=1 f 3524 f 8 “ 9 a 78211436 f 6 d 425 ec 38 f 5 c 4 e 02270801 f 3524 f 8”

MD 5 Esimerkki Vakiot: h 0 : = 0 x 67452301 h 1 :

MD 5 Esimerkki Vakiot: h 0 : = 0 x 67452301 h 1 : = 0 x. EFCDAB 89 h 2 : = 0 x 98 BADCFE h 3 : = 0 x 10325476 Hash-muuttujat a = h 0 b = h 1 c = h 2 d = h 3 e = h 4 r(i) = 2^32 * abs( sin(i) ) for i from 0 to 63 if 0 ≤ i ≤ 15 then f : = (b and c) or ((not b) and d) g : = i else if 16 ≤ i ≤ 31 f : = (d and b) or ((not d) and c) g : = (5×i + 1) mod 16 else if 32 ≤ i ≤ 47 f : = b xor c xor d g : = (3×i + 5) mod 16 else if 48 ≤ i ≤ 63 f : = c xor (b or (not d)) g : = (7×i) mod 16 temp : = d d : = c c : = b b : = ((a + f + k(i) + w(g)) << r(i)) + b a : = temp Digest = h 0+a append h 1+b append h 2+c append h 3+d