2009-03-18 13 views
4

ほとんどのPython暗号ライブラリを見てきましたが、私はPyCryptoまたはM2Cryptoのいずれかを使用することに決めました。
ezPyCryptoは成熟していないため、署名用のMD5とKeyczarのみをサポートしているため、ezPyCryptoを破棄しました。Python:RSAパディングを追加するには?

RSAは、暗号化するテキスト(または署名ハッシュ)が正しく埋め込まれていないと、いくつかの攻撃に対して脆弱であることを読んだことがあります。
どういう意味ですか?
PyCryptoまたはM2Cryptoにはこれに関する何も言及されておらず、Googleは関連するものを見つけられませんでした。これらのライブラリは自動的にパドグインを追加しますか?どのように伝えることができますか?

上記の答えが「いいえ」の場合、適切な埋め込みとは何でしょうか?私は最近、暗号化を考え出すて戦った

答えて

6

PyCryptoは、上記のパディングを追加しません。
代わりにM2Cryptoがそうです。

M2CryptoはopenSSLの上に構築され、必要なものすべてをサポートしていますが、PyCryptoがいくつかの廃止予定警告を発行している間は、最新の状態を維持しています。

+1

これが100%コーシャーであるかどうかわかりませんが、(pycryptoで)動作します。https://github.com/Brant/EncryptionExample/blob/master/python/encrypt.py –

0

全くわからないが、あなたはあなたのRSAメッセージにランダム成分を追加した場合、それは防止辞書攻撃が...この記事は、パディングでメンターたものを説明する際に多くを助けた:

http://www.di-mgt.com.au/cryptopad.html

必要に応じて

は、私はいくつかのコードスニペットを共有することができます(私は実装するための方法の一つは、最も簡単なように見えました)。

P.S.このファイルは安全な鍵(Google用)を作成するのに役立ちました。PBKDF2.py - PKCS#5 v2.0パスワードベースの鍵の派生

1

3

の理由の1つのパディングは、正確に同じメッセージが複数の人に送信された場合(3つ)、低い指数を持つRSA(3としましょう)が本当に簡単にクラックする可能性があります。

したがって、前もってあなたのメッセージに何らかの種類のランダム(まだ可逆的な)変換を適用して、全く同じメッセージを送信しないようにしてください。

多分、それは何が詰め物についてです!

編集: 私はウィキペディアを見ました。私が話していたのは、ハスタッドの攻撃と呼ばれています。

0

まず、デファクトスタンダードであるため、AESを使用する必要があります。

AESは16バイトのブロックサイズのバイトを暗号化します。明らかに、これは大規模なデータに対しては問題ありません。しかし、それの最後のビットは、おそらく16バイト未満かもしれません。

最後のブロックでは、パッドを埋め込む必要があります。一般的な埋め込みはPCKS7を使って行われますが、これはかなり簡単です。

最後のブロックとして「icecream」という文字列があるとします。

"icecream"

は8バイトですので、あなたはブロックを作るために別の8つのバイトを必要とする

だから、単にだろう文字8(ない「8」)8回

"icecream\x08\x08\x08\x08\x08\x08\x08\x08" 

を追加している何をすべきか結果の文字列。これでデータを暗号化します。

解読中に、この最後のブロックをキャッチし、使用する前にパディングを取り除く必要があることに注意してください。

関連する問題