RSACryptoServiceProviderは公開鍵で暗号化してから、秘密鍵で復号化できることを知っています。
RSACryptoServiceProviderを使用して、秘密鍵で暗号化し、公開鍵で復号化することは可能ですか?
RSACryptoServiceProviderは公開鍵で暗号化してから、秘密鍵で復号化できることを知っています。
RSACryptoServiceProviderを使用して、秘密鍵で暗号化し、公開鍵で復号化することは可能ですか?
物事を少し明確にするために:
RSA は、暗号化 (アリスがボブに送信するメッセージをイブが読み取れないようにする) または署名 (アリスがボブにメッセージを送信した場合に、ボブが実際にメッセージを送信したのはアリスであり、イブのふりをしていないことを確認する) のいずれかに使用できます。アリスになる)
RSA は、鍵のペア (公開鍵と秘密鍵) を生成します。RSA は、公開鍵を適用してから秘密鍵を適用した場合、またはその逆の場合に同じメッセージが返されるように設計されています。また、公開鍵は秘密鍵から導出できますが、その逆は不可能です。
暗号化に RSA を使用するために、アリスはボブの公開鍵を使用してメッセージを暗号化します。このメッセージを読む唯一の方法は、ボブだけが持っている秘密鍵を使用することです。したがって、Eve はこの鍵を持っていないため、メッセージを読むことができません。一方、これはメッセージの送信元の認証を提供しません。Eve は、Bob の公開鍵を取得して (公開されているため)、Alice になりすまして Bob にメッセージを送信することもできます。
署名に RSA を使用するために、アリスはメッセージのハッシュを取得し、自分の秘密鍵を使用してハッシュを暗号化し、その結果 (これが署名) をメッセージに追加します。もちろん、Eve は Alice の公開鍵を使用してこれを復号化できます。ただし、ボブはアリスの公開鍵を使用して署名を復号化し、一致するかどうかを確認できます。もしそうなら、それはアリスだけが持っている秘密鍵を使って暗号化されているにちがいないので、それはアリスから来たにちがいない。
現在、私は .NET 暗号化 API に精通していないため、ここで説明されているとおりに機能するかどうかはわかりません。しかし、この説明は、あなたが得ている答えのいくつかを理解するのに役立つかもしれません.
RSACyrptoServiceProvider
編集:これは不可能であるというカーゴカルトの「知識」、またはこれが実際にはほとんど役に立たないというより実用的な知識のために、特定の.NETはこれをサポートしない可能性が高いと言って、この回答を序文にする必要があります。
オリジナル:
そんなことはないと主張する誰もが、RSA がどのように機能するかを知らないか、「署名」のわだち掘れに行き詰まっています。
秘密鍵で暗号化することは完全に可能であり、完全に理にかなっています。はい、これは署名に似ていますが、これはほとんどの最新のライブラリが署名と見なすものではありません。彼らにとって、これはメッセージ ダイジェスト (HMAC) を計算し、秘密鍵で暗号化することを意味します。秘密鍵を使用した暗号化を署名に例えることは、ドキュメントを金庫に保管し、鍵を置いたままにしておくことが、ドキュメントに署名するための代役であると言うのと同じくらい理にかなっています。
はい、同じ操作であるため、暗号化しています。秘密鍵で暗号化された暗号文は、公開鍵で暗号化された暗号文と同じように判読できません。暗号文を解読するには両方の鍵が必要です。
RSA アルゴリズムのリファレンスについては、http://fringe.davesource.com/Fringe/Crypt/RSA/Algorithm.htmlを参照してください。
秘密鍵を使用して生の RSA 操作を実行することは、通常、復号化操作と呼ばれます (公開鍵を使用して実行することを暗号化操作と呼びます)。
この操作にアクセスできると便利です。たとえば、フレームワークでサポートされていない操作を実装する場合などです。
操作が存在します。これは、RSACryptoServiceProviderの基本クラスであるSystem.Security.Cryptography.RSAによって定義される DecryptValue メソッドです。残念ながら、RSACryptoServiceProvider ではサポートされていません (基礎となる win32-api である CryptoAPI がサポートしていないため)。ただし、RSA クラスの別の .NET 実装を手に入れることができれば、それを行うことができます。
幸いなことにいいえ。ただし、秘密鍵で署名し、公開鍵で署名を検証することはできます。
鍵の役割が逆になった場合 (これが署名の仕組みです) には数学が意味を成しますが、解読鍵がよく知られていて公開されている場合、プライバシーのための暗号化はあまり意味がありません。
いいえ。これは、公開鍵/秘密鍵の暗号化がどのように機能するかではありません。公開鍵でのみ暗号化でき、秘密鍵でのみ復号化できます。
秘密鍵をメッセージに適用したい場合、暗号化ではなく署名を探しているのではないでしょうか? これは、RSA キーも使用できる別の暗号方式です。
両方できます。プライベートで暗号化してパブリックで復号化、またはパブリックで暗号化してプライベートで復号化。暗号化してから秘密鍵のみで復号化することはできません。また、公開鍵のみで同じことを行うこともできません。
レムスはそれを釘付けにしました。秘密鍵を使用した暗号化は、復号鍵がよく知られていて公開されている場合、あまり意味がありません。
また、秘密鍵から公開鍵を導出することはできますが、その逆はできません。
これが私がRSA署名を理解していることです。
擬似コード:
最初にアリスが署名しました。
alice_signature = encrypt(alice_message, alice_private_key)
次に、Bob Eve... (を持っている人alice_public_key
) が署名を検証します。
decrypted_message = decrypt(alice_signature, alice_public_key)
確認するために:
if(received_message_from_alice == decrypted_message)
the signature proved the message is from alice
PrivateKey を使用して、暗号化と復号化の両方を行うことができます。PrivateKey infact には、Private と PublicKey の両方が含まれています。
理論的には、少なくとも PublicKey で暗号化して PrivateKey で復号化し、その逆も可能です。VB.netでは、最初のケースが機能し、2番目のケースがBadKeyエラーをスローすることがわかります
公開鍵暗号システムのセキュリティは、sign()/encrypt() 関数が一方向の関数であり、公開鍵の「トラップドア」がなければ復号化するのに実行不可能な時間がかかるという事実に基づいています。
また、通常、生成されたキーは同じ長さではありませんが、そうである可能性もあります。RSA を使用した非対称キーの長さについては、多くの論文があります。