Главная страница

Методы и средства защиты информации. Внимание!!! В книге могут встречаться существенные ошибки (в рисунках и формулах). Они не связаны ни со


Скачать 4.86 Mb.
НазваниеВнимание!!! В книге могут встречаться существенные ошибки (в рисунках и формулах). Они не связаны ни со
АнкорМетоды и средства защиты информации.pdf
Дата17.08.2018
Размер4.86 Mb.
Формат файлаpdf
Имя файлаМетоды и средства защиты информации.pdf
ТипДокументы
#23118
страница55 из 63
1   ...   51   52   53   54   55   56   57   58   ...   63
Глава
18.
Криптографическая
защита
Продолжение
листинга
18.4
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 cipherf$ = LTRIM$(RTRIM$(LEFT$(parm$, INSTR(parm$, " "))))
PRINT "
Имя зашифрованного файла
: "; cipherf$
ELSE
INPUT "
Имя расшифрованного файла
: ", cipherf$
END IF if len(cipherf$)=0 then print : print "
СБОЙ
: введите имя файла
!" system end if
OPEN cipherf$ FOR RANDOM AS 1 lof1& = LOF(1)
IF lof1& = 0 THEN
CLOSE #1
KILL cipherf$
PRINT : PRINT "
Файл не найден
!";
SYSTEM
ELSE
CLOSE #1
OPEN cipherf$ for binary access read as #1
END IF
PW$ = ""
LOCATE 6, 1
INPUT "
Пароль
: ", PW$
IF (LEN(PW$) < 8) THEN PW$ = PW$ + STRING$(8 - LEN(PW$), 0)
IF len(pw$) = 16 then
LOCATE 6, 1: PRINT "
Пароль
: ";
STRING$(16, 15); STRING$(10, " ")

Стандарт
шифрования
данных
DES
431
Продолжение
листинга
18.4
PW$ = ucase$(PW$) xtob PW$, P2()
ELSE
LOCATE 6, 1: PRINT "
Пароль
: ";
STRING$(8, 15); STRING$(10, " ")
PW$ = LEFT$(PW$, 8) stob PW$, P2()
END IF
PRINT "
Проверка пароля
: "; transpose P2(), KeyTr1(), 56 get$ #1,24,cheader$ header$ = desalg$(LEFT$(cheader$, 8))
IF NOT (LEFT$(header$, 3) = "DES") THEN
PRINT "
Неверен
!": PRINT : PRINT "
Неправильный пароль или "; cipherf$; " не является зашифрованным файлом
!"
SYSTEM
ELSE
PRINT "
Верен
!"
END IF
PRINT "
Проверка длины файла
:"; header$ = header$ + desalg$(MID$(cheader$, 9, 8)) header$ = header$ + desalg$(RIGHT$(cheader$, 8)) pl% = INSTR(header$, "#") le$ = MID$(header$, pl% + 1, (11 - pl%)) lf& = VAL(le$) ev& = lf& + 24
IF (ev& MOD 8) THEN ev& = ev& + 8 - (ev& MOD 8) rescue% = 0
IF (ev& <> lof1&) THEN
PRINT "
Неверна
!! (
возможна потеря данных
)"
PRINT "
Длина исходного файла
:"; lf&
PRINT "
Длина указанного файла
:"; lof1&
PRINT "
Длина файла должна быть
:"; ev&
INPUT ; "
Попытаться восстановить
? (y/n) : ", q$:
IF (INSTR(q$, "N") OR (INSTR(q$, "n"))) THEN SYSTEM rescue% = 4: PRINT
ELSE
PRINT lf&; ",
Верна
!"
END IF

