Конспекти лекцій та Лабораторні роботи з дисципліни "Алгоритми та структури даних" для III курсу спеціальності 121 "Інженерія програмного забезпечення" ОКР "Фаховий молодший бакалавр" Херсонського політехнічного фахового коледжу Державного університету "Одеська політехніка"
Розрізняють декілька способів ідентіфікації: контрольні суми, контроль CRC, хешування и цифровий підпис - Такі базові засоби аутентіфікації при ціфровій передачі Даних.
Контрольні суми - найбільш простий способ Перевірки цілісності Даних, что передаються в цифровому виде, при якому обчіслюється контрольна сума ПОВІДОМЛЕННЯ (певне значення, Пожалуйста и ідентіфікує цифрову інформацію).
Хеш-функцією (hash function) називається математична чи інша функція, яка для рядка довільної довжини обчислює деяке ціле значення або деякий інший рядок фіксованої довжини. Математично це можна записати так:
h = H (M)
,
де М
- вихідне повідомлення, зване іноді прообразом , а h
- результат, званий значенням хеш-функції (а також хеш-кодом або дайджестом повідомлення).
Сенс хеш-функції полягає у визначенні характерного ознаки прообразу - значення хеш-функції. цезначення зазвичай має певний фіксований розмір, наприклад, 64 або 128біт. Хеш-код може бути в подальшому проаналізовано для вирішення будь-якої задачі. Так наприклад,хешування може застосовуватися для порівняння даних: якщо у двох масивів даних хеш-коди різні, масиви гарантовано розрізняються; якщо однакові - масиви, швидше за все, однакові. У загальному випадку однозначної відповідності між вихідними даними і хеш-кодом немає через те, що кількість значень хеш-функцій завжди менше, ніж варіантів вхідних даних. Отже, існує безліч вхідних повідомлень, що дають однакові хеш-коди (такі ситуації називаються колізіями). Імовірність виникнення колізій відіграє важливу роль в оцінці якості хеш-функцій.
Хеш-функції широко застосовуються в сучасній криптографії.
найпростіша хешфункція може бути складена з використаннямоперації “сума по модулю 2” в такий спосіб: отримуємо вхідні рядок, складаємо все байти по модулю 2 і байт -результат повертаємо в якості значення хеш-фукнции. Довжина значення хеш-функції складе в цьому випадку 8 біт незалежно від розміру вхідного повідомлення.
Наприклад, нехай вихідне повідомлення, перекладене в цифровий вигляд, було наступним (у шістнадцятковому форматі):
3E 54 A0 1F B4
Переведемо повідомлення в двійковий вигляд, запишемо байти один під одним і складемо біти в кожному стовпчику по модулю 2:
0011 1110
0101 0100
1010 0000
0001 1111
1101 0100
----------
0110 0101
Результат ( 0110 0101 (2) або 65 (16) ) і буде значенням хеш-функції.
Однак таку хеш-функцію можна використовувати для криптографічних цілей, наприклад для формування електронного підпису, так як досить легко змінити зміст підписаного повідомлення, не змінюючи значення контрольної суми.
Тому розглянута хеш функція не годиться для криптографічних застосувань. У криптографії хеш функція вважається хорошою, якщо важко створити два прообразу з однаковим значенням хеш-функції, а також, якщо у виходу функції немає явної залежності від входу.
Сформулюємо основні вимоги, що пред’являються до криптографічних хеш-функцій:
M
;M
має бути важко знайти інше повідомлення M'
з таким же значенням хеш-функції, як у вихідного повідомлення;m
та m'
, m ≠ m'
, для якої H(m) = H(m')
. Так як Кількість можливий відкритих текстів більше числа можливий значень згортки, то для деякої згортки знайдеться багато прообразів ⇒ колізії для хеш функцій обов’язково існують. Например, нехай довжина хеш прообразу 6 бітів, довжина згортки 4 біта. Тоді число різніх.Створити хеш-функцію, яка задовольняє всім перерахованим вимогам - завдання непросте. Необхідно також пам’ятати, що на вхід функції надходять дані довільного розміру, а хеш-результат не повинен виходити однаковим для даних різного розміру.
В даний час на практиці в якості хеш-функцій застосовуються функції, що обробляють вхідний повідомлення блок за блоком і обчислюють хеш значення h i для кожного блоку M i вхідного повідомлення по залежностям виду
h i = H (M i , h i-1 )
,
де h i-1 - результат, отриманий при обчисленні хеш-функції для попереднього блоку вхідних даних.
В результаті вихід хеш-функції h n є функцією від всіх n блоків вхідного повідомлення.
Розробка хеш-функцій, что задовольняють всім вимоги, - складне завдання. Практично відповідають ЦІМ вимоги хеш-функції з групи алгоритмів MD и SHA.
Алгоритм | Рік створення | Роки популярності | Автор/Компанія | Основне призначення | Довжина хешу (біти) | Приклад хешу | Особливості |
---|---|---|---|---|---|---|---|
CRC | 1961 | 1960–1990 | W. Wesley Peterson | Цілісність даних | 16–32 | 4C1D (CRC-16), FEE8A6E1 (CRC-32) |
Перевірка помилок у передачі даних. |
Adler-32 | 1975 | 1980–2000 | Марк Адлер | Цілісність даних | 32 | 1E60382E |
Швидший за CRC-32, але менш надійний. |
MD2 | 1989 | 1990–2000 | Рон Рівест, MIT | Хешування паролів | 128 | 8350E5A3E24C153DF2275C9F80692773 |
Перший алгоритм серії MD, призначений для 8-бітних систем. |
GOST R 34.11-89 | 1989 | 1990–2010 | Радянський Союз | Криптографія | 256 | 981E5F3CA125DA3995204D46D1C5F60B7C725A284CCFE19E99DB48B5F59AB1B8 |
Стандартний у Росії, стійкий до певних атак. |
MD4 | 1990 | 1990–1995 | Рон Рівест, MIT | Хешування файлів | 128 | A4D55A8D778E5022FAB701977C5D840BBC486D0F |
Попередник MD5, використовується для перевірки цілісності файлів. |
MD5 | 1991 | 1995–2005 | Рон Рівест, MIT | Хешування файлів | 128 | 5D41402ABC4B2A76B9719D911017C592 |
Швидкий, але небезпечний через колізії. |
FNV | 1991 | 2000–дотепер | Гленн Фаулер, Landon Curt Noll, К. Vo | Хешування текстів | 32–64 | E150687C (FNV-1a 32-bit), AF63BD4C8601B7BE (FNV-1a 64-bit) |
Простий і ефективний. |
SHA-0 | 1993 | 1993–1995 | NIST | Криптографія | 160 | F96CEA198AD1DD5617AC084A3D92C6107708C0EF |
Перший алгоритм серії SHA, швидко замінений через вразливість. |
Snefru | 1993 | 1993–2000 | Ральф Меркле | Криптографія | 128–256 | F45D7F1D2D1F0517CB4BBAF3536B9994 (Snefru-128) |
Один із перших криптографічних хешів. |
SHA-1 | 1993 | 2000–2010 | NIST | Криптографія | 160 | DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 |
Вразливий до атак, замінений SHA-2. |
Haval | 1993 | 1995–2005 | Yuliang Zheng et al. | Хешування файлів | 128–256 | C68F39913F901F3DDFF118940094A5CC (Haval-128) |
Багаторівневий алгоритм з варіантами довжини хеша. |
Tiger | 1995 | 1995–2005 | Росс Андерсон, Eli Biham | Хешування файлів | 192 | 6D12E66614D2DBB29770972E3370C1E9E51A527DC216F7E6 |
Призначений для 64-бітних платформ. |
RIPEMD | 1996 | 1996–2005 | COSIC, KU Leuven | Криптографія | 128–160 | 3F45EF194732C2DBB2C4A2C769795FA3 (RIPEMD-128) |
Використовується як альтернатива MD5 і SHA-1. |
bcrypt | 1999 | 2005–дотепер | Niels Provos, David Mazieres | Хешування паролів | 192 | 2410D58F1EEACD04C7F1CC9D2D2CC027 |
Створений спеціально для зберігання паролів. Підтримує вбудовану “сіль”. |
SHA-256 | 2001 | 2010–дотепер | NSA/NIST | Криптографія, хешування файлів | 256 | E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 |
Стандарт для цілісності файлів та криптографічної стійкості. |
scrypt | 2009 | 2010–дотепер | Colin Percival | Хешування паролів | Змінна | 7023D28F3E885E00... |
Висока стійкість до атак через оптимізоване використання пам’яті. |
Blake2 | 2012 | 2015–дотепер | Jean-Philippe Aumasson et al. | Хешування файлів, паролів | 256 | BA80A53F981C4D0D6A2797B9B8AB60F6A0D79067C5B5BE06E4C23FD536F53E5C |
Поліпшення Blake, використовується для сучасних систем. |
Blake3 | 2020 | 2020–дотепер | Samuel Neves et al. | Хешування файлів | 256 | AF1349B9A3E05FAD2D... |
Сучасний алгоритм для хешування файлів, багатопотоковий. |