Еднопосочни Хаш функции

16
1 Еднопосочни Хаш функции Еднопосочни Хаш функции 1. Основи Еднопосочната Хаш функция H(M) работи над произволно по дължина съобщение оригинал M. Тя връща фиксирана по дължина Хаш стойност h. h = H(M), където h е с дължина m . Еднопосочната Хаш функция има допълнителни характеристики, които я правят еднопосочна: Дадено е M, лесно се определя h; Дадено е h, трудно се определя M, такова че H(M)= h; Дадено е M, трудно се намира друго съобщение M’, такова че H(M) = H(M’). В някои приложения еднопосочността не е адекватна и е необходимо друго изискване наречено collision-resistance – колизионна устойчивост. Дължина на еднопосочните Хаш функции Хаш функции от 64 бита са твърде малки за да преживеят атаката на рождения ден. Повечето такива функции дават 128 бита Хаш. NIST, в нейния Secure Hash Standard (SHS), употребява 160-бита Хаш стойност. Атаката на рождения ден е по-трудна и изисква 2 80 случайни Хаша.

Upload: keelie-bruce

Post on 30-Dec-2015

21 views

Category:

Documents


0 download

DESCRIPTION

Еднопосочни Хаш функции. 1 . Основи Еднопосочната Хаш функция H ( M ) работи над произволно по дължина съобщение оригинал M . Тя връща фиксирана по дължина Хаш стойност h . h = H ( M ), където h е с дължина m . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Еднопосочни Хаш функции

1

Еднопосочни Хаш функцииЕднопосочни Хаш функции

1. Основи

Еднопосочната Хаш функция H(M) работи над произволно по дължина съобщение оригинал M. Тя връща фиксирана по дължина Хаш стойност h.

h = H(M), където h е с дължина m ..

Еднопосочната Хаш функция има допълнителни характеристики, които я правят еднопосочна:

Дадено е M, лесно се определя h; Дадено е h, трудно се определя M, такова че H(M)= h; Дадено е M, трудно се намира друго съобщение M’, такова че H(M) = H(M’).

В някои приложения еднопосочността не е адекватна и е необходимо друго изискване наречено collision-resistance – колизионна устойчивост.

Дължина на еднопосочните Хаш функции

Хаш функции от 64 бита са твърде малки за да преживеят атаката на рождения ден. Повечето такива функции дават 128 бита Хаш. NIST, в нейния Secure Hash Standard (SHS), употребява 160-бита Хаш стойност. Атаката на рождения ден е по-трудна и изисква 280 случайни Хаша.

Page 2: Еднопосочни Хаш функции

2

Еднопосочни Хаш функцииЕднопосочни Хаш функции

ПродължениеПродължение Следният метод се предлага за да се генерира по-дълга Хаш стойност за зададена

Хаш функция.(1)  Генерира се Хаш стойност на едно съобщение, употребявайки еднопосочна Хаш функция, описана в книгите. (2)  Предварително намиране на Хаш стойност на съобщението. (3)  Генерира се Хаш стойност последователно на съобщението и Хаш стойността. (4)  Създава се по-дълга Хаш стойност, съдържаща Хаш стойността от стъпка (1) свързана с Хаш стойността от стъпка (3). (5)  Повтарят се стъпки от (1) до (3) толкова пъти колкото се желае последователно. Преглед на еднопосочните Хаш функции

Не е лесно да се проектира една функция, която приема един вход с произволна дължина камо ли пък еднопосочна. В реалния свят еднопосочните Хаш функции са изградени върху идеята за функция на компресията (свиването) - compression function . Изходите на тази функция е Хаш стойност с по-голяма дължина n на вход е с дължина m. Входовете на функцията на компресия е един блок на съобщение и изходът на предишните блокове от текст. Изходът е Хаш на всички блокове до този. Така че, Хаш на блок Mi е

hi = f(Mi,hi- 1)

Page 3: Еднопосочни Хаш функции

3

Еднопосочни Хаш функцииЕднопосочни Хаш функции ПродължениеПродължение

2. Snefru

Snefru дава Хаш на съобщения с произволна дължина в 128-бита или 256 битови стойности.

Първо съобщението се разбива на части всяка с дължина 512-m . (Стойността m е дължината на Хаш стойността.) Ако изходът е една 128-bit Хаш стойност, тогава частите са 384 бита дълги, ако изходът е 256-bit Хаш стойност - 256 бита дължина.

