· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› ГОСТ 28.147-89

<< . 1 . 2 . 3 . 4 . >>

Посл.отвђт Сообщенiе


Дата: Июл 24, 2004 11:07:20

Добавления :) совсем запутался...
Посмотри шаг 5 там написано N2=N1 и N1=S
Происходит следуещее - шифруем n1, старое n1 становится n2, а на место n1 встает зашифрованное n1 (S)
Значит я ошибся...
А = 00002 0003h 4526 C7C4h
Да, ты прав...

Но есть одно задание для тебя, не поленись, сделай Ж:)
Допустим ты получил значение А (см. выше) на предпоследнем шаге (не преобразования) последним шагом является смена местами n1 и n2, следовательно получаем
А = 4526 C7C4h 00002 0003h
Теперь попробуй тем же алгоритмом описанным выше и теми же ключами снова преобразовать (сделать один основной шаг). Результат тебя может удивить и может после этого до тебя дойдет смысл Ж:)
Удачи !


Дата: Июл 25, 2004 16:18:44

Binary digit, Chs !!!

Исходные данные:
Пусть есть выбранный 64 битный элемент А из файла и пусть его
значение равно для простоты 0003 0002 0001 000F, тогда если
А={A1,A2} справедливо А1=0003 0002 и А2=0001 000F. Есть ключ
и первый элемент которого равен К1=12345678.

Основной шаг криптопреобразования:
1. (A1+K1)mod 2^32 результат равен 1237567a!
2. полученое разбиваем:
s0 s1 s2 s3 s4 s5 s6 s7
1 2 3 7 5 6 7 a

Используя таблицы приведенною Chs во второй вкладке темы ГОСТ
28.147-89 получим:
0471d796
3.полученный резльтат сдвинем на 11бит влево циклически!
в результате имеем: bab0 238e
4.Далее полученный результат xor A2 и получим aab0 2381 (Send)
5.Руковудствуясь статьей Винокурова A2=A1,A1=Send в итоге имеем:
А'=aab0 2381 0003 0002
Конец Основного шага по криптопреобразования и A' возвращается
как его результат

Следующий раз мы выбираем второй элемент ключа К2 и в качестве
А берем полученное на прошлом основном шаге криптопреобразова-
ния А', т.е число aab0 2381 0003 0002 где А1=aab0 2381,
А2=0003 0002 и выполняем Основной шаг криптопреобразования!
И т.д и т.п.

Теперь же попытаемся из числа A'=aab0 2381 0003 0002 получить
А=0003 0002 0001 000F, для этого выполним основной шаг с А'.
1. (N1+K1) mod 2^32 получаем bce4 79f9.
2. Прогоняем полученное:
s0 s1 s2 s3 s4 s5 s6 s7
b c e 4 7 9 f 9
через функцию замены и получим:
8fec 4b28
3. Далее циклический сдвиг:
5944 7f62
4. xor с А2 - 5947 7f60
5. А2 = А1, А1+Send
Итог 5947 7f60 0001 0000
И это на 0003 0002 0001 0000 Ну, как ни посмотри а похожим не становит-
ся. Задалбался.

ЗЫ: В Винокурове так и сказано А2=А1, A=Send и А1<->A2 в конце базово-
го цикла, а это через 32 раза основного шага! Как ё... расшифрововывать и
где байты спрятались или у меня башка из 屁股... Хотя стараюсь и так про-
бую и сяк по статье Винокурова!

>7. n1 = S
>8. Меняем местами n1 и n2 и получаем

Ты говоришь что n1=S,n1<->n2
Но по статье Винокурова черным по белому N2=N1,N1=S а это далеко не
одно и тоже!

При этом заметь, то что ты считаешь А1 я считаю А2. Когда разбиваешь
после оперции mod 2^32 я считаю слева направо, а ты справа налево! Но
в принципе это не должно влиять! Или я заблуждаюсь, будь так добр прой-
ди весь путь моих мыслей, при этом читая Винокурова и возможно ты уви-
дишь глюки в моем понимании!

Буду премного благодарен и другим личностям, ну а если и the Sven вклю-
чится и ткнет пальцем, то я вообще буду на седьмом небе!


Дата: Июл 25, 2004 22:26:24

Из статьи Винокурова:
"Описание стандарта шифрования Российской Федерации содержится
в очень интересном документе , озаглавленном «Алгоритм криптогра-
фического преобразования данных ГОСТ 28147-89»"
Может кто-то из Васмовцев видел документ о котором говорит Вино-
куров или случаем располагает линком, электронной версией? Ведь из
слов Винокурова можно заключать, что распростронять описание алго-
ритма вполне законно! А по сему, если кто может пусть скажет мне о
пути выхода на оригинал. Буду весьма вам признателен!


Дата: Июл 25, 2004 22:33:44

Статью Андрея Винокурова можно взять здесь:
http://zi.itsoft.ru/crypto/28147_89.pdf


Дата: Июл 26, 2004 13:23:11

Как говорилось в старом фильме
"Базилио, ты меня не путай !"
Твой пример :)

