Пример детального алгоритма DES – Русские Блоги

Шаг 1: создайте 16 подразделов, каждый длиной 48 бит

Этот 64-битный ключ сначала преобразуется в соответствии с таблицей PC-1.

  1.                             PC-1
  2.  
  3.               57   49    41   33    25    17    9
  4.                1   58    50   42    34    26   18
  5.               10    2    59   51    43    35   27
  6.               19   11     3   60    52    44   36
  7.               63   55    47   39    31    23   15
  8.                7   62    54   46    38    30   22
  9.               14    6    61   53    45    37   29
  10.               21   13     5   28    20    12    4

Поскольку первый элемент в таблице – 57, 57-й бит исходного ключа изменится на 1-й бит нового ключа K . Аналогично, 49-й бит исходного ключа преобразуется во 2-й бит нового ключа … 4-й бит исходного ключа преобразуется в последний бит нового ключа. Обратите внимание, что только 56 бит исходного ключа будут вводить новый ключ, и в таблице выше всего 56 элементов.

Например, для оригинального ключа:

  1. = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

Мы получим новый 56-битный ключ:

  1. K  = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

Затем разделите этот ключ на левую и правую части,C0иD0На каждой половине 28 цифр.

Например, для нового ключа мы получаем:

  1. C0 = 1111000 0110011 0010101 0101111 
  2. D0 = 0101010 1011001 1001111 0001111

Для того же определенияC0иD0И теперь мы создаем 16 блоковCnиDn, 1<=n<

=16, Каждая параCnиDnОба по предыдущей пареCn-1иDn-1Иди сюда В частности, дляn = 1, 2, …, 16В результате предыдущей смены используйте следующую таблицу для выполнения некоторых операций левой смены.

  1.                      Iteration     Number of
  2.                       Number      Left Shifts
  3.  
  4.                           1          1
  5.                           2          1
  6.                           3          2
  7.                           4          2
  8.                           5          2
  9.                           6          2
  10.                           7          2
  11.                           8          2
  12.                           9          1
  13.                          10          2
  14.                          11          2
  15.                          12          2
  16.                          13          2
  17.                          14          2
  18.                          15          2
  19.                          16          1

Это означает, например,C3 and D3ЗдесьC2 and D2Сдвинуты, в частности, на 2 левых смены;

C16 and D16 Это изC15 and D15Получено за 1 левую смену. Во всех случаях сдвиг влево должен сдвигать все биты на один бит влево, так что положение бита после сдвига становится2, 3,…, 28, 1。

Например, для исходного подразделаC0 and D0И мы получаем:

  1. C0 = 1111000011001100101010101111
  2. D0 = 0101010101100110011110001111
  3. C1 = 1110000110011001010101011111
  4. D1 = 1010101011001100111100011110
  5. C2 = 1100001100110010101010111111
  6. D2 = 0101010110011001111000111101
  7. C3 = 0000110011001010101011111111
  8. D3 = 0101011001100111100011110101
  9. C4 = 0011001100101010101111111100
  10. D4 = 0101100110011110001111010101
  11. C5 = 1100110010101010111111110000
  12. D5 = 0110011001111000111101010101
  13. C6 = 0011001010101011111111000011
  14. D6 = 1001100111100011110101010101
  15. C7 = 1100101010101111111100001100
  16. D7 = 0110011110001111010101010110
  17. C8 = 0010101010111111110000110011
  18. D8 = 1001111000111101010101011001
  19. C9 = 0101010101111111100001100110
  20. D9 = 0011110001111010101010110011
  21. C10 = 0101010111111110000110011001
  22. D10 = 1111000111101010101011001100
  23. C11 = 0101011111111000011001100101
  24. D11 = 1100011110101010101100110011
  25. C12 = 0101111111100001100110010101
  26. D12 = 0001111010101010110011001111
  27. C13 = 0111111110000110011001010101
  28. D13 = 0111101010101011001100111100
  29. C14 = 1111111000011001100101010101
  30. D14 = 1110101010101100110011110001
  31. C15 = 1111100001100110010101010111
  32. D15 = 1010101010110011001111000111
  33. C16 = 1111000011001100101010101111
  34. D16 = 0101010101100110011110001111

