e知識「e-chishiki.com」では、インドでの著名なIT著者、IT教育者、eセキュリティーの大家により作成された様々な種類のプログラミング言語に関する技術的なコンテンツを知識情報データーベースとして提供します。
オンライン書籍; Microsoft .NET Web アプリケーションセキュリティ
第 8 章 : 暗号化(書籍のプレビュー)
Microsoft .NET Web アプリケーションセキュリティ
インドの情報セキュリティの大家が書き下ろした最新のセキュリティ書籍の一部をオンライン書籍としてご紹介します。書籍の情報は、こちらをご覧ください。
HMAC
c.cs
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class zzz
{
public static void Main()
{
byte [] k = Encoding.UTF8.GetBytes("Vijay");
HMACMD5 h = new HMACMD5(k);
FileStream f = new FileStream("z.txt", FileMode.Open);
byte[] b = h.ComputeHash(f);
String s = Convert.ToBase64String(b);
Console.WriteLine("Hash is {0}",s);
}
}
コマンド プロンプト ウィンドウ
C:\encrypt>c
Hash is NcpSfRQywRNJ6ncqZyo65w==
次に、HMAC について説明します。
HMACMD5 オブジェクトの h を、キーまたはパスワード Vijay で作成します。実際には、ランダム値ジェネレータ クラスを使用して強いキーを作成することをお勧めします。FileStream クラスは、ASCII ファイル z.txt を読み取り用に開きます。このファイルには、暗号化するテキストが格納されています。
ComputeHash メソッドを呼び出し、ファイル ハンドルを渡します。このメソッドにはいくつもの顔があります。ここでは、ファイル ハンドルを使用してファイル全体をメモリに読み込み、固有のハッシュ値を計算します。値は一連のバイトであり、これを Base64 文字列として表示します。上記のプログラムでは、同じ関数にバイト配列を割り当てていました。もう 1 つの方法としては、バイト配列と配列内のオフセットをこの関数に渡します。ComputeHash 関数は、オフセット以降からハッシュ値を計算します。
HMACMD5 アルゴリズムは、名前が示すように、ハッシュ MD5 文字列とキーを処理します。キーのサイズは任意です。このクラスは HMAC (Hash based Message Authentication Code) と同じように機能します。前に説明したように、SHA1 ハッシュまたは MD5 ハッシュだけでは十分ではなく、ランダムな秘密キーを使用して値をさらに暗号化する必要があります。
HMAC では、プロセスは単純なソルトよりはるかに複雑です。HMAC プロセスを開始するには、秘密キーと実際のデータを混合した後、ハッシュ値を作成します。ここで終わりではなく、結果のハッシュ値を同じキーとさらに混合し、ハッシュ値を再計算します。このように、1 つのキーでハッシュ関数を 2 回適用します。唯一の問題は、送信側と受信側が 1 つの秘密キーを共有する必要があることで、異なるチャネルでキーを送信する必要があります。
暗号化に常につきまとう問題は、キーの管理です。送信側は、データと計算済みの HMAC を送信します。受信側は、受信したデータから HMAC を再計算し、値を検証します。
この場合の利点は、キーが送信側と受信側にのみあるので、他の者が HMAC テキストを変更できないことです。既存のデータおよび HMAC テキストを変更するには再計算が必要で、そのためには秘密キーが必要です。
HMACMD5 と同様に、HMACSHA1 アルゴリズムもあります。実装は変わりありません。



