Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Жельников Владимиp Кpиптогpафия от папиpуса до компьютеpа .doc
Скачиваний:
77
Добавлен:
20.05.2014
Размер:
1.53 Mб
Скачать

56 Бит, что недостаточно для таких задач, как национальная

безопасность. Свое развитие DES получил в ГОСТ 28147-89, который

увеличил длину ключа до 256 бит и допустил произвольные

перестановки. В заключение приведем программу, демонстрирующую

эффект взбивания на блоке в 64 байта. С увеличением числа

взбиваний порча единственного бита в шифровке делает нечитаемой

половину текста, что обусловлено побайтовой перестановкой. Если

бы перестановка была побитовая, то весь текст от ошибки в

единственном бите перестал бы читаться.

'------программа шифрования взбиванием

DEFINT I-N: DEFSTR S

RANDOMIZE 231

CLS:LOCATE 1, 1

Lot = 5

s$ = ""

FOR i=1 TO 64:s$=s$+CHR$(65+25*RND):NEXT

PRINT s$; " - text": sav = s$

s$ = ""

FOR i=1 TO 192: s$=s$+CHR$(255*RND): NEXT

'---------------------шифрование

FOR i = 0 TO Lot

sc=MID$(ss,1+I*32,32)

l=2^i:sl="": r=""

FOR j = 1 TO 32

kg=ASC(MID$(sc, j, 1))

kl=ASC(MID$(s$, j, 1))

kr=ASC(MID$(s$, j+32,1))

sl = sl+ CHR$(kl XOR kr)

sr = sr+ CHR$(kr XOR kg)

NEXT

s$=sr+RIGHT$(sl,l)+LEFT$(sl,32-l)

NEXT

'----------------------порча бита

ss=CHR$(ASC(s$) XOR 4)+RIGHT$(s$,63)

'-----------------печать шифровки

FOR i =1 TO 64

k = ASC(MID$(s$, i, 1))

DEF SEG=47114: POKE 2*i-2, k: DEF SEG

NEXT

LOCATE 2, 65: PRINT " - code"

'---------------расшифровывание

FOR i = Lot TO 0 STEP -1

sc=MID$(s$, 1+i*32, 32): l=2^i

s$=RIGHT$ (s$ ,32-

l)+MID$ (s$, 33,l)+LEFT$ (s$, 32)

sl = "": sr = ""

FOR j = 1 TO 32

kg = ASC(MID$(sc, j, 1))

kl = ASC(MID$(ss, j, 1))

kr = ASC(MID$(ss, j+32, 1))

sl = sl+ CHR$(kl XOR kr XOR kg)

sr = sr+ CHR$(kr XOR kg)

NEXT

ss = sl+sr

NEXT

FOR i =1 TO 64

k = ASC(MID$(s$, i, 1))

DEF SEG=47124: POKE 2*i-2,k: DEF SEG

NEXT

LOCATE 3, 65: PRINT " - text"

n = 0

FOR i =1 TO 64

IF MID$ (s$, i, 1) =MID$(sav, i,1) THEN

LOCATE 4, i: PRINT "+";: n = n+I

ELSE

LOCATE 4, i: PRINT "-";

END IF

NEXT

LOCATE 6, 1: PRINT 64 - n; "errors"

END

Шифр DES принят федеральным стандартом США, и хорош в

использовании для многих коммерческих приложений. Однако

правительства сами никогда не используют шифры, предлагаемые

коммерсантам, чтобы закрыть свои данные, так как они недостаточно

стойки от атак аналитиков. Например, 16-кратный DES был взломан

Шамиром, применявшим дифференциальный криптоанализ, и Матсуи,

использовавшим линейный криптоанализ. Наиболее серьезную

практическую атаку на DES осуществил Мишель Винер, который

разработал и опробовал микросхему, проверяющую в секунду 50

миллионов ключей DES. ЭВМ, стоящая миллион долларов и содержащая

несколько десятков тысяч таких микросхем, способна перебрать все

ключи DES за 7 часов. АБН и ФАПСИ тратят на вычислительную

технику такие деньги, что могут построить ЭВМ, взламывающую

шифровку DES за секунду. Это означает, что DES нельзя

пользоваться для серьезных приложений. Для того, чтобы испортить

правительственным криптоаналитикам сон, коммерсанты применяют так

называемый "тройной DES", шифруя сообщение трижды двумя разными

ключами, что увеличивает реальную длину ключа до 112 бит. Однако

такой метод медленнее обычного DES метода в три раза.

Шифр Энигмы

В заключение обратимся к шифру того типа, который

вырабатывала известная уже машина Энигма инженера Кирха. При его

моделировании на ЭВМ можно достичь хорошей устойчивости при

сравнительной простоте программы. Напомним, что эта машина

представляла собой ряд вращающихся на одной оси барабанов с

электрическими контактами, обеспечивающих множество вариантов

простой замены, определяемой текущим положением барабанов. В