Функцията H се основа на E, което е една обратима функция на блоковия шифър, която работи с 512-битови блокове. H е последните m бита на изхода на E подложено на XOR с първите m бита на входа на E.

Секретността на Snefru се съдържа във функцията E, която прави данната случайна в няколко паса. Всеки пас е композиран от 64 случайни рунда. Всеки рунд употребява различен байт на данната като вход към един S-box; изходната дума на S-box се подлага на XOR с две съседни думи на съобщението. S-боксовете са конструирани по подобен начин на този на Khafre. Някои ротации се извършват също вътре. Оригиналният Snefru е проектиран за два паса.

Криптоанализ на Snefru

3. N- Hash

N-Hash е алгоритъм предложен от Nippon Telephone and Telegraph.

N-Hash употребява 128-битов блок на съобщението, една усложнена рандомизираща функция подобна на тази на FEAL и произвежда 128-bit Хаш стойност.

Page 4: Еднопосочни Хаш функции

4

Еднопосочни Хаш функции Продължение

Хаш на всеки 128-битов блок е функция на блока и Хаш на предишния блок.Хаш на всеки 128-битов блок е функция на блока и Хаш на предишния блок.HH00 = = II,, където където II е една начална случайна стойност е една начална случайна стойностHHi i = g(= g(MMii,,HHi- 1i- 1) ⊕) ⊕ MMii ⊕ ⊕ HHi- 1i- 1

Една степен на обработка е показана на фигурата. Блокът на съобщението е разделен на четири 32-битови стойности. Предишната Хаш стойност също на четири 32-битови стойности. Функцията f е дадена на другата фигура. Функциите S0 и S1 са същите каквито са и на FEAL.S0(a,b) = ротация наляво на два бита ((a + b) mod 256) S1(a,b) = ротация наляво на два бита ((a + b + 1) mod 256)

Изходът на една степен на обработка става вход на следвашата степен. След последната степен изходът се подлага на XOR с Mi и Hi-1, и тогава следващият блок е готов за да бъде подложен на Хаш функция.

Page 5: Еднопосочни Хаш функции

5

Еднопосочни Хаш функции Продължение

4. MD4MD4 е една еднопосочна функция проектирана от Ron Rivest. MD запазва Message

Digest; алгоритъмът произвежда 128-битов Хаш. Rivest посочва своите проектантски цели за алгоритъма:Security. Изчислително е невъзможно да се намерят две съобщения, които имат еднакви Хаш стойности. Никаква атака не е по-ефективна от атаката на грубата сила. Direct Security. Секретността на MD4 не се основава на приемане като сложност на разделяне на множители.Speed. MD4 е удобен за високоскоростни софтуерни приложения. Той се базира на просто множество от битови манипулации на 32-битови операнди. Simplicity and Compactness. MD4 е толкова прост колкото е възможно, без големи структури на данни или усложнени програми. Favor Little-Endian Architectures. MD4 е оптимизиран за микропроцесорни архитектури (специално за Intel микропроцесори); по-големи и по-бързи компютри правят необходими и транслации. 5. MD5

MD5 е една подобрена версия на MD4. Въпреки че е по-сложен в сравнение с MD4, той е подобен и също произвежда 128-bit Хаш.

След някои начални обработки, MD5 обработва входния текст на 512-битови блокове, разделени на 16 32-битови подблока. Изходът на алгоритъма е едно множество от 4 32-битови блока, които се свързват за да образуват една единствена 128-битова Хаш стойност.

Инициализират се четири 32-битови променливи:A = 0x01234567 B = 0x89abcdef C = 0xfedcba98 D = 0x76543210 Те се наричат верижни променливи - chaining variables.

Page 6: Еднопосочни Хаш функции

6

Еднопосочни Хаш функции Продължение

Има четири нелинейни функции, една употребена във всяка операция (различна функция за всеки рунд).

F(X,Y,Z) = (X ⊥ Y) ((¬ ⊦ X) ⊥ Z) G(X,Y,Z) = (X ⊥ Z) ¬ (Y (¬ Z)) H(X,Y,Z) = X ⊕ Y ⊕ Z I(X,Y,Z) = Y (⊕ X (¬ ⊦ Z)) ( е XOR, е AND, е OR и ¬ е NOT.)⊕ ⊥ ⊦