Теперь мы можем получить новый ключ для n-го раундаKn( 1<=n<=16)A. В частности, для каждой пары дочерних ключейCnDnВыполните преобразование в соответствии с таблицей ПК-2:

  1.                               PC-2
  2.  
  3.                  14    17   11    24     1    5
  4.                   3    28   15     6    21   10
  5.                  23    19   12     4    26    8
  6.                  16     7   27    20    13    2
  7.                  41    52   31    37    47   55
  8.                  30    40   51    45    33   48
  9.                  44    49   39    56    34   53
  10.                  46    42   50    36    29   32

Каждая пара дочерних ключей имеет 56 бит, но ПК-2 использует только 48 из них.

Итак, новый ключ для n-го тураKn№ 1С помощью комбинаторного ключаCnDn14-е, 2-е от 17-го и т. Д., Зная, что 48-й новый ключ – это 32-й из комбинированного ключа.

Например, для комбинированного ключа первого раунда имеем:

  1. C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110

После преобразования ПК-2 получаем:

  1. K1 = 000110 110000 001011 101111 111111 000111 000001 110010

Аналогично для других ключей:

  1. K2 = 011110 011010 111011 011001 110110 111100 100111 100101
  2. K3 = 010101 011111 110010 001010 010000 101100 111110 011001
  3. K4 = 011100 101010 110111 010110 110110 110011 010100 011101
  4. K5 = 011111 001110 110000 000111 111010 110101 001110 101000
  5. K6 = 011000 111010 010100 111110 010100 000111 101100 101111
  6. K7 = 111011 001000 010010 110111 111101 100001 100010 111100
  7. K8 = 111101 111000 101000 111010 110000 010011 101111 111011
  8. K9 = 111000 001101 101111 101011 111011 011110 011110 000001
  9. K10 = 101100 011111 001101 000111 101110 100100 011001 001111
  10. K11 = 001000 010101 111111 010011 110111 101101 001110 000110
  11. K12 = 011101 010111 000111 110101 100101 000110 011111 101001
  12. K13 = 100101 111100 010111 010001 111110 101011 101001 000001
  13. K14 = 010111 110100 001110 110111 111100 101110 011100 111010
  14. K15 = 101111 111001 000110 001101 001111 010011 111100 001010
  15. K16 = 110010 110011 110110 001011 000011 100001 011111 110101

На этом завершается тема подразделов. Давайте посмотрим на само сообщение.

:/>  Иконки для рабочего стола Windows: XP, Vista, 7, 8, 10

Шаг 2: зашифруйте каждый 64-битный блок данных

Для незашифрованных данных M вычисляем начальное преобразование IP (Initial permutation). IP генерируется путем повторного преобразования каждого бита данных M. Процесс генерации определяется следующей таблицей. Индекс таблицы соответствует индексу новых данных. Значение х в таблице указывает, что новые данные поступают из x-го бита старых данных.

  1.                              IP
  2.  
  3.             58    50   42    34    26   18    10    2
  4.             60    52   44    36    28   20    12    4
  5.             62    54   46    38    30   22    14    6
  6.             64    56   48    40    32   24    16    8
  7.             57    49   41    33    25   17     9    1
  8.             59    51   43    35    27   19    11    3
  9.             61    53   45    37    29   21    13    5
  10.             63    55   47    39    31   23    15    7

Ссылаясь на таблицу выше, 58-е место М становится первым местом IP, 50-е место М становится вторым местом IP, а 7-е место М становится последним местом IP.

Например, выполняя начальное преобразование для блока М, мы получаем:

  1. = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
  2. IP = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010

Здесь 58-й бит М равен 1, который становится первым битом IP. 50-й бит М равен 1, который становится вторым битом IP. Седьмой бит М равен 0, что становится последним битом IP.

