нiкчемними.
Мiкрофон. Ефективний тiльки в кiмнатi без пiдслуховуючих пристроiв ("жучкiв"). В той же час, рiзниця амплiтуд у стереомiкрофонi ¦ дуже добрим джерелом ентропii навiть при наявностi пiдслуховуючого пристрою. Також на деяких комп'ютерах вiд аудiовходу з непiдключеним мiкрофоном iз середньою швидкiстю може йти електронний шум.
Вiдеокамера. Дуже повiльне джерело ентропii, що може використовуватись при вiдсутностi жучкiв.
Телевiзiйне та радiомовлення. Ентропiя, що надходить iз електричними перешкодами, ¦ локальною до точки прийому, тому може бути перехоплена.
Взагалi, найкращий спосiб генерацii випадкових чисел - використання спецiально призначених для цього апаратних пристроiв. Хоча iснують i такi пристроi, якi iмiтують роботу програмно реалiзованих генераторiв випадкових чисел i не призначенi для криптографiчних застосувань.
Розглянемо метод генерацii випадкових чисел, який застосову¦ться в вiдомiй програмi для криптографiчного захисту PGP. В цiй програмi використовуються два генератори випадкових чисел - trueRand, який вимiрю¦ затримки мiж натисканнями клавiш на клавiатурi, та cryptRand, розроблений згiдно зi стандартом ANSI X9.17 генерацii сеансових ключiв.
Генератор cryptRand включа¦ багато вдосконалень, якi не передбаченi стандартом ANSI X9.17. Замiсть алгоритму TripleDES у стандартi, в PGP використову¦ться алгоритм IDEA. Крiм того, при генерацii випадкових чисел замiсть поточних дати та часу застосову¦ться 24 байта з файла randseed.bin (або randseed.rnd). Генератор trueRand використову¦ться лише ¦диний раз для початкового створення файла randseed.bin; якiсть виходу вiд цього генератора залежить вiд входу, тому для збiльшення ентропii натискання клавiш повиннi робитися якомога бiльш випадковими. Власно генерацiя випадкових чисел i подальша пiдтримки файла randseed.bin викону¦ться генератором cryptRand.
Генератор ANSI X9.17 - cryptRand - працю¦ наступним чином. Нехай - функцiя шифрування за алгоритмом IDEA (в оригiналi - за алгоритмом TripleDES), - данi з файла randseed.bin (в оригiналi - поточнi дата та час), - вектор iнiцiалiзацii, данi з файла randseed.bin. Тодi генерацiя випадкового сеансового ключа i наступного вектора iнiцiалiзацii здiйсню¦ться по наступних формулах:
;
.
Необхiднiсть у генерацii випадкових чисел виника¦ при шифруваннi програмою PGP вiдкритого повiдомлення, яке в бiльшостi випадкiв атакуючому не вiдоме. Тому попередня обробка файла randseed.bin хеш-функцi¦ю вiд повiдомлення дода¦ ентропiю генератору випадкових чисел. Ця обробка поляга¦ в шифруваннi вмiсту файла randseed.bin за алгоритмом IDEA у режимi CFB ключем, який уявля¦ собою результат хеш-функцii SHA-1 вiд повiдомлення, та з використанням вектора iнiцiалiзацii 0.
Файл randseed.bin ма¦ довжину бiля 500 байтiв, iз яких 24 байта, як вказувалось вище, безпосередньо застосовуються в генераторi cryptRand як стан або вектор iнiцiалiзацii. В iнших байтах файла пiд час роботи комп'ютера збира¦ться рiзна умовно випадкова системна iнформацiя. Як тiльки буде зiбрано достатньо цi¦i iнформацii, то методом, наведеним вище, викону¦ться додавання ii ентропii до перших 24 байтiв файла. Цей момент ¦ важливим - додавання ентропii повинно здiйснюватись не поступово, з отриманням кожного наступного випадкового значення, а рiзко, коли буде отримана певна кiлькiсть цих значень, iнакше користi вiд такого додавання ентропii буде мало.
Реалiзацiя алгоритму DES
Особливостями реалiзацii алгоритму DES, наведеноi в данiй роботi, ¦, по-перше, нечутливiсть до порядку байтiв у словi, тобто незалежнiсть до типу процесора, та, по-друге, оптимiзованiсть по швидкостi виконання. Крiм того, реалiзацiя виконана на мовi C, що дозволя¦ без проблем переносити ii на рiзнi програмнi й апаратнi платформи.
Реалiзацiя здiйснювалася за описом алгоритму у [17], який явля¦ собою переклад [14].
Реалiзацiя включа¦ наступнi файли:
модуль реалiзацii алгоритму DES - des.c , 14 KB;
прототипи функцiй шифрування та дешифрування модулю реалiзацii алгоритму DES - des.h , 2 KB;
модуль шифрування та дешифрування файлiв (головний) - destest.c , 4 KB.
Функцii шифрування та дешифрування, реалiзованi в програмному модулi des.c , можуть безпосередньо використовуватись у програмному забезпеченнi. Перевiрка роботи цих функцiй може бути здiйснена за допомогою програми destest.c . Дана програма викону¦ шифрування та дешифрування файлiв за алгоритмом DES у режимi ECB.
Програма ма¦ наступнi параметри:
destest [-d]
<вхiдний файл> <вихiдний файл> <ключ>
<вхiдний файл>> | iм'я вхiдного файла; довжина файла повинна бути кратною 8 байтам
<вихiдний файл> | iм'я вихiдного файла
<ключ> | iм'я файла з ключем шифрування довжиною 8 байтiв
-d | виконати дешифрування, а не шифрування вхiдного файла в вихiдний
Тестовi приклади
Варiанти вiдкритих текстiв.
1. 41 42 43 44 45 46 47 48-49 4A 4B 4C 4D 4E 4F 50 ABCDEFGHIJKLMNOP
2. 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
3. 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
Варiанти ключiв.
1. 31 32 33 34 35 36 37 38 12345678
2. 00 00 00 00 00 00 00 00
3. 10 00 00 00 00 00 00 00
Результати шифрування вiдкритих текстiв ключами. В дужках наведений номер варiанта вiдкритого тексту та номер варiанта ключа.
1. 4B 5A 27 19 AF D6 B7 99-C4 FE 9B E0 C9 D7 0B F9 KZ'............. (1-1)
2. 8C A6 4D E9 C1 B1 23 A7-8C A6 4D E9 C1 B1 23 A7 ..M...#...M...#. (2-2)
3. 68 9E AC 3C 12 5C E4 52-68 9E AC 3C 12 5C E4 52 h..<.\.Rh..<.\.R (2-3)
4. 0D 9F 27 9B A5 D8 72 60-8C A6 4D E9 C1 B1 23 A7 ..'...r`..M...#. (3-2)
Файл des.h
/*
--------------------------------------------------------------
Шифрование данных по алгоритму DES в режиме ECB.
--------------------------------------------------------------
fpsbyteSource - открытые данные блоками по 8 байтов.
fpsbyteDestination - зашифрованные данные блоками по 8
байтов; устанавливается при завершении
функции.
fpsbyteKey - ключ шифрования длиной 8 байтов; из них реально
используются 56 битов.
intBlocks - количество блоков, подлежащих