A = 0003 0002 0001 000F

Таблица перестановки всё та же

n2 = 0003 0002
n1 = 0001 000F
k = 1234 5678
n1+k = 1235 5687

s0 = 7
s1 = 8
s2 = 6
s3 = 5
s4 = 5
s5 = 3
s6 = 2
s7 = 1

После перестановки получаем

Sп = F8AD A46F

Sп rol 11 = 6D23 7FC5
n2 xor Sп = 6D20 7FC7

n1 = 6D20 7FC7
n2 = 0001 000F

А' = 0001 000F 6D20 7FC7
Выполнили 1 шаг криптопреобразования
Меняем местами получаем шифрованное А

Aш = 6D20 7FC7 0001 000F
Пытаемся расшифровать...

n1 = 0001 000F
n2 = 6D20 7FC7
k = 1234 5678

n1+k = 1235 5687

s0 = 7
s1 = 8
s2 = 6
s3 = 5
s4 = 5
s5 = 3
s6 = 2
s7 = 1

После перестановки получаем

Sп = F8AD A46F
Sп rol 11 = 6D23 7FC5
n2 xor Sп = 0003 0002

n1 = 0003 0002
n2 = 0001 000F

Выполнили 1 шаг криптопреобразования
Меняем местами получаем расшифрованное А

A = 0003 0002 0001 000F

Это называется "облегченная версия ГОСТ" почитай Винокурова на стр. 24 Если сделать два шага, то расшишровка тоже потребует два шага.
По поводу установки значений А1, А2, s0 и прочее. В ГОСТе написано
" Открытые данные, подлежащие зашифрованию разбивают на
блоки по 64 бита в каждом. Ввод любого блока Т0=(А1(0), А2(0),...,
А31(0), А32(0), B1(0), B2(0),..., B32(0)) двоичной информации в
накопители N1 и N2 производится так, что значение А1(0) вводится в
1-й разряд N1, значение А2(0) вводится во 2-й разряд N1 и т.д.,
значение А32(0) вводится в 32-й разряд N1;...."
Поэтому если А разбивать на блоки, то младшая чать пишется в младшие (по индексу) разряды
n1 = 0001 000F
n2 = 0003 0002
Тоже самое касается и работы с таблицей перестановки, напимер а = 1235 5687 следовательно

s0 = 7
s1 = 8
s2 = 6
s3 = 5
s4 = 5
s5 = 3
s6 = 2
s7 = 1

И главное не путать младшую и старшую части.
По поводу ГОСТ. У меня есть только бумажная версия. И поверь мне на слово, у Винокурова гораздо лучше описан алгоритм, чем это сделано официально так, что можешь не искать, он тебе особо не поможет - убьёшь много времени на поиски, и всё равно нен найдёшь.
З.Ы.
Посмотри алгоритм который я тебе показал в цифрах, если уж и тогда не дойдет,
то и не знаю как тебе помочь...


Дата: Июл 27, 2004 18:40:05

спасибо кто учавствовал в моем просвящении!!!
Chs ни какой разницы нет А1,А2 или А2,А1 s0s1s2s3s4s5s6s7 или 7s6s5s4s3s2s1s0 пробывал и работает в обоих вариациях а вообще я эту простую замену так скажу: там до операции xor
всего лишь понты, и в шифровке и в расшифровке число одинаковое и это отбрасывает вопрос про mod 2^32!


Дата: Июл 27, 2004 20:27:03

С помощью помощью ТоталКома 5.50 позипил аттач!
Гляньте кому не влом на филю replace.asm загнался
ато организовывать N2=N1,N1=S и N1<->N2 як лучше
сделать?
Плюс линковщик ругается, если что я с вынесением
процедуры в отдельный файл впервый раз, так что не
обесудьте!

_1328580965__28.147_89.ZIP


Дата: Июл 28, 2004 10:59:33

Ну, если разобрался, то подумай над вопросом, что если ключ будет не 256 бит, а 512 или даже 1024 бит - число циклов увеличится :) Например "Русский стандарт" при оформлении кредитов по сети шифрует данные по ГОСТ 28147-89/5 и вот, что означает "/5" неизвестно, скорее всего увеличили ключ... Вот такие вот умные головы создали алгоритм ещё в 89 году с боооольшим запасом Ж:)
А по поводу "не важно какой старший или младший" можно сказать, что лучше всего не отходить от алгоритма, живой пример - SHA-подобные алгоритмы хэш
http://www.wasm.ru/forum/index.php?action=vthread&forum=17&topic=6585


Дата: Июл 28, 2004 19:24:18

ChS
zip смотрел, про линковщик пару слов скажи пожалуйста


Дата: Июл 29, 2004 11:02:10

В Тасме, к сожалению не силён, я больше Масм, и многомодульные проекты как-то не приходилось делать. Но общие правила линковки гласят, что надо получить объектные файлы .obj всех модулей, затем линковщиком собрать в кучу.


Дата: Авг 1, 2004 20:58:55

Binary digit, Chs!!!

