ハッシュ関数

luagate/hash-functionハッシュ関数20セキュリティ

上から下へ、全 20 枚そのまま並べています。

発表モードで開く

ハッシュ関数

ハッシュ関数

変換して指紋を作るしくみ

1
1

目次

今日の流れ

1. ハッシュ関数って何のためにあるの?

2. 性質 — 一方向で、同じ入力は同じ出力

3. 暗号化との違い

4. 使いどころ — パスワード保存・改ざん検知

5. まとめと振り返り

2
2
ハッシュ関数 - イントロ

今日のゴール

この時間で身につけてほしいことです。

  • ハッシュ関数が「データの指紋を作る仕組み」だと分かる
  • 一方向(元に戻せない)という性質をつかむ
  • 暗号化との違いを説明できる
  • パスワード保存や改ざん検知での使い方が分かる
  • 身近にどう使われているかイメージできる
10
3
ハッシュ関数 - イントロ

ハッシュ関数とは

どんなデータも、決まった長さの短い値(指紋)に変換する関数です。

ハッシュ関数(Hash Function)

任意の長さのデータを、決まった長さの短い値(ハッシュ値)に変換する仕組み。同じ入力からは必ず同じ出力が出るが、出力から入力には戻せない。

入力の大きさに関わらず出力は固定長

同じ入力 → 必ず同じハッシュ値

出力からは元データを復元できない

データの「指紋」のようなもの

11
4
ハッシュ関数 - イントロ

同じ入力は同じ指紋、少し違えば全く別物

1文字変わっただけで、ハッシュ値はまったく違うものになります(雪崩効果)。

text
hash("hello")  -> 2cf24dba5fb0a30e...
hash("hello")  -> 2cf24dba5fb0a30e...   同じ入力なら同じ

hash("hellp")  -> 9c1185a5c5e9fc54...   1文字違うだけで激変
hash("Hello")  -> 185f8db32271fe25...   大文字でも全く別物
12
5
ハッシュ関数 - イントロ

ハッシュ = 指紋やシュレッダーに似ている

人ごとに違う指紋のように一意で、シュレッダーのように元へは戻せません。

短くまとまる
  • どんなデータも固定長に
  • 長い文章も画像も同じ長さ
一意の指紋
  • 内容が違えば値も違う
  • 同じ内容なら必ず同じ値
戻せない
  • 出力から入力は復元不可
  • シュレッダーのように一方向
13
6

ハッシュ関数 - 性質

2

第2部 性質

一方向・固定長・衝突しにくい

20
7
ハッシュ関数 - 性質

3つの大事な性質

安全なハッシュ関数が満たすべき性質です。

一方向性・決定性・衝突耐性

出力から入力に戻せない(一方向性)、同じ入力は必ず同じ出力になる(決定性)、別々の入力が同じ出力になりにくい(衝突耐性)という3つの性質を持つ。

一方向性 出力から元データを逆算できない

決定性 同じ入力からは必ず同じ値が出る

衝突耐性 異なる入力が同じ値になりにくい

これらが崩れると安全に使えない

21
8
ハッシュ関数 - 性質

ハッシュ化の流れ

入力を放り込むと、決まった長さの指紋が出てきます。戻る矢印はありません。

1. 入力

文章・パスワード・ファイルなど何でもよい

2. 変換

ハッシュ関数が決まった手順で計算する

3. 指紋が出る

固定長のハッシュ値が出力される

4. 戻れない

この値から元の入力には戻せない

22
9
ハッシュ関数 - 性質

代表的なハッシュ関数(名前だけ)

今広く使われているハッシュ関数の代表格です。名前だけ知っておきましょう。

SHA-256(エスエイチエー256)

現在広く使われている安全なハッシュ関数の代表。256ビット(決まった長さ)の値を出力する。改ざん検知やデジタル署名の内部などで使われている。

出力はいつも決まった長さ

強くて広く使われている標準

MD5やSHA-1は古く、もう使わない

自作せず標準のものを使うのが鉄則

23
10

ハッシュ関数 - 暗号化との違い

3

第3部 暗号化との違い

戻せるか、戻せないか

30
11
ハッシュ関数 - 暗号化との違い

ハッシュ と 暗号化のちがい

一番の違いは「元に戻せるかどうか」です。目的がそもそも違います。

ハッシュ
暗号化

元に戻せるか

戻せない(一方向)

鍵があれば戻せる

鍵を使うか

鍵は使わない

鍵を使う

出力の長さ

いつも固定長

元の長さに依存しがち

主な目的

指紋・改ざん検知・照合

中身を隠して守る

31
12
ハッシュ関数 - 暗号化との違い

「戻せない」が役に立つ

元に戻せないことは欠点ではなく、むしろ安全のための長所です。

  • パスワードそのものを保存しなくて済む
  • データの中身を持たずに「同じか」だけ確認できる
  • 指紋だけ比べれば改ざんが分かる
  • 漏れてもハッシュ値からは元が分からない
  • だから保存や照合に向いている
32
13

ハッシュ関数 - 使いどころ

4

第4部 使いどころ

パスワード保存・改ざん検知

40
14
ハッシュ関数 - 使いどころ

パスワードはハッシュで保存する

パスワードそのものは保存せず、ハッシュ値だけを保存します。ログイン時はハッシュ同士を比べます。

1. 登録時

入力されたパスワードをハッシュ化して保存する

2. 元は保存しない

パスワードそのものはどこにも残さない

3. ログイン時

入力をまたハッシュ化して保存値と比べる

4. 一致で認証

一致すれば本人とみなす(元は知らないまま)

41
15
ハッシュ関数 - 使いどころ

どこで使われている?

ハッシュ関数は、安全と信頼が必要な場面で広く働いています。

パスワード保存
  • 元を保存せず指紋だけ持つ
  • 漏れても復元されにくい
  • saltを足してさらに強く
改ざん検知
  • ファイルの指紋を比べる
  • ダウンロードの破損確認
  • 内容が変われば値が変わる
署名・ブロックチェーン
  • 署名は要約に対して行う
  • データの連なりを固める
  • 信頼の土台として働く
42
16
ハッシュ関数 - まとめ
クイズ

振り返りクイズ

今日の内容を確認しましょう。

ハッシュ関数の説明として、最も適切なものはどれ?

A
鍵を使って暗号文を作り、鍵で元に戻せる
B
データを固定長の値に変換し、出力から元には戻せない
C
必ず入力と同じ長さの出力になる
D
同じ入力でも毎回違う値が出る
50
17
ハッシュ関数 - まとめ
答え

振り返りクイズ 解答

ハッシュ関数の説明として、最も適切なものはどれ?

A
鍵を使って暗号文を作り、鍵で元に戻せる
B
データを固定長の値に変換し、出力から元には戻せない
C
必ず入力と同じ長さの出力になる
D
同じ入力でも毎回違う値が出る

ハッシュ関数は、どんなデータも決まった長さの値に変換し、その出力からは元のデータに戻せません(一方向)。同じ入力からは必ず同じ値が出ます。鍵を使って戻せる暗号化とは、目的も性質も違います。

51
18
ハッシュ関数 - まとめ

質疑・まとめ

今日のまとめです。セキュリティ編はここで一区切りです。質問があればここで受け付けます。

今日のおさらい
  • ハッシュはデータの固定長の指紋
  • 一方向で元には戻せない
  • パスワード保存や改ざん検知に使う
シリーズ全体
  • 暗号化・共通鍵・公開鍵・署名・ハッシュ
  • これらが安全な通信の土台になる
52
19
"

ハッシュ関数は「どんなデータも、戻せない固定長の指紋に変える」。戻せないことこそが安全の鍵。パスワード保存も改ざん検知も署名も、この指紋の上に成り立っています。

ハッシュ関数

53
20