ふくふくHukuhuku Inc.
EP.10CS Basics対象: 中2以上 10分公開: 2026-05-10

暗号と認証:共通鍵・公開鍵・ハッシュの使い分け

HTTPS の中身、なぜ通信は盗聴されないか、パスワードはどう保管すべきか。古代ローマのシーザー暗号から現代の RSA / 楕円曲線暗号まで、Python で動かしながら理解する。

#暗号#認証#HTTPS#ハッシュ#セキュリティ
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

暗号は「秘密を守る技術」、認証は「相手が本物か確かめる技術」。インターネット時代、両方が無いと安全な通信はできません。本記事は基本 3 要素 (共通鍵・公開鍵・ハッシュ) と HTTPS の中身を扱います。

1. 暗号の 3 大用途

  • 機密性: 第三者に内容を見られない (盗聴対策)
  • 完全性: 内容が改ざんされていない (ハッシュで検知)
  • 認証: 相手が本人である (公開鍵で証明)

2. シーザー暗号 (古代の入門編)

アルファベットを N 文字ずらすだけ
Python
def caesar_encrypt(text, shift):    result = ""    for c in text:        if c.isupper():            result += chr((ord(c) - 65 + shift) % 26 + 65)        elif c.islower():            result += chr((ord(c) - 97 + shift) % 26 + 97)        else:            result += c    return result
print(caesar_encrypt("HELLO", 3))   # 'KHOOR'print(caesar_encrypt("KHOOR", -3))  # 'HELLO' で復号
# 弱点: 26 通り全部試せばすぐ破られる

3. 共通鍵暗号 (AES)

  • AES (Advanced Encryption Standard): 現代の標準、128/192/256 ビット鍵
  • 特徴: 高速、鍵が短くて済む、対称 (暗号化と復号が同じ鍵)
  • 課題: 鍵をどうやって相手に共有するか (これが公開鍵暗号で解決)
  • 用途: HTTPS の本通信、ファイル暗号化、Wi-Fi (WPA2/3)

4. 公開鍵暗号 (RSA / 楕円曲線)

  • 鍵が 2 つ: 公開鍵 (世界に公開) + 秘密鍵 (本人のみ保持)
  • 暗号化: 公開鍵で暗号化 → 秘密鍵で復号
  • 署名: 秘密鍵で署名 → 公開鍵で検証
  • RSA: 大きな素数の分解の困難さに依存、鍵長 2048-4096 ビット
  • 楕円曲線 (ECC): より短い鍵で同等の強度、現代の主流
  • 遅い: AES の 100-1000 倍遅い、なので「鍵交換」だけに使う

5. ハッシュ関数

Python のハッシュライブラリ
Python
import hashlib
# SHA-256 で文字列をハッシュ化text = "Hello, World!"h = hashlib.sha256(text.encode())print(h.hexdigest())# → dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
# パスワード用には bcrypt or argon2 を使う (低速ハッシュ)# import bcrypt# hashed = bcrypt.hashpw(b"my_password", bcrypt.gensalt())

6. HTTPS の中身 (TLS ハンドシェイク)

  1. 1Client Hello: ブラウザが「対応する暗号方式リスト」を送る
  2. 2Server Hello + 証明書: サーバが暗号方式を選択 + 公開鍵証明書を送る
  3. 3証明書検証: ブラウザが認証局 (CA) のチェーンを確認
  4. 4鍵交換: 公開鍵を使って共通鍵を安全に交換
  5. 5本通信: 共通鍵で AES 暗号化された HTTP 通信

7. パスワードの正しい保管

やり方評価
平文で保存❌ 絶対 NG (DB 漏れた瞬間全員アウト)
MD5 ハッシュ❌ レインボーテーブル攻撃で破られる
SHA-256 ハッシュ❌ 速すぎて総当たり攻撃に弱い
SHA-256 + ソルト△ ソルト追加で改善するが依然速い
bcrypt / argon2✅ 推奨。意図的に低速で総当たりを困難に

8. 次の話

EP.11 では データベースの基礎 に。SQL と関係モデル、インデックス、トランザクションを扱います。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp