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

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

akatsuka
February 22, 2025
83

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

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

akatsuka

February 22, 2025
Tweet

More Decks by akatsuka

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