🔐 bcryptってなに?
みなさん、パスワードをどうやって守っているか気になったことはありませんか?
その答えの一つが bcrypt です。
bcryptは「パスワードをそのまま保存せず、安全にハッシュ化する仕組み」です。
ここで言うハッシュとは、どんな長さの文字列でも「固定の桁数」に変換する関数のこと。例えば、文字列の文字コード番号を全部足して、ある桁数で割った余りを結果とする——これだけでも“簡易ハッシュ”になります。もちろん実際のbcryptははるかに複雑で安全です。
🧩 bcryptの特徴
- ソルト付きハッシュ
同じパスワードでも毎回違う結果になるように「ソルト」と呼ばれるランダム情報を加えます。bcryptでは、このソルトと「ハッシュを何回繰り返すか」という回数をセットにして、結果の頭に組み込んで保存するので、検証時にも同じ条件で計算できます。 - 計算コストを調整できる
bcryptは「ストレッチング」と呼ばれる仕組みを使い、意図的に計算を重くします。これにより、総当たり攻撃(ブルートフォース)が現実的に困難になります。 - 古さを感じさせない設計
1999年に登場しましたが、現在でも十分に強固。セキュリティ界隈では長年使われる定番ライブラリです。
🛠️ 実際にどう使うの?
Pythonならこんな感じ👇
import bcrypt
password = b"my_secret_password"
hashed = bcrypt.hashpw(password, bcrypt.gensalt()) # ソルトと回数が内部に組み込まれる
print("保存するハッシュ:", hashed)
# ログイン時の確認
if bcrypt.checkpw(password, hashed):
print("認証OK!")
else:
print("認証失敗")
✨ まとめ
- ハッシュは「任意の入力を固定長に変換する関数」
- bcryptはソルトと回数を組み込み、安全にパスワードを守る
- 計算コストを調整し、未来のコンピュータにも対抗できる
つまり、「パスワードをそのまま保存しちゃダメ!bcryptを使おう」 というのが大事なメッセージです。
📎 付録:ハッシュの超シンプルな作り方(例)
ここでは本物のbcryptではなく、イメージをつかむためのおもちゃ版を紹介します。
ステップ1:文字を数字にする
パスワード「PassWordX」のアルファベットを数字に変換します。
例:A=1, B=2, …, Z=26 で考えます。
- P=16, a=1, s=19, s=19, W=23, o=15, r=18, d=4, X=24
合計すると → 16+1+19+19+23+15+18+4+24 = 139
ステップ2:固定の桁数に収める
3桁にしたいので「1000で割ったあまり」を使います。
139 ÷ 1000 の余りは 139。これがハッシュ値です。
ステップ3:ソルトを追加する
ここでランダムな数字(例:527)を「ソルト」として使います。
「ハッシュ計算をソルト回数だけ繰り返す」と考えて、139を3回ぐるぐる計算してもいいし、単純にソルトを頭につけて保存してもOK。
結果として保存されるのは:
527-139
イメージまとめ
- パスワード → 数字に変換
- 余りをとって桁数を固定
- ソルトをくっつけて保存
これが「ハッシュとソルト」の超シンプルなイメージです。実際のbcryptはもっと複雑で安全ですが、仕組みのイメージは同じです


コメント