Я планирую использовать PyCrypto для проекта, и я хочу знать, является ли PyCrypto безопасным и надежным для использования. Как я могу гарантировать, что PyCrypto правильно шифрует данные в соответствии с различными алгоритмами шифрования, такими как RSA и AES?
Является ли PyCrypto безопасным и надежным в использовании?
Ответ 1
Это зависит.
Некоторые части PyCrypto действительно хороши. Например, API для Crypto.Random(представленный в PyCrypto 2.1) был разработан, чтобы быть довольно надежным, и основной алгоритм, который он использует (Fortuna), также был разработан, чтобы быть довольно надежным.
Другие части - это просто реализация низкоуровневых крипто-примитивов, поэтому он работает, но вы должны знать, что вы делаете, чтобы правильно их использовать. Например, Crypto.PublicKey.RSA не реализует полный стандарт RSA PKCS # 1 (о чем большинство людей думает, когда говорят о "RSA" ). Он реализует только базовый примитив RSA (m ^ e mod n и c ^ d mod n), и вы все равно должны предоставить свою собственную реализацию PKCS # 1.
Лучший способ убедиться, что PyCrypto правильно шифрует ваши данные (без чтения исходного кода, который я рекомендую всем делать) заключается в использовании стандартного протокола и/или формата сообщения и проверке того, что ваш код взаимодействует с другими реализациями, Если вы составляете свой собственный формат сообщений (который вы, вероятно, не должны делать в любом случае), то вам нужно быть очень осторожным, чтобы PyCrypto фактически делал все, что вы думаете, что он делает.
Отказ от ответственности: я - текущий поддерживающий PyCrypto, поэтому мои мнения не следует рассматривать как независимый обзор.
Обновление: PyCrypto v2.5 и более поздние версии теперь включают в себя правильные RSA PKCS # 1 шифрование и подписи. Подробнее см. Документацию API для Crypto.Cipher.PKCS1_OAEP и Crypto.Signature.PKCS1_PSS.
Ответ 2
Обратите внимание, что я тоже не специалист в криптографии. Тем не менее, я быстро просмотрел код PyCrypto на github и в своем списке рассылки. Одна из вещей, которая дает мне уверенность в том, что есть хорошие, экспертные вклады в базу кода. Разработчики признают неуверенность и работу по их исправлению.
Если у вас есть конкретный вариант использования, который вам нужно безопасно реализовать, посмотрите на свой код и спросите их список. Поскольку они, как представляется, используют библиотеки C/С++ для выполнения работы во многих случаях, вы можете напрямую проверить репутацию базовых библиотек.
Ответ 3
Нет. PyCrypto
больше не находится в активной разработке, и вместо этого следует использовать библиотеку криптографии.