ранних моделях было 5 барабанов, которые перед началом работы

устанавливались по кодовому слову, а в ходе шифрования они

поворачивались при кодировании очередного символа как в счетчике

электроэнергии. Таким образом, получался ключ заведомо более

длинный, чем текст сообщения. В чем же была слабость шифра?

1. Пять барабанов могли обеспечить лишь около

ста миллионов ключей, что позволяло их за день

перебрать на ЭВМ. Если использовать не 25 ла-

тинских символов, а 256 кодов ASCII и увели-

чить число барабанов, то сложность раскалыва-

ния шифра существенно возрастет.

2. Набор барабанов был ограничен и менялся ред-

ко, что вызвало охоту англичан за их экземпля-

рами в подводных лодках. ЭВМ может для каж-

дой шифровки использовать индивидуальные

барабаны, генерируемые по ключу, а это опять-

таки резко усложняет вскрытие шифра.

3. Наконец, можно сделать движение барабанов

хаотичным по случайной последовательности,

тоже вырабатываемой по ключу.

Подсчитаем число ключей такого шифра, реализованного

программно. Пусть длина периода программного генератора случайных

чисел равна 2**24. Восемь барабанов, генерируемые с помощью этого

генератора, дадут вместе 2**192 вариантов ключа, а если учесть

еще варианты псевдослучайной последовательности, управляющей

движением барабанов, то получится внушительная цифра в 2**216

вариантов ключа. Таким образом, довольно просто получить

устойчивый шифр даже при использовании программного генератора

случайных чисел с периодом малой для криптографии длины. И хотя

несомненно, что криптоаналитики наработали массу "домашних

заготовок" для атак на такой шифр, но еще князь Владимирко

Галицкий знал о том, что "в наше время чудес не бывает", и вскры-

тие шифра Энигмы будет дорого стоить. Поэтому приведем программу,

реализующую описанный подход.

'----------имитация Энигмы

DEFINT I-N: DEFSTR S

CLS : RANDOM12E 231

DIM s(4, 32) AS STRING * 1

ns = 4

ss = "ААААААААААААААААААААААААААААА'

PRINT ss

'-----------ШИФРОВАНИЕ

x = RND(-231)

FOR i=0 TO ns

FOR j=0 TO 32:set(i,j) = CHR$(j):NEXT

FOR j=0 TO 32:SWAP s(i,j),s(i,32*RND):

NEXT

NEXT

s=""

FOR i = 1 TO LEN(ss) 'шифрование символа

k=ASC (MID$ (ss ,i ,1)): IF k>32 THEN k=k-128

FOR j = 0 TO ns:k=ASC(set(j, k)):NEXT

IF k < 32 THEN k = k+ 128

PRINT CHR$ (k); : s = s + CHR$ (k)

k = ns * RND 'поворот колес

FOR j=0 TO 31:SWAP s(k,j),s(k,j+1):NEXT

FOR j=0 TO 32

s(k,j)=CHR$((ASC(set(k, j)) + 32) MOD 33)

NEXT

NEXT

PRINT

'----------РАСШИФРОВЫВАНИЕ

x = RND(-231)

FOR i=0 TO ns

FOR j=0 TO 32:s(i,j)=CHR$(j):NEXT

FOR j=0 TO 32:SWAP s(i,j),s(i,32*RND):NEXT

FOR j=0 TO 32

IF ASC (set (i, j)) < 64 THEN

m =j:n=ASC(s(i, j))

DO

k=ASC(s(i,n)):s(i,n)=CHR$(m OR 64)

m=n: n=k

LOOP UNTIL m = j

END IF

NEXT j

FOR j=0 TO 32

s(i,j)=CHR$(ASC(s(i,j)) AND 63)

NEXT

NEXT i

ss = s

FOR i = 1 TO LEN(ss)

k=ASC(MID$(ss,i ,1)): IF k>32 THEN k=k-128

FOR j=ns TO 0 STEP -1

k=ASC(s(j,k))

NEXT

IF k<32 THEN k=k+128

PRINT CHR$ (k) ;

k = ns * RND 'поворот колес

FOR j = 0 TO 31: SWAP s(k,j),s(k,j+1):NEXT

FOR j = 0 TO 32

s(k,j)=CHR$((ASC(s(k,j))+32) MOD 33)

NEXT

NEXT i

END

После работы программы на экране появятся три строки,

изображающие: верхняя - исходный текст из букв А, средняя -

шифровку и нижняя - расшифрованный текст:

ААААААААААААААААААААААААААААА

ВА ЖЖЬИХйЙЩСЛЦВФЭШЬРСОТСЗТЫОБ

ААААААААААААААААААААААААААААА

Отметим, что для упрощения текста программы ключ задается

лишь из 3 бит числом 231 и используются лишь 5 барабанов.

На самом деле систем шифрования побольше, чем описано. Но

практически употребляется лишь похожий на DES алгоритм IDEA (