432
Глава
18.
Криптографическая
защита
Продолжение
листинга
18.4 pl% = INSTR(12, header$, "#") oldplainf$ = RIGHT$(header$, 24 - pl%)
PRINT "
Имя исходного файла
: "; oldplainf$;
OPEN oldplainf$ FOR RANDOM AS 2
IF INSTR(oldplainf$, ".") THEN
PRINT " ([*.*] ";
ELSE
PRINT " ([*] ";
END IF
IF LOF(2) > 0 THEN PRINT "
уже есть в
каталоге ";
PRINT ")"
CLOSE #2 plainf$ = ""
INPUT "
Имя выходного файла
: ", plainf$
IF plainf$ = "" THEN plainf$ = oldplainf$ plainf$ = RTRIM$(LTRIM$(plainf$))
IF INSTR(plainf$, "*.") THEN
IF INSTR(oldplainf$, ".") THEN plainf$ = LEFT$(plainf$, INSTR(plainf$, "*.") - 1) +
LEFT$(oldplainf$, INSTR(oldplainf$, ".")) + RIGHT$(plainf$,
LEN(plainf$) - INSTR(plainf$, "*.") - 1)
ELSE plainf$ = LEFT$(plainf$, INSTR(plainf$, "*.") - 1) + oldplainf$ + RIGHT$(plainf$, LEN(plainf$) - INSTR(plainf$,
"*."))
END IF
END IF
IF (RIGHT$(plainf$, 1) = "*") THEN
IF plainf$ = "*" THEN plainf$ = oldplainf$
ELSE
IF (MID$(plainf$, LEN(plainf$) - 1, 1) = ".") THEN plainf$ = LEFT$(plainf$, INSTR(plainf$, ".") - 1) +
RIGHT$(oldplainf$, LEN(oldplainf$) -
INSTR(oldplainf$, ".") + 1)
ELSE plainf$ = LEFT$(plainf$, LEN(plainf$) - 1) + oldplainf$
END IF
END IF
END IF
IF RIGHT$(plainf$, 1) = "\" THEN plainf$ = plainf$ + oldplainf$

Стандарт
шифрования
данных
DES
433
Продолжение
листинга
18.4
OPEN plainf$ FOR RANDOM AS 2
IF LOF(2) > 0 THEN
CLOSE #2
PRINT : PRINT "
Уже есть файл с
таким именем
!"
SYSTEM
ELSE
CLOSE #2
OPEN plainf$ FOR BINARY AS 2
END IF plaintekst$ = "" blocks& = (LOF(1) \ 8) - 3
LOCATE rescue% + 11, 21: PRINT ; "
Расшифровывание
: 0 %"; bigblocks&=(blocks&-1) \ 32 large$=space$(256)
FOR m& = 1 TO bigblocks& outblock$="" get$ #1,256,large$ for o%=1 to 256 step 8 outblock$=outblock$+desalg$(mid$(large$,o%,8)) next put$ #2,outblock$
LOCATE rescue% + 11, 32: PRINT ; USING "###"; (m& /
(bigblocks&+1)) * 100; next
FOR n& = (bigblocks&*32)+1 TO blocks& - 1
GET$ #1,8,ciphertekst$ plaintekst$ = desalg$(ciphertekst$)
PUT$ #2, plaintekst$
LOCATE rescue% + 11, 32: PRINT ; USING "###"; (n& / blocks&) *
100;
NEXT n& get$ #1,8,ciphertekst$ if len(ciphertekst$) > 0 then plaintekst$ = desalg$(ciphertekst$)
IF rescue% THEN last$ = plaintekst$
ELSE

