Простая реализация шифрования в C

Раньше я использовал хорошую реализацию C++ DES для общего пользования, но теперь мне нужна простая, простая и быстрая криптография для встроенной системы.

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

Из-за ограниченного объема памяти на этом процессоре, я бы предпочел что-то, что может кодировать в дискретных порциях (512 байт или меньше).

Проект не с открытым исходным кодом, и не будет использовать библиотеки, которые, как я знаю, ограничивают варианты - публичный домен лучше, но BSD/apache/etc, вероятно, приемлемы...

Я не решаюсь катиться самостоятельно (как и должно быть всем).

-Адам

4 ответа

Решение

Если вы просто ищете запутывание, XOR с секретной константой - такая же маленькая реализация, как вы найдете. Это также было бы тривиально, потому что его можно анализировать по частоте, чтобы искать наиболее распространенные английские буквы.

Если вам нужен более сильный алгоритм, я бы порекомендовал посмотреть на blowfish, который имеет тенденцию быть маленьким и быстрым. Он все еще требует памяти для таблиц, но, надеюсь, он будет работать для вашего приложения.

Брюс Шнайер явно поместил алгоритм Blowfish в общественное достояние, дезавуируя патенты. Вы можете получить его реализацию на C (и другие реализации) с его сайта. Этот источник не несет уведомления об авторских правах. Я подозреваю, что исходный код тоже находится в свободном доступе, но может потребоваться дополнительная проверка.

RC4 прост и быстр.

Тот же самый человек, который выпустил реализацию C++ DES, также выпустил алгоритм шифрования C Rijndael - мне следовало бы еще немного поковыряться с его сайтом. Алгоритм Tiny Encryption ( академическая статья здесь) также имеет очень маленький след реализации C.

Blowfish выглядит хорошо, и, вероятно, лучший из этих трех с точки зрения безопасности.

Я начну с TEA (небольшой код и объем памяти), но заверну его, чтобы позже при необходимости перейти к другому алгоритму. У него есть заметные слабости в его более ранних реализациях, но для этого проекта может быть даже излишним.

-Адам

Вы можете использовать генератор псевдослучайных чисел (PRNG) для генерации повторяемой последовательности слов, которую вы затем XOR с соответствующим словом в вашем потоке данных. (Передатчик и приемник должны заранее знать параметры, используемые для генерации псевдослучайной последовательности.)

Этот подход не является неразрывным, но это шаг от использования константы для XOR-а - и PRNG очень просты в реализации, обычно состоят из одной операции умножения и по модулю для каждого слова.

Другие вопросы по тегам