暗号化操作を行うために、Python2.7.1にpyCryptoパッケージをインストールしました。
Q1:私がやりたい操作はprivate Key
(の代わりにpublic Key
)でいくつかのデータを暗号化することです。このライブラリではできないようです。私は正しいですか?もしそうなら、それを行うことができるライブラリはありますか?
Q2は:でのドキュメントは、署名を計算するのに使用されるハッシュアルゴリズム言及されていません!sign
メソッドに使用されているハッシュ関数を確認するにはどうすればよいですか?
Q3:encrypt
メソッドに関するドキュメントの一部が表示されます。
encrypt(self, plaintext, K)
RSAを使用してデータを暗号化します。
パラメーター:
プレーンテキスト(バイト文字列またはlong)-RSAで暗号化するデータ。RSAモジュール(n)よりも数値的に大きくすることはできません。
(検閲!)
上記のように、入力データはRSAモジュールよりも数値的に大きくないものに制限されます。これは、0x21が0x11より大きいため、(たとえば)0x21...(257 bytes)
モジュール=のRSAキーペアで暗号化できないことを意味し0x11...(257 bytes)
ますか?もしそうなら、なぜですか?毎回暗号化する前に値を比較するのは変ではないですか?!それとも、データの長さがモジュールの長さ以下でなければならないという意味ですか?
公開鍵暗号化では、秘密鍵で暗号化するのではなく、常に公開鍵を使用します。そうしないと、公開鍵が「公開」であるため、だれでも暗号文を復号化できます。
公開鍵と秘密鍵を同じ意味で使用したくなるかもしれませんが、一般に、秘密鍵があれば、多くの作業をしなくても公開鍵を理解できます。したがって、公開鍵を安全に保つことを考えて誰かに秘密鍵を渡すと、安全ではなくなります。
モジュラスより大きくないという場合は、バイト単位のサイズを意味します。実際には、モジュラスのサイズ(2048ビットのRSAキーペアの場合は256バイト)よりも小さくなります。ただし、常にデータをパディングする必要があるため、データは実際にはモジュールよりも小さくする必要があります。たとえばOAEPパディングを使用したパディングは、暗号文をランダム化します。同じ平文を暗号化するたびに、ランダムに見える異なる暗号文が得られます。そうしないと、攻撃者が秘密鍵を持っていなくても、暗号文は弱く、攻撃を受けやすいため、これは重要です。したがって、データとパディングをモジュラス(256バイトなど)に収めるためのスペースを残しておく必要があります。
通常、秘密鍵で署名します。RSAでは、これは実際には秘密鍵で「暗号化」しますが、一般的なAPIで「秘密鍵で暗号化」することはないと思います。
私はpyCryptoに精通していませんが、署名するときにお気に入りのハッシュを選択しているように見えます。私がグーグルで検索した例からわかる限り、あなたは自分自身をハッシュし、符号関数にダイジェストを与えます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加