434
Глава
18.
Криптографическая
защита
Продолжение
листинга
18.4 last$ = LEFT$(plaintekst$, lf& + 32 - LOF(1))
END IF
IF LEN(last$) > 0 THEN
PUT$ #2, last$
END IF end if
CLOSE
LOCATE 11 + rescue%, 32: PRINT "100 % готово ": PRINT
IF rescue% THEN
PRINT "
Попытайтесь другим способом расшифровать этот файл
."
ELSE
PRINT "
Расшифровывание по алгоритму
DES завершено
."
END IF
SYSTEM
'
Данные и
функции
InitialTrl:
DATA 58,50,42,34,26,18,10,02,60,52,44,36,28,20,12,04
DATA 62,54,46,38,30,22,14,06,64,56,48,40,32,24,16,08
DATA 57,49,41,33,25,17,09,01,59,51,43,35,27,19,11,03
DATA 61,53,45,37,29,21,13,05,63,55,47,39,31,23,15,07
FinalTrl:
DATA 40,08,48,16,56,24,64,32,39,07,47,15,55,23,63,31
DATA 38,06,46,14,54,22,62,30,37,05,45,13,53,21,61,29
DATA 36,04,44,12,52,20,60,28,35,03,43,11,51,19,59,27
DATA 34,02,42,10,50,18,58,26,33,01,41,09,49,17,57,25 swappyl:
DATA 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48
DATA 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
DATA 01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16
DATA 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
KeyTr1l:
DATA 57,49,41,33,25,17,09,01,58,50,42,34,26,18,10,02
DATA 59,51,43,35,27,19,11,03,60,52,44,36
DATA 63,55,47,39,31,23,15,07,62,54,46,38,30,22,14,06
DATA 61,53,45,37,29,21,13,05,28,20,12,04

Стандарт
шифрования
данных
DES
435
Продолжение
листинга
18.4
KeyTr2l:
DATA 14,17,11,24,01,05,03,28,15,06,21,10,23,19,12,04
DATA 26,08,16,07,27,20,13,02,41,52,31,37,47,55,30,40
DATA 51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32 etrl:
DATA 32,01,02,03,04,05,04,05,06,07,08,09,08,09,10,11
DATA 12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21
DATA 22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,01 ptrl:
DATA 16,07,20,21,29,12,28,17,01,15,23,26,05,18,31,10
DATA 02,08,24,14,32,27,03,09,19,13,30,06,22,11,04,25 sboxesl:
DATA 14,04,13,01,02,15,11,08,03,10,06,12,05,09,00,07
DATA 00,15,07,04,14,02,13,01,10,06,12,11,09,05,03,08
DATA 04,01,14,08,13,06,02,11,15,12,09,07,03,10,05,00
DATA 15,12,08,02,04,09,01,07,05,11,03,14,10,00,06,13
DATA 15,01,08,14,06,11,03,04,09,07,02,13,12,00,05,10
DATA 03,13,04,07,15,02,08,14,12,00,01,10,06,09,11,05
DATA 00,14,07,11,10,04,13,01,05,08,12,06,09,03,02,15
DATA 13,08,10,01,03,15,04,02,11,06,07,12,00,05,14,09
DATA 10,00,09,14,06,03,15,05,01,13,12,07,11,04,02,08
DATA 13,07,00,09,03,04,06,10,02,08,05,14,12,11,15,01
DATA 13,06,04,09,08,15,03,00,11,01,02,12,05,10,14,07
DATA 01,10,13,00,06,09,08,07,04,15,14,03,11,05,02,12
DATA 07,13,14,03,00,06,09,10,01,02,08,05,11,12,04,15
DATA 13,08,11,05,06,15,00,03,04,07,02,12,01,10,14,09
DATA 10,06,09,00,12,11,07,13,15,01,03,14,05,02,08,04
DATA 03,15,00,06,10,01,13,08,09,04,05,11,12,07,02,14
DATA 02,12,04,01,07,10,11,06,08,05,03,15,13,00,14,09
DATA 14,11,02,12,04,07,13,01,05,00,15,10,03,09,08,06
DATA 04,02,01,11,10,13,07,08,15,09,12,05,06,03,00,14
DATA 11,08,12,07,01,14,02,13,06,15,00,09,10,04,05,03

