Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kniga_tolyk_2.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
2.9 Mб
Скачать

4.2Коллизия

Коллизия - это когда на входе хеш-функции разные тексты (строки), а на выходе - одинаковые хеш-значения.

Коллизии дают возможность некоторых махинаций с электронными документами. Допустим, документы контролируются по хешам. Тогда можно составить два документа с одинаковым хешем и в нужный момент сделать подмену. Вышеприведенный пример Штирлица подвержен коллизии первого рода, в силу того, что по знанию количеству букв «а= », «б= », «в= », … , «я= » можно составить другой документ на 10 страниц, но по этим буквам, практически невозможно восстановит оригинал документа.

Другой пример, когда коллизии могут навредить, - это применение хеш-функций для контроля целостности файлов, сетевых сообщений и т.п. Файл (сообщение) проверяется на наличие искажения с помощью хеш-функции. Если у него новый хеш - искажение было. Если хеш тот же, то может быть, что искажение было, но вышло так, что хеш-функция дала для обеих версий одинаковое значение.

Разрешение коллизий

Это специальный алгоритм, который используется каждый раз при размещении новой записи или при поиске существующей, если возникла коллизия.

В системах БД рехеширование выполняется одним из следующих способов:

  1. Открытая адресация: новая запись размещается вслед за последней записью на данной странице или на следующей, если страница заполнена.

  2. Использование коллизионных страниц: новая запись размещается на одной из коллизионных страниц, относящихся к таблице (в области переполнения). Для ускорения поиска рехешированных записей может использоваться связанная область переполнения, для которой на странице хранится ссылка на коллизионную страницу. Нулевое значение такой ссылки говорит об отсутствии коллизий для данных, размещённых на этой странице.

  3. Многократное хеширование. Заключается в том, что при возникновении коллизии для поиска другого адреса (возможно, на коллизионных страницах) применяется другая функция хеширования.

Сильная устойчивость к коллизиям (1-го рода): для нарушителя

