ð TOTP/HOTPã¯ã³ã¿ã€ã ãã¹ã¯ãŒãçæ
ã·ãŒã¯ã¬ããããŒãå ¥åããŠãã ãã
Base32圢åŒã®ã·ãŒã¯ã¬ããããŒãå ¥åãããšãèªèšŒã¢ããª(Google Authenticatorç)ãšåãRFC 6238æºæ ã®TOTP(æéããŒã¹ã¯ã³ã¿ã€ã ãã¹ã¯ãŒã)ããªã¢ã«ã¿ã€ã ã§çæããããŒã«ã§ããæ¡æ°ã»æŽæ°ééã»ããã·ã¥ã¢ã«ãŽãªãºã ã倿Žã§ããŸãããã¹ãŠã®èšç®ã¯ãã©ãŠã¶å ã§Web Crypto APIã䜿ã£ãŠè¡ãããã·ãŒã¯ã¬ãããå€éšã«éä¿¡ãããããšã¯ãããŸããã
äœ¿ãæ¹
- Base32圢åŒã®ã·ãŒã¯ã¬ããããŒ(èªèšŒã¢ããªç»é²æã«è¡šç€ºãããæåå)ãå ¥åããŸãã
- æ¡æ°(6æ¡ãŸãã¯8æ¡)ã»æŽæ°éé(ç§)ã»ããã·ã¥ã¢ã«ãŽãªãºã ãå¿ èŠã«å¿ããŠèšå®ããŸãã
- çŸåšã®ã¯ã³ã¿ã€ã ãã¹ã¯ãŒããèªåçã«è¡šç€ºãããæå®ããééã§æŽæ°ãããŸãã
èšç®ã®ä»çµã¿
TOTPïŒTime-based One-Time PasswordïŒã¯ãGoogle AuthenticatorãMicrosoft Authenticatorãªã©ã®èªèšŒã¢ããªã衚瀺ããã30ç§ããšã«å€ããã¯ã³ã¿ã€ã ãã¹ã¯ãŒãã®æ¹åŒã§ãRFC 6238ã§å®ããããŠããŸãã èšç®ã®æé ã¯æ¬¡ã®ãšããã§ãã 1. çŸåšã®UNIXæå»ïŒ1970幎1æ1æ¥ããã®ç§æ°ïŒã30ç§ã§å²ããåãæšãŠãæ°ããã«ãŠã³ã¿ãŒãã«ããŸãã 2. Base32ã§è¡šãããç§å¯éµãšã«ãŠã³ã¿ãŒãããHMAC-SHA1ïŒãŸãã¯SHA-256ã»SHA-512ïŒãèšç®ããŸãã 3. HMACã®çµæã®æåŸã®4ããããããªãã»ããããšããŠããã®äœçœ®ãã4ãã€ããåãåºããå é ã®ããããé€ãã31ãããã®æŽæ°ã«ããŸãïŒåçåãæšãŠïŒã 4. ãã®æŽæ°ã10â¶ã§å²ã£ãäœããã6æ¡ã®ã³ãŒããšããŠè¡šç€ºããŸãã ãã®ããŒã«ã®èšç®ã¯ãRFC 6238ã®ä»é²ã«èŒã£ãŠãããã¹ããã¯ãã«ãšäžèŽããããšã確èªããŠããŸãã
èšç®äŸ
RFC 6238ã®ãã¹ããã¯ãã«ïŒç§å¯éµ "12345678901234567890"ã8æ¡ãSHA-1ïŒ æå» 59ç§ â 94287082 æå» 1111111109ç§ â 07081804 æå» 2000000000ç§ â 69279037 åæå€ã®ç§å¯éµ JBSWY3DPEHPK3PXPïŒ"Hello!\xDE\xAD\xBE\xEF" ãBase32ã«ãããã®ïŒã¯ãåäœç¢ºèªã«ãã䜿ãããäŸã§ãã
䜿çšäžã®æ³šæ
- æ¬ç©ã®ãµãŒãã¹ã®ç§å¯éµãå ¥åãããšããã®ã¢ã«ãŠã³ãã®ã³ãŒãã衚瀺ãããŸããç§å¯éµã¯ãã¹ã¯ãŒããšåãããã«æ±ããä»äººã«èŠããªãã§ãã ããã
- ããœã³ã³ãã¹ããŒããã©ã³ã®æèšããããŠãããšãæ£ããã³ãŒãã«ãªããŸãããæèšãèªåã§åãããèšå®ã«ããŠãã ããã
- å€ãã®ãµãŒãã¹ã¯6æ¡ã»30ç§ã»SHA-1ã®çµã¿åããã䜿ã£ãŠããŸãã
ãããã質å
ãã®èšç®ã¯æ£ããã®ã§ãã?
RFC 6238ã®å ¬åŒãã¹ããã¯ã¿(ã·ãŒã¯ã¬ãã"12345678901234567890"ãUnixæå»59ç§ã«ããã8æ¡ã³ãŒã"94287082")ãšå®å šã«äžèŽããããšãç¢ºèªæžã¿ã§ãã
ã·ãŒã¯ã¬ããããŒã¯å®å šã§ãã?
ãã¹ãŠã®èšç®ã¯ãã©ãŠã¶å ã§Web Crypto APIã䜿ã£ãŠå®çµãããµãŒããŒã«ã¯äžåéä¿¡ãããŸããããã ããå®éã®èªèšŒçšã·ãŒã¯ã¬ããããã©ãŠã¶ã«å ¥åããéã¯ãå ±æç«¯æ«ã第äžè ã®ç®ã«æ³šæããŠãã ããã
ãªãBase32圢åŒã䜿ãã®ã§ãã?
èªèšŒã¢ããªã®ã»ããã¢ããæã«QRã³ãŒããæåå ¥åããŒãšããŠè¡šç€ºãããã·ãŒã¯ã¬ããã¯ãéåžžBase32圢åŒã§ãšã³ã³ãŒããããŠããããã§ãã