Jump to content

    

ГОСТ 28147-89

Реализовал проект алгоритма ГОСТа 28147 в режиме простой замены, пока только зашифрования данных на VHDL в среде Xilinx ISE+QuestaSim.

Эталонный результат не получен в результате моделирования.

При внимательном разборе временных диаграм увидел, что не срабатывает при переходе

с 0-го цикла на 1-й запись из сумматора по мод2 SM2в нако N1, ну и соответственно прис ледуещем цикле

из N1 в N2. При дальнейшей работе последовательность считывания и записи правильная.

В проекте использовались ключ KEY_IN (256 бит) и блок данных (64 бит)DATA_IN(нули), при этом должна былы получится зашифрованная последовательность DAFE3AD9FA67E757.

 

Я приложил архив с исходниками и скриншотом тестбенча, поясняющего то,что я только что описал.

 

Подскажите , что нужно изменить.

vhdl_source.rar

Share this post


Link to post
Share on other sites

Блин, ну это уже хамство натуральное!!! Другим больше заняться нечем, как Вашу работу делать. Будьте так любезны - разберитесь сами как работает (должно работать) управление и переделайте его сами. Epikur и так сделал для Вас больше, чем следовало.

Share this post


Link to post
Share on other sites

lincolndsp

Всё, что я могу сказать, это то, что предложенный мой код проходит тесты и является 100% рабочим. Ищи ошибку у себя.

Зы. Архив пустой.

Зыы. Читай предыдущую запись.

Share this post


Link to post
Share on other sites

получилось реализовать простую замену. Вопрос: результирующий блок данных считывается

в каком цикле и в каком цикле записывается новый блок данных в накопители N1 и N2? то есть

какая очередность?

Share this post


Link to post
Share on other sites
получилось реализовать простую замену. Вопрос: результирующий блок данных считывается

в каком цикле и в каком цикле записывается новый блок данных в накопители N1 и N2? то есть

какая очередность?

Рад за Вас. :)

В принципе, ничего не мешает делать это одновременно, все зависит от того, как реализовано управление алгоритмом. Как только накопитель не участвует в выработке очередной порции данных - в него можно записывать очередной входной блок. Вы данные грузите и считываете по 64 разряда или, как я советовал, по 32?

Share this post


Link to post
Share on other sites

пока на начальных стадиях я блок данных храню в виде 64 битного блока, а затем уже

считываю в накопители по 32 бита

Share this post


Link to post
Share on other sites

Перед началом работы нужно загрузить блок данных в N1, N2.

Цикл 0: N1 <- N2 xor SH11(SUBST((KEY0 + N1) mod 32)); N2 <- N1
Цикл 1: N1 <- N2 xor SH11(SUBST((KEY1 + N1) mod 32)); N2 <- N1
...
Цикл 30: N1 <- N2 xor SH11(SUBST((KEY1 + N1) mod 32)); N2 <- N1
Цикл 31: N1 <- N2 xor SH11(SUBST((KEY0 + N1) mod 32)); N2 <- INPUT32; OUTPUT32 <- N1 (Во время 31 цикла можно выдать 32 - разрядный блок и загрузить очередной входной блок)
Цикл 32: N1 <- N2; N2 <- INPUT32; OUTPUT32 <- N1 (Аналогично - во время 32 цикла)
Цикл 0: ... 
и т.д.

Share this post


Link to post
Share on other sites

бьюсь над реализацией режима гаммирования, но все никак из-за

сложностей реализации первоначального этапа работы с синхропосылкой и предустановок т.д не получается перед тем как перейти к повтрояюющемуся фрагменту алгоритма.

Share this post


Link to post
Share on other sites

как можно реализовать участок алгоритма любого,где

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

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

который повторяется?

Share this post


Link to post
Share on other sites

lincolndsp

>>как можно реализовать участок алгоритма любого,где

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

Либо при помощи конечного автомата, либо с внешним микроконтроллерным управлением.

Share this post


Link to post
Share on other sites

Epikur, а как вы решали жту проблему, при реализации участка

кода инициализации в режиме гаммирования?

Share this post


Link to post
Share on other sites

У меня FPGA является ведомым устройством, которое управляется при помощи контроллера.

Share this post


Link to post
Share on other sites

удалось реализовать ГОСТ в режиме гаммирования. При этом и ключ и тестовый вектор данных

хранился прямо в коде. Хочу сейчас поработать с хранением ключа в памяти. Подскажите пожалуйста

как это сделать, а то создаю я Distributed Memory в LogicCore, а на третьем этапе требует

коэффициенты какие-то и дальше стрелка неактивна, запутался я.

Share this post


Link to post
Share on other sites

Забейте на LogiCore. Синтезируйте распределенную память 32х16 сами - это около десятка строчек. Запись ключа реализуйте по отдельной шине (можно сделать любой ширины кратной 8: 8, 16, 32 - чем шире, тем быстрее будет грузиться ключ). Адрес записи выбирайте тем же счетчиком, что и при шифровании. Нужно будет предусмотреть специальный режим (ветку управляющего автомата) для загрузки ключа. Можно еще использовать двухпортовую блочную память - синтезируется так же просто (примеры есть в Language Templates ISE). В этом случае запись можно выполнять по другому порту. При выполнении операций шифрования нужный ключ выбирать старшими битами адреса.

Share this post


Link to post
Share on other sites
Забейте на LogiCore. Синтезируйте распределенную память 32х16 сами - это около десятка строчек. Запись ключа реализуйте по отдельной шине (можно сделать любой ширины кратной 8: 8, 16, 32 - чем шире, тем быстрее будет грузиться ключ). Адрес записи выбирайте тем же счетчиком, что и при шифровании. Нужно будет предусмотреть специальный режим (ветку управляющего автомата) для загрузки ключа. Можно еще использовать двухпортовую блочную память - синтезируется так же просто (примеры есть в Language Templates ISE). В этом случае запись можно выполнять по другому порту. При выполнении операций шифрования нужный ключ выбирать старшими битами адреса.

 

спасибо за ответ :a14: ....хочу спросить, какое различие распределенной и двухпортовой блочной памяти,

как организуется запись и считывание данных. Просто я еще не работал с памятью, а нагляднее

было бы, если посмотреть на примерчик.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this