はじめに
ハッシュ化は、元のデータを固定長のハッシュ値に変換する技術で、セキュリティの分野で広く利用されています。
特に、パスワードの保存やデータの整合性チェック などに欠かせない技術です。
本記事では、ハッシュ化の特徴や代表的なアルゴリズム、Python を用いた実装方法 について解説します。
書こうと思ったきっかけ
Webアプリケーションの認証機能を実装する際、パスワードの保存方法として「ハッシュ化」が重要 だと感じました。
しかし、単にハッシュ化するだけでは不十分で、適切なアルゴリズムを選ばなければセキュリティが脆弱 になることもあります。
そこで、ハッシュ化の基本と実装方法を整理し、理解を深めるためにこの記事を書きました。
ハッシュ化とは?
ハッシュ化とは、元のデータ(文字列やパスワードなど)を、不可逆な固定長のデータ(ハッシュ値) に変換する技術です。
引用画像:https://www.agent-grow.com/self20percent/2018/11/19/what-is-hash/
主に パスワードの保存 や データの整合性チェック に利用されます。
1. ハッシュ化の特徴
-
一方向性
ハッシュ化されたデータから元のデータを復元できない(不可逆変換)。 -
固定長の出力
入力データの長さに関係なく、常に一定の長さのハッシュ値を生成。 -
同じ入力 → 同じハッシュ値
同じ入力データなら、常に同じハッシュ値が得られる。 -
衝突耐性
異なるデータが同じハッシュ値になりにくい(強いアルゴリズムほど衝突耐性が高い)。
2. 代表的なハッシュアルゴリズム
アルゴリズム | ハッシュ長 | 特徴 |
---|---|---|
MD5 | 128bit(16バイト) | 速いが脆弱(推奨されない) |
SHA-1 | 160bit(20バイト) | MD5より安全だが、現在は非推奨 |
SHA-256 | 256bit(32バイト) | 一般的な用途に推奨される |
SHA-512 | 512bit(64バイト) | より強力なセキュリティが必要な場合に推奨 |
bcrypt | 可変長 | パスワードハッシュ化に推奨(ソルト付き) |
3. Pythonでのハッシュ化の実装
SHA-256 を使ったハッシュ化
このコードがやっていることを簡単に説明すると、入力された文字列を SHA-256 でハッシュ化し、そのハッシュ値を出力する という処理です。
import hashlib
def hash_sha256(text):
return hashlib.sha256(text.encode()).hexdigest()
# 実行例
password = "securepassword"
hashed_password = hash_sha256(password)
print(f"ハッシュ値(SHA-256): {hashed_password}")
実行結果(例)
- 「securepassword」 を SHA-256 でハッシュ化 すると、このような固定長のハッシュ値が得られる。
- 同じ入力なら、常に同じハッシュ値になる(ハッシュの一貫性)。
- 逆算(復元)は不可能(一方向性がある)。
まとめ
ハッシュ化は、データの一方向変換を行い、セキュリティを強化する重要な技術 です。
特に、SHA-256 や bcrypt などの適切なアルゴリズムを選ぶこと が、安全な認証システムの構築につながります。
Python を使えば簡単にハッシュ化を実装できるので、実際にコードを試しながら理解を深めていきましょう!