SMS ã¡ãã»ãŒãžã¯ã2 èŠçŽ èªèšŒ (XNUMXFA) ã®æãäžè¬çãªæ¹æ³ã§ãã éè¡ãé»åãŠã©ã¬ãããæå·é貚ãŠã©ã¬ãããã¡ãŒã«ããã¯ã¹ãããããçš®é¡ã®ãµãŒãã¹ã§äœ¿çšãããŸãã
ãã®æ¹æ³ã¯å®å šã§ã¯ãªããããç§ã¯ãã®ã·ããªãªã«æ€æ šããŠããŸãã ãã SIM ã«ãŒãããå¥ã® SIM ã«ãŒããžã®çªå·ã®åå²ãåœãŠã¯ãã¢ãã€ã«æ代ã®åæã«å§ãŸããŸãããããã¯ãSIM ã«ãŒããçŽå€±ãããšãã«çªå·ã埩å ããæ¹æ³ã§ãã ãé»åãããŒçé£ã®å°é家ãã¯ããSIM ã«ãŒãã®æžãæãããªãã·ã§ã³ãè©æ¬ºã®æå£ã«äœ¿çšãããå¯èœæ§ãããããšã«æ°ã¥ããŸããã çµå±ã®ãšãããSIM ã«ãŒããå¶åŸ¡ãã人ã¯ãä»äººã®ãªã³ã©ã€ã³ ãã³ãã³ã°ãé»åãŠã©ã¬ãããããã«ã¯æå·é貚ãããå¶åŸ¡ã§ããã®ã§ãã ãŸããéä¿¡äŒç€Ÿã®åŸæ¥å¡ã«è³è³ãæž¡ãããã欺çãåœé ææžã䜿çšãããããããšã§ãä»äººã®çªå·ãå ¥æããããšãã§ããŸãã
ãã®è©æ¬ºã¹ããŒã ãšåŒã°ãã SIM ã¹ã¯ããã³ã°ã®æ°å件ã®ãšããœãŒããæããã«ãªããŸããã çœå®³ã®èŠæš¡ã¯ãäžçãããã« SMS ã«ãã 2FA ãæŸæ£ããããšã瀺åããŠããŸãã ããããããã¯èµ·ãããŸãã -
ç§ãã¡ã¯ããããã¯ãã§ãŒã³çµç±ã§ã¯ã³ã¿ã€ã ã³ãŒããé
ä¿¡ããå®å
šãª 2FA æ¹åŒã®äœ¿çšãææ¡ãããµãŒãã¹ææè
ããããæ¥ç¶ããæ¹æ³ã説æããŸãã
ã«ãŠã³ãã¯æ°çŸäžã«éããŸã
ãã³ãã³èŠå¯ã«ãããšã2019幎ã«ã¯SIM亀æè©æ¬ºã63ïŒ å¢å ããæ»æè ã®ãå¹³åè«æ±é¡ãã¯4,000ãã³ãã ã£ããšããã ãã·ã¢ã®çµ±èšã¯èŠã€ããããŸããã§ãããããããããã£ãšã²ã©ããšæããŸãã
SIM ã¹ã¯ããã³ã°ã¯ã人æ°ã®ãã TwitterãInstagramãFacebookãVK ã¢ã«ãŠã³ããéè¡å£åº§ãããã«ã¯æè¿ã§ã¯æå·é貚ãããçãããã«äœ¿çšãããŠããŸãã
XNUMXæããã·ã¬ã³å·æ±éšå°åºé£éŠæ€å¯å±
倧åŠã®èšè
äŒèŠã§ã®ãžã§ãšã«ã»ãªã«ãã£ã¹ã®åçã XNUMX幎åŸã圌ã¯ãµã€ããŒè©æ¬ºã§æçãããããšã«ãªãã
SIM亀æã®ä»çµã¿
ãã¹ã¯ããã³ã°ããšã¯äº€æãšããæå³ã§ãã ãã®ãããªæå£ã§ã¯ãã¹ãŠãç¯çœªè ãéåžž SIM ã«ãŒãã®åçºè¡ãéããŠè¢«å®³è ã®é»è©±çªå·ãä¹ã£åããããã䜿ã£ãŠãã¹ã¯ãŒãããªã»ããããŸãã çè«äžã®äžè¬ç㪠SIM ã¹ã¯ããã¯æ¬¡ã®ããã«ãªããŸãã
- è«å ±æ©é¢ã è©æ¬ºåž«ã¯è¢«å®³è ã®ååãé»è©±çªå·ãªã©ã®å人æ å ±ãèãåºããŸãã ãããã¯ãªãŒãã³ãœãŒã¹ (ãœãŒã·ã£ã«ãããã¯ãŒã¯ãå人) ã§èŠã€ããããšãããã°ãå ±ç¯è (æºåž¯é»è©±äŒç€Ÿã®åŸæ¥å¡) ããåãåãããšããããŸãã
- ããããã³ã°ã 被害è ã® SIM ã«ãŒãã¯ç¡å¹åãããŠããŸãã ãããè¡ãã«ã¯ããããã€ããŒã®ãã¯ãã«ã« ãµããŒãã«é»è©±ããçªå·ãäŒããŠé»è©±ãçŽå€±ããæšãäŒããã ãã§ãã
- çªå·ããã£ããã£ããSIM ã«ãŒãã«è»¢éããŸãã éåžžãããã¯éä¿¡äŒç€Ÿã®å ±ç¯è ãææžã®åœé ã«ãã£ãŠè¡ãããŸãã
çŸå®ã®ç掻ã§ã¯äºæ ã¯ããã«å³ãããã®ã«ãªããŸãã æ»æè ã¯è¢«å®³è ãéžæããæ¯æ¥é»è©±ã®äœçœ®ã远跡ããŸããå å ¥è ãããŒãã³ã°ã«åãæ¿ãããšããæ å ±ãåä¿¡ããããã® 1 åã®ãªã¯ãšã¹ãã®ã³ã¹ã㯠2 ïœ 50 ã»ã³ãã§ãã SIMã«ãŒãã®ææè ãæµ·å€ã«è¡ããšããã«ãé信販売åºã®åºé·ãšäº€æžããŠæ°ããSIMã«ãŒããçºè¡ããŠããããŸãã è²»çšã¯çŽ20ãã«ïŒç§ãèŠã€ããæ å ±ã§ã¯ãããŸããŸãªåœã§ããŸããŸãªãªãã¬ãŒã¿ãŒã100ãã«ããXNUMXãã«ãŸã§ïŒãææªã®å ŽåããããŒãžã£ãŒã¯è§£éãããŸãããããã«å¯Ÿãã責任ã¯ãããŸããã
ããã§ããã¹ãŠã® SMS ãæ»æè ã«åä¿¡ãããæºåž¯é»è©±ã®ææè ã¯æµ·å€ã«ãããããäœãããããšãã§ããªããªããŸãã ãããŠãæªåœ¹ã¯è¢«å®³è ã®ãã¹ãŠã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ããå¿ èŠã«å¿ããŠãã¹ã¯ãŒããå€æŽããŸãã
çãŸããç©ãæ»ã£ãŠããå¯èœæ§
éè¡ã¯è¢«å®³è ãéäžã§åãå ¥ããå£åº§ããééãåŒãåºãããšããããŸãã ãã®ãããç¯äººãèŠã€ãããªããŠãäžæçŽå¹£ãè¿éããããšã¯å¯èœã§ãã ããããæå·é貚ãŠã©ã¬ããã§ã¯ãã¹ãŠãããè€éã«ãªããŸãã æè¡çã«ããããŠç«æ³çã«ã ãããŸã§ã®ãšãããã¹ã¯ããã³ã°ã®è¢«å®³è ã«è£åãæ¯æã£ãååŒæããŠã©ã¬ããã¯äžã€ããããŸããã
被害è
ãæ³å»·ã§èªåã®ãéãåŒè·ãããå Žåããªãã¬ãŒã¿ãŒãéé£ããŸãããªãã¬ãŒã¿ãŒã¯ãã¢ã«ãŠã³ããããéãçãŸããç¶æ³ãäœãåºããã®ã§ãã ãŸãã«ãããç§ããã£ãããšã§ã
ãããŸã§ã®ãšãããä»®æ³é貚ææè
ãæ³çã«ä¿è·ããããã®å
·äœçãªå¶åºŠãå°å
¥ããŠããåœã¯ãããŸããã è³æ¬ã«ä¿éºããããããæ倱ã®è£åãåããããšã¯äžå¯èœã§ãã ãããã£ãŠãã¹ã¯ããæ»æãé²ãããšã¯ããã®çµæã«å¯ŸåŠãããããç°¡åã§ãã æãæçœãªæ¹æ³ã¯ã2FA ã«å¯ŸããŠããä¿¡é Œæ§ã®é«ãã第 XNUMX èŠçŽ ãã䜿çšããããšã§ãã
SMS çµç±ã® 2FA ã®åé¡ã¯ SIM ã¹ã¯ããã ãã§ã¯ãããŸãã
SMS ã®ç¢ºèªã³ãŒãããæè¡çãªèŠ³ç¹ããèŠããšå®å
šã§ã¯ãããŸããã Signaling System 7 (SS7) ã«ããããé©çšãããŠããªãè匱æ§ããããããã¡ãã»ãŒãžãååãããå¯èœæ§ããããŸãã SMS ãä»ãã 2FA ã¯å®å
šã§ã¯ãªããšå
¬åŒã«èªèãããŠããŸã (ç±³åœåœç«æšæºæè¡ç 究æã¯ããã®ããšãå ±åæžã§è¿°ã¹ãŠããŸã)
åæã«ã2FA ã®ååšã«ãããŠãŒã¶ãŒã«èª€ã£ãå®å šæãäžããããåçŽãªãã¹ã¯ãŒããéžæããŠããŸãããšããããããŸãã ãããã£ãŠããã®ãããªèªèšŒã¯å°é£ã«ãªãããã§ã¯ãããŸããããæ»æè ãã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ããã®ã容æã«ãªããŸãã
ãŸããSMS ãå€§å¹ ã«é ããŠå±ããããŸã£ããå±ããªãããšããããããŸãã
ãã®ä»ã® 2FA ã¡ãœãã
ãã¡ãããã¹ããŒããã©ã³ãSMSã«ã¯å ã¯éäžããŸããã§ããã 2FA ã«ã¯ä»ã®æ¹æ³ããããŸãã ããšãã°ãã¯ã³ã¿ã€ã TAN ã³ãŒãã¯åå§çãªæ¹æ³ã§ãããæ©èœããäžéšã®éè¡ã§ã¯ä»ã§ã䜿çšãããŠããŸãã æçŽã網èã¹ãã£ã³ãªã©ã®çäœèªèšŒããŒã¿ã䜿çšããã·ã¹ãã ããããŸãã å©äŸ¿æ§ãä¿¡é Œæ§ãäŸ¡æ Œã®ç¹ã§åççãªåŠ¥åç¹ãšæããããã 2 ã€ã®ãªãã·ã§ã³ã¯ãXNUMXFA çšã®ç¹å¥ãªã¢ããªã±ãŒã·ã§ã³ã§ãã RSA ããŒã¯ã³ãGoogle Authenticator ã§ãã ç©çããŒãªã©ã®æ¹æ³ããããŸãã
çè«çã«ã¯ããã¹ãŠãè«ççã§ä¿¡é Œã§ããããã«èŠããŸãã ãããå®éã«ã¯ãææ°ã® 2FA ãœãªã¥ãŒã·ã§ã³ã«ã¯åé¡ãããããã®ããã§çŸå®ã¯æåŸ ãšã¯ç°ãªããŸãã
ã«ãã
ãŠãŒã¶ãŒã¯ãå€ãã® 2FA ã¡ãœãããã¢ã¯ã»ã¹ã倱ãããã®ã§ã¯ãªãããšããææãšçµã³ã€ããŸãã ç©çããŒãŸã㯠TAN ãã¹ã¯ãŒãã®ãªã¹ãã¯ãçŽå€±ãããçãŸãããããå¯èœæ§ããããŸãã ç§èªèº«ãGoogle Authenticator ã«é¢ããŠæªãçµéšãããããšããããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ãæèŒããæåã®ã¹ããŒããã©ã³ãæ éããŸãããã¢ã«ââãŠã³ããžã®ã¢ã¯ã»ã¹ã埩å ããããã®ç§ã®åªåã«æè¬ããŸãã ãã XNUMX ã€ã®åé¡ã¯ãæ°ããããã€ã¹ãžã®åãæ¿ãã§ãã Google Authenticator ã«ã¯ã»ãã¥ãªãã£äžã®çç±ãããšã¯ã¹ããŒã ãªãã·ã§ã³ããããŸãã (ããŒããšã¯ã¹ããŒãã§ããå Žåãã©ã®ãããªã»ãã¥ãªãã£ããããŸãã?)ã ãã€ãŠã¯éµãæåã§æã¡æ©ããŠããŸãããããã®åŸãå€ãã¹ããŒããã©ã³ãç®±ã«å ¥ããŠæ£ã«çœ®ããŠããã»ããç°¡åã ãšå€æããŸããã
2FA ã¡ãœããã¯æ¬¡ã®ããã«ããå¿ èŠããããŸãã
- å®å š - æ»æè ã§ã¯ãªãããªãã ããããªãã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããããã«ããå¿ èŠããããŸã
- ä¿¡é Œæ§ - å¿ èŠãªãšãã«ãã€ã§ãã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããŸã
- 䟿å©ã§ã¢ã¯ã»ã¹ãããã - 2FA ã®äœ¿çšã¯æ確ã§ãæèŠæéã¯æå°éã§ã
- å®ã
ç§ãã¡ã¯ãããã¯ãã§ãŒã³ãæ£ãããœãªã¥ãŒã·ã§ã³ã§ãããšä¿¡ããŠããŸãã
ãããã¯ãã§ãŒã³ã§ 2FA ã䜿çšãã
ãŠãŒã¶ãŒã«ãšã£ãŠããããã¯ãã§ãŒã³äžã® 2FA ã¯ãSMS çµç±ã§ã¯ã³ã¿ã€ã ã³ãŒããåä¿¡ããã®ãšåãããã«èŠããŸãã å¯äžã®éãã¯é ä¿¡ãã£ãã«ã§ãã 2FA ã³ãŒããååŸããæ¹æ³ã¯ããããã¯ãã§ãŒã³ãæäŸãããã®ã«ãã£ãŠç°ãªããŸãã ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ (æ å ±ã¯ç§ã®ãããã£ãŒã«ã«ãããŸã)ããã㯠Web ã¢ããªã±ãŒã·ã§ã³ãTorãiOSãAndroidãLinuxãWindowsãMacOS ã§ãã
ãã®ãµãŒãã¹ã¯ã¯ã³ã¿ã€ã ã³ãŒããçæãããããã¯ãã§ãŒã³äžã®ã¡ãã»ã³ãžã£ãŒã«éä¿¡ããŸãã 次ã«ãå€å žçãªæé ã«åŸããŸãããŠãŒã¶ãŒã¯åä¿¡ããã³ãŒãããµãŒãã¹ ã€ã³ã¿ãŒãã§ã€ã¹ã«å ¥åããŠãã°ã€ã³ããŸãã
èšäº
- ã¯ã³ã¯ãªãã¯ã§ã¢ã«ãŠã³ããäœæã§ããŸããé»è©±ãã¡ãŒã«ã¯å¿ èŠãããŸããã
- 2FA ã³ãŒããå«ããã¹ãŠã®ã¡ãã»ãŒãžã¯ããšã³ãããŒãšã³ãã®curve25519xsalsa20poly1305ã§æå·åãããŸãã
- MITM æ»æã¯é€å€ãããŸãã2FA ã³ãŒããå«ããã¹ãŠã®ã¡ãã»ãŒãžã¯ãããã¯ãã§ãŒã³äžã®ãã©ã³ã¶ã¯ã·ã§ã³ã§ãããEd25519 EdDSA ã«ãã£ãŠçœ²åãããŠããŸãã
- 2FA ã³ãŒããå«ãã¡ãã»ãŒãžã¯ãç¬èªã®ãããã¯ã«åãŸããŸãã ãããã¯ã®é åºãšã¿ã€ã ã¹ã¿ã³ãã¯ä¿®æ£ã§ããªããããã¡ãã»ãŒãžã®é åºãä¿®æ£ã§ããŸããã
- ã¡ãã»ãŒãžã®ãä¿¡é Œæ§ãããã§ãã¯ããäžå¿çãªæ§é ã¯ãããŸããã ããã¯åæã«åºã¥ããããŒãã®åæ£ã·ã¹ãã ã«ãã£ãŠè¡ããããŠãŒã¶ãŒãææããŸãã
- ç¡å¹ã«ããããšã¯ã§ããŸãã - ã¢ã«ãŠã³ãããããã¯ããããã¡ãã»ãŒãžãåé€ãããããããšã¯ã§ããŸããã
- ãã€ã§ãã©ã®ããã€ã¹ããã§ã 2FA ã³ãŒãã«ã¢ã¯ã»ã¹ã§ããŸãã
- 2FA ã³ãŒãã«ããã¡ãã»ãŒãžé ä¿¡ã®ç¢ºèªã ã¯ã³ã¿ã€ã ãã¹ã¯ãŒããéä¿¡ãããµãŒãã¹ã¯ãã¯ã³ã¿ã€ã ãã¹ã¯ãŒããé ä¿¡ãããããšã確å®ã«èªèããŸãã ãåéä¿¡ããã¿ã³ã¯ãããŸããã
ä»ã® 2FA ææ³ãšæ¯èŒããããã«ãè¡šãäœæããŸããã
ãŠãŒã¶ãŒã¯ãããã¯ãã§ãŒã³ ã¡ãã»ã³ãžã£ãŒã§ã¢ã«ãŠã³ããååŸããããã«ã³ãŒããåãåããŸãããã°ã€ã³ã«ã¯ãã¹ãã¬ãŒãºã®ã¿ã䜿çšãããŸãã ãã®ãããé©çšæ¹æ³ãç°ãªãå ŽåããããXNUMX ã€ã®ã¢ã«ãŠã³ãã§ãã¹ãŠã®ãµãŒãã¹ã®ã³ãŒããåãåãããšãããµãŒãã¹ããšã«åå¥ã®ã¢ã«ãŠã³ããäœæããããšãã§ããŸãã
ãŸããã¢ã«ãŠã³ãã«ã¯å°ãªããšã XNUMX ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ãå¿ èŠã§ãããšããäžäŸ¿ããããŸãã ãŠãŒã¶ãŒãã³ãŒãä»ãã®æå·åã¡ãã»ãŒãžãåä¿¡ããã«ã¯ããŠãŒã¶ãŒã®å ¬éããŒãç¥ãå¿ èŠããããŸããå ¬éããŒã¯æåã®ãã©ã³ã¶ã¯ã·ã§ã³ã§ã®ã¿ãããã¯ãã§ãŒã³ã«è¡šç€ºãããŸãã ãããç§ãã¡ããªããšããã®ç¶æ³ããæãåºããæ¹æ³ã§ããç§ãã¡ã¯åœŒãã«ãŠã©ã¬ããã§ç¡æã®ããŒã¯ã³ãåãåãæ©äŒãäžããŸããã ãã ããããè¯ã解決çã¯ãã¢ã«ãŠã³ãã«å ¬éããŒãšããååãä»ããããšã§ãã (æ¯èŒã®ããã«ãå£åº§çªå·ããããŸã) U1467838112172792705 å ¬ééµã®æŽŸçç©ã§ã cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2adaã ã¡ãã»ã³ãžã£ãŒã«ãšã£ãŠã¯ãããã¯ãã䟿å©ã§èªã¿ãããã§ããã2FA ã³ãŒããéä¿¡ããã·ã¹ãã ã«ãšã£ãŠã¯å¶éã«ãªããŸã)ã å°æ¥ã誰ãããã®ãããªæ±ºå®ãäžãããå©äŸ¿æ§ãšã¢ã¯ã»ã¹ããã°ãªãŒã³ãŸãŒã³ã«ç§»ãã ãããšæããŸãã
2FA ã³ãŒãã®éä¿¡æéã¯éåžžã«å®ãã0.001 ADM ã§ããããçŸåšã¯ 0.00001 USD ã§ãã ç¹°ãè¿ãã«ãªããŸããããããã¯ãã§ãŒã³ã調éããŠäŸ¡æ ŒããŒãã«ããããšãã§ããŸãã
ãããã¯ãã§ãŒã³äžã® 2FA ããµãŒãã¹ã«æ¥ç¶ããæ¹æ³
æ°äººã®èªè ã®èå³ãæã£ãŠããµãŒãã¹ã«ãããã¯ãã§ãŒã³èªèšŒãè¿œå ããããšãã§ããã°å¹žãã§ãã
äŸãšããŠã¡ãã»ã³ãžã£ãŒã䜿çšããŠãããè¡ãæ¹æ³ã説æããŸãããé¡æšããŠãå¥ã®ãããã¯ãã§ãŒã³ã䜿çšããããšãã§ããŸãã 2FA ã㢠ã¢ããªã§ã¯ãpostgresql10 ã䜿çšããŠã¢ã«ãŠã³ãæ å ±ãä¿åããŸãã
æ¥ç¶æ®µéïŒ
- 2FA ã³ãŒãã®éä¿¡å ãšãªããããã¯ãã§ãŒã³äžã«ã¢ã«ãŠã³ããäœæããŸãã ãã¹ãã¬ãŒãºãåãåããŸããããã¯ãã³ãŒãã§ã¡ãã»ãŒãžãæå·åãããã©ã³ã¶ã¯ã·ã§ã³ã«çœ²åããããã®ç§å¯ããŒãšããŠäœ¿çšãããŸãã
- ãµãŒããŒã«ã¹ã¯ãªãããè¿œå ããŠã2FA ã³ãŒããçæããŸãã ã¯ã³ã¿ã€ã ãã¹ã¯ãŒãé ä¿¡ã§ä»ã® 2FA æ¹åŒããã§ã«äœ¿çšããŠããå Žåã¯ããã®æé ã¯ãã§ã«å®äºããŠããŸãã
- ãµãŒããŒã«ã¹ã¯ãªãããè¿œå ããŠããããã¯ãã§ãŒã³ ã¡ãã»ã³ãžã£ãŒã§ãŠãŒã¶ãŒã«ã³ãŒããéä¿¡ããŸãã
- 2FA ã³ãŒããéä¿¡ããŠå ¥åããããã®ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŸãã ã¯ã³ã¿ã€ã ãã¹ã¯ãŒãé ä¿¡ã§ä»ã® 2FA æ¹åŒããã§ã«äœ¿çšããŠããå Žåã¯ããã®æé ã¯ãã§ã«å®äºããŠããŸãã
1 ã¢ã«ãŠã³ãã®äœæ
ãããã¯ãã§ãŒã³ã§ã¢ã«ãŠã³ããäœæãããšããããšã¯ãç§å¯ããŒãå ¬éããŒã掟çã¢ã«ãŠã³ã ã¢ãã¬ã¹ãçæããããšãæå³ããŸãã
ãŸããBIP39 ãã¹ãã¬ãŒãºãçæããããããã SHA-256 ããã·ã¥ãèšç®ãããŸãã ããã·ã¥ã¯ãç§å¯éµ ks ãšå
¬ééµ kp ãçæããããã«äœ¿çšãããŸãã åã SHA-256 ãå転ããŠäœ¿çšããå
¬éããŒãããããã¯ãã§ãŒã³å
ã®ã¢ãã¬ã¹ãååŸããŸãã
æ°ããã¢ã«ãŠã³ãããæ¯å 2FA ã³ãŒããéä¿¡ããå Žåã¯ãã¢ã«ãŠã³ãäœæã³ãŒãããµãŒããŒã«è¿œå ããå¿ èŠããããŸãã
import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()
âŠ
import * as bip39 from 'bip39'
import crypto from 'crypto'
adamant.createPassphraseHash = function (passphrase) {
const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}
âŠ
import sodium from 'sodium-browserify-tweetnacl'
adamant.makeKeypair = function (hash) {
var keypair = sodium.crypto_sign_seed_keypair(hash)
return {
publicKey: keypair.publicKey,
privateKey: keypair.secretKey
}
}
âŠ
import crypto from 'crypto'
adamant.getAddressFromPublicKey = function (publicKey) {
const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
const temp = Buffer.alloc(8)
for (var i = 0; i < 8; i++) {
temp[i] = publicKeyHash[7 - i]
}
return 'U' + bignum.fromBuffer(temp).toString()
}
ã㢠ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããç°¡çŽ åããŸãããWeb ã¢ããªã±ãŒã·ã§ã³ã§ 2 ã€ã®ã¢ã«ãŠã³ããäœæããããããã³ãŒããéä¿¡ããŸããã ã»ãšãã©ã®å Žåãããã¯ãŠãŒã¶ãŒã«ãšã£ãŠã䟿å©ã§ãããŠãŒã¶ãŒã¯ããµãŒãã¹ãç¹å®ã®ã¢ã«ãŠã³ããã XNUMXFA ã³ãŒããéä¿¡ããããã«ååãä»ããããšãã§ããããšãç¥ã£ãŠããŸãã
2 2FA ã³ãŒãã®çæ
2FA ã³ãŒãã¯ãŠãŒã¶ãŒã®ãã°ã€ã³ããšã«çæããå¿
èŠããããŸãã ç§ãã¡ã¯å³æžé€šãå©çšããŸã
const hotp = speakeasy.hotp({
counter,
secret: account.seSecretAscii,
});
ãŠãŒã¶ãŒãå ¥åãã 2FA ã³ãŒãã®æå¹æ§ã確èªããŸãã
se2faVerified = speakeasy.hotp.verify({
counter: this.seCounter,
secret: this.seSecretAscii,
token: hotp,
});
3 2FA ã³ãŒãã®éä¿¡
2FA ã³ãŒããéä¿¡ããã«ã¯ããããã¯ãã§ãŒã³ ããŒã APIãJS API ã©ã€ãã©ãªããŸãã¯ã³ã³ãœãŒã«ã䜿çšã§ããŸãã ãã®äŸã§ã¯ãã³ã³ãœãŒã«ã䜿çšããŸããããã¯ã³ãã³ã ã©ã€ã³ ã€ã³ã¿ãŒãã§ã€ã¹ã§ããããããã¯ãã§ãŒã³ãšã®å¯Ÿè©±ãç°¡çŽ åãããŠãŒãã£ãªãã£ã§ãã 2FA ã³ãŒããå«ãã¡ãã»ãŒãžãéä¿¡ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããå¿
èŠããããŸãã send message
ã³ã³ãœãŒã«ã
const util = require('util');
const exec = util.promisify(require('child_process').exec);
âŠ
const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);
ã¡ãã»ãŒãžãéä¿¡ããå¥ã®æ¹æ³ã¯ãã¡ãœããã䜿çšããããšã§ãã send
JS APIã©ã€ãã©ãªã«ãããŸãã
4 ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹
ãŠãŒã¶ãŒã«ã¯ 2FA ã³ãŒããå ¥åãããªãã·ã§ã³ãäžããããå¿ èŠããããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ ãã©ãããã©ãŒã ã«å¿ããŠããŸããŸãªæ¹æ³ã§å®è¡ã§ããŸãã ãã®äŸã§ã¯ããã㯠Vue ã§ãã
ãããã¯ãã§ãŒã³ XNUMX èŠçŽ èªèšŒã㢠ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ ã³ãŒãã¯ã次ã®å Žæã§åç
§ã§ããŸãã
åºæïŒ habr.com