Следующим шагом является преобразование IP в 32-битную левую половину.L032-битная правая половинаR0 。

Например, для приведенного выше примера мы получаем:

  1. L0 = 1100 1100 0000 0000 1100 1100 1111 1111 
  2. R0 = 1111 0000 1010 1010 1111 0000 1010 1010

Затем мы выполним 16 итераций.1<=n<=16Используйте функцию f. Функция f занимает два блока: 32-битный блок данных и 48-битный блок ключей.Kn -Выход 32-битного блока. Определение означает XOR. Итак, давайте п цикл от 1 до 16, мы рассчитаем

Ln = Rn-1 

Rn = Ln-1   f(Rn-1,Kn)

Таким образом, мы получаем последний блок, которыйn= 16L16R16, Этот процесс прост, мы берем правильные 32 бита результата предыдущей итерации как левые 32 бита текущей итерации. Для правых 32 битов текущей итерации, XOR это с выводом функции f предыдущей итерации.

Например, для n = 1 имеем:

  1. K1 = 000110 110000 001011 101111 111111 000111 000001 110010 
  2. L1 = R0 = 1111 0000 1010 1010 1111 0000 1010 1010 
  3. R1 = L0   f(R0,K1)

Остальное как работает функция f. Чтобы вычислить f, мы сначала расширим каждыйRn-1Чтобы расширить его с 32-разрядного до 48-разрядного. Это повторяется с помощью таблицыRn-1Некоторые биты реализованы.

Определите E как вывод функции E и запишите его в 8 групп по 6 бит в каждой. Эти биты генерируются путем выбора определенных битов ввода, и конкретный порядок выбора реализуется следующим образом:

  1.                     E BIT-SELECTION TABLE
  2.  
  3.                  32     1    2     3     4    5
  4.                   4     5    6     7     8    9
  5.                   8     9   10    11    12   13
  6.                  12    13   14    15    16   17
  7.                  16    17   18    19    20   21
  8.                  20    21   22    23    24   25
  9.                  24    25   26    27    28   29
  10.                  28    29   30    31    32    1

Другими словамиE(Rn-1) Первые три бита отRn-132-е, 1-е и 2-е место.E(Rn-12 бита в конце взяты изRn-132-й и 1-й.

Например, учитываяR0 Мы можем рассчитатьE(R0) :

  1. R0 = 1111 0000 1010 1010 1111 0000 1010 1010 
  2. E(R0) = 011110 100001 010101 010101 011110 100001 010101 010101

(Обратите внимание, что каждые 4 бита ввода расширяются до каждых 6 битов вывода.)

Затем в функции f мы берем выводE(Rn-1) И секретный ключKnВыполните операцию XOR:

Kn   E(Rn-1)

Например,K1 , E(R0)И у нас есть:

  1. K1 = 000110 110000 001011 101111 111111 000111 000001 110010 
  2. E(R0) = 011110 100001 010101 010101 011110 100001 010101 010101 
  3. K1 E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111.

На данный момент мы не завершили вычисление функции f, мы просто используем таблицу дляRn-1 Расширены с 32-х бит до 48-бит, а результат и ключKnОперация XOR была выполнена.

:/>  Process Monitor - мониторинг активности процессов | Блог по Windows

Теперь у нас есть 48-битные результаты или 8 наборов 6-битных данных. Теперь мы хотим выполнить некоторые странные операции с 6 битами каждой группы: мы используем его в качестве адреса таблицы, называемой «S-блок». Каждый набор из 6 битов даст нам адрес в отдельном S-блоке.

Запишите 48-битный результат предыдущего шага следующим образом:

Kn   E(Rn-1) =B1B2B3B4B5B6B7B8,

каждыйBi Это 6-битный пакет, теперь мы рассчитываем

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)

Среди нихSi(Bi) Относится к выводу i-го блока S.