Ако Mj представя j-ти подблок на съобщението (от 0 до 15), и <<< s представя едно изместване наляво на s бита, четирите оператора са:

FF(a,b,c,d,Mj,s,ti) означава a = b + ((a + F(b,c,d ) + Mj + ti) <<< s)

GG(a,b,c,d,Mj,s,ti) означава a = b + ((a + G(b,c,d ) + Mj + ti) <<< s)

HH(a,b,c,d,Mj,s,ti) означава a = b + ((a + H(b,c,d) + Mj + ti) <<< s)

II(a,b,c,d,Mj,s,ti) означава a = b + ((a + I(b,c,d ) + Mj + ti) <<< s)

Page 7: Еднопосочни Хаш функции

7

Еднопосочни Хаш функции Продължение

Четирите рунда (64 стъпки) изглеждат така: Рунд 1:

FF (a, b, c, d, M0, 7, 0xd76aa478) FF (d, a, b, c, M1, 12, 0xe8c7b756) FF (c, d, a, b, M2, 17, 0x242070db) FF (b, c, d, a, M3, 22, 0xc1bdceee) FF (a, b, c, d, M4, 7, 0xf57c0faf) FF (d, a, b, c, M5, 12, 0x4787c62a) FF (c, d, a, b, M6, 17, 0xa8304613) FF (b, c, d, a, M7, 22, 0xfd469501) FF (a, b, c, d, M8, 7, 0x698098d8) FF (d, a, b, c, M9, 12, 0x8b44f7af) FF (c, d, a, b, M10, 17, 0xffff5bb1) FF (b, c, d, a, M11, 22, 0x895cd7be) FF (a, b, c, d, M12, 7, 0x6b901122) FF (d, a, b, c, M13, 12, 0xfd987193) FF (c, d, a, b, M14, 17, 0xa679438e) FF (b, c, d, a, M15, 22, 0x49b40821)

Page 8: Еднопосочни Хаш функции

8

Еднопосочни Хаш функции Продължение

Константите ti, са избрани както следва:

В стъпка i, ti е цялата част на 232*abs(sin(i)), където i е в радиани.След всичко това a, b, c и d са прибавени към A, B, C, D, респективно и алгоритъмът продължава със следващия блок данна. Крайният изход е свързване на A, B, C и D.

Секретност на MD5

Ron Rivest извежда подобренията на MD5 от MD4 :

1.  Четвърти рунд е прибавен.

2.  Всяка стъпка има уникална адитивна константа.

3.  Функцията G в 2-ри рунд е променена от ((X ⊥ Y ) (⊦ X ⊥ Z ) (⊦ Y ⊥ Z )) на ((X ⊥ Z ) (⊦ Y ¬ ⊥Z )) за да направи G по-малко симетрична.

4.  Всяка стъпка сега добавя в резултата на предната стъпка. Това произвежда по-бърз лавинен ефект.

5.  Редът в който подблоковете на съобщението са достъпни в рундове 2 и 3 е променен, за да направи образците по-малко сходни.

6.  Лявото циклично изместване във всеки рунд е приблизително оптимизирано, за да се постигне бърз ефект на лавината. Четирите измествания употребени във всеки рунд са различни от едно употребено в другите рундове.

Page 9: Еднопосочни Хаш функции

9

Еднопосочни Хаш функции Продължение

6. MD2MD2 е друга 128-bit еднопосочна функция проектирана от Ron Rivest. Тя заедно с MD5,

е употребена в PEM протоколите. Секретността на MD2 е свързана с една случайна пермутация на байтове. Тази пермутация е фиксирана и зависима от числото π. S0, S1, S2,..., S255 е пермутацията. За да се подложи на Хаш функция едно съобщение M:(1)  Подпълване на съобщението с i байта така че резултантното съобщение е кратно на 16 байта дължина. (2)  Добавяне на 16-байта контролна сума към съобщението. (3)  Инициализация на един 48-byte блок: X0, X1, X2,..., X47. Поставяне на първите 16 байта за X да са 0, вторите 16 байта за X да бъдат първите 16 байта на съобщението и третите 16 байта на X да са XOR на първите 16 байта на X и вторите 16 байта на X. (4)  Свиващата функция е: t = 0 For j = 0 to 17 For k = 0 to 47 t = Xk XOR St

