Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа? |
Стандарт шифрования данных (DES)
Шифр и обратный шифр
Используя смеситель и устройство замены, мы можем создать шифр и обратный шифр для каждого из 16 -ти раундов. Шифр используется на стороне шифрования; обратный шифр — на стороне дешифрования. Алгоритмы создания шифра и обратного шифра аналогичны.
Первый способ
Один из методов, чтобы достигнуть поставленной цели (шифрование и обратное шифрование), состоит в том, чтобы сделать последний раунд отличающимся от других; он будет содержать только смеситель и не будет содержать устройства замены, как это показано на рис. 8.9.
Мы доказали в "Введение в основы современных шифров с симметричным ключом" , что смеситель и устройство замены самоинверсны. Конечные и начальные перестановки также инверсны друг другу. Левая секция исходного текста на стороне шифрования шифруется L0 как L16, и L16 дешифруется на стороне дешифратора как L0. Аналогичная ситуация с R0 и R16.
Нужно запомнить очень важное положение, которое касается шифров: ключи раундов ( K1 и K16 ) применяются при шифровании и дешифровании в обратном порядке. На стороне шифрования первый раунд применяет ключ K1, а раунд 16 — ключ K16 ; при дешифровании раунд 1 использует ключ K16, а раунд 16 — ключ K1.
Алгоритм
Алгоритм 8.1. приведен в псевдокодах для шифрования и соответствует четырем шагам первого метода. Коды для остальных могут быть сделаны как упражнение.
Cipher (plainBlock[64], Round Keys[16,48]) { pemute (64,64, plainBlock, inBlock, IntialPermutationTable) spilt (64, 32, inBlock, leftBlock, right Block) for (round = 1 to 16) { mixer (leftBlock, right Block, RoundKey[round]) if (round!=16) swapper(leftBlock, right Block) } combine (32, 64, leftBlock, right Block, outBlock) pemute (64,64, outBlock, cipherBlock, FinalPermutationTable) mixer (leftBlock[48], right Block[48], RoundKey[48]) { copy (32, rightBlock, T1) function (T1, RoundKey,T2) exclusive Or (32, leftBlock, T2,T3) copy (32, rightBlock, T1) } swapper (leftBlock[32], right Block[32]) { copy (32, leftBlock, T) copy (32, rightBlock, leftBlock) copy (32, T, rightBlock) } Substitute (in block[32], outblock[48], SubstituteTables[8,4,16]) { for(I = 1 to 8) { row <- 2 x inBlock[i x 6+1] + inBlock[i x 6+6] col <- 8 x inBlock[i x 6+2] + 4 x inBlock[i x 6+3]+2 x inBlock[i x 6+4] + inBlock[i x 6+5] value = SubstituteTables[i][row][col] outBlock[i x 4+1] <- value/ 8 value <- value mod 8 outBlock[i x 4+2] <- value/ 4 value <- value mod 4 outBlock[i x 4+3] <- value/ 2 value <- value mod 8 outBlock[i x 4+4] <- value } } }8.1. Псевдокоды для DES шифра
Альтернативный способ
При первом способе раунд 16 отличается от других раундов тем, что там не применяется устройство замены. Это необходимо, чтобы сделать последний и первый смесители в шифре одинаковыми. Мы можем делать все 16 раундов одинаковыми, добавляя к 16 -му раунду дополнительное устройство замены (два устройства замены позволяют нейтрализовать друг друга). Разработку этой схемы мы оставляем для упражнений.
Генерация ключей
Генератор ключей создает шестнадцать ключей по 48 битов из ключа шифра на 56 битов. Однако ключ шифра обычно дается как ключ из 64 -х битов, в котором 8 дополнительных битов являются битами проверки. Они отбрасываются перед фактическим процессом генерации ключей, который показан на рис. 8. 10.
Удаление битов проверки
Предварительный процесс перед расширением ключей — перестановка сжатия, которую мы называем удалением битов проверки. Он удаляет биты четности (биты 8, 16, 24, 32..., 64 ) из 64 -битового ключа и переставляет остальную часть битов согласно таблице 8.12. Остающееся значение на 56 битов — фактический ключ шифра, который используется, чтобы генерировать ключи раунда. Биты удаляются с помощью перестановки ( P -блока сжатия), как это показано в таблице 8.12.
57 | 49 | 41 | 33 | 25 | 17 | 09 | 01 |
58 | 50 | 42 | 34 | 26 | 18 | 10 | 02 |
59 | 51 | 43 | 35 | 27 | 19 | 11 | 03 |
60 | 52 | 44 | 36 | 63 | 55 | 47 | 39 |
31 | 23 | 15 | 07 | 62 | 54 | 46 | 37 |
30 | 22 | 14 | 06 | 61 | 53 | 45 | 37 |
29 | 21 | 13 | 05 | 28 | 20 | 12 | 04 |
Сдвиг влево
После прямой перестановки ключ разделен на две части по 28 битов. Каждая часть сдвигается влево (циклический сдвиг) на один или два бита. В раундах 1, 2, 9 и 16 смещение – на один бит, в других раундах — на два бита. Затем эти две части объединяются, чтобы создать часть в 56 бит. Таблица 8.13 показывает число сдвигов манипуляций для каждого раунда.
Раунд | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
Число бит | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
Перестановка сжатия
Перестановка сжатия ( P -блок) изменяет 56 битов на 48 битов, которые используются для формирования ключа раунда. Перестановка сжатия показана в таблице 8.14.
14 | 17 | 11 | 24 | 01 | 05 | 03 | 28 |
15 | 06 | 21 | 10 | 23 | 19 | 12 | 04 |
26 | 08 | 16 | 07 | 27 | 20 | 13 | 02 |
41 | 52 | 31 | 37 | 47 | 55 | 30 | 40 |
51 | 45 | 33 | 48 | 44 | 49 | 39 | 56 |
34 | 53 | 46 | 42 | 50 | 36 | 29 | 32 |
Алгоритм
Теперь напишем простой алгоритм для создания ключа из ключа с проверочными битами. Алгоритм 8.2 использует несколько процедур алгоритма 8.1. Имеется и одна новая процедура — левый сдвиг ( ShiftLeft ). Обратите внимание, что T — временный блок.
Key_Generator (keyWithParities[64], RoundKeys[16. 48]. SinfTable[16]) { ' permute (64, 56, keyWithParities, cipherKey, ParityDropTable) spilt (56, 28, cipherKey, leftKey, rightKey) for (round = 1 to 16) { shiftLeft (leftKey, ShiftTable[round1]) I shiftLeft (rightKey, ShiftTable [round]) combine (28, 56, leftKey, rightKey, preRoundKey) permute (56, 48, preRoundKey, RoundKeys[round], KevCompressionTable) } } shiftLeft (block[28], NumOfShifts) { for (i = 1 to numShifts) { T <- block[ 1] for (j = 2 to 28) { block [j-1] <- block [j] } block[28] <- T } }8.2. Алгоритм 8.2. Алгоритм для генерации ключей раунда
Примеры
Перед анализом DES рассмотрим несколько примеров, чтобы понять, как шифрование и дешифрование меняют значение битов в каждом раунде.
Пример 8.5
Мы выбираем случайный блок исходного текста и случайный ключ и определяем, каким должен быть блок зашифрованного текста (все цифры даны в шестнадцатеричном исчислении).
Plaintext: 123456ABCD 132536 Key: AABB09182736CCDD Cipher Text: COB7ASD05F3AS29C
Покажем результат каждого раунда и текста, созданного до и после раундов. Таблица 8.15 показывает результаты первых шагов перед началом раунда. Исходный текст — прошедший через начальную перестановку для получения различных 64 бит ( 16 шестнадцатеричных цифр).
Исходный текст: 123456ABCD 132536 | |||
---|---|---|---|
После первоначальной перестановки: 14A7D67818CA18D После разбиения: L0= 14A7D678 R0 = 18CA18D | |||
Раунд | Левая | Правая | Ключ раунда |
Раунд 1 | 18CA18AD | 5A78E394 | 194CD072DE8C |
Раунд 2 | 5A78E394 | 4A1210F6 | 4568581ABCCE |
Раунд 3 | 4A1210F6 | B8089591 | 06EDA4ACF5B5 |
Раунд 4 | B8089591 | 236779C2 | DA2D032B6EE3 |
Раунд 5 | 236779C2 | A15A4B87 | 69A629FEC913 |
Раунд 6 | A15A4B87 | 2E8F9C65 | C1948E87475E |
Раунд 7 | 2E8F9C65 | A9FC20A3 | 708AD2DDB3C0 |
Раунд 8 | A9FC20A3 | 308BEE97 | 34F822F0C66D |
Раунд 9 | 308BEE97 | 10AF9D37 | 84BB4473DCCC |
Раунд 10 | 10AF9D37 | 6CA6CB20 | 02765708B5BF |
Раунд 11 | 6CA6CB20 | FF3C485F | 6D5560AF7CA5 |
Раунд 12 | FF3C485F | 22A5963B | C2C1E96A4BF3 |
Раунд 13 | 22A5963B | 387CCDAA | 99C31397C91F |
Раунд 14 | 387CCDAA | BD2DD2AB | 251B8BC717D0 |
Раунд 15 | BD2DD2AB | CF26B472 | 3330C5D9A36D |
Раунд 16 | 19BA9212 | CF26B472 | 181C5D75C66D |
После объединения: 19BA9212 CF26B472 | |||
Зашифрованный текст: C0B7A8D05F3A829C | (после конечной перестановки) |
Таблица показывает результат 16 раундов, которые включают смешивание и замену (исключая последний раунд). Результаты последних раундов ( L16 и R16 ) объединены. Наконец, текст проходит конечную перестановку, для того чтобы получить зашифрованный текст.
Следует отметить некоторые положения. Правая секция каждого раунда совпадает с левой секцией следующего раунда. Причина в том, что правая секция проходит через смеситель без изменения, а устройство замены переносит ее в левую секцию. Например, R1 передается через смеситель второго раунда без изменения, но затем, пройдя устройство замены, он становится L2. Второе интересное положение: на последнем раунде мы не имеем устройства замены. Именно поэтому R15 становится R16 вместо того чтобы стать L16.
Пример 8.6
Давайте рассмотрим, как Боб в пункте назначения может расшифровать зашифрованный текст, полученный от Алисы, с помощью совпадающего ключа. Для экономии времени мы разберем только несколько раундов. Таблица 8.16 показывает интересующие нас точки. Первое правило: ключи раунда должны использоваться в обратном порядке. Сравните таблицу 8.15 и таблицу 8.16. Ключ раунда 1 — такой же как ключ для раунда 16. Значения L0 и R0 при дешифрации те же самые, что и значения L16 и R16 при шифровании. Аналогичные совпадения будут получены и в других раундах. Это доказывает не только, что шифр и обратный шифр инверсны друг другу, но также то, что каждый раунд при шифрации имеет соответствующий раунд при дешифрации в обратном шифре. Результат свидетельствует, что начальные и конечные перестановки также являются инверсиями друг друга.
Зашифрованный текст: C0B7A8D05F3A829C | |||
---|---|---|---|
После первоначальной перестановки: 19BA9212 CF26B472 После разбиения: L0= 19BA9212 R0 = CF26B472 | |||
Раунд | Левая | Правая | Ключ раунда |
Раунд 1 | CF26B472 | BD2DD2AB | 181C5D75C66D |
Раунд 2 | BD2DD2AB | 387CCDAA | 3330C5D9A36D |
......... | ......... | ......... | ......... |
Раунд 15 | 5A78E394 | 18CA182AD | 4568581ABCCE |
Раунд 16 | 19BA9212 | 18CA18AD | 194CD072DE8C |
После объединения: 14A7D67818CA18D | |||
Исходный текст: 123456ABCD 132536 | (после конечной перестановки) |