160 likes | 277 Views
Еднопосочни Хаш функции. 1 . Основи Еднопосочната Хаш функция H ( M ) работи над произволно по дължина съобщение оригинал M . Тя връща фиксирана по дължина Хаш стойност h . h = H ( M ), където h е с дължина m .
E N D
Еднопосочни Хаш функции 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 случайни Хаша.
Еднопосочни Хаш функцииПродължение Следният метод се предлага за да се генерира по-дълга Хаш стойност за зададена Хаш функция. (1) Генерира се Хаш стойност на едно съобщение, употребявайки еднопосочна Хаш функция, описана в книгите. (2) Предварително намиране на Хаш стойност на съобщението. (3) Генерира се Хаш стойност последователно на съобщението и Хаш стойността. (4) Създава се по-дълга Хаш стойност, съдържаща Хаш стойността от стъпка (1) свързана с Хаш стойността от стъпка (3). (5) Повтарят се стъпки от (1) до (3) толкова пъти колкото се желае последователно. Преглед на еднопосочните Хаш функции Не е лесно да се проектира една функция, която приема един вход с произволна дължина камо ли пък еднопосочна. В реалния свят еднопосочните Хаш функции са изградени върху идеята за функция на компресията (свиването) - compression function . Изходите на тази функция е Хаш стойност с по-голяма дължина n на вход е с дължина m. Входовете на функцията на компресия е един блок на съобщение и изходът на предишните блокове от текст. Изходът е Хаш на всички блокове до този. Така че, Хаш на блок Miе hi = f(Mi,hi- 1)
Еднопосочни Хаш функцииПродължение 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 Хаш стойност.
Еднопосочни Хаш функцииПродължение Хаш на всеки 128-битов блок е функция на блока и Хаш на предишния блок. H0 = I, където I е една начална случайна стойност Hi = g(Mi,Hi- 1) ⊕ Mi ⊕ Hi- 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, и тогава следващият блок е готов за да бъде подложен на Хаш функция.
Еднопосочни Хаш функцииПродължение 4. MD4 MD4 е една еднопосочна функция проектирана от 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.
Еднопосочни Хаш функцииПродължение Има четири нелинейни функции, една употребена във всяка операция (различна функция за всеки рунд). 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)
Еднопосочни Хаш функцииПродължение Четирите рунда (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)
Еднопосочни Хаш функции Продължение Константите 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. Лявото циклично изместване във всеки рунд е приблизително оптимизирано, за да се постигне бърз ефект на лавината. Четирите измествания употребени във всеки рунд са различни от едно употребено в другите рундове.
Еднопосочни Хаш функции Продължение 6. MD2 MD2 е друга 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.
Еднопосочни Хаш функции Продължение 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-битови блока, колкото са в съобщението.
Еднопосочни Хаш функции Продължение Главният цикъл има 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.
Еднопосочни Хаш функцииПродължение Ако 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-MD RIPE-MD е развит за European Community’s RIPE project. Алгоритъмът е вариант на MD4, проектиран да бъде резистентен на известни криптографски атаки и дава 128- битова Хаш стойност. 9. HAVAL HAVAL е с променлива дължина на еднопосочната Хаш функция. Той е модификация на MD5. HAVAL обработва съобщенията в блокове от 1024 бита, двойно в сравнение с MD5 и може да дава дължини 128, 160, 192, 224 или 256 бита.
Еднопосочни Хаш функцииПродължение 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.
Еднопосочни Хаш функцииПродължение Тази схема е разбита. Hi = EMi(Hi - 1) Davies и Price предлагат вариант, който циклира входното съобщение през алгоритъма два пъти. Атаката на Coppersmith работи върху този вариант при неголеми изчислителни възможности. Друга несекретна схема е: Hi = EMi⊕ Hi- 1 (Hi- 1) Тази схема е несекретна (c е една константа): Hi = Ec (Mi ⊕ Hi - 1) ⊕ Mi ⊕ Hi- 1
Еднопосочни Хаш функцииПродължение 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, защото вирусът не знае ключа.
Еднопосочни Хаш функцииПродължение Алгоритъм за удостоверяване на съобщение (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 са константи. Този алгоритъм е вероятно в широка употреба, но не е много сложен и се употребява отдавна.