Для вычисления каждой функции SS1, S2,…, S8Возьмите 6-битный блок в качестве входного и выходного 4-битного блока. решитьS1Форма выглядит следующим образом:

  1.                              S1
  2.  
  3.                         Column Number
  4. Row
  5. No.      1   2  3   4  5   6  7   8  9  10 11  12 13  14 15
  6.  
  7.      14  4  13  1   2 15  11  8   3 10   6 12   5  9     7
  8.   1     15   7  4  14  2  13  1  10  6  12 11   9  5   3  8
  9.   2    4  1  14  8  13  6   2 11  15 12   9  7   3 10   5  
  10.   3   15 12   8  2   4  9   1  7   5 11   3 14  10     6 13

еслиS1 Является ли функция, определенная в этой таблице, B является 6-битным блоком, то вычислениеS1(B) Метод заключается в следующем: двоичное число в сочетании с первой и последней цифрами B определяет десятичное число от 0 до 3 (или от 00 до 11 двоичного числа).

Пусть это число будет я. Среднее 4-значное двоичное число B представляет собой десятичное число от 0 до 15 (двоичное от 0000 до 1111). Пусть это число будет j. Просмотрите таблицу, чтобы найти число в строке i и столбце j, которое является числом от 0 до 15, и оно можетЕдинственный 4-битный блок представлен.

Этот блок является функциейS1 Выход из входа BS1(B), Например, для вводаB = 011011 Первая цифра 0, а последняя цифра 1, что определяет, что номер строки – 01, что равно 1 в десятичном виде.

Средние 4 цифры – 1101, что означает 13 в десятичном виде, поэтому номер столбца – 13. Взглянув на первый ряд и 13-й столбец таблицы, мы получим число 5. Это определяет выход, 5 – двоичный 0101, поэтому выход – 0101. То естьS1(011011) = 0101。

Аналогично, определите эти 8 функцийS1,…,S8Таблица выглядит так:

  1.                                   S1
  2.  
  3.      14  4  13  1   2 15  11  8   3 10   6 12   5  9     7
  4.        15   7  4  14  2  13  1  10  6  12 11   9  5   3  8
  5.       4  1  14  8  13  6   2 11  15 12   9  7   3 10   5  
  6.      15 12   8  2   4  9   1  7   5 11   3 14  10     6 13
  7.                                   S2
  8.  
  9.      15  1   8 14   6 11   3  4   9  7   2 13  12     5 10
  10.       3 13   4  7  15  2   8 14  12     1 10   6  9  11  5
  11.        14   7 11  10  4  13  1   5  8  12  6   9  3   2 15
  12.      13  8  10  1   3 15   4  2  11  6   7 12     5  14  9
  13.                                   S3
  14.  
  15.      10     9 14   6  3  15  5   1 13  12  7  11  4   2  8
  16.      13  7     9   3  4   6 10   2  8   5 14  12 11  15  1
  17.      13  6   4  9   8 15   3    11  1   2 12   5 10  14  7
  18.       1 10  13     6  9   8  7   4 15  14  3  11  5   2 12
  19.                                   S4
  20.  
  21.       7 13  14  3     6   9 10   1  2   8  5  11 12   4 15
  22.      13  8  11  5   6 15     3   4  7   2 12   1 10  14  9
  23.      10  6   9    12 11   7 13  15  1   3 14   5  2   8  4
  24.       3 15     6  10  1  13  8   9  4   5 11  12  7   2 14
  25.                                   S5
  26.  
  27.       2 12   4  1   7 10  11  6   8  5   3 15  13    14  9
  28.      14 11   2 12   4  7  13  1   5    15 10   3  9   8  6
  29.       4  2   1 11  10 13   7  8  15  9  12  5   6  3    14
  30.      11  8  12  7   1 14   2 13   6 15     9  10  4   5  3
  31.                                  S6
  32.  
  33.      12  1  10 15   9  2   6  8    13   3  4  14  7   5 11
  34.      10 15   4  2   7 12   9  5   6  1  13 14    11   3  8
  35.       9 14  15  5   2  8  12  3   7     4 10   1 13  11  6
  36.       4  3   2 12   9  5  15 10  11 14   1  7   6     8 13
  37.                                  S7
  38.  
  39.       4 11   2 14  15     8 13   3 12   9  7   5 10   6  1
  40.      13    11  7   4  9   1 10  14  3   5 12   2 15   8  6
  41.       1  4  11 13  12  3   7 14  10 15   6  8     5   9  2
  42.       6 11  13  8   1  4  10  7   9  5    15  14  2   3 12
  43.                                  S8
  44.  
  45.      13  2   8  4   6 15  11  1  10  9   3 14   5    12  7
  46.       1 15  13  8  10  3   7  4  12  5   6 11    14   9  2
  47.       7 11   4  1   9 12  14  2     6  10 13  15  3   5  8
  48.       2  1  14  7   4 10   8 13  15 12   9     3  5   6 11