436
Глава
18.
Криптографическая
защита
Продолжение
листинга
18.4
DATA 12,01,10,15,09,02,06,08,00,13,03,04,14,07,05,11
DATA 10,15,04,02,07,12,09,05,06,01,13,14,00,11,03,08
DATA 09,14,15,05,02,08,12,03,07,00,04,10,01,13,11,06
DATA 04,03,02,12,09,05,15,10,11,14,01,07,06,00,08,13
DATA 04,11,02,14,15,00,08,13,03,12,09,07,05,10,06,01
DATA 13,00,11,07,04,09,01,10,14,03,05,12,02,15,08,06
DATA 01,04,11,13,12,03,07,14,10,15,06,08,00,05,09,02
DATA 06,11,13,08,01,04,10,07,09,05,00,15,14,02,03,12
DATA 13,02,08,04,06,15,11,01,10,09,03,14,05,00,12,07
DATA 01,15,13,08,10,03,07,04,12,05,06,11,00,14,09,02
DATA 07,11,04,01,09,12,14,02,00,06,10,13,15,03,05,08
DATA 02,01,14,07,04,10,08,13,15,12,09,00,03,05,06,11 rotsl:
DATA 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
SUB btos (mbits() AS INTEGER, a$) a$ = ""
FOR i% = 1 TO 8 w% = 0
FOR j% = 1 TO 8 w% = w% + ((mbits(((i% - 1) * 8) + j%)) * (2 ^ (8 - j%)))
NEXT j% a$ = a$ + CHR$(w%)
NEXT i%
END SUB
FUNCTION desalg$ (a$) temp$ = "": stob a$, ades() transpose ades(), InitialTr(), 64 transpose ades(), swappy(), 64
FOR i% = 16 TO 1 STEP -1 letbe bdes(), ades(), 64 f i%, bdes(), xdes()
FOR j% = 1 TO 32 ades(j%) = (bdes(j% + 32) + xdes(j%)) MOD 2
NEXT j%
FOR j% = 33 TO 64 ades(j%) = bdes(j% - 32)

Стандарт
шифрования
данных
DES
437
Продолжение
листинга
18.4
NEXT j%
NEXT i% transpose ades(), FinalTr(), 64 btos ades(), temp$ desalg$ = temp$
END FUNCTION
SUB f (i%, a() AS INTEGER, x() AS INTEGER) h% = i%: letbe EF(), a(), 64 transpose EF(), etr(), 48 letbe ikeyf(), P2(), 64 transpose ikeyf(), KeyTr2(), 48
FOR j% = 1 TO rots(h%) mrotate P2()
NEXT j%
FOR j% = 1 TO 48 yf(j%) = (EF(j%) + ikeyf(j%)) MOD 2
NEXT j%
FOR k% = 1 TO 8 k6% = 6 * k%: k4% = 4 * k% r% = (32 * yf(k6% - 5)) + (16 * yf(k6%)) + (8 * yf(k6% - 4)) +
(4 * yf(k6% - 3)) + (2 * yf(k6% - 2)) + yf(k6% - 1) + 1 x(k4% - 3) = (s(k%, r%) \ 8) MOD 2: x(k4% - 2) = (s(k%, r%) \
4) MOD 2 x(k4% - 1) = (s(k%, r%) \ 2) MOD 2: x(k4%) = s(k%, r%) MOD 2
NEXT k% transpose x(), ptr(), 32
END SUB
SUB init (x() AS INTEGER, n%)
FOR i% = 1 TO n%
READ x(i%)
NEXT i%
END SUB
SUB letbe (target() AS INTEGER, source() AS INTEGER, last%)
FOR il% = 1 TO last% target(il%) = source(il%)
NEXT il%
END SUB

