2016-05-17 19 views
1

私はプログラムB1にメッセージを送信する必要のあるプログラムAを持っています。メッセージは暗号化して署名する必要があります。これは、B1だけが解読できることを意味し、メッセージはAから来ていることを確認する必要があります。Crypto ++ RSA - 同じ鍵ペアで暗号化して署名する

また、B1はメッセージを暗号化できず、同じプログラムの別のインスタンスB2に向かってAの役割を果たすべきではありません。

理論的には、AのキーとB1のキーを持つ単一のRSAキーペアを使用することができます。 Bによって復号された後、回復されたメッセージが(ハッシュ関数などによって)検証された場合、誰かにその鍵を公開しなかったAによって送信されたはずである。その場合、両方の鍵はプライベート(安全なチャネルで交換する必要があることを意味します)

1)独立した鍵ペアを使用して暗号化と署名のステップを分けることを推奨しますか?

2)実際には、Crypto ++ライブラリでは、PrivateKeyクラスにも公開鍵が含まれています。秘密鍵だけをロードする方法はありますか?

+1

ここをクリックしてください:http://security.stackexchange.com/ – dahui

+0

セキュリティスタック交換を試してみることは良い考えです。確かに公開鍵は、RSAが動作するために文字通り公開する必要はありません。私的 - 公開鍵のペアが両方の当事者に知られている場合、 'PrivateKey'クラスにも公開鍵が含まれているとどうして問題になりますか?主要なセキュリティ上の欠陥は私のところに飛び出すことはありませんが、それはやや不本意なようです。安全であっても、RSAを対称鍵暗号として使用することはあまり効率的ではありません。 –

+0

@JohnColeman:Bは、これらのメッセージの作成を許可すべきではありません。彼はそれらを解読し、認証することができなければなりません。私はこれが明らかにassymetryを追加するので、質問にこれを加えました。 – galinette

答えて

1

独立したキーペアを使用して暗号化と署名のステップを別々にすることを推奨しますか?

これは幅広い種類のトピックです。脅威モデルとリスクの状況に応じて、さまざまなことができます。おそらく、まずkey management and separationを調べてください。

RSAを選択したように見えるので、Crypto.SEのBleichenbacher 1998 “Million message attack” on RSAを見て、30,000メッセージ(IIRC)の改善に従ってください。これは、あなたの脅威モデルと危険な姿勢が物事に影響を及ぼす場所です。


実際には、暗号++ライブラリで、PrivateKeyのクラスは、公開鍵が含まれています。秘密鍵だけをロードする方法はありますか?

私はあなたが誤解していると思います。公開鍵は秘密鍵から解読することはできません。

公開鍵は{n,e}のペアで、秘密鍵は{n,e,d}または{n,e,d,p,q,dp,dp,u}です。 neを削除すると、秘密鍵は機能しません。 eだけを削除すると、eを回復するには、nを考慮する必要があります。スタックオーバーフローに関するRSA function generates public key (e) always to 17も参照してください。

+0

私は秘密操作ではnとdのみを使用するので、秘密鍵は{n、d}とすることができるので、私有鍵から公開鍵を引き出すことはできません。しかし、eの選択のために、eを削除することは明らかに役に立たない。 – galinette

関連する問題