Рекомендуемый криптографический модуль Python? - PullRequest
30 голосов
/ 16 июля 2009

Я изучал, какие криптографические модули доступны для Python, и нашел 3: ezPyCrypt, yawPyCrypt и KeyCzar (который на самом деле поддерживает несколько языков, но среди них есть Python). Первые два полагаются на модуль PyCrypto.

Есть ли варианты, которые мне не хватает? Есть ли явный лидер по легкости и функциональности или он просто сводится к уровню комфорта?

Сейчас я склоняюсь к KeyCzar, а ezPyCrypt позади.

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

Я использую Python 3.x и имею доступ к GPG.

Ответы [ 8 ]

20 голосов
/ 26 февраля 2014

Новая библиотека криптографии для Python находится в стадии быстрой разработки уже несколько месяцев. Релиз 0.2.1 только что произошел несколько дней назад.

https://cryptography.io/en/latest/

Это в основном оболочка CFFI вокруг существующих библиотек C, таких как OpenSSL. Он распространяется как чистый модуль Python и поддерживает версии CPython 2.6 - 3.3, а также PyPy. Это также предшествующий этап переработанного пакета pyOpenSSL.

Цель - раскрыть «рецепты» высокого уровня, которые делают криптографию максимально защищенной от идиотов, а также примитивы, которые следует использовать только с соответствующей осторожностью. Симметричные алгоритмы (включая AES-GCM) очень хорошо поддерживаются, и асимметричные алгоритмы, такие как RSA и DSA, должны появиться в следующих нескольких выпусках. Другие известные алгоритмы, которые поддерживаются, включают PBKDF2, HKDF, HOTP и TOTP.

13 голосов
/ 16 июля 2009

Если вы находитесь в среде, которая включает GnuPG и Python> = 2.4, то вы также можете рассмотреть такой инструмент, как python-gnupg . (Отказ от ответственности: я поддерживаю этот проект.) Он оставляет тяжелую работу на gpg и предоставляет довольно простой API.

Обзор API:

>>> import gnupg
>>> gpg = gnupg.GPG(gnupghome='/path/to/keyring/directory')
>>> gpg.list_keys()

[{
  ...
  'fingerprint': 'F819EE7705497D73E3CCEE65197D5DAC68F1AAB2',
  'keyid': '197D5DAC68F1AAB2',
  'length': '1024',
  'type': 'pub',
  'uids': ['', 'Gary Gross (A test user) ']},
 {
  ...
  'fingerprint': '37F24DD4B918CC264D4F31D60C5FEFA7A921FC4A',
  'keyid': '0C5FEFA7A921FC4A',
  'length': '1024',
  ...
  'uids': ['', 'Danny Davis (A test user) ']}]
>>> encrypted = gpg.encrypt("Hello, world!", ['0C5FEFA7A921FC4A'])
>>> str(encrypted)

'-----BEGIN PGP MESSAGE-----\nVersion: GnuPG v1.4.9 (GNU/Linux)\n
\nhQIOA/6NHMDTXUwcEAf
...
-----END PGP MESSAGE-----\n'
>>> decrypted = gpg.decrypt(str(encrypted), passphrase='secret')
>>> str(decrypted)
'Hello, world!'
>>> signed = gpg.sign("Goodbye, world!", passphrase='secret')
>>> verified = verified = gpg.verify(str(signed))
>>> print "Verified" if verified else "Not verified"

'Verified' 
9 голосов
/ 15 июля 2014

Другая криптографическая библиотека, которую следует рассмотреть, - это PyCryptodome , форк PyCrypto с поддержкой PyPy и еще несколько примитивов (SHA-3, Salsa20, scrypt и т. Д.).

8 голосов
/ 16 июля 2009