Xk = t t = (t + j ) mod 256 (5)  Поставят се вторите 16 байта на X да са вторите 16 байта на съобщението и третите 16 байта на X да са XOR на първите 16 байта на X и вторите 16 байта на X. Изпълнява се стъпка (4). Повтарят се стъпки (5) и (4) с всеки 16 байта на съобщението по ред. (6)  Изходът е първите 16 байта на X.

Page 10: Еднопосочни Хаш функции

10

Еднопосочни Хаш функции Продължение

7. Секретен Хаш алгоритъм (Secure Hash Algorithm - SHA)Описание на SHA

Първо съобщението се подпълва за да се направи кратно на 512 бита дължина. Подпълването е същото като на MD5: първо се добавя една единица, след това много нули толкова колкото е необходимо да се направи 64 бита парче за кратност на 512 и накрая едно 64-битово представяне на дължината на съобщението преди подпълването. Пет 32-битови променливи (MD5 има 4 променливи, но този алгоритъм изисква изчисляване на 160-битов Хаш) са инициализирани както следва:A = 0x67452301 B = 0xefcdab89 C = 0x98badcfe D = 0x10325476 E = 0xc3d2e1f0

Главният цикъл на алгоритъма започва. Той изчислява 512 бита едновременно и продължава за следващите 512-битови блока, колкото са в съобщението.

Page 11: Еднопосочни Хаш функции

11

Еднопосочни Хаш функции Продължение

Главният цикъл има 4 рунда с по 20 операции във всеки (MD5 има 4 рунда с 1 по 16 операции). Всяка операция изпълнява нелинейна функция на три от пет променливи a, b, c, d и e, и тогава се прави изместване подобно на MD5.

Множеството от нелинейни функции на SHA е:

ft(X,Y,Z ) = (X ⊥ Y) ((¬ X ) ⊦ ⊥ Z), for t = 0 to 19. ft (X,Y,Z ) = X ⊕ Y ⊕ Z, for t = 20 to 39. ft (X,Y,Z ) = (X ⊥ Y ) (⊦ X ⊥ Z) (⊦ Y ⊥ Z), for t = 40 to 59. ft (X,Y,Z ) = X ⊕ Y ⊕ Z, for t = 60 to 79.

Четири константи са употребени в алгоритъма:

Kt = 0x5a827999, за t = 0 to 19. Kt = 0x6ed9eba1, за t = 20 to 39. Kt = 0x8f1bbcdc, за t = 40 to 59. Kt = 0xca62c1d6, за t = 60 to 79. (0x5a827999 = 21/2 /4, 0x6ed9eba1 = 31/2 /4, 0x8f1bbcdc = 51/2 /4 и 0xca62c1d6 = 101/2 /4; всичко 232 пъти )

Блокът на съобщението е трансформиран от 16 32-битови думи (M0 до M15 ) до 80 32-битови думи (W0 до W79) употребени в следващия алгоритъм:

Wt = Mt, for t = 0 to 15 Wt = (Wt- 3 ⊕ Wt - 8 ⊕ Wt - 14 ⊕ Wt - 16 ) <<< 1, for t = 16 to 79.

Page 12: Еднопосочни Хаш функции

12

Еднопосочни Хаш функции Продължение

Ако t е номерът на операцията (от 0 до 79), Wt представя t –ти подблок на разширеното съобщение и <<< s – изместването наляво на s бита, тогава главният цикъл изглежда така:

FOR t = 0 to 79

TEMP = (a <<< 5) + ft (b,c,d) + e + Wt + Kt

e = d

d = c

c = b <<< 30

b = a

a = TEMP

8. RIPE-MDRIPE-MD е развит за European Community’s RIPE project. Алгоритъмът е вариант на MD4, проектиран да бъде резистентен на известни криптографски атаки и дава 128- битова Хаш стойност.

9. HAVALHAVAL е с променлива дължина на еднопосочната Хаш функция. Той е модификация на MD5. HAVAL обработва съобщенията в блокове от 1024 бита, двойно в сравнение с MD5 и може да дава дължини 128, 160, 192, 224 или 256 бита.

