Цитата(acex2 @ Feb 21 2005, 14:07)
Цитата(Maksim @ Feb 10 2005, 12:06)
Цитата(yes @ Feb 9 2005, 18:09)
кстати с полиномом совет весьма вредный -
есть так называемая рекурентная процедура Берликемпа-Месси (вроде так), да и вообще можно самому догадаться (пусть менее элегантным способом), которая восстанавливает полином длинны N по потоку 2N. с линейными вычислительными затратами (то есть удлиннение полинома не приводит к усложнению декодирования)
по-хорошему - надо ставить какие-то готовые элементы (которые криптографически проверены)
минималистический - что-то типа Keloq
посерьезнее DES с каким-то генератором (хотя может это тоже плохо - нужно дать криптографам на анализ, если секретность - серьезная проблема)
А кто вам даст эти 2N? - если N~300 и сранение идёт по нескольким битам(которыми обмениваются микроконтроллер и FPGA), то как вы собираетесь востановить основание полинома? главное чтобы микрокнтроллер имел на каждое влючение питание новое значение на входе полинома, например,счётчик.
Алгоритм Берлекэмпа-Месси использует 2*N, а не 2^N бит, поэтому для восстановления полинома с длиной 300 бит необходимо всего лишь 600 бит последовательности. Что касается идеи с обновлением значения полинома с каждым новым включением, то не стоит забывать, что последовательность генерируется обоими устройствами: FPGA и МК в данном случае. А вот как вы собираетесь обновлять начальное значение полинома в FPGA с каждым включением, не совсем понятно. Разве что прошивку патчить каждый раз или добавлять фазу загрузки начального значения в FPGA после включения. Но это неэффективно, да и не нужно. Потому что для криптографически-стойкого алгоритма генерации ПСП единственный способ ее повторить, это записать ее в память и потом повторять каждый раз при включении устройства, что физически невозможно - каждую секунду на частоте 1 Мгц будет генерироваться 1 млн. новых бит.
Что касается полиномов, то тут необходимо использовать нелинейные генераторы, например каскад Голлмана или схему Stop-and-Go. Вариант из алгоритма A5 с увеличенными длинами полиномов тоже подойдет. Все они легко реализуются в железе и взломать их практически невозможно при большой разрядности используемых полиномов - проще будет CPLD "расковырять" под микроскопом.
Берётся два полинома - предположим, длинный и короткий.
Начальное заполнение полиномов берём от датчика случайных чисел.
На вход длинного полниома заводим выход короткого.
Микроконтроллер при включении питания сообщает в FPGA номер
первого включения N=1(). FPGA полученный номер складывает с какой-то
секретной константой и результат на вход короткого полнинома и прокрутить его
M-тактов (M должно быть больше основания полинома (М=20, крутим 25-30 тактов и т.д.)).
Потом крутим короткий полином и результат подаём на вход длинного полинома,
и тоже прокручиваем энное количество тактов.Микроконтроллер тоже самое проделывает у
себя внутри, после чего результат сообщает в FPGA (в явном виде, с переставленными
битами и т.д.). После каждого включения питания при такой системе выдаваемые ответы
микроконтроллером будут "стоять" не рядом(имеет ввиду следующее значение полинома),а
сбиваться случайным образом за счёт короткого полинома.
Но это так что первое пришло в голову, а лучше я согласен - если есть место
то зашить туда шифратор с ключом и сообщать FPGA секретную константу для запуска, котороая
будет шифроваться гамированием, например (синхропосылка+зашифрованная константа).