Подтвердить что ты не робот

Рекомендуемый криптографический модуль Python?

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

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

В настоящее время я склоняюсь к KeyCzar, рядом с ezPyCrypt.

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

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

4b9b3361

Ответ 1

Если вы находитесь в среде, которая включает в себя 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' 

Ответ 2

Новая криптографическая библиотека для 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.

Ответ 3

pycrypt - фактически простой модуль шифрования/расшифровки AES, построенный поверх pycrypto, как и другие модули, которые вы упомянули, - обратите внимание, что последний переходит к URL-адресу pycrypto.org, поскольку он меняет сопровождающих, а стабильные версии и документы все еще находятся в оригинальном авторе сайт. В дополнение к простым в использовании оберткам, которые вы упомянули, один плюс pycrypto заключается в том, что подкомплект pure-python pyopenssl, что является довольно регулярной упаковкой ( "тонкой обертка", как описывает автор) OpenSSL (это может быть плюсом, если вы привыкли к кодированию на C с вызовами OpenSSL). Альтернативная упаковка, которая завершена (поставляется с необходимыми библиотеками) и, возможно, юридически безопаснее (исключая части, на которых имеются патентные споры или сомнения) распространяется egenix.

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

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

Ответ 6

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), см. Vinay Sajip answer. Существует исправленная версия (обновлено 2013-07-31), размещенная на https://github.com/isislovecruft/python-gnupg

Другие альтернативы упоминаются Alex Martelli

EDIT: критики существующих криптопакетов и ссылки на некоторые новые https://news.ycombinator.com/item?id=6194102

Ответ 8

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

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