|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 8, 2004 22:41:30 Пишу прогу которая будет зашифровывать входной файл не больше 31 Мб и шифровать его по алгоритму согласно стандарту ГОСТ 28.147-89 и выдавать выходной. Опираюсь на известную статью Андрея Винокурова: "Алгоритм криптографического преобразования данных ГОСТ 28147 -89". У этой статьи есть существенный минус - это то, что не каждый программист хороший математик. Это токо в идеале прог- раммист - хороший прикладной математик, а что же делать тем кто этого, как ни старается, но практически ни в зуб ногой? Ну да ладно, беру любимый Tasm, дай кодерам Борланда вкусного пива! Беру башку и пытаюсь разобраться как этот алгоритм дол- жен работать, как его реализовать под Дос с применением 16ти разрядной, то бишь безо всякий e.x(к примеру eax), на днях ре- бята сказали интересные сорцы пришлют надо подготовиться :). Для начала основной шаг, если что не так понимаю просьба ткнуть и нормальным человским языком объяснить, хотя приветсвуется и математика, но разжованная(для поднятия эрудиции других зашед- ших): 1.Выбираем из таблицы ключа элемент ключа к примеру к0 2.Считываем 64 битный блок N делим его на n1,n2 /* далее основной шаг */ 3.складываем n1 и к0 по mod2^32 4.Элементы из полученного и 32битного результа R=(r0,r1,r2,r3, r4,r5,r6,r7) меняем на элементы таблицы замен S=(s0,s1,s2,s3, s4,s5,s6,s7), слова Винокурова: - Далее значение каждого из восьми блоков заменяется новым, ко- торое выбирается по таблице замен следующим образом : значение блока Si меняется на Si-тый по порядку элемент(нумерация с нуля) i-того узла замен (т .е . i-той строки таблицы замен , нумерация также с нуля ). Вопрос1: Как это блин замена происходит, эти сухие математические слова мне ничего не дают. Вопрос2: Мне уже говорили что (A+B)mod2^32 это add a,b. Но поче- му где логика, смысл? Надеюсь не слишком напряг, если что извините! |
|
|
Дата: Июл 8, 2004 23:54:19 · Поправил: Black_mirror;перестановки различны! sblock0 db <перестановка чисел от 0 до 15> sblock1 db <перестановка чисел от 0 до 15> sblock2 db <перестановка чисел от 0 до 15> sblock3 db <перестановка чисел от 0 до 15> sblock4 db <перестановка чисел от 0 до 15> sblock5 db <перестановка чисел от 0 до 15> sblock6 db <перестановка чисел от 0 до 15> sblock7 db <перестановка чисел от 0 до 15> ;функция f(eax - r,edx - k) add eax,edx ;cмысл этого цикла в том, каждую 16-ричную цифру ;заменяем цифрой из соответствующей таблиц mov ecx,sblock0;база таблицы .l0: mov ebx,eax;отправляем одну из цифр в регистр ebx and ebx,0Fh;мы её будем использовать в качестве индекса xor eax,ebx or al,byte [ecx+ebx];записываем на её место цифру из таблицы ror eax,4;переходим к цифре add ecx,16;и таблице cmp ecx,sblock+16*8 jb .l0 |
|
|
Дата: Июл 9, 2004 17:17:57 Black_mirror Спасибо большое за отклик, но ты наверное невидел. Смысла что я этот основной шаг непонимаю точнее замену, что и как там должно делаться иначе бы я не привел бы слова Винокурова. За код большое спасибо, хотя его не вижу, т.е. не по- нимаю. Для этого см.выше! Если ты понимаешь, как делается замена просьба поделиться. Я хочу как ты мог видеть ранее реализовать его для 16ти разрядного доса, ну для 8086 чтоли. Ну нравится мне этот проц! |
|
|
Дата: Июл 9, 2004 17:53:36 · Поправил: Black_mirror EvilsInterrupt Для алгоритма требуется восемь таблиц сожержащих перестановки чисел от 0 до 15. Вот пример одной из таблиц: ;номер 0 1 2 3 4 5 6 7 8 9 A B C D E F sblock0 db 8,0,5,13,4,9,11,2,3,7,12,14,6,15,1,10 sblock1 db здесь другая перестановка и т.д. Помещаем в регистр bx указатель на нулевую таблицу: mov bx,sblock0 Загружаем в ax младшие 16 бит правой половины: mov ax,word [R] Получаем нулевой 4х битный блок: mov si,ax and si,0Fh Обнуляем этот блок в регистре ax: xor ax,si Ну а вот и сама замена, на место нулевого блока записываем блок из таблицы, номер которого совпадает с числом содержащимся до этого в нулевом блоке: or al,[bx+si] То есть если в ax у нас например было 3В8Сh после выполнения этого кода в ax будет 3B86. И выполнив ror ax,4 и add bx,16 можно переходить к замене следующей цифры. Как проще объяснить я не знаю, так как вся заменя осуществляется одной командой: or al,[bx+si] (или mov al,[bx+si] но тогда потеряется следующий блок) |
|
|
Дата: Июл 9, 2004 19:31:23 В ГОСТе замена производится вот как. DWORD рассматривается как массив из восьми элементов по 4 бита. Далее, к каждому элементу этого "массива" применяется операция a=Si[a], т.е. каждые 4 бита независимо от других заменяются на значение из таблицы, на которое эти самые 4 бита и указывают. С точки зрения реализации ИМО лучше из 8 таблиц 16x4 сделать 4 256x8 -- проще и быстрее побайтовые замены делать. В аттаче реализация, если интересно -- посмотри. 1286295530__gost_asm.asm |
|
|
Дата: Июл 9, 2004 19:44:10 спасибо пойду смотреть! Да линк на Романец ни кто случайно на int20h@yandex.ru |
|
|
Дата: Июл 9, 2004 23:07:58 Я понял как происходит замена. Теперь вопрос после того как заменили все элементы мы делаем rol rezult,11d, получился S. А после это- го мы что должны не шифрованную часть за xor`ить с S? Получаем скажем А и что потом? За аттачеваю свой проект, есть ли что не правильного в работе или в эффективности для 16ти разрядной? 535376834__28.147_89.zip |
|
|
Дата: Июл 10, 2004 11:03:10 в общем да. такая схема построения блочных шифров называется сетью Файстеля: входной блок делится на де равные части, далее на каждой итерации выполняется некоторая функция f() от одной половины (в ГОСТе от правой), результат этого выполнения ксорится с другой половиной ( с левой) и результат сохраняется в этой же части (т.е. в правой). Новой левой частью становится то, что было перед началом итерации в правой. Вообще, советую почитать или сам ГОСТ или хотя бы какое-нибуь описание, хотя бы в том же Шнаере. |
|
|
Дата: Июл 10, 2004 15:29:23 flankerx Так в самом начале указал, что опираюсь на Андрея Винокурова. Но там такой густой лес Математических записей, что просто не сразу поймешь, что автор имел ввиду. |
|
|
Дата: Июл 10, 2004 18:40:57 В основном шаге вспомогательный блок делится на n1,n2 далее (n1+k(i))mod 2^32, с результатом замена, и xor вмес- те с n2, получаемое циклически сдвинуть на 11d(rol rezult, cl, cl=11d) потом по Винокурову n2=n1,n1=rezult и теперь у меня возникает непонимание, что на самом деле с n1 ни- каких махинаций не делается, то в случае если информация будет текстовой то это даст криптоаналитику даст пищу для размышлений. Может я что то не так понял? |
|
|
Дата: Июл 10, 2004 19:12:58 у тебя 32 раунда шифрования. ты описал только один. Давай так. Пусть f(x,k) -- это функция преобразования в одном цикле, т.е. сложение с подключом, S-блок, циклический сдвиг. Пусть также n1i (n2i) -- значение правого (левого) блока после i-го раунда шифрования Тогда перед выполнением алгоритма иммем n20 = L, n10 = R (просто входные данные) После первой итерации алгоритма: n21=n10; n11=f(n10,k) XOR n20 После второй n22=n11; n12=f(n11,k) XOR n21 И так 32 раза. Так что не похоже что где-то открытый текст остается. |
|
|
Дата: Июл 10, 2004 21:29:24 Для генарации ключа и таблицы замен: Задолбался делать генератор псесвдослучайных чисел может кто подакажет хорошее решение диапазон {1,4} Вот моя дурь! 1136918234__generat.asm |
|
|
Дата: Июл 10, 2004 22:03:50 flankerx Я думаю, смотри пикчу, мы из файла выбираем 64 битный блок N1 делим на n1,n2. шаг: Далее складываем (n1+k(i)) mod2^32 получаем Sслож. далее делаем замену получаем Sз потом rol Sз,11d итог Srol и xor Sr,n2 получаем Send. теперь я думаю мы берем ki+1 и jmp шаг и так 32 раза. После на место n2 ложим n1, а на n1 кидаем Send и выбираем N2,N3... и так до конца массива данных. Где глуплю? 845381851__crypt_bmp.zip |
|
|
Дата: Июл 11, 2004 10:04:44 А что мешает тебе взять таблицы замены ГОСТа из Шнаера? Свой ГСЧ лучше не пиши -- хорошо не получится, а плохо и rand() умеет. Как только ты получил Send, ты в n1 записываешь Send XOR n2, а в n2 -- содержимое регистра n1 до начала раунда. И вот только после этого повторяешь еще 31 раз этот цикл. Если совсем непонятно -- поищи другие описания ГОСТа, погугль на тему "сети Файстеля", посмотри описание DESа на худой конец. А вообще, наверное, тебе стоит посмотреть на существующие реализации -- в Интернете полно их и на Сях и на асме.. Да и здесь я вроде постил.. |
|
|
Дата: Июл 12, 2004 14:05:32 На сайте Винокурова А. есть исходники на асме под 16-ти разрядный проц. _http://www.enlight.ru/crypto/frame.htm если надо. Этим ГОСТом я занимался, могу тебе посоветовать еще вести проверку нестойких и стойких таблиц перестановки. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.211 |