RSA 暗号システムの仕組みは理解していますが、理解できないのは、アルゴリズムhttp://en.wikipedia.org/wiki/RSA_%28algorithm%29で、暗号化されたメッセージを別の人に送信することです。通常、文字列は meesage と書きます。この文字列がどのように数値に変換されるのか知りたいです。インターネットのいたるところで、人々がこのメッセージをすべての例で数字として言及しているのを目にします。ただし、通常は数値を送信するのではなく、文字列をメッセージとして送信します。この文字列がどのように数値に変換されるか知りたいです。文字列を数値に変換する方法は知っていますが、暗号化ビューでは、このメッセージがどのように数値に変換されるのでしょうか?
3 に答える
OK、これは基本的にエンコード/デコードに関する質問です。
まず、ご指摘のとおり、メッセージは通常、プログラミング言語では文字列として表現されます。文字列は、テキストとして表現できる「コード ポイント」で構成されます。バイト単位のバイナリ表現を作成するには、UTF-8 エンコーディングなどを使用して文字列を文字エンコードする必要があります。一部の言語では、「コード ポイント」はすでにデフォルトの内部エンコーディング (C の ASCII など) を使用しています。
文字列のバイナリ エンコーディングを整数として解釈できるようになりました。最初のバイトは整数の最上位 (最上位) 部分であり、最後のバイトは最下位です。これで、RSA 操作用の数値入力が得られました。残念ながら、これは安全ではなく、鍵のサイズよりも大きいメッセージを処理できません。
したがって、エンコードされたテキストを直接使用する代わりに、テキストは SHA-256 などの安全な暗号化ハッシュを使用してハッシュされます。SHA-256 は 32 バイトのハッシュを出力します。このハッシュは、PKCS#1 v1.5 で定義されているような安全なパディング スキームを使用してパディングされます。その結果は数値に変換され (上記を参照)、秘密の RSA キーを使用して暗号化されます。
RSA 暗号化の出力も数値です。この数値は再びバイトに変換されます (パディングされたハッシュで使用された以前の関数の逆)。これで、署名と呼ばれるバイナリ データが得られました。最後に、これをテキストとして送信する場合は、再度エンコードする必要があります。通常、base 64 エンコーディングまたは 16 進数が使用されます。
同じことを確認するには、逆の順序で、秘密鍵の代わりに公開鍵を使用します。ハッシュを比較して、検証が成功したか失敗したかを確認する必要があります。
公開鍵暗号化は非常に低速ですが、公開で少量の情報を安全に交換することができます。
秘密鍵の暗号化は高速ですが、最初に鍵を秘密で共有する必要があります。
一般に、RSAを使用して秘密鍵(AESやRC4鍵など)を暗号化し、その鍵を公開して送信できるようにします。次に、その秘密鍵を使用して実際のメッセージを暗号化し、秘密鍵の速度を利用します。暗号化。
RSAを使用してメッセージに署名することもできますが、RSAで実際に署名されるのは、実際のデータのハッシュです(MD5、SHA-1、SHA-256など)。
多くの場合、秘密鍵の交換にはRSAの代わりにDiffie-Hellmanが使用されます。
その答えで十分ですか、それとも秘密鍵の暗号化とハッシュがデータをどのように表示するかについて知る必要がありますか?