Page 13: Еднопосочни Хаш функции

13

Еднопосочни Хаш функции Продължение

10. Еднопосочни Хаш функции, употребявани в симетрични блокови алгоритми.

Една употребявана мярка за Хаш функцията се основана на блоков шифър е Хаш скорост - hash rate, или броят на n-битовите блокове на съобщението, където n е размерът на блока в алгоритъма, обработван при шифрирането. Високата скорост на Хаш по-бърз алгоритъм.

Схеми с Хаш дължини равни на размера на блока

Общата схема како следва е на фигурата:

H0 = IH, където IH е една случайна начална стойност

Hi = EA(B) ⊕ C .

Където A, B и C могат да бъдат или Mi, Hi - 1, (Mi ⊕ Hi - 1), или една константа (приемайки да бъде 0). H0 е някаква случайна начална стойност: IH. Съобщението е разделено на части с размер на блокове, Mi, и се обработват индивидуално. Има и някакъв вид на MD- подсилване, защото подпълваща процедура е употребена в MD5 и SHA..

Page 14: Еднопосочни Хаш функции

14

Еднопосочни Хаш функции Продължение

Тази схема е разбита.

Hi = EMi(Hi - 1)

Davies и Price предлагат вариант, който циклира входното съобщение през алгоритъма два пъти. Атаката на Coppersmith работи върху този вариант при неголеми изчислителни възможности.

Друга несекретна схема е:

Hi = EMi H⊕ i- 1 (Hi- 1)

Тази схема е несекретна (c е една константа):

Hi = Ec (Mi ⊕ Hi - 1) ⊕ Mi ⊕ Hi- 1

Page 15: Еднопосочни Хаш функции

15

Еднопосочни Хаш функции Продължение

11. Употреба на алгоритми с публичен ключВъзможно е да се използват алгоритми с публичен ключ във верижен режим като една

еднопосочна Хаш функция. Ако се отстрани частния ключ, разбиването на Хаш ще е трудно като четене на съобщението без частен ключ.

Тук е даден един пример на употреба на RSA. Ако M е съобщение за хашване, n е продуктът на две прости числа p и q, и e друго голямо число относително просто на (p - 1)(q - 1), тогава Хаш функцията H(M ) ше бъдеH(M ) = Me mod n

Едно по-лесно решение ще бъде употребата на едно строго просто число като модул - modulus p. Тогава:H(M ) = Me mod p

Разбиването на този проблем е трудно колкото намирането на дискретен логаритъм от e. Проблемът с този алгоритъм е, че е по-бавен от другите разглеждани тук.

12. Кодове за удостоверяване на съобщенияКодът за удостоверяване на съобщение или MAC, е зависима от ключа еднопосочна

Хаш функция разгледана преди това. MAC-те имат същите особености като еднопосочните Хаш функции, но включват един ключ. Само някой с идентичен ключ може да провери Хаша. Това е много приложимо за да произведе удостоверяване без секретност. MAC-те могат да се употребяват за файлове между потребители. Те са приложими и когато един потребител определя дали файловете са променяни или срещу вируси. Потребителят може да определи MAC на неговите файлове и да съхрани стойността в една таблица. Ако потребителят употребява вместо това една еднопосочна Хаш функция, тогава вирусът може да определи нова Хаш стойност след инфекцията и да замести входната таблица. Вирусът не може да направи това с един MAC, защото вирусът не знае ключа.

Page 16: Еднопосочни Хаш функции

16

Еднопосочни Хаш функции Продължение

Алгоритъм за удостоверяване на съобщение (Message Authenticator Algorithm - MAA)Този алгоритъм е един на ISO стандарт. Той дава един Хаш от 32 бита и е

проектиран за компютри с бързи инструкции за умножение. v = v <<< 1 e = v ⊕ w x = ((((e + y ) mod 232) A C) * (⊦ ⊥ x ⊕ Mi)) mod 232 - 1 y = ((((e + x) mod 232) B D) * (⊦ ⊥ y ⊕ Mi)) mod 232 - 2

Повтаряйки това за всеки блок на съобщението Mi, и резултантният Хаш се подлага на XOR с x и y. Променливите v и e са определени от ключа. A, B, C и D са константи.

Този алгоритъм е вероятно в широка употреба, но не е много сложен и се употребява отдавна.