プロジェクトで PyCrypto を使用する予定で、PyCrypto が安全で信頼性が高いかどうかを知りたいです。PyCrypto が RSA や AES などのさまざまな暗号化アルゴリズムに従ってデータを正しく暗号化していることを確認するにはどうすればよいですか?
3 に答える
場合によります。
PyCrypto のいくつかの部分は本当に優れています。たとえば、Crypto.Random (PyCrypto 2.1 で導入) の API は、非常に簡単に使用できるように設計されており、それが使用する基盤となるアルゴリズム (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 暗号化と署名の実装が含まれるようになりました。詳細については、Crypto.Cipher.PKCS1_OAEP および Crypto.Signature.PKCS1_PSS の API ドキュメントを参照してください。
私も暗号の専門家ではないことに注意してください。そうは言っても、私は github とそのメーリング リストで PyCrypto コードをざっと見てみました。私が自信を持っていることの 1 つは、コード ベースに優れた専門家の貢献があることです。開発者は不安を認識し、それらを修正するために取り組んでいます。
安全に実装する必要がある特定のユースケースがある場合は、そのコードを見て、リストで質問してください。多くの場合、C/C++ ライブラリを利用して作業を行っているように見えるため、基本ライブラリの評判を直接確認できます。