Tiivistefunktiot Juha Taskinen Petri Tolonen Esityksen sislt Mik
- Slides: 11
Tiivistefunktiot © Juha Taskinen & Petri Tolonen
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 "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) 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
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 = 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 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 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 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 : = 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