特定のパディング技術を使用してM2Cryptoとpythonで文書に署名するには?
-
16-09-2019 - |
質問
私は、デジタル.pemファイルに保存されている秘密鍵を使用してPythonでいくつかのテキストに署名する必要があります。 M2Cryptoは、これらの日なので、それは私が使用しているものだということを行うための好ましい方法があるように思えます。私はそれのほとんどを取得すると思いますが、私はパディングを設定する方法について困惑しています。具体的には、私はkSecPaddingPKCS1SHA1
と呼ばれるパディング方式を使用して、iPhoneアプリに署名を検証する必要があり、次のように説明します:
署名されるべきデータは、SHA1ハッシュです。 標準ASN.1パディングは、基礎となるRSA演算のPKCS1パディングと同様に、行われます。
暗号の専門家されていない、私はこれが何を意味するのかだけファジーアイデアを持っています。私は、RFCのいくつかを見てみましたが、それらは不可解なことがわかりました。私は、RSAオブジェクトの暗号化/復号化方法は、パディングタイプを取ることがわかり、私は署名の検証に関連する同様の何も表示されません。
すべてのヘルプは、特にコードと、理解されるであろう。
(ある意味では、これはの逆でありますこの質問の。)
<時間> [OK]を、下記の解答が正解AFAICTです。次のコードは、text
パディング方式を使用してiPhone上で検証kSecPaddingPKCS1SHA1
に対する署名を生成する。
from M2Crypto import EVP
privkey = EVP.load_key("privkey.pem")
privkey.sign_init()
privkey.sign_update(text)
signature = privkey.sign_final()
(editorializeし申し訳ありませんが、私はちょうど暗号ハッカーは宇宙のlousiestドキュメントライターの一部であると言うことができますか?)
解決
私の知る限りM2Cryptoは、これは必須ですパディングを追加します。
PKCS1パディングがデフォルトです。
しかし、(再びだけ私の知る限り)、署名はパディングを持っていない、パディングが唯一可能な攻撃を防ぐために、暗号化されたデータに付加される。
EDIT:ユーザーCAF、コメントにはパディングが良いの署名にessnetialであることを述べています。私はまだそれを加えるかもしれない、あなたはデフォルトM2Cryptoの行動でそれを試してみてください推薦しています。
M2Cryptoの生成されるドキュメントにあなたをを{パブリック、プライベート} _ {解読、暗号化}メソッドは、サインmenthodは何を持っていない一方で、デフォルトではPKCS1でパディングオプションを持っていることがわかります。
IMOちょうどそれがおそらく動作しますが、デフォルトのM2Crypto paramsはでそれに打撃を与えます。