ç§ã¯ãã€ããããã«ãŒããµã€ãã§ä»ã®èª°ãã®ãã¹ã¯ãŒããè§£èªã§ããªãããã«ãããã£ãã®ã§ãã
ããšãã°ããŠãŒã¶ãŒãèªåã®ãã¹ã¯ãŒããæ°åã ãã§æ§æãããŠããããšãããã«ãŒã«èªæ ¢ããå Žåãããã«ãŠãŒã¶ãŒã¯èªåã®ã¢ã«ãŠã³ãã倱ããŸãã
ãããããŠãŒã¶ãŒã劻ã«é»è©±ã§ãã¹ã¯ãŒããæž¡ããããã«ãŒããããèããå Žåã¯ã©ããªãã§ããããã
äœïŒïŒããã«ãŒã¯ãã¹ã¯ãŒããç¥ã£ãŠããŸããïŒããã¯ãã¹ãŠå€§å€±æã§ãããã®ãããªãŠãŒã¶ãŒãèªåã®ã¢ã«ãŠã³ããä¹ã£åãã®ãé£ããããã®ãæäŒã£ãŠãããŸãããïŒãã®è³ªåã¯ãã€ãç§ãå¿é ããŠããŠãç§ã¯ãããããæ¹æ³ãèŠã€ãããšæããŸãããŸãã¯ãããããããšã§ããããããåçºèŠããŸãããçµå±ã®ãšããããã¹ãŠã¯ç§ãã¡ã®åã«é·ãéçºæãããŠããŸããã
å ¥é
- ãŠãŒã¶ãŒã¯ããµã€ãã12345ãã§ãã¹ã¯ãŒããååŸããããšèããŠããŸãã
- ããã«ãŒã¯ãã®ãã¹ã¯ãŒããç°¡åã«æšæž¬ã§ããŸãã
- ãã ãããŠãŒã¶ãŒã¯ãã°ã€ã³ããå¿ èŠããããããã«ãŒã¯ãã°ã€ã³ããŸãããããã«ãŒããã°ã€ã³ãšãã¹ã¯ãŒããç¥ã£ãŠããŠãã
- 远å ãµãŒãã¹ã®åœ¢ã§ç§å¯ã®ã³ãŒããšä»²ä»è ãå«ãSMSã¯ãããŸããããã°ã€ã³ããŒãžãæã€ãŠãŒã¶ãŒãšãµã€ãã®ã¿ã
- ãŸãããããªãŒãã¹ã§åŠ»ã«ãã¬ãªã¢ããã°ã€ã³ã¢ãªã¹ã®ãµã€ããµã€ãã§ãã¹ã¯ãŒãã123456ã«å€æŽããŸããã12345ããã人æ°ããããšèšãããŠããŸãããšèšãã®ãæ¯èŒçå®å šã§ãããããŠãããªãã®ã¢ã«ãŠã³ããããã«ãããã³ã°ãããããšãæããªãã§ãã ããã
ãã®æ¹æ³ã¯ã©ã®ããã«æ©èœããŸããïŒãã¹ãŠã®è©³çްã¯ã«ããã®äžã«ãããŸãã
å¿ èŠãªãã®ïŒ
- æŠå¿µã¯èªèšŒæ¹æ³ã説æããã ãã§ã
- å®è£ ã§ã¯ãããŠãŒã¶ãŒåããããã¹ã¯ãŒããããsalt1ãããsalt2ãã®ã¿ãä¿åããå¿ èŠããããŸããã¯ãã2ã€ã®å¡©ã
- redisã®ãã°ããŒãã«ãšã«ãŠã³ã¿ãŒãªãã§è¡ã
- IPã¢ãã¬ã¹ã®ããŒãã«ã¯ä¿æããŸãã
- SMSã¯äœ¿çšããŸãã
- ãã°ã€ã³ã®è©Šè¡ã¯ãããã¯ãããŸãããç§ã®æåŸã®å€±æãã詊ã¿ããç¥ã£ãŠããããã«ãå ¥ãå£ããããã¯ããããšã¯ç¡æå³ã§ã-ããã«ãŒãå¶éæéã«éãããšããŠãã圌ã¯åã«è€æ°ã®ãŠãŒã¶ãŒãããã¹ã¯ãŒããå·ã€ãå§ããŸããããã«ããŠãŒã¶ãŒèªèº«ãå¶éãåããããšã«ãªããŸããã¯ãŒã«ãªåçã§ããªãã®ãµã€ãã«ãã°ã€ã³ããããã«åœŒããµããŒãã«é»è©±ããŸãããïŒ
- ãŠãŒã¶ãŒã¯ãã€ã§ããã¹ã¯ãŒãã倿ŽããŠãä»ã®ããã€ã¹ã§ã¯ç¡å¹ã«ããããšãã§ããŸããããã¯äžè¬çãªã«ãŒã«ã§ãããèšåãã䟡å€ããããšæããŸãã
- èŸæžã䜿çšããŠãã¹ã¯ãŒããæšæž¬ããããã»ã¹ãããã«ãŒã«ãšã£ãŠããå°é£ã«ããããšãã§ããŸãïŒãªãã·ã§ã³ã以äžã§èª¬æããŸãïŒã
ã¡ãœãããšãã»ã³ã¹
ãŠãŒã¶ãŒããã¹ã¯ãŒãã12345ããæã€ããšãèš±å¯ãããã®ãã¹ã¯ãŒããè§£èªããããšãããå°é£ã«ããå¿ èŠããããŸããããšãã°ãããã·ã¥ã®ããã«èŠãããã¹ã¯ãŒããæšæž¬ããæ¹æ³ã
ã©ããã£ãŠïŒ
ãã©ãŠã¶ã«ããã¹ã¯ãŒãããœã«ãããããã®äžæã®ãœã«ããåžžã«ããå Žåãæ³åããŠã¿ãŠãã ãããåãŠãŒã¶ãŒã®å¡©ããªããããå¿ èŠãªã®ã§ããïŒæå·åãããããšãã°ãæååã12345ããå¡©ãsaltsaltãã§argon2idã«æå·åãããšãã$ argon2id $ v = 19 $ m = 16ãt = 2ãp = 1 $ c2FsdHNhbHQ $ jX94laSi6vo9AhS + bHwbkgããåŸãããŸãããœã«ãã倿Žãããšãããã·ã¥ãç°ãªããŸãã 1ã€ã®ã¢ã«ãŽãªãºã ã¯ãããããã«ç°ãªããœã«ãã䜿çšããããšã«ãããåããã¹ã¯ãŒããç°ãªãæ¹æ³ã§æå·åããŸããè¯ãã
ããããæåã«ãã®å¡©ãã©ãã§æã«å ¥ããã®ã§ããïŒã¯ããããã§åœŒå¥³ã¯ã¢ãã¿ãŒã®åã«åº§ã£ãŠããŸãã圌ã«2ã€ã3ã€ã®äœåãªãã£ã©ã¯ã¿ãŒãçµãåºãããã€ãã«äººéçã«ãã°ã€ã³ãããŸããèµ°ãåã£ãŠããç«ã¯ããŸããïŒããŠãç«ã飌ããŸããããç«ãšã¯ïŒãããç§ãã¡ã®ç§å¯ã®èšèã§ããç»é²æã«ãµãŒããŒã«éä¿¡ãããã®åèªã®ãœã«ããçæããŸãããããŠã圌ã¯ãã®å¡©ãç§ãã¡ã«éããŸããããã ãã§ã-ãã©ãŠã¶ã«ã¯å¡©ããããŸããä»åºŠã¯ãã¹ã¯ãŒãããŸãããã¹ã¯ãŒããæå·åãããµãŒããŒãéä¿¡ãããœã«ãã§ãœã«ãããŸãã
ä»ã¯ã12345ãã®ãã«ã¡ããããã¶ã£ãŠããŸãããããã·ã¥ãéä¿¡ããŸããããŠãŒã¶ãŒããšã«ç¬èªã®ãœã«ãããããããããã·ã¥ã¯ç°ãªããŸãã
ç·åœããæ»æã¯ä»ãç æ°ã«ãªãããã§ãïŒè¿œå ã®èšç®ãè¡ããåçŽãªæ°åã®ä»£ããã«ã¢ã«ãŽã³ããã·ã¥ã®é·ãæååãç¹°ãè¿ãå¿ èŠãããã ãã§ãªããåãŠãŒã¶ãŒãç¬èªã®ããã·ã¥ãæã£ãŠããŸã-ä»ã§ã¯ããã¹ã¯ãŒããšåãæååã詊ããŠå šå¡ããã§ãã¯ããã®ã¯ç¡æå³ã§ããŠãŒã¶ãŒã3人ã®ãŠãŒã¶ãŒãåããã¹ã¯ãŒã12345ãéžæãããšããŸãããããã ããããã·ã¥ã¯ç°ãªããŸãã誰ããéãå¡©ãæã£ãŠããããã§ãã
- ãã©ãŠã¶ã¯ããµãŒããŒã以åã«éä¿¡ãããœã«ãã䜿çšããŠãã¹ã¯ãŒãããã·ã¥ãèšç®ããå¿ èŠããããŸãããã¹ã¯ãŒãèªäœã§ã¯ãªããããã·ã¥ãéä¿¡ããå¿ èŠããããŸãã
- ãµãŒããŒã¯ããŠãŒã¶ãŒã ããç¥ã£ãŠããç§å¯ã®åèªã䜿çšããŠãœã«ããéä¿¡ããŸããç°¡åãªããšããããŸããäŸ-ãç«ãã
- åãŠãŒã¶ãŒã¯ç¬èªã®ãœã«ããæã£ãŠããå¿ èŠããããŸãã
- åãç§å¯ã®èšèãéžãã 2人ã®ãŠãŒã¶ãŒã¯ãç°ãªãå¡©ãæã£ãŠããå¿ èŠããããŸãã
- ãµãŒããŒã¯ãæ£ããç§å¯ã®åèªã䜿çšããããã©ãããããã³ãã®ãŠãŒã¶ãŒã«ãšã£ãŠãœã«ããæ£ãããã©ãããå ±åããå¿ èŠã¯ãããŸãããããã§ãªãå Žåã1ã€ã§ã¯ãªã2ã€ã®åçŽãªãã¹ã¯ãŒãããã«ãŒããã©ãŒã¹ã«ãªããŸãã
- ãŠãŒã¶ãŒãç§å¯ã®èšèã倿Žãããšãå¡©ã倿ŽãããŸãã
ã€ãŸãã圌ã®åçŽãªãã¹ã¯ãŒããä¿è·ããããã«ããŠãŒã¶ãŒã¯å¥ã®éåžžã«åçŽãªåèªãèãåºãå¿ èŠããããŸãã圌ã¯èªèšŒãããããšãããªãã©ãã§ããã®åèªãå ¥åãããããããã¹ã¯ãŒãã ããå ¥åããå¿ èŠããããŸãã圌ãã¯ãããŒãã¯ãªã¢ãããŸã§ã
- ãµã€ãã«è¡ããŸãã
- ãã°ã€ã³ãšç§å¯ã®èšèãå ¥åããŸãã
- å ¥åãããã¹ã¯ãŒã
- æºåãã§ããŸãã
ãã¹ã¯ãŒããšç§å¯ã®èšèã¯éåžžã«åçŽã§ãã1ã€ãŸãã¯2ã€ã®æåãããšãã°ããã¹ã¯ãŒãã¯12345ã§ç§å¯ã®åèªã¯42ã§ãããããŠã誰ããç§å¯ã®åèª42ãæãã€ãããšããŠããããã¯æãããããšã§ã¯ãããŸããã
äœ¿ãæ¹ãã¹ããããã€ã¹ãããã®ã³ã³ã»ãã
次ã®èŠçŽ ããããŸãã
- WebãµãŒããŒ
- ããŒã¿ããŒã¹ãšãŠãŒã¶ãŒããŒãã«ïŒ
- ãã°ã€ã³ãã
- password_hash
- salt_unique_for_each_user
- salt_for_password
- ãŠãŒã¶ãŒã®ãã©ãŠã¶
- ããã«ãŒãã©ãŠã¶
- ãµã€ãã®ãã°ã€ã³ããã³ç»é²ããŒãž
- ãã°ã€ã³ãã©ãŒã ã®éä¿¡ã€ãã³ããã€ã³ã¿ãŒã»ããããã¹ã¯ãªãã
次ã«ãåãæå·åã·ã¹ãã ã§ãããã©ã¡ãŒã¿ãŒãå€ããã ãã§å®è£ ã§ãã2ã€ã®ç°ãªãã¢ã«ãŽãªãºã ãå¿ èŠã§ãã
- ALG1ã¯ãæååãšãœã«ãããããã·ã¥ãçæããé察称æå·åã¢ã«ãŽãªãºã ã§ããALG1ïŒstrãsaltïŒ= hash1ããã®ã¢ã«ãŽãªãºã ã¯ãµãŒããŒã§ã®ã¿äœ¿çšãããŸãã
- ALG2ã¯ãæååãšãœã«ãããããã·ã¥ãçæããé察称æå·åã¢ã«ãŽãªãºã ã§ããALG2ïŒstrãsaltïŒ= hash2ããã®ã¢ã«ãŽãªãºã ã¯å ¬ã«äœ¿çšãããŠãããã¯ã©ã€ã¢ã³ãïŒãã®äŸã§ã¯javascriptïŒã«å®è£ ã§ããã¯ãã§ãã
ããã«ãããã«2ã€ã®åçŽãªã¢ã«ãŽãªãºã ãå¿ èŠã§ãã
- ALG_SALTã¯ãã©ã³ãã ãœã«ããæååãšããŠèšç®ããã¢ã«ãŽãªãºã ã§ããALG_SALTïŒïŒ=ãœã«ãããã®ã¢ã«ãŽãªãºã ã¯ãµãŒããŒã§ã®ã¿äœ¿çšãããŸãã
- ALG_PASSã¯ãã©ã³ãã ãªåçŽãªãã¹ã¯ãŒããçæããã¢ã«ãŽãªãºã ã§ããALG_PASSïŒïŒ=ãã¹ããã®ã¢ã«ãŽãªãºã ã¯ãµãŒããŒã§ã®ã¿äœ¿çšãããŸãã
ã€ãã³ããæ®µéçã«
- ãŠãŒã¶ãŒã¯ãŸã ãã°ã€ã³ããŠããªããããç»é²ããŒãžã«ç§»åããŸãã
- ãµãŒããŒã¯ããã°ã€ã³+åçŽãªç§å¯ã®åèªã®2ã€ã®ãã£ãŒã«ããæã€ãã©ãŒã ã衚瀺ããŸãã
- ãŠãŒã¶ãŒããã°ã€ã³ãéžæ-ã¢ãªã¹
- ãŠãŒã¶ãŒã¯ç§å¯ã®èšèãéžæããŸã-ç«
- ãŠãŒã¶ãŒã[éä¿¡]ãã¿ã³ãã¯ãªãã¯ããŸãã
ãµãŒããŒã¯ããŠãŒã¶ãŒaliceãããŒã¿ããŒã¹ã«ååšããªãããšã確èªããŸãã
ãµãŒããŒã¯æ¬¡ã®å€ãèšç®ããŸãã
$salt_unique_for_each_user = ALG_SALT(); // "saltsalt"
$salt_for_password = ALG1("cat", $salt_unique_for_each_user); // "$argon2id$v=19$m=16,t=2,p=1$c2FsdHNhbHQ$jX94laSi6vo9AhS+bHwbkg"
$user_simple_password = ALG_PASS(); // "12345"
$user_simple_password_hashed = ALG2($user_simple_password , $salt_for_password); // "$argon2id$v=19$m=16,t=2,p=1$JGFyZ29uMmlkJHY9MTkkbT0xNix0PTIscD0xJGMyRnNkSE5oYkhRJGpYOTRsYVNpNnZvOUFoUytiSHdia2c$b+6ROJVsZ62UXA7hEAg0AQ"
ãµãŒããŒã¯usersããŒãã«ã«ã¬ã³ãŒããäœæããããŒã¿ãä¿åããŸãã
INSERT INTO `users`
(
login,
password_hashed,
salt_unique_for_each_user,
salt_for_password
)
VALUES
(
"alice",
"$argon2id$v=19$m=16,t=2,p=1$JGFyZ29uMmlkJHY9MTkkbT0xNix0PTIscD0xJGMyRnNkSE5oYkhRJGpYOTRsYVNpNnZvOUFoUytiSHdia2c$b+6ROJVsZ62UXA7hEAg0AQ",
"saltsalt",
"$argon2id$v=19$m=16,t=2,p=1$c2FsdHNhbHQ$jX94laSi6vo9AhS+bHwbkg"
).
ãµãŒããŒã¯ãããŠãŒã¶ãŒã¢ãªã¹ãæ£åžžã«äœæãããŸãããããšããã¡ãã»ãŒãžãšãšãã«ç»é²æåããŒãžããŠãŒã¶ãŒã«è¡šç€ºããŸããäžæãã¹ã¯ãŒã12345ã䜿çšããŠãã°ã€ã³ããŸããã
ãŠãŒã¶ãŒã¯åãã§å«ã³ãŸããããã¬ãŒãç§ã¯ã¢ãªã¹ãšããããã¯ããŒã ã§ãµã€ãã«ç»é²ããŸããã圌ãã¯ç§ã«ãã¹ã¯ãŒã12345ããããŸããããªããŠé¢çœããŠã·ã³ãã«ãªãã¹ã¯ãŒãã§ãããããããããŠãŒã¶ãŒã®ã¢ããŒãã®é²é³ã¯éåžžã«æªãã圌ã®ããã«ãŒã®é£äººã¯ãã¹ãŠãèããŠããŸããã
- ããã«ãŒã¯ãŠã§ããµã€ãã®ã¢ãã¬ã¹ãèªåã®ãã©ãŠã¶ã«ããã·ã¥ããŸãã
- ããã«ãŒã®ãã©ãŠã¶ã¯ç©ºã®Cookieãéä¿¡ããŸãã
- ãµãŒããŒã¯ãããã«ãŒã®èŠæ±ããã§ãã¯ããŠãããœã«ããCookieããããã©ããã確èªããŸãã圌女ãèŠã€ãããŸããã
- ããã«ãŒãçãã ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããéä¿¡ããåã«ããã©ãŠã¶ã¯ãã¹ã¯ãŒããæå·åããããã®ãœã«ããç¥ãå¿ èŠããããŸãã
- ããã«ãŒã®ãã©ãŠã¶ã¯ãŸã ãsaltãCookieã«saltãä¿åããŠããŸããã
- ãµãŒããŒã¯ããã°ã€ã³+ã·ãŒã¯ã¬ããã¯ãŒãã®2ã€ã®ãã£ãŒã«ããå«ããã°ã€ã³ãã©ãŒã ãéä¿¡ããŠããŠãŒã¶ãŒããœã«ããååŸã§ããããã«ããŸãã
ããã«ãŒã¯æ··ä¹±ããŠããŸãããšãããã圌ããé¢ããŸãããã
- ãŠãŒã¶ãŒã¯ãã°ã€ã³ããŒãžã«æ»ããŸãã
- ãŠãŒã¶ãŒã®ãã©ãŠã¶ã¯ç©ºã®Cookieãéä¿¡ããŸãã
- ãµãŒããŒã¯ãŠãŒã¶ãŒã®èŠæ±ããã§ãã¯ããŠãããœã«ããCookieããããã©ããã確èªããŸãã圌女ãèŠã€ãããŸããã
- ãŠãŒã¶ãŒããŠãŒã¶ãŒåãšãã¹ã¯ãŒããéä¿¡ããåã«ããã©ãŠã¶ãŒã¯ãã¹ã¯ãŒããæå·åããããã«ãœã«ããç¥ã£ãŠããå¿ èŠããããŸãã
- ãŠãŒã¶ãŒã®ãã©ãŠã¶ã¯ãŸã ãsaltãCookieã«saltãä¿åããŠããŸããã
- ïŒãµãŒããŒã«ã¯2ã€ã®ãã£ãŒã«ããæã€ãã°ã€ã³ãã©ãŒã ãéä¿¡ãããã°ã€ã³+ç§å¯ã®èšèå¡©ãååŸããããšãå¯èœã«ããŸãã
- ãŠãŒã¶ãŒã¯login- aliceãsecret- catãšå ¥åãã[éä¿¡]ãã¿ã³ãã¯ãªãã¯ããŸãã
ãµãŒããŒã¯ãªã¯ãšã¹ããåä¿¡ãããã¹ã¯ãŒãã®ä»£ããã«ç§å¯ã®åèªãéä¿¡ãããããšã確èªããŸãã
- â alice `salt_unique_for_each_user` -> $db_salt_unique_for_each_user `salt_for_password -> $db_salt_for_password`.
- , . : $salt_for_password = ALG1(«cat», $db_salt_unique_for_each_user).
- $salt_for_password . . 12345, , . â ` salt = $db_salt_for_password`. : ` login = «alice»`.
説æïŒãµãŒããŒã¯ãã©ã®ãœã«ããéä¿¡ãããããéç¥ããŸãã-æ£ãããã©ãããæ£ãããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã䜿çšããŠãã°ã€ã³ããããšãããšããã®äœ¿çšçµæã¯æç¢ºã«ãªããŸãã
- ãŠãŒã¶ãŒã¯ãµãŒããŒå¿çãåãåããŸãããã®ããŒãžã¯ãªããŒããããããããã«åçã«å€æŽãããŸãã
- ãŠãŒã¶ãŒã®ãã©ãŠã¶ã¯Cookieãéä¿¡ããŸãïŒlogin = aliceãsalt = "$ argon2id $ v = 19 $ m = 16ãt = 2ãp = 1 $ c2FsdHNhbHQ $ jX94laSi6vo9AhS + bHwbkg"ã
- ãµãŒããŒã¯ãŠãŒã¶ãŒã®èŠæ±ããã§ãã¯ããŠãããœã«ããCookieããããã©ããã確èªããŸãã圌女ãèŠã€ããŸãã
- ãã©ãŠã¶ã«ã¯ããã¹ã¯ãŒããæå·åããããã®ãœã«ãããã§ã«ãããŸãã
- ãµãŒããŒã¯ãloginïŒãã§ã«å€aliceãæã£ãŠããŸãïŒ+ passwordã®2ã€ã®ãã£ãŒã«ããæã€ãã°ã€ã³ãã©ãŒã ãéä¿¡ããŸãã
- ãŠãŒã¶ãŒã¯ç°¡åãªãã¹ã¯ãŒã12345ãå ¥åãã[éä¿¡]ãã¿ã³ãã¯ãªãã¯ããŸãã
- ãã©ãŠã¶ã¯onSubmitã€ãã³ããã€ã³ã¿ãŒã»ããããŸãã
- $ password_hashed = ALG2ïŒ "12345"ã "$ argon2id $ v = 19 $ m = 16ãt = 2ãp = 1 $ c2FsdHNhbHQ $ jX94laSi6vo9AhS + bHwbkg"ïŒãèšç®ããŸãã
- ããŒã¿ãaliceããéä¿¡ããŸã/ $ argon2id $ v = 19 $ m = 16ãt = 2ãp = 1 $ JGFyZ29uMmlkJHY9MTkkbT0xNix0PTIscD0xJGMyRnNkSE5oYkhRJGpYOTRsYVNpNnZvHOUFoAUyti $
ãµãŒããŒã¯èªèšŒèŠæ±ãåä¿¡ããŸãã
- ãã°ã€ã³+ãã¹ã¯ãŒãããŒã¿ïŒ "alice" / $ password_hashed
- ããŒã¿ããŒã¹ã«ç§»åããå€ ` password_hashed`- > $ db_password_hashedãååŸããŸãã
- $ db_password_hashed === $ password_hashedãæ¯èŒããŸããïŒ
- ããã·ã¥ãäžèŽããæ¿èªãæåããŸããã
泚ïŒç§ã®äŸã§ã¯ããµãŒããŒã¯ããã·ã¥ãçŽæ¥æ¯èŒããŸãããã ããå®éã«ã¯ãã§ã«ãã¹ã¯ãŒãã§ããæååãããŒã¿ããŒã¹ã«ä¿åããããšã¯ã§ããŸããããããã¯çãŸããŠããã°ã€ã³ãã¹ã¯ãŒãã®åœ¢ã§äœ¿çšãããå¯èœæ§ããããŸãããããã£ãŠãã©ããªã«å¥åŠã«èãããŠããããã·ã¥ãããã·ã¥ããå¿ èŠããããŸããããã¯ã3çªç®ã®å¡©ãå¿ èŠã§ããããšãæå³ããŸãããã ããããŒã¿ããŒã¹ã§ã¯ãªããç°å¢å€æ°ã«æ ŒçŽããå¿ èŠããããŸãããã ãããããã¯ãã§ã«å®è£ ã®è©³çްã§ãããç°¡åã«ããããã«çç¥ããŠããŸãã
ãã®éã«ãããã«ãŒã¯ãã®å¥åŠãªãã°ã€ã³ãã©ãŒã ããã¹ãããããšã«ããŸããã
- ããã«ãŒã¯login- aliceãsecret- dogãšå ¥åãã[éä¿¡]ãã¿ã³ãã¯ãªãã¯ããŸãã
- ãµãŒããŒã¯ããã«ãŒã®èŠæ±ãåä¿¡ãããã¹ã¯ãŒãã®ä»£ããã«ç§å¯ã®åèªãéä¿¡ãããããšã確èªããŸãã
- â alice `salt_unique_for_each_user` -> $db_salt_unique_for_each_user `salt_for_password` -> $salt_for_password.
- , , : $result_fake_salt = ALG1(«dog», $db_salt_unique_for_each_user). , .
ãµãŒããŒã¯ãèšç®ããããœã«ãå€ããŠãŒã¶ãŒã®ãã©ãŠã¶ãŒã«éãè¿ããŸããããããŒã¯æ¬¡ã®ããšã瀺ããŠããŸã-`setcookie salt = $ result_fake_salt`ããã°ã€ã³ãä¿åãããŸãïŒ `set the cookie login =" alice "`ã
説æïŒããã«ãŒã®ããŒãã¯ãŒã¯ãæ¯æŽããããã«ããµãŒããŒã¯ããã«ãŒã«å¡©ãéããŸããããããç§å¯ã®èšèãæ£ãããã©ãããå€éšãã倿ããããšã¯äžå¯èœã§ãã
- ããã«ãŒã¯ãµãŒããŒã®å¿çãåä¿¡ããŸãããã®ããŒãžã¯ãªããŒããããããããã«åçã«å€æŽãããŸãã
- ããã«ãŒã®ãã©ãŠã¶ã¯Cookieãéä¿¡ããŸãïŒlogin = aliceãsalt = $ result_fake_saltã
- ãµãŒããŒã¯ãŠãŒã¶ãŒã®èŠæ±ããã§ãã¯ããŠãããœã«ããCookieããããã©ããã確èªããŸãã圌女ãèŠã€ããŸãã
- ããã«ãŒã®ãã©ãŠã¶ã«ã¯ããã¹ã¯ãŒããæå·åããããã®ãœã«ãããã§ã«ãããŸãã
- : ( alice) + .
- 12345 "".
- onSubmit.
- $password_hashed = ALG2(«12345», $result_fake_salt).
- «alice»/$password_hashed.
ãµãŒããŒã¯èªèšŒèŠæ±ãåä¿¡ããŸã-"alice" / $ password_hashedã
ããŒã¿ããŒã¹ã«ç§»åããå€ `password_hashed`-> $ db_password_hashedãååŸããŸãã
æ¯èŒïŒ$ password_hashed === $ db_password_hashedïŒãããã
ãããã®æåã¯åäžã®ãã¹ã¯ãŒãã®ããã·ã¥ãäžèŽããŸããã圌ãã¯ããŸããŸãªæ¹æ³ã§å¡©æŒ¬ããããããã§ãã
ããã«ãŒã¯ãããããããµã€ãã«å¥ã®ãŠãŒã¶ãŒãç»é²ããŸãã
ãŸã£ããã®å¶ç¶ã§ã圌ã¯å£ã®åŸãã®ãŠãŒã¶ãŒãšåãç§å¯ã®èšèãå ¥åããŸã-ç«ã
ããã«ãŒã¯ãæ°ããã¢ã«ãŠã³ãã®ãã¹ã¯ãŒãã®æå¹ãªãœã«ããååŸããããã·ã¥ã¹ã¯ãªããã§ããã眮ãæããããšããŸãã
幞ãããã¹ã¯ãŒããœã«ãã®çæã«ã¯2çªç®ã®ãœã«ãïŒ `salt_unique_for_each_user`ïŒã䜿çšãããŸãããããã¯ããŠãŒã¶ãŒããšã«æ°ããæ¹æ³ã§çæãããŸãããã®ãããåããã¹ã¯ãŒããšãæãéèŠãªã®ã¯ç§å¯ã®èšèã䜿çšããŠããå Žåã§ãããŠãŒã¶ãŒãç°ãªãã°ãå¡©ãç°ãªããŸãããããŠãåãç§å¯ã®èšèãæã€ãŠãŒã¶ãŒã®å¡©ã¯ãå¥ã®å¡©ãšäžèŽããŸããããŸãããã¹ã¯ãŒãã®äžèŽãåé¡ã«ã¯ãªããŸããã
ããŠãèŸæžã§ã®ãã«ãŒããã©ãŒã¹ãã¹ã¯ãŒãã®è€éãã«ã€ããŠããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®äž¡æ¹ã«å ±éããALG2ã倿Žãããããé¢åã«ãããšãããã«ãŒã®æ€çŽ¢ãéåžžã«è€éã«ãªããŸãã ALG2ã¯ããµãŒããŒã«éä¿¡ããããã¹ã¯ãŒãããã·ã¥ãååŸããããã»ã¹ã§ããããšãæãåºããŠãã ããããµãŒããŒã§ã¯ããã®ããã·ã¥ã¯ãã§ã«èšç®ãããããŒã¿ããŒã¹ã«ä¿åãããŠããŸãã
- ãµãŒããŒã¯ãããŒã¿ããŒã¹ã«ãã¹ã¯ãŒããæžã蟌ãã ãããã¹ã¯ãŒãã倿Žããããããšãã«ãALG2æäœã1åã ãå®è¡ããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ãèªèšŒäžã«ã®ã¿ALG2æäœãå®è¡ããŸãïŒèªèšŒãšæ··åããªãã§ãã ããïŒãã¯ã©ã€ã¢ã³ãããã¹ã¯ãŒããå ¥åãããšãã«æ°åééãããšããŸããã-ããã¯åé¡ãããŸããã
- ããã«ãŒã¯ãã¹ã¯ãŒãããšã«ãããåžžã«è¡ããŸãããããã¯ç¥çŠããããšãã§ããŸãã123/1234/12345ã®ãããªãã¹ã¯ãŒãã«å€å€§ãªåŽåãè²»ããããããšã¯ç¹ã«ç®èãªããšã§ãã
匱ããã·ã³ã¯ãéããã·ã³ãããæäœã®å®äºã«ã¯ããã«é·ãæéããããå¯èœæ§ããããŸããããã¯åé¡ã«ãªãå¯èœæ§ããããŸãããããã£ãŠãã¢ã«ãŽãªãºã ãè€éã«ããå¿ èŠã¯ãããŸããã
ã³ã³ã»ããã®èª¬æã1ãã¬ã«ã®ã¿ãŒã«ã§ä»äžããŸãã
- ãŠãŒã¶ãŒã誀ã£ãŠç§å¯ã®åèªã誀ã£ãŠå ¥åããå ŽåããŠãŒã¶ãŒã¯èªåã®ãã¹ã¯ãŒãã䜿çšããŠå ¥åã§ããªãç¶æ³ã«ãªããŸããã·ãŒã¯ã¬ããã¯ãŒãããªã»ãããïŒãã®å Žåã¯Cookieãåé€ãïŒããªã¯ãšã¹ããåéä¿¡ããå¿ èŠããããŸããããã¯ããã¿ã³ã1ã€æŒãã ãã§ééçã«å®è£ ã§ããŸããããã®åã«ãŠãŒã¶ãŒãæšæž¬ããå¿ èŠããããŸãã5åã®èª€ã£ããã°ã€ã³è©Šè¡ã§åŒ·å¶çã«ãªã»ããã§ããŸãã
- åãã³ã³ãã¥ãŒã¿ãŒäžã®2人ã®ãŠãŒã¶ãŒã¯ãåžžã«ãäºãã®å¡©ãæšãŠãå¿ èŠããããŸãã
- 2ã€ã®ç°ãªãã³ã³ãã¥ãŒã¿ãŒãåããã¹ã¯ãŒããœã«ããåãåããŸã
- ãµãŒããŒäžã§äžæ¹ã®ã³ã³ãã¥ãŒã¿ãŒãä»ããŠãœã«ãã倿Žãããå Žåãå€ããœã«ãã䜿çšããŠããããäžæ¹ã®ã³ã³ãã¥ãŒã¿ãŒã¯ããœã«ãã倿Žããå¿ èŠãããããšãèªèããŸããã
- ãã¹ã¯ãŒããéåžžã«åçŽã§ããããšãç¥ã£ãŠããã°ãã³ã³ãã¥ãŒã¿ãŒããå¡©ãçã¿ãããã䜿çšããŠã¢ã«ãŠã³ãã«å¯ŸããŠéåžžã«é«éãªæ»æãå®è¡ã§ããŸãã
...ãããŠã¹ããŒã³äžæ¯ã®èèïŒ
- . , "cat" , "termorectal" â . , . , . , .
- . `salt_for_password` , , , . .