13

RSA 署名を検証したい。検証するデータ、署名、およびモジュラスと指数の形式の公開鍵があります。openssl を使用して検証を行いたいと思います。出来ますか?使用できることはopenssl rsautl -verify -in sig -inkey key.pemわかっていますが、(opensslを使用して)モジュラスと指数だけを持つ公開鍵を作成する方法がわかりません。

たぶん、この署名をチェックする方法の他のアイデア(いくつかのプログラムを書くことを除いて)?

4

2 に答える 2

17

で使用する PEM 形式の RSA 公開キーを生成するにはopenssl、次の手順に従います。

ASN1 定義ファイルを作成する

次のテンプレートを変更して、モジュラスと指数を含めます

# Start with a SEQUENCE
asn1=SEQUENCE:pubkeyinfo

# pubkeyinfo contains an algorithm identifier and the public key wrapped
# in a BIT STRING
[pubkeyinfo]
algorithm=SEQUENCE:rsa_alg
pubkey=BITWRAP,SEQUENCE:rsapubkey

# algorithm ID for RSA is just an OID and a NULL
[rsa_alg]
algorithm=OID:rsaEncryption
parameter=NULL

# Actual public key: modulus and exponent
[rsapubkey]
n=INTEGER:0x%%MODULUS%%

e=INTEGER:0x%%EXPONENT%%

編集する代わりに、sed を使用してこれをスクリプト化することもできます。

sed -i "s/%%MODULUS%%/$(xxd -ps -c 256 mymodulus.bin)/" def.asn1

-c 256キーの長さ (バイト単位) に従って選択する必要があることに注意してください。

指数にも同様のコマンドを使用できます。

RSA キーを生成する

次の openssl コマンドを使用します。これにより、DER でエンコードされた RSA キーが得られます。

openssl asn1parse -genconf def.asn1 -out pubkey.der -noout

次に、それをPEMキーに変換します

openssl rsa -in pubkey.der -inform der -pubin -out pubkey.pem

キーを使用して確認する

またはのいずれopenssl dgst -verifyかを使用できますopenssl rsautl -verify

于 2016-04-06T10:23:05.437 に答える
-4

マニュアルページを確認すると、以下が表示されます

 # generate private key
 openssl genrsa > key.priv

 # use it to sign something
 echo "Dirk should be given $10" | openssl rsautl -inkey key.priv -sign > msg.sig

 # create a pub key (modules, exp) from the private key
 openssl rsa -pubout < key.priv > key.pub

 # use that to verify the signature.
 openssl rsautl -in msg.sig -verify -inkey key.pub -pubin

これはすべて、生のキーが必要であると仮定しています。右下のコメントを理解すると、通常の形式のモジュール/ exp がないようです。したがって、通常のツールで使用するには、最初に ASN.1 でパッケージ化する必要があります。

これには c/java/etc コードを書く必要があります。これを行う簡単な方法は、openssl ライブラリを使用することです。RSA * 構造に記入します。

于 2013-05-30T07:52:18.790 に答える