вопрос к тебе:
ежели взять и определить следующие вещи:

key db 'fedcba9876543210fedcba9876543210'
block db 1h,2h,3h,4h,5h,6h,7h,8h
table_replace db тута сам понимаешь что

Ну так вот если скажем:
lea di,block
lea si,key
mov ax,word ptr[di]
mov dx,word ptr[di+2]
mov bx,word ptr[si]
mov cx,word ptr[si+2]
add dx,cx
adc ax,bx

То будет ли это верно? Меня смущает факт расположения
информации младшее по младшему, старшее по старшему!
То есть в памяти b8 08 29 хотя на самом деле будет ко-
пироваться не 08 29, а 29 08! В связи с чем думаю:

mov ax,word ptr[di]
xchg ah,al
mov dx,word ptr[di+2]
xchg dh,dl
mov bx,word ptr[si]
xchg bh,bl
mov cx,word ptr[si+2]
xchg ch,cl
add dx,cx
adc ax,bx

Будет правильней! Но это накладывает отпечаток на ско-
рость и размер алгоритма! ;)


Дата: Авг 2, 2004 13:45:39

Если ты пишешь
key db 'fedcba9876543210fedcba9876543210'
то в памяти они так же распологаются. В твоем случае, если ты всегда обращаешся к WORDам, то для ускорения процесса надо писать
key dw 0fedch,0ba98h,...
тогда компилятор их поменяет местами и при обращении в регистр ax попадет значение, которое было записано в исходнике и исключается xchg :)
Если ключ генерится на ходу, то перед обработкой лучше пройтись и поменять местами байты.
У Винокурова я не видел перестановок вроде, хотя в ГОСТе описано, как и куда записывается. Если рассматривать входной текст как поток байт, то собственно нет разницы старший или младший и с ключом тоже самое.
Позже тебе расскажу про таблицы перестановки, сейчас здоровье не позволяет (клёва сегодня не будет, клёво было вчера).


Дата: Авг 3, 2004 12:18:25

Продолжаю повествование :)
И так, что такое таблица перестановки - просто матрица, пропуская через через которую полубайт получаем другой полубайт. Основная задача криптографического алгоритма зашифровать данные так, чтобы криптоаналитику не дать возможности увидеть какой-либо закономерности в шифрованном файле, даже если он знает часть исходного текста. Например простой исполняемый файл содержит сигнатуру в заголовке "MZ" и дальше "This program cannot be run in DOS mode" - 38 байт и простое наложение гаммы (xor) дает начальное значение синхропосылки, поэтому если найти какую-либо закономерность (например в каждом DWORD 2-й и 10-й биты равны "1"), то можно (теретически я предполагаю) расчитать продолжение гаммы, а это уже крах !
Или другой пример: русский текст это набор байт и лежит в некотором интервале и у каждого байта 7-й бит однозначно равен "1", за исключением знаков препинания :)

В моем случае, когда я писал программу шифрования, ГОСТ немного модифицировал, а точнее сделал двойное шифрование - сначала накладывал гамму (для устранения закономерностей), затем шифровал простой заменой. Получилась изумительная штука - архиваторы (RAR, ZIP) не могли сжать этот файл, а это уже показатель отсутствия повторяющихся последовательностей байт (не бит).
Так как ты разобрался с ГОСТом то увидел, что ключ не особо дает тексту закрытость, только таблица перестановки дает всю полноту "ощущения защищености" :) Требования к таблице в ГОСТ - неповторяемость цифр 0..15. Рассмотрим таблицу перестановки (одну строку)

0 1 2 3 4 5 6 7 8 9 A B C D E F

Вот такая таблица называется "слабой" ведь при перестановке, что на входе, то и на выходе :) => нет перестановки.
Для оценки "стойкости" таблиц ввели корреляционные коэффициенты Пирсона. Звучит громко, но не так страшно. Смысл их в том, чтобы оценить вероятность встречи "0" или "1" в некоторой последовательности. Рассмотрим другой пример таблицы см. приложение пример №1
В итоге Бит 3 на входе инвертирован относительно бита 0 на выходе в 14 случаях из 16, что составляет 87.5 %
Или взять пример №2 там дела обстоят ещё хуже биты 1 и 2 группы остаются неизменными. Вот это называется "слабые" таблицы. Примером "сильной" таблицы является пример №3 Еще примеры "сильных" таблиц я выложил когда показал шифрование на примере. Там "0" и "1" встречаются с одинаковой вероятностью.
Сейчас у меня постоянно работает один софт, который ищет методом перебора "сильные" сочетания, уже нашлось 1240 вариантов. А сочетаний много 16! :)
Собственно все, что касается таблиц перестановки. К ключу вроде никаких требований я не нашёл кроме как у Винокурова на стр. 17-18

1588093229__Sample_table.zip


Дата: Авг 7, 2004 10:26:32

Chs есть ли у тебя Ася?


Дата: Авг 9, 2004 10:58:42

198'606'391

<< . 1 . 2 . 3 . 4 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.205