pycrypt на самом деле представляет собой простой модуль шифрования / дешифрования AES, построенный поверх pycrypto , как и другие упомянутые вами модули - обратите внимание, что последний переходит на URL-адрес pycrypto.org как он меняет сопровождающих, а стабильные версии и документы до сих пор находятся на сайте оригинального автора . В дополнение к более простым в использовании упаковщикам, о которых вы упомянули, одним из преимуществ pycrypto является то, что его чистое python subset поставляется с Google Engine App Engine, поэтому знакомство с ним будет полезно, если вы когда-нибудь хочу развернуть любой код там.

Основная альтернатива (еще один мощный и сложный проект, такой как pycrypto) - это pyopenssl , который представляет собой довольно регулярную оболочку («тонкая оболочка», как описывает ее автор) OpenSSL (это может быть плюсом, если вы привыкли кодировать на C с помощью вызовов OpenSSL). Полная альтернативная упаковка (поставляется с необходимыми библиотеками) и, возможно, юридически более безопасная (за исключением частей, по которым имеются патентные споры или сомнения), распространяется по egenix .

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

Я не знаю о простых в использовании оболочках поверх pyopenssl (скорее всего, есть, но они не были опубликованы, как те, что поверх pycrypto) и так, если, как вам кажется, вас волнует легкость использования и не хотите писать обертки самостоятельно, те, что на вершине pycrypto, кажутся лучшим выбором.

3 голосов
/ 03 августа 2013

PyCrypto - мой выбор, atm (последнее обновление pypi 2012-05-24), а исходный код размещен на GitHub: https://github.com/dlitz/pycrypto. Он может запускать чистую математику Python или использовать libgmp (вам потребуется sudo apt-get install libgmp-dev в Debian, чтобы включить последнюю версию).

M2Crypto - это оболочка для OpenSSL (последнее обновление pypi 2011-01-15), исходный код для http://svn.osafoundation.org/m2crypto/.

gnupg (обновлено 2013-06-05), см. Ответ Виней Саджипа . Существует пропатченная вилка (обновлено 2013-07-31), размещенная в https://github.com/isislovecruft/python-gnupg

Другие альтернативы упоминаются Алекс Мартелли

РЕДАКТИРОВАТЬ: критика существующих криптопакетов и ссылки на некоторые новые https://news.ycombinator.com/item?id=6194102

3 голосов
/ 06 сентября 2009

Я только что провел такой опрос на прошлой неделе и принял M2Crypto, который, похоже, является самой продвинутой оболочкой на сегодняшний день над openssl (нашел его в нескольких списках рекомендаций во время поиска в Google). Я также попробовал pycrypto, но он пропускает управление сертификатами и стандартное управление форматами файлов ключей, которые есть в M2Crypto (с pycrypto вы должны выбирать / открывать ключи или писать собственный менеджер ключей для распространенных форматов).

Я обнаружил, что M2Crypto довольно прост в использовании и способен быстро разработать то, что мне нужно (формат подписанного и зашифрованного пакета).

Однако я рекомендую скачать полный пакет, а не просто установить его, потому что в пакете вы также получите отличные примеры (см. Демонстрационный каталог).

Вот ссылка http://pypi.python.org/pypi/M2Crypto/0.20.1

Недостатком может быть то, что вы используете python 3.0, я застрял с 2.5 на работе (надеюсь, скоро 2.6) и не знаю, работает ли M2Crypto с python 3.0

У меня пока не так много практики, если у вас есть конкретные проблемы, просто спросите здесь. Кто-то может ответить.

2 голосов
/ 16 июля 2009

Как насчет PyCrypto (ранее http://www.amk.ca/python/code/crypto.html)??

0 голосов
/ 16 сентября 2014

Keyczar - это круто, но ему не хватает заполнения OAEP | PKCS, которое доступно только в версии Java. https://code.google.com/p/keyczar/wiki/KeyczarTool

Кроме того, в настоящее время отсутствует шифрование на основе пароля, которое доступно в C ++. https://code.google.com/p/keyczar/issues/detail?id=149&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Implementation%20Summary

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...