Upgrade to Pro — share decks privately, control downloads, hide ads and more …

パスワードのハッシュ、ソルトってなに? - What is hash and salt for...

Shohei Okada
September 26, 2024

パスワードのハッシュ、ソルトってなに? - What is hash and salt for password?

2024/09/28 開催の「PHP カンファレンス沖縄 2024」(https://phpcon.okinawa.jp/ )の LT 資料です。

詳細:Vhttps://fortee.jp/phpcon-okinawa-2024/proposal/bac0356a-321e-4e2a-9690-3eeea1aa611c

Shohei Okada

September 26, 2024
Tweet

More Decks by Shohei Okada

Other Decks in Programming

Transcript

  1. 燃えがちなニュース 「約 ◯ 万アカウントの情報  漏えいか 平文パスワードも」 「平文パスワード ◯ 万件流出件、  n

    カ月たってもサービス再開できず」 「◯ 万名を超えるユーザ情報が  流出、パスワードは平文」
  2. 燃えがちなニュース 「約 ◯ 万アカウントの情報  漏えいか 平文パスワードも」 「平文パスワード ◯ 万件流出件、  n

    カ月たってもサービス再開できず」 「◯ 万名を超えるユーザ情報が  流出、パスワードは平文」
  3. ハッシュ関数の例 php > echo md5('a'); 0cc175b9c0f1b6a831c399e269772661 php > echo md5('b');

    92eb5ffee6ae2fec3ad71c777531578f php > echo md5('aa'); 4124bc0a9335c27f086f24ba207a4912
  4. わるいやつの考え b4af804009cb036a4ccdc33431ef9ac9 ? ハッシュ関数 DB に保存されている値 a 0cc175b9c0f1b6a831c399e269772661 aa 4124bc0a9335c27f086f24ba207a4912

    ab 187ef4436122d1cc2f40dc2b92f0eba0 : : pass1234 b4af804009cb036a4ccdc33431ef9ac9 : : パスワードは pass1234 だ!
  5. わるいやつの考え b4af804009cb036a4ccdc33431ef9ac9 ? ハッシュ関数 DB に保存されている値 a 0cc175b9c0f1b6a831c399e269772661 aa 4124bc0a9335c27f086f24ba207a4912

    ab 187ef4436122d1cc2f40dc2b92f0eba0 : : pass1234 b4af804009cb036a4ccdc33431ef9ac9 : : パスワードは pass1234 だ! レインボーテーブル
  6. bcrypt アルゴリズム(PASSWORD_BCRYPT)の例 ソルト(22 文字) password_hash の戻り値 php > $hash =

    password_hash('pass1234', PASSWORD_BCRYPT); php > echo $hash; $2y$10$c9Bsp/6U5nCELYMkO8B/YuVp5MGFgmQcHEabeji2ANiasyQqkXspy
  7. bcrypt アルゴリズム(PASSWORD_BCRYPT)の例 ハッシュ値(31 文字) password_hash の戻り値 php > $hash =

    password_hash('pass1234', PASSWORD_BCRYPT); php > echo $hash; $2y$10$c9Bsp/6U5nCELYMkO8B/YuVp5MGFgmQcHEabeji2ANiasyQqkXspy
  8. password_hash と password_verify php > $hash = password_hash('pass1234', PASSWORD_BCRYPT); php

    > echo $hash; $2y$10$c9Bsp/6U5nCELYMkO8B/YuVp5MGFgmQcHEabeji2ANiasyQqkXspy php > var_dump(password_verify('invalid', $hash)); bool(false) php > var_dump(password_verify('pass1234', $hash)); bool(true) 自動でソルトが付くので $hash の値は実行ごとに変わる
  9. password_hash と password_verify php > $hash = password_hash('pass1234', PASSWORD_BCRYPT); php

    > echo $hash; $2y$10$c9Bsp/6U5nCELYMkO8B/YuVp5MGFgmQcHEabeji2ANiasyQqkXspy php > var_dump(password_verify('invalid', $hash)); bool(false) php > var_dump(password_verify('pass1234', $hash)); bool(true) 自動でソルトが付くので $hash の値は実行ごとに変わる
  10. password_hash と password_verify php > $hash = password_hash('pass1234', PASSWORD_BCRYPT); php

    > echo $hash; $2y$10$c9Bsp/6U5nCELYMkO8B/YuVp5MGFgmQcHEabeji2ANiasyQqkXspy php > var_dump(password_verify('invalid', $hash)); bool(false) php > var_dump(password_verify('pass1234', $hash)); bool(true) 自動でソルトが付くので $hash の値は実行ごとに変わる
  11. 燃えがちなニュース 「約 ◯ 万アカウントの情報  漏えいか 平文パスワードも」 「平文パスワード ◯ 万件流出件、  n

    カ月たってもサービス再開できず」 「◯ 万名を超えるユーザ情報が  流出、パスワードは平文」