æšæ¥ãã€ãã«
Lamer Newsã®æåã®ãããªãã¯ããŒãžã§ã³ããªãªãŒã¹ããŸãããããã¯ãRedisãHacker Newsã«äŒŒããµã€ããšããŠäœ¿çšããå®éã®äŸã§ãããããã°ã©ãã³ã°ã®äžçããã®ãã¥ãŒã¹ã«é¢ããå®å
šã«ç¬ç«ãããµã€ãã®ãããžã§ã¯ãã§ãã
ãã®ãããžã§ã¯ãã¯ã³ãã¥ããã£ãã奜è©ãåããŠããããã°ããã®éHNã®ãããã«äœçœ®ããŠããŸãã ãã£ãŒãããã¯ãããããšãã
ãªãªãŒã¹åŸãããŒã¿ããŒã¹å
ã®ãã¹ã¯ãŒããããã·ã¥ããããã«äœ¿çšããããã·ã¥é¢æ°ã倿Žããããã®ããã€ãã®ãªã¯ãšã¹ããåãåããŸããã
ãã®ã³ãŒãã¯ãSHA1ãšãœã«ãã䜿çšããŠããŸãã èªè
ãææããããã«ãSHA1ãéåžžã«è¿
éã«èšç®ããæ¹æ³ããããããããã¯æãå®å
šãªéžæã§ã¯ãããŸããã ãã°ããããŠã人ã
ã¯ã€ã¶ãããã³ã¡ã³ãã«åãæã䜿çšãå§ããŸããïŒãBCryptã䜿ããã ã³ãŒãã«æ°ããäŸåé¢ä¿ã远å ãããªãããã«ãã«ãŒãå
ã§ãã¹ããããSHA1ã䜿çšããããšããå§ãããŸãïŒREADMEã確èªããå Žåãç®æšã®1ã€ã¯ãã³ãŒããåçŽã«ããäŸåé¢ä¿ãã§ããã ãå°ãªãããããšã§ãïŒã ãããŠãããã¯èµ·ãããŸããïŒæå·åã®æçŸ©ã æå·ããªããã£ããšãã®å¯èœãªã¢ããªã±ãŒã·ã§ã³ããã³çµã¿åããã«ã€ããŠã¯è°è«ãããæãã«ããBCryptã䜿çšãããŠãã ããã ãããã®åå¿ã®ç®ã«ã¯ãããã°ã©ããŒã¯æå·åã«ã€ããŠæ±ºããŠèªãããšã®ã§ããªãã¬ã€ãã©ã€ã³ãå®è¡ããæããªãããŒã³ã«ãããŸããã ããããããã«ã€ããŠã¯åŸã§...
å°ãæ»ã£ãŠããã®ãã¹ãŠã®å
ã®åé¡ãšããã®ã³ãŒãã®å®å
šæ§ãèŠãŠã¿ãŸãããã
åé¡
ãã®åé¡ã¯ããªãç°¡åã«çè§£ã§ããŸããã詳现ã«èª¬æããŸãã ãã¹ã¯ãŒããå¹³æã§ããŒã¿ããŒã¹ã«ä¿åããªãããã«ãéåžžã¯ããã·ã¥ãããŸãã
HP = HASH (password) # HP â hashed password,
ãµãŒããŒéšåããŠãŒã¶ãŒãèªèšŒããå¿
èŠãããå Žåããã¹ã¯ãŒããå¹³æã§åãåããå床ããã·ã¥ããããŒã¿ããŒã¹ã«ãããã¹ã¯ãŒããšæ¯èŒããŸãã äžèŽããå ŽåãèªèšŒã¯æåã§ãã
ããããæ»æè
ïŒã€ãã«é»è©±ãããïŒãããŒã¿ããŒã¹ãã³ããååŸããå Žåã¯ã©ããªããŸããïŒ Evaã¯ããã·ã¥åããããã¹ã¯ãŒãã®ã»ãããæã£ãŠããŸããHP1ãHP2ãHP3ãªã©ãšåŒã³ãŸãããã圌女ã®ç®æšã¯ãHPãPã«æ»ããããªæ»æãèŠã€ããããšã§ãã
ããã·ã¥ã¢ã«ãŽãªãºã ã¯å
¬éãããŠãããããEveãæåã«ãã¹ãããšã¯ãäžè¬çãªåèªã§æ§æãããèŸæžã«é©çšããããšã§ãã ãã®ãããªåèªã®ããã·ã¥ãããŒã¿ããŒã¹ã«ãããã®ãšäžèŽããå Žåããã¹ã¯ãŒããèŠã€ãããŸãã è±èªã«ã¯å€ãã®åèªããªãããããã®æ»æã¯éåžžã«ç°¡åãã€è¿
éã«å®è¡ã§ããããšã«æ³šæããŠãã ããã
ãããããããããŠãŒã¶ãŒã§ããããã¯ãèŸæžã«ãªããã¹ã¯ãŒããéžæããããŸãé·ãã¯ãããŸããã
Eveã¯ãããšãã°æå€§6æåã®ãã¹ã¯ãŒãã®ãã¹ãŠã®çµã¿åãããçæããããã·ã¥ãèšç®ã§ããŸãã ãã®æ»æã¯ããè€éãªèšç®ã§ãã ãã¹ã¯ãŒãããããšãã°6æåã®ãã€ããªæååã§ããå Žåãåèš256 ^ 6ã®çµã¿åãããã€ãŸã281474976710656ããããŸãã
æ»æè
ãæ¯ç§10ååã®ããã·ã¥ãèšç®ã§ããå ŽåïŒææ°ã®GPUã§ã¯ãããèš±å¯ãããŠãããç Žãå¿
èŠã¯ãããŸããïŒããã®ãã¹ã¯ãŒãããããã³ã°ããã«ã¯æ¬¡ãå¿
èŠã§ãã
281474976710656 / 1000000000 = 281474
ããã3æ¥ããŸãã¯å¹³åã§ååã§ãã è¯ããªãïŒ ç°¡åãããã ãã1ã€ã®åé¡ããããŸãããŠãŒã¶ãŒã256æåãã¹ãŠãåã確çã§äœ¿çšããå¯èœæ§ã¯äœãã§ãã ææªã®å ŽåãèããŠã¿ãŸããããå°æåã¯26æåã®ã¿ã§ãæ°åããã®ä»ã®æåã¯ãããŸããã ä»åã¯8æåã®ãã¹ã¯ãŒãã䜿çšããŸãã
ãã¹ã¯ãŒãã¯26 ^ 8ãã€ãŸã208 827 064 576ã§ããä»åã¯ã208ç§ã§ãã¹ã¯ãŒããè§£èªã§ããŸãïŒå¹³åã§ãã®æéã®ååïŒã
ããã¯ééããªãè¯ããããŸããã æ¯ç§10ååã®ããã·ã¥ãèšç®ã§ããæ»æè
ãã¢ã¯ã»ã¹ã§ããªãããã«ããããã«ãã¢ã«ãã¡ãããã®ãã¹ã¯ãŒãã¯ã©ã®ãããã®é·ãã«ããå¿
èŠããããŸããïŒ
å¹³å1024幎ã§14æåãéžæãããŸãã 16æåã®å Žåãæ»æè
ã¯1382824幎ãè²»ããå¿
èŠããããŸãã 12æåã¯1幎åïŒå¹³åããŠïŒæµæããŸãããããã¯ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ééããªãååã§ã¯ãããŸããã
ã§ã¯ãSHA1ã¯ãã¹ã¯ãŒãããã·ã¥ã«å¯ŸããŠå®å
šã§ããïŒ ã¯ãããŠãŒã¶ãŒã14æå以äžã®åŒ·åãªãã¹ã¯ãŒããéžæããå Žåã ããã§ãªããã°ãéåžžã«å®å
šã§ã¯ãããŸããã ããã¯ãã¹ãŠãã¹ã¯ãŒãã®é·ãã«äŸåãããŠãŒã¶ãŒãçããŠåŒ±ããã¹ã¯ãŒããæŸããšããæªãç¿æ
£ãæã£ãŠããããšã¯ç§å¯ã§ã¯ãããŸããã
ããããããã¯ããã«æªã
æ®å¿µãªãããå®éã«ã¯ããã¹ãŠãæªåããŠããŸãã ããšãã°ã12åã®ãã¹ã¯ãŒãæåã«å¯Ÿããæ»æã¯å³åº§ã«å®è¡ã§ããŸããçŽ3幎ãããŠãã¹ãŠã®çµã¿åããã®ããã·ã¥ãèšç®ããP-> HPã®åœ¢åŒã®ããŒãã«ã«æžã蟌ãããšãã§ããŸãã
ãã ãããã®ãããªããŒãã«ã¯å€ãã®ã¹ããŒã¹ïŒæ£ç¢ºã«ã¯86,792ãã©ãã€ãïŒãå æããŸãããŸããããã¯ãPãHPïŒéæäžå¯èœãªã¿ãŒã²ããïŒã®ãã¢ã«1ãã€ãããè²»ãããªãã»ã©ã³ã³ãã¯ãã«ããŒã¿ãä¿åããããšãæ³å®ããŠããŸãã ãã ããããŒãã«ã®ãµã€ãºãåççãªå¶éå
ã«ããå Žåãããã¯æ¬åœã®è
åšã§ãã
çµè«ãšããŠãå€ãã®å Žåãæå·åæ»æã§ã¯ãæéãããã代ããã«ãã¹ããŒã¹ãç ç²ã«ããŠå®è¡ã§ããŸãã
è¯ããã¥ãŒã¹ã¯
ãåãã¢ã«ãŽãªãºã ã䜿çšããŠãã¹ãŠã®ãµã€ãã«é©ãã
åäžã®ããŒãã«ã®èšç®ãé²ãæ¹æ³ããããšããããšã§ãã å¡©ã䜿ãããšã§ãã Saltã¯ãããã·ã¥ããåã«ãã¹ã¯ãŒããšãšãã«è¿œå ããïŒãããªãã¯ïŒè¡ã§ãã ããšãã°ããœã«ãããlameãã§ãã¹ã¯ãŒãããfooãã®å Žåãèšç®ããŸã
HP = HASH ("foolame")
ãããã£ãŠãããŒãã«æ»æã®å ŽåãEveã¯åããœã«ãã䜿çšãããã¹ãŠã®ãã¹ã¯ãŒãã®çµã¿åããã®ããã·ã¥ãèšç®ããå¿
èŠããããŸãã ãã®ãããªããŒãã«ã¯ãç°ãªããœã«ãã䜿çšããå¥ã®ãµã€ããæ»æããã®ã«åœ¹ã«ç«ããªãã§ãããã
ã©ã³ãã ãœã«ã
ããå°ãæ¹åããŠãHPã ãã§ãªãã©ã³ãã ãœã«ããä¿åã§ããŸãã ãŠãŒã¶ãŒã®ã¢ã«ãŠã³ããäœæãããšãããŠãŒã¶ãŒã®ã©ã³ãã ãªãœã«ããçæããã¢ã«ãŠã³ãã«ä¿åããŸãã ãã®ã¢ãããŒãã§ã¯ãæ»æè
ã¯
åãŠãŒã¶ãŒã®ããŒãã«
ãåå¥ã«èšç®ããå¿
èŠãããããããã¹ã¯ãŒãã¯ããã«å®å
šã§ãã ãŸãããã1ã€ã®è峿·±ã芳å¯çµæããããŸããã°ããŒãã«ãªãœã«ãã1ã€ãããšããã¹ã¯ãŒããå®å
šã§ãã£ãŠããæ»æè
ã®æã«æž¡ãå¯èœæ§ãé«ããªããŸãã åã
ã®å¡©ãããå Žåãããã¯ã»ãšãã©ãããŸããã
ããã·ã¥é¢æ°ãé
ããã
ãã ãããã¹ãŠã®ããŒãã«ããŒã¹ã®æ»æã鲿¢ãããšããŠããæ ¹æ¬çãªåé¡ããããŸãããã¹ã¯ãŒããçããEvaã1ç§ããã10ååããã·ã¥ãèšç®ã§ããå Žåãåé¡ãçºçããŸãã
ãã®å Žåãäœããè¡ãããšãã§ããŸããé
ãããã·ã¥é¢æ°ã䜿çšããŸãã
ãœãããŠã§ã¢ãšãââãŒããŠã§ã¢ã®äž¡æ¹ã®èšç®ãéåžžã«é
ãã¢ã«ãŽãªãºã ããããŸãã ãŸãã¯ãæ¢åã®ã¢ã«ãŽãªãºã ã䜿çšããŠãã«ãŒãã§äœ¿çšããŠéåžžã«é
ãããããšãã§ããŸãã
ããšãã°ãBlowfishã¯é
ãããŒåé¢ã¢ã«ãŽãªãºã ã䜿çšããæå·åã¢ã«ãŽãªãºã ã§ãïŒã¢ã«ãŽãªãºã èªäœã¯ããŒã¹ã±ãžã¥ãŒãªã³ã°ãå®è¡ããåŸã¯éåžžã«é«éã§ãïŒããããã£ãŠãBlowfishã¯ãç°ãªãããŒã䜿çšããŠå€ãã®ã·ã§ãŒãã¡ãã»ãŒãžãæå·åããå Žåã«ã®ã¿é©ããŠããŸãããé«éã«ããããšãã§ããŸãã 1ã€ã®ããŒã§å€§ããªã¡ãã»ãŒãžãæå·åããå¿
èŠãããå ŽåïŒã
Blowfishã®ããŒå
±æã¢ã«ãŽãªãºã ãé
ããšããäºå®ã¯ãBlowfishãHASHã«é©ããŠããããšã瀺ããŠããŸãã
ããã§ãããŒã«ã¹ã»ãããã¹ãšããããã»ããžãšãŒã«ã¯ããã¹ã¯ãŒãã®ããã·ã¥ã«äœ¿çšã§ããBcryptãšåŒã°ããã¢ã«ãŽãªãºã ãéçºããŸããã ãã®ã¢ã«ãŽãªãºã ã¯1999幎ã«å°å
¥ãããBlowfishã®ããŒåé¢ã¢ã«ãŽãªãºã ã®ä¿®æ£çã䜿çšããŠããŸãã BlowfishåæãBcryptã«é©çšã§ãããã©ããã¯ããããŸããã ãŸããBcryptèªäœãã©ã®çšåºŠåæããããããããªãããããã®ã¢ã«ãŽãªãºã ã®ã»ãã¥ãªãã£ã«ã€ããŠã³ã¡ã³ãããããšã¯ã§ããŸããã
ãã ããããã¯äžè¬çãªéžæè¢ã§ãããProvosãšMaziÚresã¯2äººã®æåãªæå·äœæè
ã§ãããããã¢ã«ãŽãªãºã ã«ã¯æãããªæ¬ é¥ã¯ãããããããŸããã
ã¹ããŒããã·ã¥é¢æ°ã®äœ¿çšãéå§ãããšããã«ãæ»æè
ã¯åé¡ãæ±ãå§ããŸãã ãã®ãããããšãã°ãBcryptãæ§æããŠãé«éãŸãã¯äœéã«ããããšãã§ããŸãã é床ãéåžžã«é
ããããåªããããŒããŠã§ã¢ã䜿çšããŠã1ç§ããã1,000ããã·ã¥ä»¥äžãèšç®ã§ããªãå ŽåããŠãŒã¶ãŒã«ãšã£ãŠã¯ãããã蚱容ç¯å²å
ã§ãããEveã«ãšã£ãŠã¯ãã§ã«å®çšçã§ã¯ãããŸããã ããšãã°ãå°æåã®ã¿ã䜿çšãã8æåã®ãã¹ã¯ãŒãïŒ
26 ^ 8 / 1000 / 3600 / 24 / 365 = 6,6218627782
8æåã®ãã¹ã¯ãŒããè§£èªããå Žåã®3.3幎ïŒå¹³åïŒã ãããããŸã ååãªã»ãã¥ãªãã£ã§ã¯ãããŸããããã»ãã®æ°ç§ãããåªããŠããŸãã
ãã ããèŸæžæ»æããã¯ãŸã ä¿è·ãããŠããªãããšã«æ³šæããŠãã ãã ã ãŠãŒã¶ãŒãäžè¬çãªåèªãéžæããå Žåããã¹ãŠãçµ¶æçã§ãã ããã§ãã劥åœãªæéã§30kããã·ã¥ãèšç®ã§ããŸãã
ãã°ãã«ã€ããŠ
çŸæç¹ã§ã¯ãããã€ãã®è峿·±ãèããæ€èšããŠããŸãã ããšãã°ãäžæ£ãªãã¹ã¯ãŒãã§ãŠãŒã¶ãŒãä¿è·ãããããªããã·ã¥ã¹ããŒã ã¯ãããŸããã ãŠãŒã¶ãŒã«å€§æåãæ°åããã®ä»ã®æåããã¹ã¯ãŒãã«è¿œå ããããšããŠãŒã¶ãŒã«åŒ·å¶ããããšã¯éåžžã«éèŠã§ãïŒã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠã»ãã¥ãªãã£ãéèŠãªå ŽåïŒã
ç©äºã®ä»çµã¿ãçè§£ããããšã¯éèŠã§ãã ããã¯ã¹ã ãŒãºã«æ¬¡ã®èãã«ç§ãã¡ãå°ããŸãã ãuse bcryptãã³ãŒã©ã¹ã®åŸãSHA1ã®ç¹°ãè¿ãã«åºã¥ãå¥ã®ãœãªã¥ãŒã·ã§ã³ã䜿çšã§ãããšçããŸããã ããããã©ããããå€ãã®äººã¯ããã°ã©ããŒãæå·ãçè§£ãã¹ãã§ã¯ãªããšèããŠããŸãã 圌ã¯ãããæçŸ©ãšããŠèªèããªããã°ãªããŸããã ããããªããæçŸ©ãæã£ãŠãããªããããªãã¯è²§ããããã°ã©ããŒã«ãªãã§ãããã ã·ã¹ãã ã«bcryptãµããŒãããªãããããã«åãçµãå¿
èŠãããå Žåã¯ã©ãã§ãããã ç°¡åãªã¹ããŒã ãææ¡ããŸããïŒ
SHA1 (SHA1 (SHA1 (...( SHA1 (password | salt))))
ãªããŠç°ç«¯ã ïŒ ãã®ããã«ããã·ã¥é¢æ°ããã§ãŒã³ããããšã¯å®å
šã§ã¯ãªãããšãçè§£ããŠããªãã®ã§ãç§ã¯æãè
ãšèŠãªãããŸããã ããããå°ãèãããšã©ããªããŸããïŒ
SHA1ã¯ããã·ã¥é¢æ°ã§ãã
roundsãšåŒã°ããå°ããªã¹ãããã§æ§æãããäœåºŠãç¹°ãè¿ãå®è¡ãããŸãã ããã¯ãããã¯æå·ã§ã¯ãªããããããŒã®åé¢ã¯ãããŸããããã®é¢æ°ã¯ãå
¥åãããã¹ããªãŒã ãåºå®é·ã®åºåå€ã«åçŽã«å§çž®ããŸãã
å€ãã®æå·ã¢ã«ãŽãªãºã ã¯ãããåçŽãªé¢æ°ã䜿çšããŠæ°åå®è¡ãããã®å¹æãé«ããããšãã§ãããšããèãã«åºã¥ããŠããããšãçè§£ããããšãéèŠã§ãã ãã®æŠå¿µã¯éåžžã«éèŠã§ãããããããã«ã©ãŠã³ãã远å ãããšãã¢ã«ãŽãªãºã ã«å¯Ÿããæ»æãéå®çšçã«ãªãããšããããŸãã æå·åŠè
ã¯ãå®å
šãªã©ãŠã³ãæ°ã®ãªãã·ã§ã³ãã©ãã ã匷åããããããçè§£ããããã«ãããè匱ãªåœ¢åŒã§ã¢ã«ãŽãªãºã ãåæããããã«ãã©ãŠã³ãæ°ãæžãããã¢ã«ãŽãªãºã ã®ããªã¢ã³ãã䜿çšããå ŽåããããŸãã
ã§ã¯ããªãå€ãã®ã©ãŠã³ãã远å ããªãã®ã§ããïŒ é
ãã§ãã ã¢ããã¥ã¢ã®æå·äœæè
ã§ãã£ãŠããå®å
šã§é
ãã¢ã«ãŽãªãºã ãéçºã§ããŸãã åªããæå·äœæè
ã¯ãã»ãã¥ãªãã£ãšé床ã®åŠ¥åç¹ãèŠã€ããããšãã§ããŸãã
ããã...ã©ãŠã³ãã®æŠå¿µãããã£ããããSHA1ã«ã¯ããŒåé¢ã¢ã«ãŽãªãºã ããªãã颿°ã®åºåå€ã¯ãã®å
¥åã®ã¿ã«äŸåããSHA1ã¯å転ã®å¯èœæ§ãèæ
®ããŠèšèšãããŠããªãããšãç¥ã£ãŠããŸãïŒããã·ã¥ã«ããå
ã®å€ã®ååŸïŒã
ãããã£ãŠãç§ãææ¡ããSHA1ã¹ããŒã ïŒSHA1ïŒSHA1ïŒ..ïŒïŒïŒããŸãã«ãããè¡ããSHA1ã«ã©ãŠã³ãã远å ããããšã¯éåžžã«èªç¶ã§ãã SHA1ã®åºæ¬çãªç¹æ§ãããSHA1ã®ååã«ãã¹ããããåŒã³åºãã«çžåœããç°¡åã«èšç®ã§ãã颿°SHA1000ãèšç®ããããšã¯èšç®äžäžå¯èœã§ããããšãããããŸãã
SHA1ïŒSHA1ïŒ..ïŒïŒã®
çµæã¯ã SHA1å
ã«ããã«ã©ãŠã³ãã远å ããããšãšåãã§ã¯ãªã
ããšã«æ³šæããŠãã ãããååŠçãšåŸåŠçããããŸãã
ãããŠãããªãã¯äœãç¥ã£ãŠããŸããïŒ ä»æãRFC2898ã«èšè¿°ãããŠããPBKDF1ã¢ã«ãŽãªãºã ããŸãã«ç§ãææ¡ããããšãè¡ãããšãçºèŠããŸããã
ããªãã«éãèŠããŠãããããšãéåžžã«åãã§ãã人ãããŸããã圌ããããèŠããšã圌ããäœã«ã€ããŠè©±ããŠããã®ãåãããªãããšãããããŸãã å®çžŸã®ããæšæºã䜿çšããå®å
šãªã³ãŒããæžããŠã¿ãŠãã ããããŸããå¿ã䜿ã£ãŠãæå·åãšããªããã£ãã®çµåæ¹æ³ã«ã€ããŠåŠç¿ããŠãã ããã ãã°ã-ããã¯åžãã
ããã°ã©ããŒãèªåã®ãããã¯æå·ãçºæããããã䟿å©ãªç®çã®ããã«ã©ããã§äœ¿çšããããšããã®ã¯è¯ãèãã§ã¯ãªããããããŸããã ãã®ããã«ç¹å¥ã«èšç·Žããã人ã
ãããŸãã æå·åã䜿çšããŠå®è¡ã§ããåã
ã®ãããªãã¯ãããããã³ã«ãæ£ãã䜿çšããæ¹æ³ãªã©ãçè§£ããããšã¯ã¯ããã«éèŠã§ãã
çµè«ãšããŠã人ã
ãç§ã«ç¡ç€Œã§ãããšããåæã«åœŒããæ£ãããªããç§ã¯å·éã§ãããšèšãããã§ãã Aræ
¢ã¯ããããå¿ã«åã£ãŠããã°ãããã»ã©å€§ããªåé¡ã§ã¯ãããŸããã insteadæ
¢ãç¡ç¥ãšåºäŒããªããããã¯å®ã«æ²ãã話ã§ãã