一部のデータの暗号化と一部のデータの署名(RSAを使用)の違いは何ですか?
暗号化はメッセージ(「一部のデータ」)の機密性を保持しますが、署名は否認防止を提供します。つまり、署名したエンティティのみが署名できます。機能的な違いもあります。読む。
それは単に公開鍵と秘密鍵の役割を逆にするだけですか?
絶対違う。署名と復号化に同じ秘密鍵を使用すること(または同様に、検証と暗号化に同じ公開鍵を使用すること)は、目的を混同してはならないため、推奨されません。これはそれほど数学的な問題ではなく(RSAは依然として安全である必要があります)、キーの管理に関する問題です。たとえば、署名キーは有効期間が短く、使用前に保護を強化する必要があります。
同じメッセージの場合、署名には送信者の秘密鍵を使用し、暗号化には受信者の信頼できる公開鍵を使用する必要があります。通常、署名後暗号化が使用されます。それ以外の場合、攻撃者は署名を自分のものに置き換えることができます。同様に、復号化には受信者の秘密鍵を使用し、検証には送信者の信頼できる公開鍵を使用する必要があります。
さらに、署名の生成は「秘密鍵による暗号化」を使用しないことを理解する必要があります。すべてのRSA操作はモジュラ指数に基づいていますが、パディング方式は署名の生成ではまったく異なります。さらに、公開鍵は、RSAのすべての実用的な用途において、RSA秘密鍵とはまったく異なる特性を持っています。
たとえば、私だけが送信者になることができるように、私は秘密鍵を使用してメッセージを生成したいと考えています。
これは否認防止プロパティであり、署名することで実現できます。
私は自分の公開鍵を使ってメッセージを読んでもらいたいのですが、誰がそれらを読んでもかまいません。
公開鍵はすべての人に知られていると見なされるべきです。全員にメッセージを読んでもらいたい場合は、暗号化しないでください。
署名は通常、メッセージの内容には影響しません。メッセージは署名とは別のものと見なされます。正式には、このような署名は「付録付き署名」として知られており、付録はメッセージです。メッセージは署名よりも重要であると考えられているため、少し奇妙な名前ですが、そうです。(部分的な)メッセージ回復を提供する署名はほとんどありません。それらはもうあまり使用されておらず、一般に非推奨と見なされています。
CMSなどの署名プロトコルは、メッセージと署名の両方を含むコンテナ形式を展開する場合があることに注意してください。その場合、プレーンな.zipアーカイブからファイルを解凍するのと同じように、最初に-まだ暗号化されていない-メッセージをコンテナから取得する必要があります。したがって、メッセージは表示されない可能性があり、その場合は直接使用できません。
特定の情報を暗号化して、ソフトウェアのプロダクトキーとして使用したい。これらを生成できるのは私だけであることだけを気にします。
暗号化は機密性を達成するために使用されます。これまで、RSA署名の生成は、「秘密鍵による暗号化」と考えられていました。ただし、上で説明したように、操作はまったく異なり、後の標準では暗号化と署名の生成を分離しようと必死になっています。
公開鍵をソフトウェアに含めて、鍵の署名を復号化/読み取りたいのですが。誰がキーのデータを読み取ることができるかは気にしません。私がそれらを生成できる唯一の検証可能な人であることだけを気にします。
はい、これは公開鍵への信頼の確立と呼ばれます。ただし、プログラムコードの保護は、メッセージの保護とは大きく異なります。コード署名を実行できますが、コードの外部で署名を確認するためのものが必要になります。これを提供するオペレーティングシステムがあります。
たとえば、Microsoft Authenticodeがあります。iStoreやAndroidアプリストアなどのアプリケーションストアはコード署名を使用する場合と使用しない場合がありますが、アプリケーションが複製されていないか、少なくともストア内で複製されていないことをある程度保証します。結局のところ、暗号化が常に解決策であるとは限りません。
コードのクローン作成や変更をまったく行わないようにすることははるかに難しく、そのようにすると、DRMの領域に確実に入ることができます。
このシナリオでは署名は役に立ちますか?
そのとおり。公開鍵に信頼がある場合は、メッセージが自分だけによって署名されていることを確認するのに役立ちます。アプリケーションコード/統合公開キーの認証に役立つかどうかは、コードを実行する予定の環境に完全に依存します。