250 likes | 461 Views
Хеш-функции в криптографията. Определение. Х еш-функция (или хеш-алгоритъм) се нарича метод, който преобразува данни в число. Тези функции осигуряват начин за създаване на цифрови „отпечатъци” от всякакъв тип данни.
E N D
Определение Хеш-функция (или хеш-алгоритъм) се нарича метод, който преобразува данни в число. Тези функции осигуряват начин за създаване на цифрови „отпечатъци” от всякакъв тип данни. В криптографията тези „отпечатъци” често са наричани цифрови сигнатури или хеш-стойности, които обикновено се представят в шетнайсететична бройна система и служат за контролиране целостта на криптираните съобщения. Хеш-функциите често се използват за хеширане на потребителски пароли и съхранение на хешовете, вместо самите пароли.
Свойства на хеш-функциите Изискванията към хеш-функциите използвани в криптографията са: 1/ За данни с произволна дължина хеш-стойностите имат фиксирана дължина. 2/ H(x) е относително лесно да се изчисли за всяко х. 3/ H(x) е еднопосочна функция (one-way function) или функция със задна врата (trapdoor function). 4/ Н(х) е силно защитена от колизии, т.е. невъзможно е чрез изчисления да се намерят произволни х и у, за които да е изпълнено Н(х) = Н(у).
Еднопосочна хеш-функция MD4 • Входните съобщения се обработват на блокове с дължина 512 бита, всеки от които съдържа по 16 32-битови подблока. При обработката се използват следните три функции F, G и Н: • F(X,Y,Z) = (X and Y) or ((not X) and Z) • G(X,Y,Z) = (X and Y) or (X and Z) or (Y and Z) • H(X,Y,Z) = X xor Y xor Z • Процедурата за изчисляване на хеш-стойността Н на съобщението М се изпълнява в следната последователност: • Стъпка 1: Входното съобщение М се разделя на 512-битови блокове, като последният блок се допълва до размерност 448 бита чрез добавяне на единица и необходимия брой нули.
Еднопосочна хеш-функция MD4 Стъпка 2: Към последния 448-битов блок се прибавя 64-битова група, указваща дължината на М в битове. Полученото разширено съобщение М* ще съдържа цяло число L 512-битови блока, респективно - цяло число 16L 32-битови подблока (думи). Стъпка 3: Инициализиране на четири 32-битови променливи А, В, C и D. Стъпка 4: Копиране на първия 512-битов блок в масив от 32-битови думи Стъпка 5:AA = A; BB = B; CC = C; DD = D
Еднопосочна хеш-функция MD4 • Стъпка 6:Реализация на 1-ва итерация (16 операции) • К1 = 0 • F(X,Y,Z) = (X and Y) or ((not X) and Z) • Стъпка 7: Реализация на 2-ра итерация (16 операции) • К2 = 5A82799916 • G(X,Y,Z) = (X and Y) or (X and Z) or (Y and Z) • Стъпка 8: Реализация на 3-та итерация (16 операции) • К3 = 6ED9EBA116 • H(X,Y,Z) = X xor Y xor Z
Еднопосочна хеш-функция MD4 Стъпка 9: A = A+AA; B = B+BB; C = C+CC; D = D+DD (сумирането е по mod 232) Стъпка 10: Повторение от стъпка 4 за i=1, i=2 и т.н. до i=(L-1). Стъпка 11: Извеждане на 128-битовата хеш-стойност H = (A,B,C,D) на входното съобщение М. Пример: H(‘e’) = aec2333321d73000161682d3c4ebc009 H(‘example’) = e1821c366558728f70e054fbf9db7b64 H(‘Example’) = e31846f587fe2f61edd99ad2939876b5
Еднопосочна хеш-функция MD5 • MD5 е развитие на MD4 с цел повишаване на сигурността. Алгоритъмът използва 4 итерации и следните функции F, G, H и I: • F(X,Y,Z) = (X and Y)or((not X)and Z) • G(X,Y,Z) = (X and Z) or (Y and (not Z)) • H(X,Y,Z) = X xor Y xor Z • I(X,Y,Z) = Y xor (X or not Z) • Процедурата за изчисляване на хеш-стойността Н на съобщението М е следната: • Първите 5 стъпки на процедурата за изчисляване на Н с MD5 съвпадат с описаните за MD4.
Еднопосочна хеш-функция MD5 Стъпка 6:Реализация на 1-ва итерация (16 операции) F(X,Y,Z) = (X and Y)or((not X)and Z) Стъпка 7: Реализация на 2-ра итерация (16 операции) G(X,Y,Z) = (X and Z) or (Y and (not Z)) Стъпка 8: Реализация на 3-та итерация (16 операции) H(X,Y,Z) = X xor Y xor Z Стъпка 9: Реализация на 4-та итерация (16 операции) I(X,Y,Z) = Y xor (X or not Z) Последните стъпки 10, 11 и 12 на MD5 съвпадат, съответно със стъпки 9, 10 и 11 на описаната процедура на MD4. Ki = floor(232.abs(sin(i+1)))
Задача 1 Дадени са следнитеMD5 функции: F(X, Y, Z) = (X and Y ) or (not X and Z) G(X, Y, Z) = (X and Z) or (Y andnot Z) H(X, Y, Z) = X xor Y xor Z I(X, Y, Z) = Y xor (X ornot Z) Изчислете всяка от функциите, като използвате следните аргументи: (a) X := 0110, Y := 1111, Z := 0011 (b) X := 1010, Y := 1001, Z := 1011 (c) X := 0111, Y := 0001, Z := 1001
Задача 2 • Изчислете 16 битовата хеш-сигнатура на 32 битово съобщение, зададено като 16-тично число, като използвате 1-ва итерация на алгоритъма MD4, преработена по следния начин: • (АА,ВВ,СС,DD) := (A,B,C,D) • for i := 0 to 3 do • t := A + F(B,C,D) +Mi • (A,B,C,D) := (D, t<<<i,B,C) • end • (A,B,C,D) := (АА + A, ВВ + B, СС + C, DD + D) • Първоначалните стойности на променливите А, В, С, D са (116, 416, А16, В16). • Съобщението е М=FAB17E6616.
Задача 2/решение/ (А, В, С, D)= (116, 416, А16, В16) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) ----------------------------------------------------------------------------- (АА,ВВ,СС,DD) := (116, 416, А16, В16) i := 0 t := 116 + F(416, А16, В16) + F16 = 116 + В16 + F16 = В16 F(416, А16, В16) = (0100 and 1010) or (1011 and 1011) = 1011 = В16 (A,B,C,D) := (В16, В16<<<0, 416, А16) = (В16, В16, 416, А16)
Задача 2 /решение/ (АA, ВB, CС, DD)= (116, 416, А16, В16) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (B16, B16, 416, A16) i := 1 t := B16 + F(B16, 416, A16) + A16 = B16 + 016 + A16 = 516 F(B16, 416, A16) = (1011 and 0100) or (0100 and 1010) = 0000 = 016 (A,B,C,D) := (A16, 516<<<1, B16, 416) = (A16, A16, B16, 416)
Задача 2 /решение/ (АA, BВ, CС, DD)= (116, 416, А16, В16) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (A16, A16, B16, 416) i := 2 t := A16 + F(A16, B16, 416) + B16 = A16 + E16 + B16 = 316 F(A16, B16, 416) = (1010 and 1011) or (0101 and 0100) = 1110 = E16 (A,B,C,D) := (416, 316<<<2, A16, B16) = (416, C16, A16, B16)
Задача 2 /решение/ (АA, ВB, СC, DD)= (116, 416, А16, В16) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (416, C16, A16, B16) i := 3 t := 416 + F(C16, A16, B16) + 116 = 416 + B16 + 116 = 016 F(C16, A16, B16) = (1100 and 1010) or (0011 and 1011) = 1011 = B16 (A,B,C,D) := (B16, 016<<<3, C16, A16) = (B16, 016, C16, A16)
Задача 2 /решение/ (АA, ВB, СC, DD)= (116, 416, А16, В16) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (B16, 016, C16, A16) (A,B,C,D) := (116+B16, 416+016, A16+C16, B16+A16) (A,B,C,D) := (C16, 416, 616, 516)
Задача 2 /решение/ (АA, ВB, СC, DD)= (116, 416, А16, В16) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (АА,ВВ,СС,DD) := (C16, 416, 616, 516) i := 0 t := C16 + F(416, 616, 516) + 716 = C16 + 516 + 716 = 816 F(416, 616, 516) = (0100 and 0110) or (1011 and 0101) = 0101 = 516 (A,B,C,D) := (516, 816<<<0, 416, 616) = (516, 816, 416, 616)
Задача 2 /решение/ (АA, ВB, СC, DD)= (C16, 416, 616, 516) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (516, 816, 416, 616) i := 1 t := 516 + F(816, 416, 616) + E16 = 516 + 616 + E16 = 916 F(816, 416, 616) = (1000 and 0100) or (0111 and 0110) = 0110 = 616 (A,B,C,D) := (616, 916<<<1, 816, 416) = (616, 316, 816, 416)
Задача 2 /решение/ (АA, ВB, СC, DD)= (C16, 416, 616, 516) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (616, 316, 816, 416) i := 2 t := 616 + F(316, 816, 416) + 616 = 616 + 416 + 616 = 016 F(316, 816, 416) = (0011 and 1000) or (1100 and 0100) = 0100 = 416 (A,B,C,D) := (416, 016<<<2, 316, 816) = (416, 016, 316, 816)
Задача 2 /решение/ (АA, ВB, СC, DD)= (C16, 416, 616, 516) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (416, 016, 316, 816) i := 3 t := 416 + F(016, 316, 816) + 616 = 416 + 816 + 616 = 216 F(016, 316, 816) = (0000 and 0011) or (1111 and 1000) = 1000 = 816 (A,B,C,D) := (816, 216<<<3, 016, 316) = (816, 116, 016, 316)
Задача 2 /решение/ (АA, ВB, СC, DD)= (C16, 416, 616, 516) ; М=FAB17E6616 (АА,ВВ,СС,DD) := (A,B,C,D) for i := 0 to 3 do t := A + F(B,C,D) +Mi // F(B,C,D) = (B and C) or (notB and D) (A,B,C,D) := (D, t<<<i,B,C) end (A,B,C,D) := (АА+A, ВВ+B, СС+C, DD+D) -------------------------------------------------------------- --------------- (А,В,С,D) := (816, 116, 016, 316) (A,B,C,D) := (C16+816, 416+116, 616+016, 516+316) (A,B,C,D) := (416, 516, 616, 816) H(M) = 456816
Пример M=example =6578616D706C653816 H(M)=814C16 01100101 01111000 01100001 01101101 01110000 01101100 01100101 00111000 6 5 7 8 6 1 6 D 7 0 6 C 6 5 3 8 M=Example =4578616D706C653816 H(M)=????????16