вычислительно неосуществимо найти x' такое, чтобы x и x' образовали коллизию (т. е.

, в т.ч. при данных и

Слабая устойчивость к коллизиям (2-го рода): для нарушителя

вычислительно неосуществимо построить второй вход x' такой, что Это

подразумевает, что при данном неосуществимо найти любой x', такой что

(т. е. h является однонаправленной функцией).

4.4Пример простого хеширования

Для легкого усвоения материала данного раздела мы приведем достаточно простой пример хеш-функции на маленьких числах. Скажем, используя данные задачи необходимо получить хеш-код для некоторого сообщения «ИНТЕГРАЛ» при помощи хеш-функции H. Выберем вектор инициализации равным нулю.

Хеш-функцию можно записать следующим образом:

,

где ;

Н0 – вектор инициализации;

Мi=М1, М2, … , Мn – длина блока.

Все блоки делят пополам и к каждой половине прибавляют равноценное количество единиц. С образованными таким образом блоками производят итерационные действия.

Нам необходимо получить хеш-значение сообщения ИНТЕГРАЛ при помощи хеш-функции с параметрами . «И–10=10102», «Н–15=11112», «Т–20=101002»…, «Л–13=11012» порядковый номер буквы в алфавите.

Вычислим хеш-код:

00001010:00001111:00010100:00000110:00000100:00010010:00000001:00001101

1. рассчитаем значение модуля n = p*q = 35;

2. представим сообщение в виде номеров букв русского алфавита в десятичном и двоичном видах (байтах):

И

Н

Т

Е

Г

Р

А

Л

10

15

20

6

4

18

1

13

0000:1010

0000:1111

0001:0100

0000:0110

0000:0100

0001:0010

0000:0001

0000:1101

3. разобьем байты пополам, добавив в начало полубайт равный 0100 и получим хешируемые блоки Мi:

M1

M2

M3

M4

M5

M6

M7

M8

0100:0000

0100:1010

0100:0000

0100:1111

0100:0001

0100:0100

0100:0000

0100:0110

M9

M10

M11

M12

M13

M14

M15

M16

0100:0000

0100:0100

0100:0001

0100:0010

0100:0000

0100:0001

0100:0000

0100:1101

4. выполним итеративные шаги:

первая итерация

М1 = 01000000

Н0 = 00000000

Н0 М1 = 01000000 = 6410

[(H0 M1)2] (mod 35) = 642(mod 35) = 110

H1 = 110 = 000000012

вторая итерация

М2 = 01001010

Н1 = 00000001

Н1 М2 = 01001011 = 7510

[(H1 M2)2] (mod 35) = 752(mod 35) = 2510

H2 = 2510 = 000110012

третья итерация

М3 = 01000000

Н2 = 00011001

Н2 М3 = 01011001 = 8910

[(H2 M3)2] (mod 35) = 892(mod 35) = 1110

H3 = 1110 = 000010112

четвертая итерация

М4 = 01001111

Н3 = 00001011

Н3 М4 = 01000100 = 6810

[(H3 M4)2] (mod 35) = 682(mod 35) = 410

H4 = 410 = 000001002

пятая итерация

М5 = 01000001

Н4 = 00000100

Н4 М5 = 01000101 = 6910

[(H4 M5)2] (mod 35) = 692(mod 35) = 110

H5 = 110 = 000000012

шестая итерация

М6 = 01000100

Н5 = 00000001

Н5 М6 = 01000101 = 6910

[(H5 M6)2] (mod 35) = 692(mod 35) = 110

H6 = 110 = 000000012

седьмая итерация

М7 = 01000000

Н6 = 00000001

Н6 М7 = 01000001 = 6510

[(H6 M7)2] (mod 35) = 652(mod 35) = 2510

H7 = 2510 = 000110012

восьмая итерация

М8 = 01000110

Н7 = 00011001

Н7 М8 = 01011111 = 9510

[(H7 M8)2] (mod 35) = 952(mod 35) = 3010

H8 = 3010 = 000111102

девятая итерация

М9 = 01000000

Н8 = 00011110

Н8 М9 = 01011110 = 9410

[(H8 M9)2] (mod 35) = 942(mod 35) = 1610

H9 = 1610 = 000100002

десятая итерация

М10 = 01000100

Н9 = 00010000

Н9 М10 = 01010100 = 8410

[(H9 M10)2] (mod 35) = 842(mod 35) = 2110

H10 = 2110 = 000101012

одиннадцатая итерация

М11 = 01000001

Н10 = 00010101

Н10 М11 = 01010100 = 8410

[(H10 M11)2] (mod 35) = 842(mod 35) = 2110

H11 = 2110 = 000101012

двенадцатая итерация

М12 = 01000010

Н11 = 00010101

Н11 М12 = 01010111 = 8710

[(H11 M12)2] (mod 35) = 872(mod 35) = 910

H12 = 910 = 000010012

тринадцатая итерация

М13 = 01000000

Н12 = 00001001

Н12 М13 = 01001001 = 7310

[(H12 M13)2] (mod 35) = 732(mod 35) = 910

H13 = 910 = 000010012

четырнадцатая итерация

М14 = 01000001

Н13 = 00001001

Н13 М14 = 01001000 = 7210

[(H13 M14)2] (mod 35) = 722(mod 35) = 410

H14 = 410 = 000001002

пятнадцатая итерация

М15 = 01000000

Н14 = 00000100

Н14 М15 = 01000100 = 6810

[(H14 M15)2] (mod 35) = 682(mod 35) = 410

H15 = 410 = 000001002

шестнадцатая итерация

М16 = 01001101

Н15 = 00000100

Н15 М16 = 01001001 = 7310

[(H15 M16)2] (mod 35) = 732(mod 35) = 910

H16 = 910 = 000010012

Таким образом, исходное сообщение «интеграл» имеет хеш-код m = 9.

Для вычисления цифровой подписи используем следующую формулу:

= 95 mod (35) = 4.

Пара (M, S) передается получателю как электронный документ М, подписанный цифровой подписью S, причем подпись S сформирована обладателем секретного ключа d.

Получив пару (M, S), получатель вычисляет хеш-код сообщения М двумя способами:

1. восстанавливает хеш-код m/, применяя криптографическое преобразование S с использованием открытого ключа e:

2. находит результат хеширования принятого сообщения с помощью той же хеш-функции:

m = H(M) = 9.

При равенстве вычисленных значений m и m/ получатель признает пару (M, S) подлинной, т.е. сообщение – оригинальным.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]