Khafre | |
---|---|
Создатель | Ральф Меркл |
Создан | 1990 г. |
Опубликован | 1990 г. |
Размер ключа | неограничен (кратен 64 бит) |
Размер блока | 64 бит |
Число раундов | неограниченно (кратно 8 бит) |
Тип | Сеть Фейстеля |
Khafre — второй (вместе с Khufu) алгоритм, предложенный Ральфом Мерклом (Khufu (Хуфу) и Khafre (Хафра) — имена египетских фараонов). Этот алгоритм похож на Khufu, но не нуждается в предварительных вычислениях. S-блоки не зависят от ключа, в Khafre используется фиксированные S-блоки. Алгоритм Khafre не ограничивает максимальное количество раундов алгоритма и максимальный размер ключа, в отличие от Khufu. Однако, размер ключа должен быть кратен 64 битам, а количество раундов — кратным 8. По предположению Меркла с Khafre должны использоваться 64 или 128 битовые ключи, и что в Khafre будет больше этапов, чем в Khufu. Также, каждый этап Khafre сложнее этапа Khufu, это делает Khafre медленнее. Зато для Khafre не нужны никакие предварительные вычисления, что дает возможность быстрее шифровать небольшие порции данных.
Непосредственно перед созданием алгоритма, (конец 1990 г.) большая часть существовавших в то время алгоритмов симметричного шифрования было адаптировано под аппаратные реализации, несмотря на то, что аппаратная реализация алгоритма шифрования является более дорогостоящей, чем программная реализация, Это значит — менее доступной для подавляющего большинства потенциальных пользователей.
Так в конце 1990-х Меркл в составе команды криптографов из компании Xerox разработал шифр — Khafre, названный в честь египетского фараона Хафра сына Хуфы. Через год компания Xerox получила патент на алгоритм Khafre, его коммерческое использование было запрещено держателем патента.
Алгоритм Khafre — блочный алгоритм, построен на основе сети Фейстеля и удовлетворяет следующим постулатам:
На основе опыта, полученного при проектировании алгоритма DES, были сформулированы следующие принципы:
Алгоритм шифрует данные блоками с размером 64 бита. Далее в процессе шифрования каждый блок разбивается на 2 субблока с размерами 32 бита каждый.
Алгоритм имеет следующие параметры:
байт | 4 байта | |||
---|---|---|---|---|
00 | 00 | 00 | 00 | 00 |
01 | 01 | 01 | 01 | 01 |
02 | 02 | 02 | 02 | 02 |
… | … | … | … | … |
FF | FF | FF | FF | FF |
байт | 4 байта | |||
---|---|---|---|---|
00 | FC | 21 | 23 | FF |
01 | E2 | 27 | 71 | FA |
02 | DF | B5 | BB | 29 |
… | … | … | … | … |
FF | 30 | 24 | 1C | FB |
Исходный текст делится на блоки по 64 бита. В самом начале процедуры данный блок подвергается следующим операциям:
После этого начинается шифрование. Количество повторений шагов равно количеству раундов.
После этого все шаги повторяются заново R раз.
L: int;
R: int;
standardSBoxes: ARRAY [ 1 .. enough/8] OF ARRAY [0 .. 255] OF int;
key: ARRAY [0 .. keysize-1] OF ARRAY [O .. 1] of int;
keyIndex: [0 .. keysize- 1];
rotateschedule: ARRAY [l .. 8] = [16,16,8,8,16,16,24,24];
L = L XOR key[O][O];
R = R XOR key[O][1];
keyIndex = 1 MOD keysize;
octet = 1;
FOR round = 1 TO enough DO
BEGIN
L = L XOR standardSBoxes[octet] [R AND #FF];
R = RotateRight[R, rotateSchedule[round mod 8 + 1] 1;
SWAP[L,R];
IF round MOD 8 = 0 THEN
BEGIN
L = L XOR rotateRight[ key[keyIndex][O], octet];
R = R XOR rotateRight[ key[keylndex][1], octet];
keyIndex = keyIndex + 1;
IF keyIndex = keysize THEN keyIndex = 0;
octet = octet+1;
END;
END;
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .