前回の講座 [sitecard subtitle=PKI講座第3回 url=https://pkiwithadcs.com/shared_key_cryptosystem/ target=] ここまでに、データの暗号化の技術の概要[…]
PKI 講座の第1回目の「PKI とは?」の記事で、インターネット上に潜む脅威の一つである「改ざん」があるというお話をしました。「改ざん」という脅威には、送信者が送ったデータが「そのままの状態」で誰からも変更されていないことを保証する技術により対処できます。「ハッシュアルゴリズム」(ハッシュ関数とも呼ばれます)は、データ改ざんを検知することができる仕組みです。
ハッシュアルゴリズムとは
ハッシュ アルゴリズムとは、データの改ざん検知に使われる技術で、任意の長さのデータから固定長のデータを生成するアルゴリズムです。
ハッシュ アルゴリズムで生成された値を、ハッシュ値と呼びます。(その他、データダイジェストなどの表現もあります。)
ハッシュ アルゴリズムは不可逆関数となり、ハッシュ値から元のデータを算出することはできません。
同じデータを使ってハッシュアルゴリズムでハッシュ値を算出すると、必ず同じハッシュ値が算出されます。
また、元データが 1 bit 分でも変わると、全く違うハッシュ値が算出されます。
また、ハッシュ値は固定長となりますので、ハッシュ アルゴリズムに入力する文字列が “A” の一文字だろうが、数万行にわたる文字列だろうが、同じハッシュアルゴリズムであれば、生成されるハッシュ値は同じデータ サイズ(長さ)となります。ハッシュアルゴリズムは同じデータの場合に必ず同じハッシュ値が生成されるという特性をもつことから、データの改ざん検知に利用できます。
PKI 講座第1回の記事で説明した通り、インターネット上の脅威の一つに “改ざん” がありますが、インターネット上でデータを送信するときに、送信するデータとハッシュ値を一緒に送信すれば、受信者はデータが途中で改ざんされていないことに気づくことができます。
代表的なハッシュ アルゴリズムには、以下のようなものがあります。
ハッシュアルゴリズム |
ハッシュ値の長さ |
MD5 |
128 bit |
SHA-1 |
160 bit |
SHA-2 |
224、256、384、512 bit |
ハッシュ アルゴリズムの脆弱性
ハッシュアルゴリズムに入力されるデータが違うにも関わらず、同じハッシュ値が算出されてしまうことを “衝突” と呼びます。
ハッシュ関数は、“ハッシュ値が同じ=元データが同じ” であることが大前提であるため、衝突が起きてしまうのはハッシュ アルゴリズムとして脆弱なものとして扱われます。
先ほど、代表的なハッシュアルゴリズムの例として紹介した MD5 や SHA1 は、任意のハッシュ値が算出されるデータ(“衝突” したデータ)を計算する手法が見つかっているため、脆弱なハッシュ アルゴリズムとして認識されています。現在は、SHA-2 のハッシュ アルゴリズム(ハッシュ値は 256 bit 以上) の利用が推奨されています。
SHA-2 のハッシュ アルゴリズムは、算出されるハッシュ値の長さごとに SHA-224、SHA-256、SHA-384、SHA-512 の4種類がありますが、すべて SHA-2 と総称されています。ハッシュ値のデータサイズが大きい程、衝突は発生しにくいです。
最後に
ハッシュ アルゴリズムの理解でおさえておく「特徴」は以下の5つです。
- 文字列からハッシュ値を算出するアルゴリズム
- 入力した文字列が同一であれば、同じハッシュ値を生成される
- 入力した文字列が 1 bit でも違えば、全く異なるハッシュ値が生成される
- ハッシュ値から元データを算出するのは不可能(不可逆)
- 入力した文字列の長さが異なっても、ハッシュ値の長さは同じ(固定長)
次回は、ハッシュアルゴリズムの仕組みに、「認証」の機能を組み合わせた「デジタル署名」について説明します。
前回の講座 [sitecard subtitle=PKI講座第5回目 url=https://pkiwithadcs.com/hash_algorithm/ target=] 前回は、データの改ざん検知に利用することがで[…]