#python #django #pycrypto
#python #django #pycrypto
Вопрос:
Я планирую использовать PyCrypto для проекта, и я хочу знать, достаточно ли безопасен и надежен PyCrypto для использования. Как я могу гарантировать, что PyCrypto правильно шифрует данные в соответствии с различными алгоритмами шифрования, такими как RSA и AES?
Комментарии:
1. (а) есть реализация, которой вы доверяете; (б) сравните результаты каждой возможной комбинации строк / ключей между PyCrypto и этой надежной реализацией. (Я буду ждать вас здесь, напишите «да» или «нет» в качестве ответа, когда вы проверите каждую комбинацию.)
2. @ChrisMorgan Спасибо за ответ. Я довольно новичок в шифровании, поэтому вам придется потерпеть меня. Что вы подразумеваете под каждой возможной комбинацией строк / клавиш, не могли бы вы привести пример, пожалуйста. Также у меня нет доступа к доверенной реализации.
3. Я пошутил. (Если английский не является вашим родным языком, вам, вероятно, будет сложнее понять мой юмор, чем носителю английского языка.) Вы не можете попробовать все возможные комбинации строк / клавиш — их бесконечное количество. Если вы не начнете с уверенности в том, что какая-то реализация будет точной для начала, вы ничего не добьетесь.
4. @ChrisMorgan У меня было подозрение, что ты шутишь. Однако я не думаю, что это вопрос того, что я являюсь носителем английского языка, из-за чего я должен понять ваш юмор, скорее, это отсутствие опыта работы с шифрованием. Возможно, вы неправильно поняли мой вопрос. Позвольте мне уточнить, нельзя слепо доверять конкретной реализации. Скажем, например, в отношении генерации ключей у PyCrpyto есть ошибка, из-за которой ему не удается выбрать два разных простых числа p и q случайным образом и одинаковой длины в битах. Я могу привести множество примеров. Возможно, только носитель английского языка может понять, что я говорю.
5. ОК. Я понимаю, о чем вы спрашиваете, и я полагаю, что полностью понимаю это, но я думаю, что вы вряд ли сможете получить удовлетворительный ответ. В определенной степени вы должны верить в это.
Ответ №1:
Это зависит.
Некоторые части PyCrypto действительно хороши. Например, API для Crypto.Random (представленный в PyCrypto 2.1) был разработан, чтобы быть довольно надежным, и базовый алгоритм, который он использует (Fortuna), также был разработан, чтобы быть довольно надежным.
Другие части — это просто реализации низкоуровневых крипто-примитивов, поэтому это работает, но вы должны знать, что вы делаете, чтобы правильно их использовать. Например, криптография.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.Шифр.PKCS1_OAEP и криптография.Подпись.PKCS1_PSS для получения подробной информации.
Комментарии:
1. @dlitz, спасибо, вы действительно цените это! Я просто хотел бы уточнить, когда вы говорите «проверить, что ваш код взаимодействует с другими реализациями», вы имеете в виду, например, расшифровку зашифрованных данных из PyCrypto каким-либо другим криптографическим инструментом?
2. 1: Мне нравится новый модуль , и приведенный пример дает понять, как его использовать. Меня беспокоит только то, что новому пользователю слишком легко предположить (как и я), что RSA уже делает это по умолчанию. Возможно, предупреждение в документах ?
3. Я не уверен, соответствует ли это теме, но PyCrypto больше не поддерживается .
Ответ №2:
Нет. PyCrypto
больше не находится в стадии активной разработки, и вместо него следует использовать библиотеку криптографии.
Ответ №3:
Обратите внимание, что я также не эксперт в криптографии. Тем не менее, я быстро просмотрел код PyCrypto на github и их список рассылки. Одна из вещей, которая вселяет в меня уверенность, заключается в том, что в базу кода вносятся хорошие экспертные вклады. Разработчики признают недостатки и работают над их исправлением.
Если у вас есть конкретный вариант использования, который необходимо надежно реализовать, посмотрите на их код и спросите в их списке. Поскольку во многих случаях они используют библиотеки C / C для выполнения работы, вы можете напрямую проверить репутацию базовых библиотек.