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

なぜ、パスワードハッシュのソルトはハッシュと同じ場所に置いて良いのか

Avatar for Akinori Takigawa Akinori Takigawa
February 22, 2025
470

 なぜ、パスワードハッシュのソルトはハッシュと同じ場所に置いて良いのか

PHPカンファレンス名古屋2025

Avatar for Akinori Takigawa

Akinori Takigawa

February 22, 2025
Tweet

More Decks by Akinori Takigawa

Transcript

  1. ϋογϡؔ਺ͱ͸ ) BBBC f1abd73aa0858634f18d36 bf5666194958a8b7d2 ) BBBB 70c881d4a26984ddce795f 6f71817c9cf4480e79 )

    BBBD 00b25f15212ed225d3389b 5f75369c82084b3a76 গ͠Ͱ΋ҧ͏σʔλΛೖྗ͢Δͱ͔ͳΓҧ͏ϋογϡ͕ग़ྗ͞ΕΔ 
  2. ϋογϡؔ਺ͱ͸ ) QBTTXPSE 5baa61e4c9b93f3f068225 0b6cf8331b7ee68fd8 ) QBTTXPSE 5baa61e4c9b93f3f068225 0b6cf8331b7ee68fd8 )

    QBTTXPSE 5baa61e4c9b93f3f068225 0b6cf8331b7ee68fd8 ಉ͡σʔλΛೖྗ͢Δͱಉ͡ϋογϡ͕ग़ྗ͞ΕΔ 
  3. ύεϫʔυೝূͷ࢓૊Έʢ❌ϋογϡԽͳ͠ʣ JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN IMZQF  BBC!FYBNQMFDPN ODCPLMC

     BBD!FYBNQMFDPN LQNWQP 6TFS BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ৽نొ࿥ LQNWQP 
  4. BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ϩάΠϯ ύεϫʔυೝূͷ࢓૊Έʢ❌ϋογϡԽͳ͠ʣ JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN

    IMZQF  BBC!FYBNQMFDPN ODCPLMC  BBD!FYBNQMFDPN LQNWQP 6TFS LQNWQP LQNWQP ൺֱ 
  5. ͳͥύεϫʔυΛϋογϡԽ͢Δඞཁ͕͋Δͷ͔ w %#͕ྲྀग़ͨ࣌͠ʹଈ࠲ʹѱ༻͞Εͳ͍Α͏ʹ͢Δ w ύεϫʔυϦετ߈ܸͰଞαʔϏεʹ΋Өڹͯ͠͠·͏৔߹΋͋Δ w %#͕ྲྀग़͢Δͷ͸͋Γಘͳ͍ͱࢥ͏͔΋͠Εͳ͍͕ɺաڈʹ࿙Ӯࣄ݅͸ى͖ ͍ͯΔ w ୐;͍͊Δศ<>

    w ໿ສ݅ͷฏจύεϫʔυ͕ྲྀग़ˠͦͷޙαʔϏεऴྃ w స͹͵ઌͷ伺ͱͯ͠ϋογϡԽ͸ඇৗʹॏཁ <>IUUQTXXXOJLLFJDPNBSUJDMF%(9.;07$" 
  6. ύεϫʔυೝূͷ࢓૊Έʢ⚠ιϧτͳ͠ʣ JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN BFGF FDFCCDBBG  BBC!FYBNQMFDPN

    DCFB DGDFCDFBC  BBD!FYBNQMFDPN GEEGBBBEDGEF ECECBFBC 6TFS BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ৽نొ࿥ GEEGBBBEDGEF ECECBFBC LQNWQP ) 
  7. JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN BFGF FDFCCDBBG  BBC!FYBNQMFDPN DCFB

    DGDFCDFBC  BBD!FYBNQMFDPN GEEGBBBEDGEF ECECBFBC 6TFS ύεϫʔυೝূͷ࢓૊Έʢ⚠ιϧτͳ͠ʣ GEEGBBBEDGEF ECECBFBC GEEGBBBEDGEF ECECBFBC ൺֱ BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ϩάΠϯ LQNWQP ) 
  8. ύεϫʔυೝূͷྲྀΕʢ✅QBTTXPSE@IBTIʣ BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ৽نొ࿥ JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN

    $2y$10$..De  BBC!FYBNQMFDPN $2y$10$..Sa  BBD!FYBNQMFDPN $2y$10$..VO 6TFS IBTIQBTTXPSE@IBTI QBTTXPSE 1"44803%@%&'"6-5  ZL%F268#7Q+QY7RU4RZFUV61Y+BQ$"QJ-CN7 O$0.W.;9I70 
  9. ύεϫʔυೝূͷྲྀΕʢ✅QBTTXPSE@IBTIʣ BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ৽نొ࿥ JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN

    $2y$10$..De  BBC!FYBNQMFDPN $2y$10$..Sa  BBD!FYBNQMFDPN $2y$10$..VO 6TFS IBTIQBTTXPSE@IBTI QBTTXPSE 1"44803%@%&'"6-5  ZL%F268#7Q+QY7RU4RZFUV61Y+BQ$"QJ-CN7 O$0.W.;9I70 ZL%F268#7Q+QY7RU4RZFUV61Y+BQ$"QJ-CN7O$0.W.;9I70 ΞϧΰϦζϜ Φϓγϣϯ ιϧτ ϋογϡԽ͞Εͨύεϫʔυ ·ͱΊͯ%#ʹొ࿥͢Δʢಉ͡ͱ͜Ζʹஔ͘ʣ 
  10. JE FNBJM QBTTXPSE  BBB!FYBNQMFDPN $2y$10$..De  BBC!FYBNQMFDPN $2y$10$..Sa 

    BBD!FYBNQMFDPN $2y$10$..VO 6TFS ύεϫʔυೝূͷྲྀΕʢ✅QBTTXPSE@IBTIʣ BBD!FYBNQMFDPN ϝʔϧΞυϨε ύεϫʔυ ϩάΠϯ QBTTXPSE@WFSJGZ QBTTXPSE Z70  USVFͩͬͨΒɺೝূ੒ޭ 
  11. QBTTXPSE@IBTI QBTTXPSE@IBTI QBTTXPSE 1"44803%@#$3:15  $2y$10$.kDeQU9WBVpJpxVqtS4qyetuUPxJapCApiLbmVnCO6MvMZ6X14hVO w ZΞϧΰϦζϜ͕CDSZQU w ίετ͕

    ճϋογϡԽ͢Δ  w ιϧτ͸L%F268#7Q+QY7RU4RZF ຖճҧ͏݁Ռ͕ग़Δͷ͸ɺιϧτ͕ϥϯμϜ͔ͩΒ ιϧτͱΦϓγϣϯ͕ಉ͡ͳΒಉ͡ϋογϡ͕ಘΒΕΔ 
  12. QBTTXPSE@WFSJGZ IBTIQBTTXPSE@IBTI QBTTXPSE 1"44803%@#$3:15  $2y$10$.kDeQU9WBVpJpxVqtS4qyetuUPxJapCApiLbmVnCO6MvMZ6X14hVO SFTVMUQBTTXPSE@WFSJGZ  QBTTXPSE 

    IBTI   IBTIʹιϧτؚ͕·Ε͍ͯΔͷͰɺ QBTTXPSEʹ͍ͭͯ΋ಉ͡ιϧτͰϋογϡΛܭࢉ͢Δ͜ͱͰݕূ͕Մೳ 
  13. DSZQUΛ࢖ͬͯϋογϡΛ࠶ݱ͢Δ %&.0͋Γ <?php $password = 'password'; $password_hash = password_hash($password, PASSWORD_DEFAULT);

    $algo = substr($password_hash, 0, 7); // $2y$10$ $salt = substr($password_hash, 7, 22); $hash = substr($password_hash, 29); var_dump($password_hash, $algo, $salt, $hash); // password_verifyΛ࢖Θͣʹݕূͯ͠ΈΔ $password_hash_by_crypt = crypt($password, $algo . $salt); var_dump($password_hash, $password_hash_by_crypt); var_dump(hash_equals($password_hash, $password_hash_by_crypt)); 
  14. 1"44803%@%&'"6-5ͷਖ਼ମ w WBS@EVNQ 1"44803%@%&'"6-5  w TUSJOH  Z w

    ZͷZ w ࣮͸Z͸1)1ʹ͔͠ͳ͍ w ͕CMPX fi TIΞϧΰϦζϜͰB C Y Zͷόʔδϣϯ͕͋Δ w YͱZ͸1)1ͷࣄ৘ʹΑͬͯ௥Ճ͞Εͨόʔδϣϯ w ଞݴޠͰ΋ݕূ͚ͩ͸ରԠ͍ͯ͠Δ৔߹΋͋Δ HPMBOHͷ#DSZQU