Готовые реализации алгоритмов шифрования
January 25th, 2009 Begemot Posted in Шаровароварение
Перерыв затянулся, но все же вернемся к криптографии. Про выбор алгоритма я писал в прошлый раз, в этот раз как это можно реализовать, .
Существует ряд готовых решений\библиотек для реализазиции ассиметричной криптографии, со своими плюсами и минусами. Если мы говорим про с++ то это
OpenSSL – известнейший криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать… и так далее и тому подобное. Написан на чистом С, кроссплатформенный. Помимо самой библиотеки идет набор скомпилированных утилит которые можно использовать для генерации ключей, создания и проверки подписи етс.
Crypto++ – народная библиотека:) с++, ООП, открытость, бесплатность, кросспалтформенность, куча алгоритмов. Примеров использования в интернете мне удалось найти на порядок больше чем для опенссл.
GMP – Я не разбирался, но занимался Сергей Парфенюк – Реализация RSA при помощи библиотеки GMP. Но беглого взгляда на сайт достаточно что бы увидеть она LGPL, и соответсвенно для наших целей уже не идеальна.
Сам я разбирался с первыми двумя вариантами – покопавшись мне удалось (или почти удалось) подписывать сообщения DSA подписью и проверять их. У обоих библиотек есть большой минус – они добавляют 180-300 килобайт кода к вашему ехе файлу, что не хорошо.
Еще есть виндовое Crypto API некоторые его хвалят, некоторые сильно ругают. Но учитывая что стоит довольно простая задача – только проверять подпись, я думаю что вполне можно использовать – сам не разбирался.
Вообщем идеального варианта нету – первые два сильно раздувают ехешник, третий не устраивает лицензией, четвертый не кроссплатформенный.
Но есть и еще один путь – написать свою реализацию. По слухам, DSA реализовать намного проще чем RSA. Лично я не рискнул, но нашелся человек – Ippi, которому тоже надо и который не убоялся. У него получилось и он поделился, за что выражаю ему огромную благодарность:) В итоге имеем маленькую (всего 5кб) реализацию, к тому же обещают отсутствие проблем с кроссплатформенностью – просто идеал!
Ссылки по теме
OpenSSL – Основы работы с OpenSSL, Использование OpenSSL (ssl security crypt cert mod_ssl apache imap postfix)
Crypto++ – Compiling and Integrating Crypto++ into the Microsoft Visual C++ Environment, Applied Crypto++: Using the RSA Digital Signature System (Part I), Product Activation Based on RSA Signatures
Crypto API – Использование Crypto API, Cryptography using the Win32 Cryptography API, MSDN Using Cryptography
January 25th, 2009 at 5:54
Может немного не в тему, но почему LGPL не идеальна-то?
January 25th, 2009 at 6:03
Потому что надо dll таскать с собой, ну а главное мне кажется такое легко сломать, хотя тут я не специалист.
January 26th, 2009 at 11:44
Лицензия на стойкость алгоритма не влияет. Это же открытые алгоритмы. И в чем проблема таскать за собой DLL? Боишься, что либу подменят?
Вообще непонятна тяга с большим криптографическим пакетам. Тебе нужна реализация одного алгоритма? Их полно в инете и на разных языках (ASM/C/Pascal).
January 26th, 2009 at 11:59
Ну да, первое что подумалось – про возможность взлома путем подмены длл, там небось весь взлом это поставить return true и перекомпилить dll из открытых сорцов 🙂
Хотя и саму прогу взломать несложно, возможно даже проще, но зачем оставлять явные лазейки?
А тяги к большим пакетам нет никакой, я бы сам с радостью взал готовое маленькое решение, потому что дополнительные 200кб были для меня крайне критичны. Но я не нашел маленькой реализации…. (32 битная с кодепроджекта не в счет)
January 27th, 2009 at 12:45
А чтобы либу не подменяли используй цифровую подпись, контрольные суммы. Если у тебя целостность кода программы не проверяется, то разницы никакой.
P.S. На sourceforge.net посмотри если C++/ASM, я сам Delphi использую.
January 27th, 2009 at 4:17
iCE> “А чтобы либу не подменяли используй цифровую подпись, контрольные суммы”
А цифровую подпись либы для проверки цифровой подписи проверять, простите, чем? 😉
January 28th, 2009 at 5:29
вероятно, цифровой подписью цифровой подписи либы для проверки цифровой подписи 🙂
September 15th, 2009 at 5:03
Я просто CRC32 юзаю плюс самотестирование алгоритма.
Кстати, какая длинна ключей получилась с DSA? Я помнится по-молодости использовал RSA 128бит, которая ломалась чуть ли не на калькуляторе 🙂
September 15th, 2009 at 6:09
Самое важное – реализация для PHP кейгена у тебя тоже есть?
September 18th, 2009 at 4:42
По моему у меня 2048 используется, хотя уже не помню точно.
У меня есть реализация пхп кейгена который дергает с++ бинарник, на виндовом хостигне, вообще можно и под линукс перевести, но руки не доходят да и необходимости особой нет.
September 18th, 2009 at 5:32
Значит прийдется виндовый хостинг искать, у меня все на Делфи.