Важная информация

User Tag List

Показано с 1 по 8 из 8

Тема: Шифр AES-128: компактная реализация для Z80 (1001 байт кода)

  1. #1
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    Cool Шифр AES-128: компактная реализация для Z80 (1001 байт кода)

    Дорогие друзья, предлагаю вам реализацию современного криптостойкого, стандартного шифра AES (Rijndael) для Z80.

    Реализация получилась очень компактной: всего 1001 байт кода (из них 512 - таблицы замен); для работы требуется 192 байта оперативной памяти + несколько уровней вызовов подпрограмм на стеке. Не используется самомодифицирующийся код, так что библиотеку можно размещать в ПЗУ или защищенной памяти. Можно работать с разрешенными прерываниями, библиотека их не запрещает. По скорости - я очень старался оптимизировать, если это не приводило к значительному росту размера кода. Улучшить быстродействие можно лишь размотав циклы и/или использовав прожорливые по оперативной памяти методы оптимизации этого шифра.

    Все подпрограммы были протестированы на тестовых данных, хотя любому, кто будет их использовать, рекомендуется провести собственные тесты, сравнив результаты с реализациями этого шифра на PC.

    Исходник компилируется ассемблером sjasmplus.

    AES-128 - это симметричный блочный шифр с длиной блока 128 бит (16 байт) и такой же длиной ключа. Моя библиотека реализует только базовый алгоритм ECB (режим простой замены), который по заданному блоку открытого текста (plaintext) и ключу формирует блок шифротекста или выполняет обратную операцию. При заданном ключе каждой комбинации из 16 байт исходного текста соответствует комбинация из (других) 16 байт шифротекста, и наоборот. Если пытаться шифровать в таком режиме длинные файлы - то никакие блочные шифры (в том числе AES) не обеспечивают достаточного сокрытия закономерностей в исходных данных. Например, если в исходном файле присутствует длинный блок нулей - то в зашифрованном в режиме ECB файле будут повторяющиеся последовательности из 16 байт. Для преодоления этого недостатка необходимо реализовать более сложные схемы работы шифра, например CBC (режим сцепления блоков шифротекста).

    Библиотека содержит три функции:
    key_expansion - расширение ключа. Должна вызываться перед началом работы с новым ключом.
    aes_encrypt - шифрование блока. Перед вызовом необходимо поместить блок открытого текста в буфер. В этом же буфере возвращается шифротекст.
    aes_decrypt - расшифрование блока. Перед вызовом необходимо поместить блок шифротекста в буфер. В этом же буфере возвращается расшифрованный текст.

    Если будут вопросы - обращайтесь.

    Хочу заметить, что AES является относительно быстрым из стойких современных шифров, поэтому, если скорость работы библиотеки вас не очень порадует - имейте в виду, что это одна из лучших альтернатив, если требуется сильное шифрование. Использование же доморощенных, самодельных шифров серьезно ставит под угрозу безопасность данных, даже если результат самодельного шифрования выглядит "кашей". Об этом написаны десятки статей и глав в книгах. Так что я предупредил.

    Реализация AES - это лишь один кирпич в здании по-настоящему защищенной системы. Поэтому, если хотите надежно защитить данные - читайте матчасть по ссылкам. В частности, правильное обращение с ключами, паролями и т.д. - все это очень важно для безопасности, но полностью выходит за рамки моей библиотеки.
    Вложения Вложения
    • Тип файла: zip aes.zip (4.4 Кб, Просмотров: 624)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    эээммм, а чуо aes.bin 2048 байт кода получается? или у нас разнайя ширина байт?
    я просто не подрезаю bin-файл по границе. Посмотри адреса в lst-файле и вычти из них 192 байта рабочей памяти, которая не инициализируется.

  4. #3
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    ну так да, тыщща. Остальное ,я так понимаю, на закладки для неназываемых-в-слух структур?
    Каких еще структур? Читать умеешь? 1001 байт кода и 192 байта оперативки для работы + стек. Да и какая тебе разница? Судя по надменному отношению, издевательством над русским языком и попыткам придраться к мелочам, ты не собираешься пользоваться библиотекой, а желаешь только срезать меня. Не вышло пока, потому что я опубликовал тщательно выверенную работу. Но тебе этого не понять до тех пор, пока сам не попытаешься сделать что-то подобное.

    ---------- Post added at 18:58 ---------- Previous post was at 18:54 ----------

    Что касается доверия к коду, то проверить его очень просто. В инете есть наборы данных для проверки реализаций шифров, в том числе AES. Приведены образцы открытого текста, ключей и соответствующего им шифротекста. Достаточно прогнать мою библиотеку на этих образцах и убедиться, что результаты совпадают. Это необходимо делать, я сам так делал, иначе никогда бы не отладил свою реализацию. Если беспокоит наличие закладок для органов - то в их отсутствии тоже несложно убедиться, для этого достаточно изучить алгоритм шифрования и сравнить его с моей реализацией. Понять такой код не сложнее, чем его составить, поверьте.

  5. #4
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Barmaley_m, как ты видишь практическое применение сабжа на спектруме?

  6. #5
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    Barmaley_m, как ты видишь практическое применение сабжа на спектруме?
    Зачастую жизнь оказывается изобретательнее автора инструмента. Так что я оставлю вопрос о применении тем, кому оно может понадобиться. Когда-то в далеком 1998г, например, я изобретал распознавание музыки по цифровой звукозаписи. Мне лично это было нужно, чтобы подобрать музыку, которую на слух подобрать не получалось. Других применений я тогда не мог придумать. А сегодня эти методы, разработанные в начале 2000х, используются повсеместно для контроля авторских прав и опознания звукозаписей, автор которых неизвестен. Так что никогда не знаешь, для чего может потребоваться какая-нибудь хорошая и универсальная вещь.

    Я могу себе представить следующие варианты использования шифра на Спектруме:
    1) шифрование информации на время хранения. Секретные документы пользователя. Хоть скорость работы шифра и невысока, но и типичные размеры документов на Спектруме невелики. Хотя сейчас мало кто работает на реале с какими-либо документами, но если захочется их как следует зашифровать - теперь это возможно. Из достоинств - малый размер и сложность системы и возможность проконтролировать ее на наличие закладок;
    2) взаимодействие по сети с применением протоколов, поддерживающих/требующих шифрование. Разумеется, речь идет о передаче лишь малых объемов данных;
    3) генерация криптостойких случайных чисел, паролей, уникальных идентификаторов;
    4) реализация на основе блочного шифра криптостойких хеш-функций, контроль целостности данных, программ;

  7. #6
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Защита игр с ключом в труднодоступном месте. Это вам не ксорка какая-нибудь

  8. #7
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Это вам не ксорка какая-нибудь
    По сути дела это ксорка, но она реально взрывает мозг, если ты не знаешь, с чем имеешь дело и пытаешься ее анализировать

  9. #8
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,767
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    1,173
    Поблагодарили
    770 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    ещё встречалась пара игр где проверялась контрольная сумма блока
    (на случай установки бессмертия) причём проверки могли проводиться примерно в середине игры.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ЮТ-88: Реализация на ПЛИС (DE1)
    от Santechnik в разделе ЮТ-88
    Ответов: 61
    Последнее: 13.05.2022, 08:22
  2. Владельцам ПЭВМ "Байт" и "Байт-01" посвящается...
    от BYTEMAN в разделе Несортированное железо
    Ответов: 24
    Последнее: 20.09.2010, 23:25
  3. Как вытащить кусок кода?
    от PicNov76 в разделе Программирование
    Ответов: 7
    Последнее: 31.05.2010, 18:01
  4. Помощь с оптимизацией кода
    от moroz1999 в разделе Программирование
    Ответов: 7
    Последнее: 02.06.2008, 14:19
  5. Как из кода получить текущее значение PC?
    от jim в разделе Программирование
    Ответов: 21
    Последнее: 01.06.2006, 11:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •