Еднопосочни Хаш функции
DESCRIPTION
Еднопосочни Хаш функции. 1 . Основи Еднопосочната Хаш функция H ( M ) работи над произволно по дължина съобщение оригинал M . Тя връща фиксирана по дължина Хаш стойност h . h = H ( M ), където h е с дължина m . - PowerPoint PPT PresentationTRANSCRIPT
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 случайни Хаша.
2
Еднопосочни Хаш функцииЕднопосочни Хаш функции
ПродължениеПродължение Следният метод се предлага за да се генерира по-дълга Хаш стойност за зададена
Хаш функция.(1) Генерира се Хаш стойност на едно съобщение, употребявайки еднопосочна Хаш функция, описана в книгите. (2) Предварително намиране на Хаш стойност на съобщението. (3) Генерира се Хаш стойност последователно на съобщението и Хаш стойността. (4) Създава се по-дълга Хаш стойност, съдържаща Хаш стойността от стъпка (1) свързана с Хаш стойността от стъпка (3). (5) Повтарят се стъпки от (1) до (3) толкова пъти колкото се желае последователно. Преглед на еднопосочните Хаш функции
Не е лесно да се проектира една функция, която приема един вход с произволна дължина камо ли пък еднопосочна. В реалния свят еднопосочните Хаш функции са изградени върху идеята за функция на компресията (свиването) - compression function . Изходите на тази функция е Хаш стойност с по-голяма дължина n на вход е с дължина m. Входовете на функцията на компресия е един блок на съобщение и изходът на предишните блокове от текст. Изходът е Хаш на всички блокове до този. Така че, Хаш на блок Mi е
hi = f(Mi,hi- 1)
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 Хаш стойност.
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, и тогава следващият блок е готов за да бъде подложен на Хаш функция.
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.
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)
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)
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. Лявото циклично изместване във всеки рунд е приблизително оптимизирано, за да се постигне бърз ефект на лавината. Четирите измествания употребени във всеки рунд са различни от едно употребено в другите рундове.
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.
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-битови блока, колкото са в съобщението.
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.
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 бита.
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..
14
Еднопосочни Хаш функции Продължение
Тази схема е разбита.
Hi = EMi(Hi - 1)
Davies и Price предлагат вариант, който циклира входното съобщение през алгоритъма два пъти. Атаката на Coppersmith работи върху този вариант при неголеми изчислителни възможности.
Друга несекретна схема е:
Hi = EMi H⊕ i- 1 (Hi- 1)
Тази схема е несекретна (c е една константа):
Hi = Ec (Mi ⊕ Hi - 1) ⊕ Mi ⊕ Hi- 1
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, защото вирусът не знае ключа.
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 са константи.
Този алгоритъм е вероятно в широка употреба, но не е много сложен и се употребява отдавна.