Методы и средства защиты информации
.pdfСтандарт шифрованияданных DES 411
Цифровая (электронная)
подпись на основе криптосистемы RSA
Асимметричная криптография позволяет принципиально решить задачу подтверждения истинности электронного документа. Эта возможность основана на том, что зашифровать данные, используя секретный ключ d вместо открытого ключа e может только тот, кому секретный ключ известен. При этом существует возможность проверки применения секретного ключа к данным без его раскрытия.
Действительно, пусть нам необходимо заверить блок m открытого текста. Сам открытый текст не является секретным. Зашифруем m используя d вместо e: с = m d(mоd n) . Отправим сообщение двойной длины вида m||c. Получатель имеет возможность проверить нашу подпись, поскольку после возведения c в степень e должно получаться значение s = m (при истинной подписи) и значение
s ¹ m |
в противном случае. Для нашего примера m =(3, 1, 2) |
, |
c = (27, 1, 8), m || с = (3, 1, 2, 27, 1, 8). |
|
На практике удвоение длины сообщения, очевидно, является нежелательным. Это является одной из причин, по которым вместо c = m d(mod n) используются данные вида c = (h(m)) d(mod n) . Здесь функция h, называемая хеш- функцией, отображает сообщения произвольной длины в короткие блоки фиксированной длины, причем так, что кроме блока m подобрать другой блок z со свойством h(m) = h(z) практически невозможно.
Стандарт шифрования данных DES
Стандарт шифрования данных (DES — Data Encryption Standard) принят в США в 1977 году в качестве федерального. В стандарт входит описание блочного шифра типа шифра Файстеля, а также различных режимов его работы, как составной части нескольких процедур криптографического преобразования данных. Обычно под аббревиатурой DES понимается именно блочный шифр, который в стандарте соответствует процедуре шифрования в режиме электронной кодовой книги (ECB — Е1есtrоnic Соdеbооk Моdе). Название вызвано тем, что любой блочный шифр является простым подстановочным шифром и в этом отношении подобен кодовой книге.
Принцип работы блочного шифра
Рассмотрим принцип работы блочного шифра. Входом в блочный шифр и результатом его работы является блок длины n — последовательность, состоящая из n бит. Число n постоянно. При необходимости шифрования сообщения длиной, большей n, оно разбивается на блоки, каждый из которых шифруется отдельно. Различные режимы работы связаны с дополнительными усложнениями блочного шифра при переходах от блока к блоку. В стандарте DES длина блока n = 64.
412Глава 18. Криптографическая защита
Врежиме ECB шифрование блока открытого текста В производится за 16 однотипных итераций, именуемых циклами. Схема преобразования приведена на рис. 18.7. Блок рассматривается как конкатенация ( сцепление) двух подблоков
равной длины: B = (L , R). На каждом цикле применяется свой ключ (Xi), обычно вырабатываемый из некоторого основного ключа ( X). Ключи, используемые в циклах, называются подключами.
Основным элементом шифра является несекретная цикловая функция вида
Y = f(R,X) . Входом в цикл является выход из предыдущего цикла. Если упомянутый вход имеет вид (L, R), то выход имеет вид (R, L Å f(R, X)), где Å — по-
разрядное сложение по модулю 2. Например, для выхода цикла с номером i это означает: Ri = Li-1 Å f(Ri-1, Xi), Li = Ri-1 (i = 1,…,16).
В режиме ЕСВ алгоритм DES зашифровывает 64-битовый блок за 16 циклов. Биты входного блока перед первым циклом переставляются в соответствии с табл. 18.1 в ходе так называемой начальной перестановки ( IP — initial permutation). После выхода из последнего цикла L и R переставляются местами, после чего соединяются в блок. Биты полученного блока снова переставляются в соответствии с перестановкой IP-1, обратной начальной. Результат принимается в качестве блока шифртекста.
414 Глава 18. Криптографическая защита
На каждом цикле ( рис. 18.8) из
ключа X длиной 56 бит формируется ключ Xi размером 48 бит. Сам ключ X размещается в восьмибайтовом слове, причем восьмые разряды каждого
байта являются контрольными и в ключ не входят. Перед шифрованием, в соответствии с процедурой выбора PC1 (табл. 18.2), из X выбираются 56
бит, которыми заполняются два реги-
стра (C и D) длиной 28 бит каждый. В дальнейшем, при входе в очередной цикл с номером i, регистры сдвигают-
ся циклически влево. Величина сдвига зависит от номера цикла, но является фиксированной и заранее известна. После сдвига оба подблока объеди-
няются в порядке (C, D). Затем, в со-
ответствии с функцией выбора PC2 (табл. 18.3), из них выбираются 48 бит подключа Xi. Шифрование и расшифровывание отличаются направлением сдвигов
(табл. 18.4).
Таблица 18.2. Преобразование PC1
Заполнение С |
|
|
|
|
Заполнение D |
|
|
|
|
||||
57 |
49 |
41 |
33 |
25 |
17 |
9 |
63 |
55 |
47 |
39 |
31 |
23 |
15 |
1 |
58 |
50 |
42 |
34 |
26 |
18 |
7 |
62 |
54 |
46 |
38 |
30 |
22 |
10 |
2 |
59 |
51 |
43 |
35 |
27 |
14 |
6 |
61 |
53 |
45 |
37 |
29 |
19 |
11 |
3 |
60 |
52 |
44 |
36 |
21 |
13 |
5 |
28 |
20 |
12 |
4 |
Таблица 18.3. Преобразование PC2
14 |
17 |
11 |
24 |
1 |
5 |
3 |
28 |
15 |
6 |
21 |
10 |
23 |
19 |
12 |
4 |
26 |
8 |
16 |
7 |
27 |
20 |
13 |
2 |
41 |
52 |
31 |
37 |
47 |
55 |
30 |
40 |
51 |
45 |
33 |
48 |
44 |
49 |
39 |
56 |
34 |
53 |
46 |
42 |
50 |
36 |
29 |
32 |
Выбор битов по таблицам 18.2–18.4 из соответствующих блоков производится следующим образом. Таблица рассматриваетсякак последовательностьее строк, записанных друг за другом, начиная с первой строки. Биты блока данных соответствующей длины нумеруютсяслева направо, начиная с единицы. Каждый элемент
Стандарт шифрованияданных DES 415
s таблицы рассматривается, как номер бита bs в блоке данных. Преобразование заключаетсяв замене всех элементовs на биты bs.
Таблица 18.4. Соответствие сдвигов номерам циклов DES
Номер цикла |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Сдвиг влево |
1 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
(шифрование) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сдвиг вправо |
1 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
1 |
(расшифровывание) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Цикловая функция производит следующие действия.
1.Расширение блока Ri-1 до 48 бит за счет повторения битов блока с помощью функции расширения EP (табл. 18.5).
2.Поразрядное сложение результата с ключом Xi.
3.Преобразование полученной суммы с помощью замены (используя так называемые S-блоки), в результате которого получается блок длиной 32 бит.
4. Применение |
перестановки |
P ( |
табл. 18.6), |
что |
дает |
значение |
функции |
|||||||||||
Y = f(R,X). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Таблица 18.5. Преобразование EP |
|
Таблица 18.6. Перестановка P |
|
|
||||||||||||||
32 |
1 |
|
2 |
3 |
4 |
|
5 |
|
|
16 |
7 |
20 |
21 |
29 |
12 |
|
28 |
17 |
4 |
5 |
|
6 |
7 |
8 |
|
9 |
|
|
1 |
15 |
23 |
26 |
5 |
18 |
|
31 |
10 |
8 |
9 |
|
10 |
11 |
12 |
|
13 |
|
|
2 |
8 |
24 |
14 |
32 |
27 |
|
3 |
9 |
12 |
13 |
|
14 |
15 |
16 |
|
17 |
|
|
19 |
13 |
30 |
6 |
22 |
11 |
|
4 |
25 |
16 |
17 |
|
18 |
19 |
20 |
|
21 |
|
|
|
|
|
|
|
|
|
|
|
20 |
21 |
|
22 |
23 |
24 |
|
25 |
|
|
|
|
|
|
|
|
|
|
|
24 |
25 |
|
26 |
27 |
28 |
|
29 |
|
|
|
|
|
|
|
|
|
|
|
28 |
29 |
|
30 |
31 |
32 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
Механизм действия S-блоков
Преобразование, с помощью которого48-разрядный блок преобразуетсяв 32разрядный, сводитсяк выборке восьми тетрад из 8 таблиц (S-блоков) размером4 × 16 ( табл. 18.7). Из каждогоSблока выбирается одна тетрада. Для этого 48разрядныйблок делится последовательнона 8 комбинацийпо 6 бит каждая. Первая комбинация(слева) является входом в первыйS-блок, вторая— во второй и т.д. При этом первый и последний биты комбинации задают номер строки, а остальные 4 бита — номер столбца S-блока, на пересечении которых расположена соответствующая тетрада. Конкретные значения Si (i = 1, …, 8 ) представлены в табл. 18.7.
Таблица 18.7. Таблицы S -блоков для DES
|
|
|
|
|
|
|
|
Стандарт шифрованияданных DES |
417 |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
4 |
11 |
2 |
14 |
15 |
0 |
8 |
13 |
3 |
32 |
9 |
7 |
5 |
10 |
6 |
1 |
|
1 |
13 |
0 |
11 |
7 |
4 |
9 |
1 |
10 |
14 |
3 |
5 |
12 |
2 |
15 |
8 |
6 |
|
2 |
1 |
4 |
11 |
13 |
12 |
3 |
7 |
14 |
10 |
15 |
6 |
8 |
0 |
5 |
9 |
2 |
|
3 |
6 |
11 |
13 |
8 |
1 |
4 |
10 |
7 |
9 |
5 |
0 |
15 |
14 |
2 |
3 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S8 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
0 |
13 |
2 |
8 |
4 |
6 |
15 |
11 |
1 |
10 |
9 |
3 |
14 |
5 |
0 |
12 |
7 |
|
1 |
1 |
15 |
13 |
8 |
10 |
3 |
7 |
4 |
12 |
5 |
6 |
11 |
0 |
14 |
9 |
2 |
|
2 |
7 |
11 |
4 |
1 |
9 |
12 |
14 |
2 |
0 |
6 |
10 |
13 |
15 |
3 |
5 |
8 |
|
3 |
2 |
1 |
14 |
7 |
4 |
10 |
8 |
13 |
15 |
12 |
9 |
0 |
3 |
5 |
6 |
11 |
Пример реализации алгоритма DES представлен в листингах 18.3 и 18.4 (компилятор — PowerBasic).
Листинг 18.3. Пример реализации
алгоритма DES на языке Basic для шифрования файлов
$CPU 80386
$FLOAT NPX $OPTIMIZE SPEED $LIB ALL-
$OPTION CNTLBREAK ON
DECLARE FUNCTION MYBIN$ (n%)
DECLARE FUNCTION desalg$ (a$)
DECLARE SUB f (i%, a%(), x%())
DECLARE SUB transpose (datax%(), T%(), n%)
DECLARE SUB mrotate (keyx%())
DECLARE SUB stob (a$, mbits%())
DECLARE SUB btos (mbits%(), a$)
DECLARE SUB letbe (target%(), source%(), LAST%)
DECLARE SUB init (x() AS INTEGER, n%)
DECLARE SUB sboxinit (b() AS INTEGER)
DECLARE SUB xtob (a$, mbits%())
DIM s(1 TO 8, 1 TO 64) AS shared INTEGER
418 Глава 18. Криптографическая защита
Продолжение листинга 18.3
' Инициализация
RESTORE InitialTrl
DIM InitialTr(1 TO 64) AS shared INTEGER init InitialTr(), 64
RESTORE FinalTrl
DIM FinalTr(1 TO 64) AS shared INTEGER init FinalTr(), 64
RESTORE swappyl
DIM swappy(1 TO 64) AS shared INTEGER init swappy(), 64
RESTORE KeyTr1l
DIM KeyTr1(1 TO 56) AS shared INTEGER init KeyTr1(), 56
RESTORE KeyTr2l
DIM KeyTr2(1 TO 48) AS shared INTEGER init KeyTr2(), 48
RESTORE etrl
DIM etr(1 TO 48) AS shared INTEGER init etr(), 48
RESTORE ptrl
DIM ptr(1 TO 32) AS shared INTEGER init ptr(), 32
sboxinit s()
RESTORE rotsl
DIM rots(1 TO 16) AS shared INTEGER init rots(), 16
DIM XR(1 TO |
56) |
AS |
shared INTEGER |
|||
DIM EF(1 |
TO |
64) |
AS |
shared |
INTEGER |
|
DIM |
ikeyf(1 |
TO 64) |
AS shared INTEGER |
|||
DIM |
yf(1 |
TO |
64) |
AS |
shared |
INTEGER |
Стандарт шифрованияданных DES 419
Продолжение листинга 18.3
DIM ades(1 TO 64) AS shared INTEGER
DIM bdes(1 TO 64) AS shared INTEGER
DIM xdes(1 TO 64) AS shared INTEGER
DIM |
XT(1 |
TO |
64) |
AS |
shared |
INTEGER |
DIM |
P2(1 |
TO |
64) |
AS |
shared |
INTEGER |
' Главная программа main:
CLS
parm$ = ltrim$(rtrim$(COMMAND$))+" " IF LEN(parm$) > 1 THEN
Plainf$ = LTRIM$(RTRIM$(LEFT$(parm$, INSTR(parm$, " ")))) PRINT "Исходный файл : "; Plainf$
ELSE
INPUT "Исходный файл : ", plainf$ END IF
if len(plainf$)=0 then
print : print "СБОЙ: введите имя файла!" system
end if
OPEN plainf$ FOR RANDOM AS 1 lof1& = LOF(1)
IF lof1& = 0 THEN CLOSE #1
KILL plainf$
PRINT : PRINT "Файл не найден!"; SYSTEM
ELSE
IF lof1& > 9999999 THEN PRINT : PRINT "Исходный файл слишком велик!": SYSTEM
CLOSE #1
OPEN plainf$ for binary access read as #1 END IF
cipherf$ = "" sp0% = 0: sp% = 0 DO
sp0% = sp%
sp% = INSTR(sp% + 1, plainf$, "\")
420 Глава 18. Криптографическая защита
Продолжение листинга 18.3
LOOP WHILE sp% > 0
bplainf$ = RIGHT$(plainf$, LEN(plainf$) - (sp0%)) PRINT "Сохраняемое имя файла: "; bplainf$
pp% = INSTR(sp0% + 1, plainf$, ".") IF pp% = 0 THEN
dcipherf$ = plainf$ + ".DES" ELSE
dcipherf$ = LEFT$(plainf$, pp% - 1) + ".DES" END IF
PRINT " По умолчанию : "; dcipherf$ INPUT "Выходной файл : ", cipherf$
IF cipherf$ = "" THEN cipherf$ = dcipherf$ OPEN cipherf$ FOR RANDOM AS 2
IF LOF(2) > 0 THEN CLOSE #2
PRINT : PRINT "Выходной файл уже существует!" SYSTEM
ELSE CLOSE #2
OPEN cipherf$ FOR binary AS 2 END IF
PW$ = ""
LOCATE 9, 1
INPUT ; " Пароль : ", PW$
IF (LEN(PW$) < 8) THEN PW$ = PW$ + STRING$(8 - LEN(PW$), 0)
IF len(pw$) = 16 then
LOCATE 9, 8: PRINT Пароль" : "; STRING$(16, 15); STRING$(10, " ") PW$ = ucase$(PW$)
xtob PW$, P2()
ELSE
LOCATE 9, 8: PRINT Пароль" : "; STRING$(8, 15); STRING$(10, " ") PW$ = LEFT$(PW$, 8)
stob PW$, P2()
end IF