家が施錠されていなければ、誰でも勝手に入ることができ、暗号化なしでデータを勝手に変更できてしまうと、私たちの世界は現実ではなくなることは誰もが知っています。そのため、私たちは、もともと安全でないチャネル上に安全な通信チャネルを提供し、次の目的を達成しています。機密性: ユーザーの識別やデータが読み取られるのを防ぎます。データの整合性: データの変更を防止します。 認証: データが特定の当事者から発信されたものであることを確認します。ここでは、VB.NET 暗号化アルゴリズムの分類について紹介します。 VB.NET 暗号化アルゴリズムの基本概念: 1. ハッシュ関数 ハッシュ関数 H は、ハッシュ関数またはハッシュ関数とも呼ばれ、典型的な多対 1 関数です。入力は可変長 x (十分な長さにすることができます) で、固定長の文字列 h (通常は 128 ビットまたは 160 ビットで、入力文字列より短い) を出力します。文字列 h は、入力 x (またはメッセージ ダイジェスト、フィンガープリント、暗号チェックサム、またはメッセージ整合性チェック) のハッシュ値と呼ばれ、h=H(x) として計算されます。送信および保存されたメッセージが意図的または意図せずに改ざんされるのを防ぐために、ハッシュ関数を使用してメッセージを計算してメッセージ ダイジェストを生成し、メッセージに添付するか、情報と一緒に保存します。これは、メッセージの偽造防止に重要な用途があります。 メッセージ ダイジェストは、一方向ハッシュ アルゴリズムを使用してメッセージを変換します。メッセージ ダイジェスト アルゴリズムでは、ファイル データが一方向ハッシュ操作の入力として使用され、この入力によって HASH 関数を通じてハッシュ値が生成されます。ファイルが変更されると、ハッシュ値もそれに応じて変化し、受信者は変更の痕跡を検出できるようになります。理論的には、攻撃者が同一のメッセージ ダイジェストを生成する代替メッセージを作成することは不可能です。ハッシュ関数は、デジタル署名、メッセージの整合性の検出、メッセージの送信元の認証の検出などに使用できます。 ハッシュ関数は、次の条件を満たす場合に安全です。 一貫性: 同じ入力で同じ出力が生成されます。 ランダム性: メッセージ ダイジェストは、ソース メッセージが推測されるのを防ぐためにランダムに見えます。 一意性: 同じメッセージ ダイジェストを生成する 2 つのメッセージを見つけることは事実上不可能です。 一方向: 出力が与えられている場合、入力メッセージを判断することは困難です。 ハッシュ関数 H は一般に、次の基本要件を満たします。 (1)入力xは任意の長さにすることができるが、出力データ文字列の長さは固定である。 (2)順方向計算は容易、つまり任意のxが与えられればH(x)を計算するのは容易である。逆方向計算は困難、つまりハッシュ値hが与えられればh=H(x)となる特定の入力xを見つけるのは困難である。 (3)衝突防止(anti-collision)には2つの意味がある。1つは、メッセージxが与えられたとき、H(x) = H(y)となるようなメッセージyを見つけることが計算上不可能であるということ(弱い衝突防止)。もう1つは、H(x) = H(y)となるような任意の2つのメッセージxとyを見つけることが計算上不可能であるということ(強い衝突防止)。 2. 秘密鍵暗号化 秘密鍵暗号化は、暗号化と復号化の両方に同じ鍵が使用されるため、対称暗号化とも呼ばれます。秘密鍵暗号化アルゴリズムは (公開鍵アルゴリズムと比較して) 非常に高速であり、大規模なデータ ストリームで暗号化変換を実行するのに特に適しています。 3. 公開鍵暗号(PKCS)とデジタル署名 公開鍵暗号化では、権限のないユーザーから秘密にしておく必要がある秘密鍵と、誰でも利用できる公開鍵が使用されます。公開鍵で暗号化されたデータは秘密鍵でのみ復号化でき、秘密鍵で署名されたデータは公開鍵でのみ検証できます。公開鍵は誰でも使用でき、秘密鍵の所有者に送信するデータを暗号化するために使用されます。両方のキーは通信セッションに固有です。公開鍵暗号は、データを暗号化するために 1 つの鍵が必要であり、データを復号化するために別の鍵が必要であるため、非対称暗号とも呼ばれます。 データ暗号化/エンコードアルゴリズムのリスト セキュリティを確保するために使用される一般的な暗号化またはエンコード アルゴリズムは次のとおりです。 1. 共通鍵アルゴリズム 鍵アルゴリズムは、機密データ、要約、署名、その他の情報を暗号化するために使用されます。共通鍵アルゴリズムには次のものがあります。 DES (データ暗号化標準): データ暗号化標準、高速、大量のデータの暗号化に適しています。 3DES (トリプル DES): DES に基づいて、データが 3 つの異なるキーを使用して 3 回暗号化されるため、より強力です。 RC2 および RC4: 可変長キーを使用して大量のデータを暗号化します。DES よりも高速です。 IDEA (国際データ暗号化アルゴリズム) は 128 ビットのキーを使用して非常に強力なセキュリティを提供します。 RSA: RSA によって発明された、可変長キーをサポートする公開鍵アルゴリズムです。暗号化されるファイルの長さも可変です。 DSA (デジタル署名アルゴリズム): デジタル署名アルゴリズム、標準 DSS (デジタル署名標準)。 AES (Advanced Encryption Standard): Advanced Encryption Standard は、高速かつ高いセキュリティ レベルを備えた次世代の暗号化アルゴリズム標準です。現在、AES 標準の実装の 1 つに Rijndael アルゴリズムがあります。 BLOWFISH は、最大 448 ビットの可変長キーを使用し、非常に高速に動作します。 ElGamal、Deffie-Hellman、新しい楕円曲線アルゴリズム ECC などの他のアルゴリズム。 2. 一方向ハッシュアルゴリズム 一方向ハッシュ関数は、一般的にメッセージダイジェストやキー暗号化などの生成に使用されます。一般的なものは次のとおりです。 MD5 (メッセージ ダイジェスト アルゴリズム 5): RSA Data Security によって開発された一方向ハッシュ アルゴリズムです。MD5 は広く使用されており、さまざまな長さのデータ ブロックを 128 ビットの値に暗号化するために使用できます。 SHA (Secure Hash Algorithm) は、任意の長さのデータに対して 160 ビットの値を生成できる新しいハッシュ アルゴリズムです。 MAC (メッセージ認証コード): メッセージ認証コードは、秘密キーを使用してシステム上またはユーザー間でファイルやメッセージを認証する一方向の機能です。 HMAC (Keyed Hashing for Message Authentication) はそのような機能の一例です。 CRC (巡回冗長検査): 巡回冗長検査コード。CRC チェックは、実装が簡単でエラー検出能力が強いため、さまざまなデータ検証アプリケーションで広く使用されています。システムリソースをほとんど消費せず、ソフトウェアとハードウェアの両方で実装できます。データ転送エラーを検出するのに適した手段です (CRC は厳密にはハッシュ アルゴリズムではありませんが、その機能はハッシュ アルゴリズムとほぼ同じであるため、このカテゴリに分類されます)。 3. その他のデータ アルゴリズム その他のデータ アルゴリズムには、Base 64、Quoted Printable、EBCDIC など、一般的に使用されるエンコード アルゴリズムと、それらのプレーン テキスト (ASCII、Unicode など) への変換が含まれます。 VB.NET 暗号化アルゴリズムの実装<BR>一般的な暗号化およびエンコード アルゴリズムが .NET Framework に実装されており、コーディングの利便性が大幅に向上しています。これらのアルゴリズムを実装する名前空間は System.Security.Cryptography です。 System.Security.Cryptography 名前空間は、安全なデータのエンコードとデコード、ハッシュ、乱数生成、メッセージ認証などの他の多くの操作を含む VB.NET 暗号化サービスを提供します。 System.Security.Cryptography は次のように構成されています。 1. 秘密鍵暗号化 秘密鍵暗号化は、暗号化と復号化の両方に同じ鍵が使用されるため、対称暗号化とも呼ばれます。秘密鍵暗号化アルゴリズムは (公開鍵アルゴリズムと比較して) 非常に高速であり、大規模なデータ ストリームで暗号化変換を実行するのに特に適しています。 .NET Framework は、秘密キー暗号化アルゴリズムを実装する次のクラスを提供します。 DES:DESCryptoServiceProvider RC2: RC2CryptoServiceProvider Rijndael (AES): Rijndael マネージド 3DES:トリプルDES暗号サービスプロバイダー 2. 公開鍵暗号化とデジタル署名 公開鍵暗号化では、権限のないユーザーから秘密にしておく必要がある秘密鍵と、誰にでも公開できる公開鍵が使用されます。公開鍵で暗号化されたデータは秘密鍵でのみ復号化でき、秘密鍵で署名されたデータは公開鍵でのみ検証できます。公開鍵は誰でも使用でき、秘密鍵の所有者に送信するデータを暗号化するために使用されます。両方のキーは通信セッションに固有です。公開鍵暗号は、データを暗号化するために 1 つの鍵が必要であり、データを復号化するために別の鍵が必要であるため、非対称暗号とも呼ばれます。 .NET Framework は、公開キー暗号化アルゴリズムを実装する次のクラスを提供します。 DSA:DSACryptoServiceProvider RSA:RSACryptoServiceProvider 3. ハッシュ値 ハッシュ アルゴリズムは、任意の長さのバイナリ値を、固定長のより小さなバイナリ値にマッピングします。この小さなバイナリ値はハッシュ値と呼ばれます。ハッシュ値は、データの一意かつ非常にコンパクトな数値表現です。プレーンテキストの一部をハッシュし、そのテキストの一部を 1 文字でも変更すると、後続のハッシュでは異なる値が生成されます。同じ値にハッシュされる 2 つの異なる入力を見つけることは計算上不可能であるため、データのハッシュ値を使用してデータの整合性を検証できます。 .NET Framework は、デジタル署名アルゴリズムを実装する次のクラスを提供します。 HMAC: HMACSHA1 (HMAC はキーを使用するハッシュ アルゴリズムです) MAC:MACトリプルDES MD5:MD5CryptoServiceProvider SHA1: SHA1マネージド、SHA256マネージド、SHA384マネージド、SHA512マネージド 4. 乱数生成: 暗号化キーは、生成されたキーを再現することが困難になるように、できるだけランダムである必要があるため、乱数生成は多くの暗号化操作の不可欠な部分です。 .NET Framework では、RNGCryptoServiceProvider は乱数生成アルゴリズムの実装です。データ アルゴリズムについては、.NET Framework はそれらを他の名前空間に実装します。たとえば、Base 64 エンコードを実装する Convert クラスやエンコード変換を実装する System.Text などです。 シンプルなルーチン: まず、System.Security.Cryptography名前空間を参照する必要があります。 セキュリティを確保するために使用される一般的な暗号化またはエンコード アルゴリズムは次のとおりです。 - MD5CryptoServiceProvider として暗黙の md5
- Dim bytValue() As Byte '暗号化するバイト配列
- Dim bytHash() As Byte '暗号化後に生成されたバイト配列
- 結果を文字列として暗くする
- md5 =新しいMD5CryptoServiceProvider
- ' 元の文字列をバイト配列に変換します
- bytValue = System.Text.Encoding.UTF8.GetBytes (CPUID)
- ' ハッシュを計算してバイト配列を返す
- bytHash = md5.ComputeHash (bytValue)
- md5.クリア()
- ' バイト配列を文字列に変換
- 結果= .ToBase64String(bytHash)に変換
他も同様です!ぜひご自身でもお試しください! 上記から、.NET Framework はデータの暗号化/エンコードをうまくサポートしており、開発者にとって非常に便利であることがわかります。ただし、唯一の欠点は、IDEA、BLOWFISH などの .NET Framework のデータ暗号化アルゴリズムや、ElGamal、Deffie-Hellman、ECC などの他のアルゴリズムがまだ十分に完成していないことです。CRC、SFV などの他のデータ検証アルゴリズムのサポートも不十分です。開発者は、初期のコードから移植するか、サードパーティ メーカーの実装を探すしかありません。
|