SDN
← 概念一覧へ
セキュリティ

暗号化

Cryptography

データを守る暗号の基礎。守る場所(転送時/保存時)、鍵の方式(対称/非対称)、パスワード保存(ハッシュ+ソルト+bcrypt/Argon2)、通信路の保護(TLS)を押さえる。『パスワードを暗号化』は減点表現で、正しくは『ハッシュ化』。

キーポイント
  • 転送時(in transit) = ネットワークを流れるデータ。TLS(=HTTPSの中身)で守る。盗聴・改ざん防止。
  • 保存時(at rest) = ディスク/DBのデータ。ディスク暗号化・カラム暗号化・KMS管理鍵で守る。
  • 対称暗号(AESなど) = 暗号化と復号で同じ鍵。速い。大量データ向き。
  • 非対称暗号(RSA/ECC) = 公開鍵と秘密鍵のペア。遅い。鍵交換・署名・認証向き。
  • パスワードは『暗号化』ではなく『ハッシュ化』。ソルト付き bcrypt/scrypt/Argon2(現行はArgon2id推奨)で保存する。
トレードオフ

強い暗号や遅いハッシュ(bcrypt/Argon2)はセキュリティを高めるが、CPUコストとレイテンシを増やす。特にパスワードハッシュは『わざと遅くして総当たりを困難にする』ため、サーバ負荷とのバランスでコストパラメータを調整する。非対称暗号は安全な鍵交換ができるが遅いので、TLSは『非対称で鍵交換だけして、本番は速い対称暗号』というハイブリッドにしている。

守る『場所』の話: 転送時 と 保存時

データを守ると言っても、守る場所は2つあります。両方やって初めて安全で、片方だけでは穴が残ります。

  • 転送時(in transit): ネットワークを移動中のデータ。郵便でいう『配達中の手紙』。盗み見・すり替えを防ぐため TLS(旧称SSL)で暗号化します。HTTPS とは要するに『TLSで包んだHTTP』のこと。
  • 保存時(at rest): ディスクやDBに置いてあるデータ。郵便でいう『金庫にしまった手紙』。盗難やバックアップ流出に備えて、ディスク暗号化・カラム暗号化・KMS(鍵管理サービス)で守ります。

primerの『encrypt in transit and at rest』はこの両方を指します。移動中だけ守ってもDBが盗まれたら終わり、逆もまた然り。

鍵の『方式』の話: 対称 vs 非対称

種類鍵の使い方速度用途
対称暗号暗号化と復号で同じ鍵速い ◎大量データの暗号化AES(特にAES-GCM)
非対称暗号(公開鍵)公開鍵で暗号化・秘密鍵で復号(署名は逆向き)遅い △鍵交換、署名、認証RSA, ECC

たとえ話:

  • 対称暗号 = 同じ鍵で開け閉めする南京錠。速くて便利だが、『その鍵を相手にどう渡すか』が問題(鍵を盗まれたら終わり)。
  • 非対称暗号 = 誰でも閉められるが、持ち主しか開けられない郵便ポスト。公開鍵(投入口)は世界に公開してよく、秘密鍵(取り出す鍵)は本人だけが持つ。これなら鍵を事前に共有しなくても安全に届けられる。

TLSはハイブリッド(両方の良いとこ取り)

ここが綺麗な設計です。非対称暗号は安全だが遅い、対称暗号は速いが鍵共有が課題。そこでTLSは:

図を描画中...

最初だけ遅い非対称で安全に対称鍵を渡し、本番は速い対称暗号で通信する——これでセキュリティと速度を両立しています。

パスワード保存: ここが最頻出

面接で『パスワードをどう保存する?』と聞かれて『暗号化して保存』と答えると減点です。正しくはハッシュ化。違いを押さえましょう。

  • 暗号化 = 鍵があれば元に戻せる(可逆)。
  • ハッシュ = 元に戻せない(一方向)。

パスワードは照合(入力値をハッシュして保存値と比べる)できればよく、元に戻す必要がないので、わざと戻せないハッシュを使います。万一DBが漏れても生パスワードは復元できません。

ソルト・ペッパー・専用ハッシュ

図を描画中...
  • ソルト(salt): ユーザーごとに付けるランダム値。これがあると、同じパスワードでも保存されるハッシュが人によって変わるので、あらかじめ計算した辞書(レインボーテーブル)が効かなくなります。
  • ペッパー(pepper): 全ユーザー共通の秘密値をDBの外(コードやKMS)に持つ追加防御。DBだけ漏れても破られにくくなる。
  • 専用ハッシュ: SHA-256を1回かけるだけでは速すぎて、攻撃者がGPUで毎秒数十億回試せてしまう。そこで bcrypt / scrypt / Argon2 / PBKDF2 というわざと遅いアルゴリズムを使い、総当たりを非現実的にします。現行の推奨は Argon2id

つまずきポイント

  • 『なぜSHA-256一回ではダメ?』→ 速すぎるから。ハッシュは普通『速い方が良い』ですが、パスワード保存に限っては遅い方が良い(攻撃者の総当たりが遅くなる)という逆転の発想がポイント。
  • ソルトの目的を一文で: 『同一パスワードのハッシュを別々にして、事前計算の辞書攻撃を無効化する』。
  • JWTやmTLSの裏側もこの暗号技術。署名(改ざん検知)は非対称暗号、TLSはハイブリッド——と繋げて理解すると一気に見通しが良くなります。

関連する概念

この概念で腕試し

関連する 8 問のクイズに挑戦できます。

クイズを解く