非対称暗号化にはどのような用途があるのか(RAS実装)
3878 ワード
非対称暗号化にはどのような用途がありますか?
最初の用途はもちろんデータ暗号化です.
受信者以外の人に、私が送信したデータの内容を知られたくない場合、どの鍵でデータを暗号化する必要があるか想像してみてください.もし私が秘密鍵暗号化を使用するならば、非対称暗号化の原理に基づいて、受信者は公開鍵を使用して復号する必要がありますが、公開鍵はすでに受信者に公開されています.このスキームは実行可能なようですが、このような問題は公開鍵に現れます.非対称暗号化では、公開鍵の公開は受信者への公開だけでなく、この鍵の徹底的な公開を指し、誰が必要としても得ることができ、そうするとあなたが送信したデータには秘密はありません.逆に,公開鍵を用いてデータを暗号化すると,受信者にとって秘密鍵を用いてデータ復号を行う必要がある.秘密鍵は受信者の手にしか保存されていないため,他の人はデータの内容を得ることができない.このように、非対称暗号化では、第三者からデータを保護する必要がある場合、鍵は受信者が生成し、受信者が公開鍵を公開する必要があり、送信者はこの公開公開公開鍵を使用してデータを暗号化して受信者に送信し、受信者は自分の秘密鍵を使用して復号し、データの安全性を保証する.したがって、非対称暗号化は公開鍵暗号化とも呼ばれる.
非対称暗号化の実行効率は対称暗号化よりはるかに低いため、大きなファイルやデータに対して非対称暗号化アルゴリズムを使用することはありません.では、大きなファイルをどのように暗号化しますか?通常、対称暗号化アルゴリズムを選択してファイルを暗号化し、非対称アルゴリズムを使用して対称アルゴリズムの鍵を暗号化することで、対称アルゴリズムの鍵伝達の安全性を保証することができます.
非対称暗号化のもう一つの用途は、デジタル署名を行うことです.
デジタル署名とは?デジタル署名は私たちの契約書の署名と同じように、受信者は受信したデータやファイルがあなたが送信したことを証明するために使用することができます.例えば、送信側が一連のデータDを受信側に送信する必要があると仮定すると、受信側はどのようにデータDが送信側から送信されたと判断しますか?
Step 1:送信者はまず一対の鍵を生成し、公開鍵を受信者に公開する.
Step 2:送信者はデータDを秘密鍵で暗号化して暗号文Mを得て、データDと暗号文Mを一緒に受信者に送信する.
Step 3:受信者がデータDと暗号Mを得た後、公開鍵で暗号Mを復号してdを得る.
Step 4:Dとdを比較し、等しければDが送信者から送信されたことを証明する.
実際の動作では、非対称暗号化のアルゴリズムは非常に時間がかかり、暗号文の長さが明文の長さよりも大きく、直接暗号化システムのオーバーヘッドが非常に大きいため、送信するデータやファイルを直接秘密鍵で暗号化することはありません.では、この問題をどのように解決すればいいのでしょうか.
まず、メッセージの要約というもう一つの概念を理解する必要があります.メッセージ要約とは、一方向アルゴリズムによって計算された1つのファイルまたはデータの固定長に唯一対応する値であり、デジタル要約とも呼ばれる.異なるアルゴリズムによれば、メッセージ要約の長さは、一般に128ビットまたは160ビットである.一般的なメッセージ要約のアルゴリズムはMD 5とSHA 1である.1つのファイルのメッセージ・サマリーは、同じ人の指紋と同じように、このファイルを一意に表すことができます.このファイルが変更されると、メッセージ・サマリーも必ず変化するので、1つのファイルのメッセージ・サマリーに署名することで、それ自体に署名することができます.また、メッセージの要約を検証することで、送信されたデータが完全であるか、または変更されたかを判断することもできます.このように、上記の例は、以下のように大きく変更することができる.
Step 1:送信者はまず一対の鍵を生成し、公開鍵を受信者に公開する.
Step 2:送信者がデータDをメッセージの要約を行い、Qを得る.
Step 3:秘密鍵でQを暗号化して暗号文MQを取得し、データDと暗号文MQを共に受信者に送信する.
Step 4:受信者がデータDと暗号文MQを得た後、公開鍵で暗号文MQを復号してq 1を得る.
Step 5:受信者は同じアルゴリズムでデータDに対してメッセージの要約を行い、q 2を得る.
Step 6:q 1とq 2を比較し、等しければDが送信者によって送信され、変更されていないことを証明する.
では、非対称暗号化の使用について説明します.後で、RSAの非対称暗号化を実現するためにC#を使用する方法を見てみましょう.
.Netにおける暗号化操作に関わるオブジェクトはすべてネーミングスペースSystemにある.Security.Cryptographyでは、まずあなたのプログラムにusing Systemを追加してください.Security.Cryptography; ここで、RSA暗号化アルゴリズムは、RSACryptoServiceProviderオブジェクトによって実現される.次のコードは、データの暗号化復号と署名と検証をそれぞれ実現します.
最初の用途はもちろんデータ暗号化です.
受信者以外の人に、私が送信したデータの内容を知られたくない場合、どの鍵でデータを暗号化する必要があるか想像してみてください.もし私が秘密鍵暗号化を使用するならば、非対称暗号化の原理に基づいて、受信者は公開鍵を使用して復号する必要がありますが、公開鍵はすでに受信者に公開されています.このスキームは実行可能なようですが、このような問題は公開鍵に現れます.非対称暗号化では、公開鍵の公開は受信者への公開だけでなく、この鍵の徹底的な公開を指し、誰が必要としても得ることができ、そうするとあなたが送信したデータには秘密はありません.逆に,公開鍵を用いてデータを暗号化すると,受信者にとって秘密鍵を用いてデータ復号を行う必要がある.秘密鍵は受信者の手にしか保存されていないため,他の人はデータの内容を得ることができない.このように、非対称暗号化では、第三者からデータを保護する必要がある場合、鍵は受信者が生成し、受信者が公開鍵を公開する必要があり、送信者はこの公開公開公開鍵を使用してデータを暗号化して受信者に送信し、受信者は自分の秘密鍵を使用して復号し、データの安全性を保証する.したがって、非対称暗号化は公開鍵暗号化とも呼ばれる.
非対称暗号化の実行効率は対称暗号化よりはるかに低いため、大きなファイルやデータに対して非対称暗号化アルゴリズムを使用することはありません.では、大きなファイルをどのように暗号化しますか?通常、対称暗号化アルゴリズムを選択してファイルを暗号化し、非対称アルゴリズムを使用して対称アルゴリズムの鍵を暗号化することで、対称アルゴリズムの鍵伝達の安全性を保証することができます.
非対称暗号化のもう一つの用途は、デジタル署名を行うことです.
デジタル署名とは?デジタル署名は私たちの契約書の署名と同じように、受信者は受信したデータやファイルがあなたが送信したことを証明するために使用することができます.例えば、送信側が一連のデータDを受信側に送信する必要があると仮定すると、受信側はどのようにデータDが送信側から送信されたと判断しますか?
Step 1:送信者はまず一対の鍵を生成し、公開鍵を受信者に公開する.
Step 2:送信者はデータDを秘密鍵で暗号化して暗号文Mを得て、データDと暗号文Mを一緒に受信者に送信する.
Step 3:受信者がデータDと暗号Mを得た後、公開鍵で暗号Mを復号してdを得る.
Step 4:Dとdを比較し、等しければDが送信者から送信されたことを証明する.
実際の動作では、非対称暗号化のアルゴリズムは非常に時間がかかり、暗号文の長さが明文の長さよりも大きく、直接暗号化システムのオーバーヘッドが非常に大きいため、送信するデータやファイルを直接秘密鍵で暗号化することはありません.では、この問題をどのように解決すればいいのでしょうか.
まず、メッセージの要約というもう一つの概念を理解する必要があります.メッセージ要約とは、一方向アルゴリズムによって計算された1つのファイルまたはデータの固定長に唯一対応する値であり、デジタル要約とも呼ばれる.異なるアルゴリズムによれば、メッセージ要約の長さは、一般に128ビットまたは160ビットである.一般的なメッセージ要約のアルゴリズムはMD 5とSHA 1である.1つのファイルのメッセージ・サマリーは、同じ人の指紋と同じように、このファイルを一意に表すことができます.このファイルが変更されると、メッセージ・サマリーも必ず変化するので、1つのファイルのメッセージ・サマリーに署名することで、それ自体に署名することができます.また、メッセージの要約を検証することで、送信されたデータが完全であるか、または変更されたかを判断することもできます.このように、上記の例は、以下のように大きく変更することができる.
Step 1:送信者はまず一対の鍵を生成し、公開鍵を受信者に公開する.
Step 2:送信者がデータDをメッセージの要約を行い、Qを得る.
Step 3:秘密鍵でQを暗号化して暗号文MQを取得し、データDと暗号文MQを共に受信者に送信する.
Step 4:受信者がデータDと暗号文MQを得た後、公開鍵で暗号文MQを復号してq 1を得る.
Step 5:受信者は同じアルゴリズムでデータDに対してメッセージの要約を行い、q 2を得る.
Step 6:q 1とq 2を比較し、等しければDが送信者によって送信され、変更されていないことを証明する.
では、非対称暗号化の使用について説明します.後で、RSAの非対称暗号化を実現するためにC#を使用する方法を見てみましょう.
.Netにおける暗号化操作に関わるオブジェクトはすべてネーミングスペースSystemにある.Security.Cryptographyでは、まずあなたのプログラムにusing Systemを追加してください.Security.Cryptography; ここで、RSA暗号化アルゴリズムは、RSACryptoServiceProviderオブジェクトによって実現される.次のコードは、データの暗号化復号と署名と検証をそれぞれ実現します.
string PublicKey, PrivateKey;
RSACryptoServiceProvider rsaProvider;
void Initial()
{
// RSA , RSACryptoServiceProvider 1024
// RSACryptoServiceProvider ,RSACryptoServiceProvider 。
rsaProvider = new RSACryptoServiceProvider(1024);
// RSA PublicKey , false
PublicKey = rsaProvider.ToXmlString(false);
// RSA PrivateKey , true
PrivateKey = rsaProvider.ToXmlString(true);
byte[] EncryptData(byte[] data)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
// RSA , ;
rsa.FromXmlString(PublicKey);
// data , ;
// Padding
return rsa.Encrypt(data, false);
}
byte[] DecryptData(byte[] data)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
// RSA , ;
rsa.FromXmlString(PrivateKey);
// , ;
return rsa.Decrypt(data, false);
}
byte[] Sign(byte[] data)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
// ,
rsa.FromXmlString(PrivateKey);
// MD5 ,
return rsa.SignData(data, "MD5");
}
bool Verify(byte[] data, byte[] Signature)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
// ,
rsa.FromXmlString(PublicKey);
//
return rsa.VerifyData(data, "MD5", Signature);
}