配布するファイルが途中ですり替えられていないかを受け取った側が確かめられる ように、そのファイルからハッシュ関数で求めた値を併せて公開している。 ハッシュ関数の性質として最も適切なものはどれか。
正解:ア
ア同じデータからは常に同じ値が得られ、その値から元のデータは復元できない。
正解。同じ入力なら必ず同じ値になるので、公開された値と一致すれば内容が 変わっていないと分かります。値から元のデータをたどれないため、値そのものを 公開しても中身は漏れません。
イ鍵を使って変換し、対応する鍵を使えば元のデータを取り出すことができる。
誤り。これは暗号化の説明です。暗号化は元に戻すことが目的なので必ず復号の 手段がありますが、ハッシュ関数は戻せません。戻せない以上、ハッシュ化は 暗号化とは呼べない、という点が両者を分ける境目です。
ウデータの中の重複をまとめることで、内容を保ったまま容量を小さくできる。
誤り。これは可逆圧縮の説明です。値が小さくなるという見かけは似ていますが、 圧縮は展開すれば元のデータが完全に戻ります。ハッシュ値は戻せず、 そもそも元のデータの代わりとして使うものではありません。
エ求めた値の長さは元のデータに比例し、大きいデータほど長い値になる。
誤り。ハッシュ関数は、入力が1文字でも数ギガバイトでも決まった長さの値を 返します。長さが揃っているからこそ比較や保管がしやすく、値の長さから 元のデータの大きさを推し量ることもできません。
データの「指紋」を取る
ハッシュ関数は、どんな大きさのデータからでも決まった長さの値を作り出す計算です。 できた値をハッシュ値といい、そのデータの指紋のようにはたらきます。指紋から 本人の姿を復元できないのと同じで、ハッシュ値から元のデータには戻せません。
三つの性質
- 同じデータからは、いつ誰が計算しても必ず同じ値になる
- 元のデータがわずかでも違えば、まったく別の値になる
- 値から元のデータを求めることができない(一方向)
この三つがそろうと、改ざんの検知に使えます。配布元が公開した値と、受け取った ファイルから自分で計算した値が一致すれば、途中で書き換えられていないと判断 できます。パスワードをそのまま保管せずハッシュ値で保管するのも同じ理屈で、 保管された値が漏れても元のパスワードは復元できません。
なお、取引の記録を鎖のようにつないで改ざんを困難にするブロックチェーンも、 このハッシュ関数の性質を土台にしています。
混同しやすいものとの違い
| 処理 | 元に戻せるか/目的 |
|---|---|
| ハッシュ関数 | 戻せない。同一性の確認や改ざんの検知 |
| 暗号化 | 鍵があれば戻せる。内容を他人に読ませないこと |
| 圧縮 | 展開すれば戻せる。容量を小さくすること |
「復号できるか」で切り分けるのが確実です。復号できないものは暗号化ではなく、 ハッシュ化だと判断できます。