438
Глава
18.
Криптографическая
защита
Продолжение
листинга
18.4
FUNCTION MYBIN$ (n%)
STS$ = "" p% = n%
FOR i% = 1 TO 8
IF (p% MOD 2) THEN
ST$ = "1" + ST$
ELSE
ST$ = "0" + ST$
END IF p% = p% \ 2
NEXT i%
MYBIN$ = ST$
END FUNCTION
SUB mrotate (keyr() AS INTEGER) letbe XR(), keyr(), 56
FOR ir% = 56 TO 2 STEP -1
XR(ir%) = XR(ir% - 1)
NEXT ir%
XR(1) = keyr(28): XR(29) = keyr(56) letbe keyr(), XR(), 56
END SUB
SUB sboxinit (b() AS INTEGER)
RESTORE sboxesl
FOR i% = 1 TO 8
FOR j% = 1 TO 64
READ b(i%, j%)
NEXT j%
NEXT i%
END SUB
SUB stob (a$, mbits() AS INTEGER)
FOR i% = 1 TO 8 b$ = MYBIN$(ASC(MID$(a$, i%, 1)))
FOR j% = 1 TO 8 mbits(((i% - 1) * 8) + j%) = ASC(MID$(b$, j%, 1)) - 48
NEXT j%
NEXT i%
END SUB

Стандарт
шифрования
данных
DES
439
Продолжение
листинга
18.4
SUB transpose (datax() AS INTEGER, T() AS INTEGER, nt%) letbe XT(), datax(), 64
FOR i% = 1 TO nt% datax(i%) = XT(T(i%))
NEXT i%
END SUB
SUB xtob (a$, mbits() AS INTEGER)
LOCAL X$,NIBBLE$
FOR i% = 1 to 16
X$ = MID$(a$,i%,1)
SELECT CASE X$
CASE "0"
NIBBLE$ = "0000"
CASE "1"
NIBBLE$ = "0001"
CASE "2"
NIBBLE$ = "0010"
CASE "3"
NIBBLE$ = "0011"
CASE "4"
NIBBLE$ = "0100"
CASE "5"
NIBBLE$ = "0101"
CASE "6"
NIBBLE$ = "0110"
CASE "7"
NIBBLE$ = "0111"
CASE "8"
NIBBLE$ = "1000"
CASE "9"
NIBBLE$ = "1001"
CASE "A"
NIBBLE$ = "1010"
CASE "B"
NIBBLE$ = "1011"
CASE "C"
NIBBLE$ = "1100"
CASE "D"
NIBBLE$ = "1101"
CASE "E"

440
Глава
18.
Криптографическая
защита
Окончание
листинга
18.4
NIBBLE$ = "1110"
CASE "F"
NIBBLE$ = "1111"
CASE ELSE
Print "
Не является
16- ричным значением
!"
SYSTEM
END SELECT
FOR j% = 1 to 4 mbits(((i% - 1) * 4) + j%) = ASC(MID$(NIBBLE$, j%, 1)) - 48
NEXT j%
NEXT i%
END SUB
Другие
режимы
использования
алгоритма
шифрования
DES
Помимо режима
ECB, алгоритм
DES может использоваться в
режиме
сцеп
-
ления
блоков
шифртекста
(
СВС

С
i р
h ег
В
1
ос k Chaining).
Суть этого режима состоит в
том
, что сообщение разбивается на блоки по
64 бит
, и
их последова
- тельность зашифровывается
Перед шифрованием
(
в режиме
ЕСВ
), блок откры
- того текста поразрядно складывается с
предыдущим блоком шифртекста
Для шифрования первого блока шифртекста требуется так называемый
вектор
ини
-
циализации
(IV — initialization vector).
Последний не является секретным
Данный режим не позволяет накапливаться ошибкам при передаче
, поскольку ошибка при передаче приведет к
потере только двух блоков исходного текста
Кроме
ECB и
CBC, существуют также режимы
шифрования
с
обратной
связью
(
С
F
В

С
i р
h е
r F
ее db аск
) и
шифрования
с
внешней
обратной
связью
(
О
F
В

Output F
ее db аск
).
Стандарт
криптографического
преобразования
данных
ГОСТ
28147-89
Стандарт криптографического преобразования данных
ГОСТ
28147-89 реко
- мендован к
использованию для защиты любых данных
, представленных в
виде двоичного кода
Данный стандарт формировался с
учетом мирового опыта
, и
в частности
, при его разработке были приняты во внимание недостатки алгоритма
DES.
Стандарт довольно сложен
, поэтому приведем лишь его концептуальное описание
Алгоритм криптографического преобразования
, установленный
ГОСТ
28147-
89 (
далее

ГОСТ
) используется для шифрования данных в
двух режимах
, а
также для выработки
имитовставки
, которая является средством контроля це
- лостности данных и
зависит от ключей
При шифровании алгоритм
ГОСТ
сво
- дится к
шифру гаммирования
Блок гаммы представляет собой
64- битовую ком
-

