インターネットを通じてデータをやり取りする時、気をつけなければならないのが「改ざん」です。
📌 改ざんとは?
データが勝手に書き換えられてしまうこと!
たとえば、送ったはずの注文データが途中で書き換えられて、金額を変えられてしまったり、重要な設定ファイルに見えないようウイルスが仕込まれたり…。
そんなことが起きたら、大きなトラブルになりますよね。
こうした「改ざん」が行われていないかを確認するために使われるのが、ハッシュアルゴリズムという仕組みです。今回はこのハッシュアルゴリズムについて、基本からわかりやすく解説します!
ハッシュアルゴリズムとは?
ハッシュアルゴリズムとは、一言でいうと
どんな長さのデータでも、決まった長さの “ハッシュ値” に変換する仕組み
たとえば、たった1文字のデータでも、100ページ分の文書でも、ハッシュアルゴリズムに通すと、256ビットや512ビットといった固定の長さのハッシュ値が出てきます。
この「ハッシュ値」というのは、あるデータを定められた計算手順によって変換された値を差します。またハッシュ値を算出する計算手順のことをハッシュアルゴリズム(もしくはハッシュ関数)と呼びます。
ハッシュアルゴリズムは、以下のような特徴を持ちます
💡ハッシュアルゴリズムの特徴!
- 同じデータを入れたら、同じハッシュ値になる
- どんな長さのデータでも、ハッシュ値は一定の長さ(=固定長)
- たった1文字でも変わると、全く違うハッシュ値になる
- ハッシュ値から、元のデータを計算することはできない(=不可逆)
「ハッシュ値が同じ」=「元データも同じ」なので、この特徴を利用して、「データが送られてくる途中で書き換えられていないか?」を簡単にチェックできます。
どうやって改ざんを見抜くの?
では、実際の通信で、ハッシュ値はどう使われるのでしょうか?
実際の通信では、送信者がデータと一緒にハッシュ値を送り、受け取った側が自分でハッシュ値を計算して、改ざんされていないかチェックします。
例として、送信者「ねこまる」と受信者「ねこねこ」のやり取りを例にしてみましょう。

データを送信する「ねこまる」はメッセージのハッシュ値を計算します。
その後、メッセージにハッシュ値を添えて送信します。

データを受信した「ねこねこ」は、メッセージを受け取り、自分でハッシュ値を計算します。
ハッシュ値の計算には、「ねこまる」が使った同じハッシュ値を使って計算します。

「ねこねこ」は、送られてきたハッシュ値と、自分で計算したハッシュ値が一致するかどうかを確認します。一致していれば、データの改ざんはないことを確認できます。
まとめると
「データ本体」と「ハッシュ値」をセットで送り、
受信者が自分でもう一度ハッシュ値を計算して、改ざんがないか検証
これがハッシュアルゴリズムによる改ざん検知の仕組みです。この方法は電子メール、ソフトウェア配布、ファイル転送など、さまざまなシーンで活用されています。
よく使われるハッシュアルゴリズムの種類
代表的なハッシュアルゴリズムを紹介します。
アルゴリズム名 | ビット数 | 特徴 |
---|---|---|
HAVAL | 可変 | ビット数や処理回数を選べる可変長ハッシュ。汎用性は高いが広く使われていない。 |
MD5 | 128 | 高速だが衝突が容易に発生するため安全ではない。 |
SHA-1 | 160 | 広く使われたが衝突攻撃が可能になり安全ではない。 |
SHA-2 | 224, 256, 384, 512 | 現在の標準的な安全なハッシュ方式。ビット数が多いほど安全。 |
SHA-3 | 224, 256, 384, 512 | 新設計(Keccak方式)でSHA-2と異なる構造。将来も有望。 |
RIPEMD | 128, 160, 256, 320 | 欧州発の設計。RIPEMD-160はSHA-1代替候補だが利用は限定的。 |
それぞれのハッシュ アルゴリズムの仕組みを覚える必要はありません。
覚える必要があるのは、それぞれのアルゴリズムがどんな特徴を持っていて、どこで使われているか、そしてどのくらい安全性があるかどうかという点です。
上の表をもう少しだけ、解像度をあげてみてみましょう。
HAVAL:可変長で柔軟だけどマイナー
- ビット数や処理回数を自由に設定できる可変長ハッシュ。
- 柔軟性は高いが、採用事例は少なく一般利用ではあまり見かけない。
MD5:もう安全じゃない古参
- 高速で軽量な設計だが、衝突が簡単に発生する重大な弱点がある。
- 現在はセキュリティ用途では完全に使用禁止とされている。
SHA-1:安全神話が崩れた元標準
- かつて国際標準として広く使われたハッシュ方式。
- 衝突攻撃が現実的になり、安全性が失われたため利用は推奨されない。
SHA-2:現役バリバリの安全スタンダード
- SHA-256やSHA-512など複数のバリエーションを持つ現行の安全な標準。
- 高い安全性と実績から、現在最も広く使われている。
SHA-3:新設計の次世代
- Keccak方式を採用した新しい設計で、SHA-2とは異なる構造を持つ。
- 高い耐攻撃性を持ち、将来の標準候補として注目されている。
RIPEMD系:欧州発の独自路線
- 欧州で開発されたハッシュ方式で、RIPEMD-160が有名。
- SHA系の代替として一部のシステムや研究用途で利用される。
まとめると、
⚠️ ハッシュアルゴリズムの注意点:「衝突」って?
ハッシュアルゴリズムは、本来「異なるデータなら必ず異なるハッシュ値がでる」ことを前提としています。
しかし、その前提が崩れてしまう現象があります。それが「衝突」です。
🔥 衝突(Collision) とは?
→ 違うデータなのに、同じハッシュ値が出てしまうこと!
衝突はハッシュアルゴリズムにとっては致命的な問題です。
ハッシュアルゴリズムは「同じハッシュ値=同じデータ」を前提にしているので、もし違うデータから同じハッシュ値が算出されてしまうと、改ざんされていても見抜けないことになります。
例えば、本物の見積書と、悪意がある人が作った偽の見積書が同じハッシュ値だったら、受け取った人は偽物を本物と信じてしまうかもしれません。
MD5やSHA-1は危険🔥
以前よく使われていた MD5 や SHA-1 は、衝突をわざと起こす方法が見つかています。
つまり同じハッシュ値をもつ別のデータを作成することができるのです。実際、MD5 や SHA-1 を使って偽の証明書やソフトが作られた事例もあります。
安全なハッシュアルゴリズムの選び方
現在は、SHA-2系(SHA-256、SHA-384、SHA-512など)の利用が推奨されています。これらはハッシュ値のビット数が多く、衝突が起きにくい設計です。
まとめ
今回の記事のまとめです。
- 同じデータなら、必ず同じハッシュ値が生成される
- 1ビットでも変わると、全く異なるハッシュ値になる
- ハッシュ値から元のデータは推測できない
- 入力の長さに関係なく、ハッシュ値の長さは固定
- 違うデータなのに同じハッシュ値となることを「衝突」と呼び、衝突がおきうるハッシュ アルゴリズムは使わないようにする
ハッシュ アルゴリズムには注意点があります。
ハッシュ値は「データが改ざんされていないか」はチェックできますが、そのデータを誰が送ったのかまでは保証できません。
つまり、本人確認のような「認証」の機能は、ハッシュ単体ではもっていないんです。
この問題を解決するのが、次回紹介する「デジタル署名」です。ハッシュアルゴリズムと認証を組み合わせることで、改ざんも本人確認も行えるようになります!
コメント