Пример: для первого раунда мы получаем выходные данные этих 8 S-блоков:

:/>  В Windows 10 не работает кнопка Пуск: почему не открывается меню пуск – WindowsTips.Ru. Новости и советы

K1   E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111.

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0101 1100 1000 0010 1011 0101 1001 0111

Последний шаг функции f – выполнить преобразование на выходе блока S для получения окончательного значения:

f = P(S1(B1)S2(B2)…S8(B8))

Преобразование P определяется следующей таблицей. P вводит 32-битные данные и генерирует 32-битный вывод, подписываясь:

  1.                                 P
  2.  
  3.                          16   7  20  21
  4.                          29  12  28  17
  5.                           1  15  23  26
  6.                           5  18  31  10
  7.                           2   8  24  14
  8.                          32  27   3   9
  9.                          19  13  30   6
  10.                          22  11   4  25

Например, для вывода 8 S-блоков:

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0101 1100 1000 0010 1011 0101 1001 0111

Мы получаем

f = 0010 0011 0100 1010 1010 1001 1011 1011

Ну,

R1 = L0   f(R0 , K1 )

= 1100 1100 0000 0000 1100 1100 1111 1111 
0010 0011 0100 1010 1010 1001 1011 1011 
= 1110 1111 0100 1010 0110 0101 0100 0100

На следующей итерации нашL2 = R1Это результат, который мы только что рассчитали. После этого мы должны рассчитатьR2 =L1  f(R1, K2)

R16L16

Затем выполните окончательное преобразование IP-1 Его определение показано в следующей таблице:

  1.                              IP-1
  2.  
  3.             40     8   48    16    56   24    64   32
  4.             39     7   47    15    55   23    63   31
  5.             38     6   46    14    54   22    62   30
  6.             37     5   45    13    53   21    61   29
  7.             36     4   44    12    52   20    60   28
  8.             35     3   43    11    51   19    59   27
  9.             34     2   42    10    50   18    58   26
  10.             33     1   41     9    49   17    57   25

То есть первый бит вывода этого преобразования является 40-м битом ввода, а второй бит является 8-м битом ввода, пока 25-й бит ввода не будет использован в качестве последнего бита вывода.

Например, если мы используем вышеуказанный метод, чтобы получить левый и правый два блока 16-го раунда:

  1. L16 = 0100 0011 0100 0010 0011 0010 0011 0100 
  2. R16 = 0000 1010 0100 1100 1101 1001 1001 0101

Мы меняем два блока и затем выполняем окончательное преобразование:

  1. R16L16 = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100
  2. IP-1 = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101

Написано в шестнадцатеричном формате, чтобы получить:

  1. 85E813540F0AB405

Это открытый текстM = 0123456789ABCDEFЗашифрованная формаC = 85E813540F0AB405。

Дешифрование – это обратный процесс шифрования. Вышеуказанные шаги выполняются, но в 16 итерациях позиции левого и правого подразделов меняются местами.

Оставьте комментарий

Adblock
detector