Стандарт
криптографического
преобразования
данных
ГОСТ
28147-89
441
бинацию
, состоящую из двух последовательных
32- битовых блоков
Исходя из удобства изложения
, далее будем называть любой
64- битовый блок
комбинаци
-
ей
, а
также считать
, что блок состоит их двух сцепленных подблоков из
32- х
би
- тов каждый
Гамма накладывается поразрядно по модулю
2.
Каждая комбинация гаммы представляет собой результат шифрпреобразования с
помощью шифра простой замены на множестве
64- битовых комбинаций
Входные комбинации для указан
- ного шифра
, в
общем случае
, формируются в
зависимости от ключей
, псевдо
- случайного открытого параметра
S
(
синхропосылка
), известных констант
с
1
,
c
2
и предыдущего блока шифртекста
Фактически задача каждого из режимов шиф
- рования
— это формирование
64- битовых комбинаций для входа в
основной ре
- жим работы
ГОСТ
, называемый
режимом
простой
замены
По сути
, ключи не
- обходимы для работы
ГОСТ
именно в
этом режиме
Комбинация гаммы являет
- ся результатом работы алгоритма в
режиме простой замены
Алгоритм
ГОСТ
в качестве исходных данных использует три параметра
:
K
,
X
и
Z
64- битовый блок данных
Первый параметр является
долговременным
, а
второй

сеансовым
ключом
Параметры независимы и
имеют размер
512, 256 и
64 бита соответственно
K
представляет собой отображение множества блоков в
себя
Это отображение реализует потетрадную замену
32- разрядных блоков в
32- х
разрядные и
состоит из
8 подключей
.
Подключ
K
i
(
i = 1, …, 8
), входящий в
K
, является таблицей заме
- ны для
i-той
(
слева
) тетрады
, т
е состоит из
16 тетрад
В
стандарте ключ
K
назы
- вается
блоком
подстановки
, а
подключи
K

узлами
замены
Сеансовый ключ
X
состоит из восьми
32- разрядных подключей
X
i
,
каждый из которых в
соответствующий момент используется для суммирования с
некото
- рым блоком по модулю
2.
Режим простой замены алгоритма
ГОСТ
реализован в
виде шифра
Файстеля
Шифрование блока открытого текста
Z
алгоритмом
ГОСТ
производится за
32 цикла
На каждом цикле происходит преобразование входной комбинации в
вы
- ходную
Шифртекстом является результат работы
(
выход
) тридцать второго цикла
, подвергнутый очень простому дополнительному преобразованию
Процесс шифрования в
режиме простой замены
(
рис
. , который обозначим через
T = ГОСТ(S)
можно представить в
виде последовательности
34 блоков
u
= (U
–2
, U
–1
, U
0
, U
1
, U
2
, …, U
30
, U
31
)
, где
U
-1
||U
0
= S и U
31
||U
30
= T
Здесь
U
-1
||U
0
— результат работы цикла
0
,
U
0
||U
1
— результат работы цикла
1
и т
д до
U
31
||U
30
результата работы цикла
31
Дополнительное преобразова
- ние меняет порядок следования блоков
:
U
31
||U
30
= T
На цикле
i
используется подключ
X
t(i)
При шифровании используется сле
- дующая последовательность выбора подключей от начального и
до последнего цикла
:
t(i) = {0,1,2,3,4,5,6,7; 0,1,2,3,4,5,6,7; 0,1,2,3,4,5,6,7; 7,6,5,4,3,2,1,0}

442
1   ...   51   52   53   54   55   56   57   58   ...   63


написать администратору сайта