Готовые реализации алгоритмов шифрования

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

Related:

11 Responses to “Готовые реализации алгоритмов шифрования”

  1. Может немного не в тему, но почему LGPL не идеальна-то?

  2. Потому что надо dll таскать с собой, ну а главное мне кажется такое легко сломать, хотя тут я не специалист.

  3. Лицензия на стойкость алгоритма не влияет. Это же открытые алгоритмы. И в чем проблема таскать за собой DLL? Боишься, что либу подменят?

    Вообще непонятна тяга с большим криптографическим пакетам. Тебе нужна реализация одного алгоритма? Их полно в инете и на разных языках (ASM/C/Pascal).

  4. Ну да, первое что подумалось – про возможность взлома путем подмены длл, там небось весь взлом это поставить return true и перекомпилить dll из открытых сорцов 🙂

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

    А тяги к большим пакетам нет никакой, я бы сам с радостью взал готовое маленькое решение, потому что дополнительные 200кб были для меня крайне критичны. Но я не нашел маленькой реализации…. (32 битная с кодепроджекта не в счет)

  5. А чтобы либу не подменяли используй цифровую подпись, контрольные суммы. Если у тебя целостность кода программы не проверяется, то разницы никакой.

    P.S. На sourceforge.net посмотри если C++/ASM, я сам Delphi использую.

  6. iCE> “А чтобы либу не подменяли используй цифровую подпись, контрольные суммы”

    А цифровую подпись либы для проверки цифровой подписи проверять, простите, чем? 😉

  7. вероятно, цифровой подписью цифровой подписи либы для проверки цифровой подписи 🙂

  8. Я просто CRC32 юзаю плюс самотестирование алгоритма.

    Кстати, какая длинна ключей получилась с DSA? Я помнится по-молодости использовал RSA 128бит, которая ломалась чуть ли не на калькуляторе 🙂

  9. Самое важное – реализация для PHP кейгена у тебя тоже есть?

  10. topmedia: Кстати, какая длинна ключей получилась с DSA?

    По моему у меня 2048 используется, хотя уже не помню точно.

    topmedia: Самое важное – реализация для PHP кейгена у тебя тоже есть?

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

  11. Значит прийдется виндовый хостинг искать, у меня все на Делфи.