
ãšã³ã¯ã¬ãŒããšãšã³ã¯ã¬ãŒãã€ã³ã¿ãŒãã§ã€ã¹ã®ã³ãŒãã¯èšè¿°ããŸããããèšäºã®ãã®éšåã§ã¯ãµã³ãã«ã³ãŒããæäŸããŸãã ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæããªãã¢ããªã±ãŒã·ã§ã³ã³ã¢ã®Intel SGX以å€ã®ããŒãžã§ã³ãããŠã³ããŒãã§ããŸãã å°ããªãã¹ãããã°ã©ã ïŒCïŒã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ïŒãšãµã³ãã«ã®ãã¹ã¯ãŒãã¹ãã¬ãŒãžãã¡ã€ã«ãä»å±ããŠããŸãã
é£ã³å°ã®èšèš
Intel SGXã®ãã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒãèšèšãããšãã«äœ¿çšããäžè¬çãªã¢ãããŒãã次ã«ç€ºããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ç§å¯ãç¹å®ããŸãã
- ãããã®ç§å¯ã®ãµãã©ã€ã€ãŒãšæ¶è²»è ã®èå¥ã
- ãšã³ã¯ã¬ãŒãã®å¢çã®æ±ºå®ã
- ãšã³ã¯ã¬ãŒãã®ãã£ã¯ã¹ãã£ã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãã
ã¢ããªã±ãŒã·ã§ã³ã®ç§å¯ãç¹å®ãã
Intel SGXã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãèšèšããæåã®ã¹ãããã¯ãã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ãããèå¥ããããšã§ãã
ç§å¯ãšã¯ãä»äººãèŠããç¥ã£ããããŠã¯ãªããªãæ å ±ã§ãã ãã®ã·ãŒã¯ã¬ããã®å¯Ÿè±¡ãšãªããŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¿ãã·ãŒã¯ã¬ããã«ã¢ã¯ã»ã¹ã§ããŸãã æš©éã®ã¬ãã«ã«é¢ä¿ãªããä»ã®ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ãèš±å¯ããªãã§ãã ããã èããããç§å¯ã«ã¯ã財åããŒã¿ãå»çèšé²ãå人æ å ±ãèå¥ããŒã¿ãã©ã€ã»ã³ã¹ããããã«ãã¡ãã£ã¢ã³ã³ãã³ãããã¹ã¯ãŒããæå·åããŒãå«ãŸããŸãã
ãã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒã§ã¯ãè¡š1ã«ç€ºãããã«ãäžéšã®ã¢ã€ãã ã¯ããã«ã·ãŒã¯ã¬ãããšèŠãªãããŸãã
________________________________________
________________________________________
________________________________________
è¡š1.ã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããã®äºåãªã¹ãã
ãããã¯æãããªç§å¯ã§ããããã®ãªã¹ããæ¡åŒµããŸãããŠãŒã¶ãŒåã ãã§ãªãããŠãŒã¶ãŒã¢ã«ãŠã³ãã®ãã¹ãŠã®æ å ±ãè¿œå ããŸãã æ¹èšãããã·ãŒããè¡š2ã«ç€ºããŸãã
________________________________________
________________________________________
________________________________________
è¡š2.ã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããã®åèšèšããããªã¹ãã
ãã¹ã¯ãŒããé ãããŠããå Žåã§ããã¢ã«ãŠã³ãæ å ±ïŒãµãŒãã¹åãURLãªã©ïŒã¯æ»æè ã«ãšã£ãŠäŸ¡å€ããããŸãã ãã¹ã¯ãŒããããŒãžã£ãŒã§ãã®ããŒã¿ãå ¬éãããšãæ»æè ã¯ã·ã¹ãã ããããã³ã°ããæ©äŒãå¢ããããšãã§ããŸãã ç¹ã«ããã®ããŒã¿ãæã£ãŠãããšãæ»æè ãç¥ã£ãŠãããããææè ã®ã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ããããã«ããœãŒã·ã£ã«ãšã³ãžãã¢ãªã³ã°ææ³ããã¹ã¯ãŒããªã»ããæ»æã䜿çšããŠããµãŒãã¹ãçŽæ¥çã£ãæ»æãå®è¡ã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããã®ãµãã©ã€ã€ãšã³ã³ã·ã¥ãŒãã®èå¥
ã¢ããªã±ãŒã·ã§ã³ã®ç§å¯ãç¹å®ãããããœãŒã¹ãšå®å ã決å®ããå¿ èŠããããŸãã
Intel SGXã®çŸåšã®ããŒãžã§ã³ã§ã¯ãé£ã³å°ã³ãŒãã¯æå·åãããŠããŸããã ããã¯ãã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ãããã¹ãŠã®ãŠãŒã¶ãŒãããããéã¢ã»ã³ãã«ããã³è§£æã§ããããšãæå³ããŸãã 衚瀺çšã«éãããããŒã¿ã¯ãå®çŸ©äžãç§å¯ã«ããããšã¯ã§ããŸããã ããã¯ãç§å¯ããšã³ã¯ã¬ãŒãã³ãŒãã«éçã«ã³ã³ãã€ã«ã§ããªãããšãæå³ããŸãã ã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããã¯å€éšãšã³ã¯ã¬ãŒãããååŸããå®è¡æã«ãšã³ã¯ã¬ãŒãã«ããŒãããå¿ èŠããããŸãã Intel SGXã®çšèªã§ã¯ãããã¯é£ã³å°ã«ç§å¯ãæäŸãããšåŒã°ããŸãã
ç§å¯ã®ãœãŒã¹ããã©ã¹ãããã³ã³ãã¥ãŒãã£ã³ã°ããŒã¹ïŒTCBïŒã®å€éšã®ã³ã³ããŒãã³ãã«ããå Žåãä¿¡é Œã§ããªãã³ãŒãã®ç§å¯ã®è匱æ§ãæžããããšãéèŠã§ãã ïŒIntel SGXã®ãªã¢ãŒãèªèšŒã®éèŠæ§ã®äž»ãªçç±ã®1ã€ã¯ããã®ãããã§ããµãŒãã¹ãããã€ããŒãIntel SGXã¢ããªã±ãŒã·ã§ã³ãšã®ä¿¡é Œé¢ä¿ã確ç«ããæå·åãããç§å¯ãã¢ããªã±ãŒã·ã§ã³ã«è»¢éããããã«äœ¿çšã§ããæå·åããŒãçæãã圌ãã ãããããã解èªã§ããããšã§ãã¯ã©ã€ã¢ã³ãã·ã¹ãã ã®ä¿¡é Œããããšã³ã¯ã¬ãŒããïŒãšã³ã¯ã¬ãŒãããã·ãŒã¯ã¬ããããšã¯ã¹ããŒããããšãã¯ãåæ§ã®äºé²æªçœ®ãéµå®ããå¿ èŠããããŸãã ååãšããŠããšã³ã¯ã¬ãŒãå ã§äºåã«æå·åããªãéããã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ãããä¿¡é Œã§ããªãã³ãŒãã«éä¿¡ããªãã§ãã ããã
æ®å¿µãªããããã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒã§ã¯ããšã³ã¯ã¬ãŒããšã®éã§ã·ãŒã¯ã¬ãããéä¿¡ããå¿ èŠãããããããã®ã·ãŒã¯ã¬ããã¯æå·åãªãã§ãã¬ãŒã³ããã¹ãã«ãªããŸãã ãšã³ããŠãŒã¶ãŒã¯ãããŒããŒããŸãã¯ã¿ããã¹ã¯ãªãŒã³ã䜿çšããŠè³æ Œæ å ±ãšãã¹ã¯ãŒããå ¥åããå¿ èŠã«å¿ããŠããããåŸã§åŒã³åºããŸãã ã¢ã«ãŠã³ãã®ãã¹ã¯ãŒãã¯ç»é¢ã«è¡šç€ºããããŠãŒã¶ãŒã®èŠæ±ã«å¿ããŠWindows *ã¯ãªããããŒãã«ã³ããŒãããŸãã ããããªããšãã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ã¯ãŒããããŒãžã£ãŒã§ããã¯ãã§ãããæåŸ ã©ããã«åäœããŸããã
ããã¯ãè匱ãªé åãå®å šã«æé€ããããšã¯ã§ããªãããšãæå³ããŸããããããåæžããããšããã§ãããæå·åãããŠããªã圢åŒã§é£ã³å°ãè¶ããå Žåãäœããã®ç§å¯ä¿è·æŠç¥ãå¿ èŠã«ãªããŸãã
ã·ãŒã¯ã¬ãã | åºæ | è¡ãå |
---|---|---|
ãŠãŒã¶ãŒã¢ã«ãŠã³ãã®ãã¹ã¯ãŒã | ãŠãŒã¶ãŒå
¥å*
ãã¹ã¯ãŒãã¹ãã¢ãã¡ã€ã« | ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹*
ã¯ãªããããŒã* ãã¹ã¯ãŒãã¹ãã¢ãã¡ã€ã« |
ãŠãŒã¶ãŒã¢ã«ãŠã³ãæ å ± | ãŠãŒã¶ãŒå
¥å*
ãã¹ã¯ãŒãã¹ãã¢ãã¡ã€ã« | ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹*
ãã¹ã¯ãŒãã¹ãã¢ãã¡ã€ã« |
ãŠãŒã¶ãŒãã¹ã¿ãŒãã¹ã¯ãŒããŸãã¯ãã¹ãã¬ãŒãº | ãŠãŒã¶ãŒå ¥å | éµçææ©èœ |
ãã¹ã¯ãŒãVaultãã¹ã¿ãŒã㌠| éµçææ©èœ | ããŒã¿ããŒã¹ããŒæå· |
ãã¹ã¯ãŒãããŒã«ãæå·åã㌠| ã©ã³ãã ã·ã§ãŒãã³ã°
ãã¹ã¯ãŒãã¹ãã¢ãã¡ã€ã« | ãã¹ã¯ãŒãããŒã«ãæå·
ãã¹ã¯ãŒãã¹ãã¢ãã¡ã€ã« |
è¡š3.ã¢ããªã±ãŒã·ã§ã³ã®ç§å¯ããã®çºä¿¡å ãšå®å ã èããããå®å šäžã®ãªã¹ã¯ã«ã¯ãã¢ã¹ã¿ãªã¹ã¯ïŒ*ïŒãä»ããŠããŸãã
è¡š3ã«ããã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒã·ãŒã¯ã¬ããã®ãœãŒã¹ãšå®å ã瀺ããŸãã èããããåé¡âä¿¡é Œã§ããªãã³ãŒãã§ç§å¯ãå©çšã§ããé åâã¯ãã¢ã¹ã¿ãªã¹ã¯ïŒ*ïŒã§ç€ºãããŸãã
ãšã³ã¯ã¬ãŒãå¢çã®å®çŸ©
ç§å¯ã確ç«ãããããé£ã³å°ã®å¢çç·ãæããŸãã ãŸããã¢ããªã±ãŒã·ã§ã³ã®äž»èŠãªã³ã³ããŒãã³ããéãç§å¯ããŒã¿ã®æµããæ€èšããŠãã ããã ãšã³ã¯ã¬ãŒãå¢çã¯æ¬¡ã®ããã«ããå¿ èŠããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããã§æ©èœããéèŠãªã³ã³ããŒãã³ãã®æå°éã®ã»ãããå«ãŸããŠããŸãã
- ã§ããã ãå€ãã®ç§å¯ã®äžã
- ä¿¡é Œã§ããªãã³ãŒããšãã®äŸåé¢ä¿ã®æ°ãšã®çžäºäœçšãæå°éã«æããŸãã
ããŒã¿ãããŒãšãã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒãšã³ã¯ã¬ãŒãã®éžæãããå¢çç·ãå³ã«ç€ºããŸãã 1ã

å³1.ãã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒã®ç§å¯ããŒã¿ã¹ããªãŒã ã
ã¢ããªã±ãŒã·ã§ã³ã®ç§å¯ã¯åã§ç€ºãããéãåã¯ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã®ãããã段éã§ãã¬ãŒã³ããã¹ãïŒæå·åãªãïŒã«ååšããç§å¯ã§ãããç·ã®åã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠæå·åãããç§å¯ã§ãã ãšã³ã¯ã¬ãŒãã®å¢çã¯ãæå·åããã³åŸ©å·åæé ãéµçæé¢æ°ïŒKDFïŒãããã³ä¹±æ°ãžã§ãã¬ãŒã¿ãŒãå²ãã§ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã«ãããããã€ãã®ç®æšã確å®ã«éæã§ããŸãã
- äžéšã®ã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããïŒã¢ã«ãŠã³ãæ
å ±ãšãã¹ã¯ãŒãïŒã®æå·åã«äœ¿çšãããããŒã¿ããŒã¹/ã¹ãã¬ãŒãžããŒã¯ããšã³ã¯ã¬ãŒãå
ã§çæããããã¬ãŒã³ããã¹ãã§å€éšã«éä¿¡ãããããšã¯ãããŸããã
- ãã¹ã¿ãŒããŒã¯ããšã³ã¯ã¬ãŒãå
ã®ãŠãŒã¶ãŒã®ãã¹ãã¬ãŒãºããçæãããããŒã¿ããŒã¹/ã¹ãã¬ãŒãžããŒã®æå·åãšåŸ©å·åã«äœ¿çšãããŸãã ãã¹ã¿ãŒããŒã¯äžæçãªãã®ã§ããããããªã圢åŒã§ãé£ã³å°ã®å€éšã«è»¢éãããããšã¯ãããŸããã
- ããŒã¿ããŒã¹/ã¹ãã¬ãŒãžããŒãã¢ã«ãŠã³ãæ å ±ãããã³ã¢ã«ãŠã³ããã¹ã¯ãŒãã¯ãä¿¡é Œã§ããªãã³ãŒãããé ãããæå·åããŒã䜿çšããŠããšã³ã¯ã¬ãŒãå ã§æå·åãããŸãïŒ1çªããã³2çªãåç §ïŒã
æ®å¿µãªãããæå·åãããŠããªãç§å¯ã¯é£ã³å°ã®å¢çãè¶ããŠããŸããŸãããããã¯é¿ããããŸããã ãã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒã®äœæ¥äžã®ç¹å®ã®æ®µéã§ããŠãŒã¶ãŒã¯ããŒããŒãã䜿çšããŠãã¹ã¯ãŒããå ¥åããããWindowsã¯ãªããããŒãã«ãã¹ã¯ãŒããã³ããŒããå¿ èŠããããŸãã ãããã¯å®å šã§ãªããã£ãã«ã§ããããšã³ã¯ã¬ãŒãå ã«é 眮ããããšã¯ã§ããŸããããããã®æäœã¯ã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã«å¿ èŠã§ãã ãããŒãžã³ãŒãããŒã¹ã«åºã¥ããŠã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã決å®ã«ãã£ãŠè€éã«ãªãå¯èœæ§ããããæ·±å»ãªåé¡ãçºçããå¯èœæ§ããããŸãã
é£ã³å°ã®å€åŽã®ç§å¯ãä¿è·ãã
ãšã³ã¯ã¬ãŒãã®å€éšããæå·åãããŠããªãç§å¯ãä¿è·ããå®å šãªãœãªã¥ãŒã·ã§ã³ã¯ãããŸããã è匱æ§ãæžããããã®æŠç¥ã®ã¿ããããŸãã æåã®æ¹æ³ã¯ãæ å ±ãè匱ãªåœ¢åŒã§ååšããæéãæå°éã«æããããšã§ãã
ä¿¡é Œã§ããªãã³ãŒãã§æ©å¯ããŒã¿ãåŠçããããã®äžè¬çãªã¬ã€ãã©ã€ã³ã次ã«ç€ºããŸãã
- ããŒã¿ãããã¡ã®æäœãçµäºãããããŒãã§åããŸãã SecureZeroMemory ïŒWindowsïŒãmemzero_explicit ïŒLinuxïŒãªã©ã®é¢æ°ã䜿çšããŸãããããã®é¢æ°ã¯ãã³ã³ãã€ã©ãŒã«ããæé©åãä¿èšŒãããŠããŸããã
- æ©å¯ããŒã¿ãä¿åããããã«ãæšæºã®C ++ãã³ãã¬ãŒãã©ã€ãã©ãªïŒSTLïŒã³ã³ããã䜿çšããªãã§ãã ããã STLã³ã³ããã¯ç¬èªã®ã¡ã¢ãªç®¡çã¢ã«ãŽãªãºã ã䜿çšããããããã®ãªããžã§ã¯ããåé€ããåŸããªããžã§ã¯ãã«å²ãåœãŠãããã¡ã¢ãªãå®å
šã«ã¯ãªã¢ãããããšã確èªããã®ã¯å®¹æã§ã¯ãããŸããã ïŒäžéšã®ã³ã³ããã§ã¯ãã«ã¹ã¿ã ãã£ã¹ãã³ãµãŒã䜿çšããŠãã®åé¡ã解決ã§ããŸããïŒ
- .NETãªã©ã®ãããŒãžã³ãŒãã䜿çšããå ŽåããŸãã¯èªåã¡ã¢ãªç®¡çã䜿çšããèšèªã䜿çšããå Žåã¯ãä¿è·ãããããŒã¿ãæ ŒçŽããããã«ç¹å¥ã«èšèšãããã¹ãã¬ãŒãžã¿ã€ãã䜿çšããŠãã ããã ä»ã®ã¿ã€ãã®ã¹ãã¬ãŒãžã®ã»ãã¥ãªãã£ã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãŒãšJITã³ã³ãã€ã«ã®äœæ¥ã«äŸåããŸãããã®ãããªã¹ãã¬ãŒãžã¯ããªã³ããã³ãã§ã¯ãªãŒã³ã¢ããããã³è§£æŸã§ããŸããïŒãŸãã¯ãŸã£ããäžå¯èœã§ãïŒã
- ã¯ãªããããŒãã«ããŒã¿ãé 眮ããå¿ èŠãããå Žåã¯ããã°ããããŠãããããã¡ãã¯ãªã¢ããããšãå¿ããªãã§ãã ããã ç¹ã«ãã¢ããªã±ãŒã·ã§ã³ã®çµäºåŸãããŒã¿ããããã¡ã«æ®ããªãã§ãã ããã
Tutorial Password Managerãããžã§ã¯ãã®å Žåãç¬èªã®ã³ãŒããšãããŒãžã³ãŒãã®äž¡æ¹ã§äœæ¥ããå¿ èŠããããŸãã ãã€ãã£ãã³ãŒãã§ã¯ã wchar_tãããã¡ãšcharãããã¡ãéžæãã SecureZeroMemoryã䜿çšããŠãããã解æŸããåã«ã¯ãªã¢ããŸãã ãããŒãžã³ãŒãã§ã¯ã.NET SecureStringã¯ã©ã¹ã䜿çšããŸãã
SecureStringãã¢ã³ãããŒãžã³ãŒãã«éä¿¡ããå Žåã System :: Runtime :: InteropServicesã®è£å©é¢æ°ã䜿çšããŠããŒã¿ãéä¿¡ããŸãã
using namespace System::Runtime::InteropServices; LPWSTR PasswordManagerCore::M_SecureString_to_LPWSTR(SecureString ^ss) { IntPtr wsp= IntPtr::Zero; if (!ss) return NULL; wsp = Marshal::SecureStringToGlobalAllocUnicode(ss); return (wchar_t *) wsp.ToPointer(); }
ãã€ãã£ãã³ãŒããããããŒãžã³ãŒããžã®å察æ¹åã«ããŒã¿ãéä¿¡ããå Žåã2ã€ã®æ¹æ³ã䜿çšã§ããŸãã SecureStringãªããžã§ã¯ããæ¢ã«ååšããå Žåã¯ã Clearã¡ãœãããšAppendCharã¡ãœããã䜿çšããŠã wchar_tæååããæ°ããå€ãèšå®ããŸãã
password->Clear(); for (int i = 0; i < wpass_len; ++i) password->AppendChar(wpass[i]);
æ°ããSecureStringãªããžã§ã¯ããäœæãããšãã¯ãæ¢åã®wchar_tæååããSecureStringãäœæããã³ã³ã¹ãã©ã¯ã¿ãŒãã©ãŒã ã䜿çšããŸãã
try { name = gcnew SecureString(wname, (int) wcslen(wname)); login = gcnew SecureString(wlogin, (int) wcslen(wlogin)); url = gcnew SecureString(wurl, (int) wcslen(wurl)); } catch (...) { rv = NL_STATUS_ALLOC; }
ãã¹ã¯ãŒããããŒãžã£ãŒã¯ãWindowsã¯ãªããããŒããžã®ãã¹ã¯ãŒãã®è»¢éããµããŒãããŠããŸãã ã¯ãªããããŒãã¯ãä»ã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããå®å šã§ãªãä¿ç®¡å Žæã§ãã ãããã£ãŠããã€ã¯ããœããã¯æ©å¯ããŒã¿ãããã«æçš¿ããããšããå§ãããŸããã ãã¹ã¯ãŒããããŒãžã£ãŒã®ç®çã¯ããŠãŒã¶ãŒãèŠããå¿ èŠã®ãªã匷åãªãã¹ã¯ãŒããäœæã§ããããã«ããããšã§ãã ãŸããæåã§å ¥åããã®ãé£ããã©ã³ãã ãªæåã»ããã§æ§æãããé·ããã¹ã¯ãŒããäœæããããšãã§ããŸãã ã¯ãªããããŒãã¯ãããçšåºŠã®ãªã¹ã¯ããããŸãããéåžžã«å¿ èŠãªå©äŸ¿æ§ãæäŸããŸãã
ãã®ãªã¹ã¯ãæé€ããã«ã¯ãè¿œå ã®äºé²æªçœ®ãè¬ããå¿ èŠããããŸãã ãŸããã¢ããªã±ãŒã·ã§ã³ã®çµäºæã«ã¯ãªããããŒããã¯ãªã¢ããå¿ èŠããããŸãã ããã¯ãç¬èªã®ã³ãŒããªããžã§ã¯ãã®ãã¹ãã©ã¯ã¿ã§è¡ãããŸãã
PasswordManagerCoreNative::~PasswordManagerCoreNative(void) { if (!OpenClipboard(NULL)) return; EmptyClipboard(); CloseClipboard(); }
ã¯ãªããããŒãã¿ã€ããŒãèšå®ããŸãã ãã¹ã¯ãŒããã¯ãªããããŒãã«ã³ããŒãããšãã¿ã€ããŒã15ç§ã«èšå®ããããã®åŸãã¯ãªããããŒããã¯ãªãŒãã³ã°ããæ©èœãå®è¡ãããŸãã ã¿ã€ããŒãæ¢ã«å®è¡ãããŠããå Žåãã€ãŸããåã®ãã¹ã¯ãŒããæéåãã«ãªãåã«æ°ãããã¹ã¯ãŒããã¯ãªããããŒãã«çœ®ãããå Žåãåã®ã¿ã€ããŒããã£ã³ã»ã«ããã代ããã«æ°ãããã¹ã¯ãŒããéå§ãããŸãã
void PasswordManagerCoreNative::start_clipboard_timer() { // Use the default Timer Queue // Stop any existing timer if (timer != NULL) DeleteTimerQueueTimer(NULL, timer, NULL); // Start a new timer if (!CreateTimerQueueTimer(&timer, NULL, (WAITORTIMERCALLBACK)clear_clipboard_proc, NULL, CLIPBOARD_CLEAR_SECS * 1000, 0, 0)) return; } static void CALLBACK clear_clipboard_proc(PVOID param, BOOLEAN fired) { if (!OpenClipboard(NULL)) return; EmptyClipboard(); CloseClipboard(); }
ãšã³ã¯ããŒãžã£ãŒã¢ããªã±ãŒã·ã§ã³ã³ã³ããŒãã³ãã®é©å¿
ãããã£ãŠãç§å¯ãç¹å®ãããé£ã³å°ã®å¢çãæŠèª¬ãããããé£ã³å°ãèæ ®ã«å ¥ããŠã¢ããªã±ãŒã·ã§ã³ã®æ§é ãèããæãæ¥ãŸããã ãšã³ã¯ã¬ãŒãå ã§èš±å¯ãããã¢ã¯ã·ã§ã³ã«ã¯å³ããå¶éããããŸãã ãããã®å¶éã«ããããšã³ã¯ã¬ãŒãå ã«é 眮ã§ããã³ã³ããŒãã³ããå€éšã«é 眮ã§ããã³ã³ããŒãã³ããããã³æ¢åã®ã¢ããªã±ãŒã·ã§ã³ãå€æãããšãã«2ã€ã«åå²ããå¿ èŠãããã³ã³ããŒãã³ãã決ãŸããŸãã
ãã¥ãŒããªã¢ã«ãã¹ã¯ãŒããããŒãžã£ãŒã«åœ±é¿ããæãéèŠãªå¶éã¯ããšã³ã¯ã¬ãŒããI / Oãå®è¡ã§ããªãããšã§ãã ãšã³ã¯ã¬ãŒãã¯ããŒããŒãããããã¹ããåä¿¡ã§ãããç»é¢ã«ããŒã¿ã衚瀺ã§ããªãããããã¹ãŠã®ã·ãŒã¯ã¬ããïŒãã¹ã¯ãŒããšã¢ã«ãŠã³ãããŒã¿ïŒããšã³ã¯ã¬ãŒãã«å ¥åãããããšã³ã¯ã¬ãŒãããåé€ãããããå¿ èŠããããŸãã ããã«ããšã³ã¯ã¬ãŒãã¯ã¹ãã¬ãŒãžãã¡ã€ã«ãèªã¿åã£ãŠããŒã¿ãæžã蟌ãããšãã§ããŸãããã¹ãã¬ãŒãžãã¡ã€ã«ãåæããã³ã³ããŒãã³ãã¯ãç©ççãªI / Oæäœãå®è¡ããã³ã³ããŒãã³ãããåé¢ããå¿ èŠããããŸãã ããã¯ããšã³ã¯ã¬ãŒãå šäœã§ç§å¯ã転éããã ãã§ãªãããã¡ã€ã«ã®å 容ã転éããå¿ èŠãããããšãæå³ããŸãã

å³2. Tutorial Password Managerã®ã¯ã©ã¹å³ã
å³ å³2ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã¢ïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãé€ãïŒã®ç°¡ç¥åãããã¯ã©ã¹å³ã瀺ããŠããŸããããã«ã¯ãã·ãŒã¯ã¬ããã®éä¿¡å ãšéä¿¡å ã®åœ¹å²ãæããã¯ã©ã¹ãå«ãŸããŸãã PasswordManagerCoreã¯ã©ã¹ã¯ã·ãŒã¯ã¬ããã®ãœãŒã¹ããã³å®å ãšèŠãªãããããšã«æ³šæããŠãã ãã;ãã®å³ã§ã¯ãç°¡åã«ããããã«ã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšå¯Ÿè©±ããŸãã è¡š4ã«ããã¹ãŠã®ã¯ã©ã¹ãšãã®ç®çã®ç°¡åãªèª¬æã瀺ããŸãã
ã¯ã©ã¹ | çš®é¡ | æ©èœ |
---|---|---|
PasswordManagerCore | ãããŒãžã | CïŒã°ã©ãã£ã«ã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšã®çžäºäœçšããã³ãã€ãã£ãã³ãŒãã¬ãã«ã®ããŒã¿åéã |
PasswordManagerCoreNative | ãã€ãã£ãã³ãŒããä¿¡é Œã§ããªã | PasswordManagerCoreã¯ã©ã¹ãšã®çžäºäœçšã ãŸããUnicodeãšãã«ããã€ãæåããŒã¿éã®å€æãæ åœããŠããŸãïŒããã«ã€ããŠã¯ãããŒã4ã§è©³ãã説æããŸãïŒã |
Vaultãã¡ã€ã« | ãããŒãžã | ã¹ãã¬ãŒãžãã¡ã€ã«ã®èªã¿åããšæžã蟌ã¿ã |
ä¿ç®¡ | ç¬èªã®ã³ãŒããé£ã³å° | AccountRecordã¡ã³ããŒã«ãã¹ã¯ãŒãã¹ãã¬ãŒãžããŒã¿ãä¿åããŸãã èªã¿åãäžã®ãªããžããªãã¡ã€ã«ã®éã·ãªã¢ã«åãæžã蟌ã¿çšã®åã·ãªã¢ã«åã |
AccountRecord | ç¬èªã®ã³ãŒããé£ã³å° | ãã¹ãŠã®ã¢ã«ãŠã³ãã®ã¢ã«ãŠã³ãæ å ±ãšãã¹ã¯ãŒãããŠãŒã¶ãŒã®ãã¹ã¯ãŒããªããžããªã«ä¿åããã |
æå· | ç¬èªã®ã³ãŒããé£ã³å° | æå·åæ©èœã®å®è¡ã |
DRNG | ç¬èªã®ã³ãŒããé£ã³å° | ä¹±æ°ãžã§ãã¬ãŒã¿ãŒã€ã³ã¿ãŒãã§ã€ã¹ã |
ã¹ãã¬ãŒãžãã¡ã€ã«ã®åŠçã¯2ã€ã®éšåã«åãããŠããããšã«æ³šæããŠãã ããã1ã€ã¯ç©çã¬ãã«ã§ã®I / Oæäœã«å°å¿µãããã1ã€ã¯èªã¿åããšåæåŸã«å 容ãä¿åããŸãã ãŸããã·ãŒã¯ã¬ããã®äžéã®ãœãŒã¹ããã³å®å ãšããŠVaultãªããžã§ã¯ãã«ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããã³ãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã¡ãœãããè¿œå ããå¿ èŠããããŸããã ããã¯ã VaultFileã¯ã©ã¹ã«ã¯ãªããžããªãã¡ã€ã«ã®æ§é ã«é¢ããæ å ±ããªãããã ãšã³ã¯ã¬ãŒãå ã«ããæå·åæ©èœãžã®ã¢ã¯ã»ã¹ãå¿ èŠã«ãªãããã§ãã
ãŸãã PasswordManagerCoreNativeã¯ã©ã¹ãVaultã¯ã©ã¹ã«ç Žç·ã§æ¥ç¶ããŸããã ãã¬ãŒãã³ã°ã³ãŒã¹ã®ç¬¬2éšããæãåºãããã«ãé£ã³å°ã¯Cé¢æ°ã«ã®ã¿é¢é£ä»ããããšãã§ããŸããããã2ã€ã®C ++ã¯ã©ã¹ã¯äºãã«çŽæ¥éä¿¡ããããšã¯ã§ããŸããããããªããžé¢æ°ããããã¯ã§ç€ºãããäžéãå¿ èŠã§ãã
Intel Software Guard Extensionsã䜿çšããªãã³ãŒããã©ã³ã
å³ã®åè·¯ 2ã¯Intel SGXã³ãŒããã©ã³ããæããŸãã PasswordManagerCoreNativeã¯ã©ã¹ã¯ã Vaultã¯ã©ã¹ãé£ã³å°ã®äžã«ããããã Vaultã¯ã©ã¹ãšçŽæ¥éä¿¡ã§ããŸããã ãã ããIntel SGXã䜿çšããªãã³ãŒããã©ã³ãã«ã¯ãã®ãããªå¶éã¯ãããŸãããPasswordManagerCoreNativeã«ã¯Vaultã¯ã©ã¹ã®ã¡ã³ããŒãçŽæ¥å«ããããšãã§ããŸãã ããã¯ãã€ã³ãã«SGXã䜿çšããªãã¢ããªã±ãŒã·ã§ã³ã§è¡ãå¯äžã®åçŽåã§ãã ãšã³ã¯ã¬ãŒãã®çµ±åãç°¡çŽ åããããã«ããšã³ã¯ã¬ãŒãã䜿çšããªãã³ãŒããã©ã³ãã§ã®ãšã³ã¯ã¬ãŒãåŠçãVault ã¯ã©ã¹ãšVaultFileã¯ã©ã¹ã«å²ãåœãŠãããŸã ã
ã³ãŒããã©ã³ãéã®ãã1ã€ã®éèŠãªéãã¯ãIntel SGXã䜿çšããã³ãŒãã®æå·åé¢æ°ãIntel SGX SDKããååŸãããããšã§ãã Intel SGXã䜿çšããªãã³ãŒãã«ã¯ãããã®é¢æ°ãå«ããããšãã§ããªããããMicrosoft CryptographyïŒNext Generation *ïŒCNGïŒAPIããååŸãããŸãã ããã¯ã Cryptoã¯ã©ã¹ã®2ã€ã®ç°ãªãã³ããŒãç¶æããå¿ èŠãããããšãæå³ããŸãã1ã€ã¯é£ã³å°ã§äœ¿çšãããã1ã€ã¯ä¿¡é Œã§ããªãã¹ããŒã¹ã§äœ¿çšããŸãã ïŒä»ã®ã¯ã©ã¹ã§ãåãããšãè¡ãå¿ èŠããããŸããããã«ã€ããŠã¯5çªç®ã®ããŒãã§èª¬æããŸããïŒ
ã³ãŒãäŸ
åè¿°ã®ããã«ããã®ããŒãã§ã¯ããŠã³ããŒããããµã³ãã«ã³ãŒããæäŸããŸã ã æ·»ä»ã¢ãŒã«ã€ãã«ã¯ããšã³ã¯ã¬ãŒããšçµ±åããåã®Tutorial Password Managerã³ã¢DLLã®ãœãŒã¹ã³ãŒããå«ãŸããŠããŸãã ã€ãŸããããã¯Intel SGXã䜿çšããªãã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãã«ããŒãžã§ã³ã§ãã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãããŸããããäžé£ã®ãã¹ãæäœãå®è¡ããCïŒã§æãåçŽãªãã¹ãã¢ããªã±ãŒã·ã§ã³ãè¿œå ããŸããã 2ã€ã®ãã¹ãã»ãããå®è¡ããŸãã1ã€ã¯æ°ãããªããžããªãã¡ã€ã«ãäœæããŠããŸããŸãªæäœãå®è¡ãããã1ã€ã¯ãœãŒã¹ã³ãŒãé åžã®äžéšã§ãããªããžããªåç §ãã¡ã€ã«ã䜿çšããŠåäœããŸãã ãã®ããã¥ã¡ã³ãã®å·çæç¹ã§ã¯ããã¹ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¹ããªããžããªãDocumentsãã©ã«ããŒã«ããããšãå¿ èŠã§ãããå¿ èŠã«å¿ããŠTestSetupã¯ã©ã¹ã®å Žæãå€æŽã§ããŸãã
ãã®ãœãŒã¹ã³ãŒãã¯ããã®äžé£ã®ãã¥ãŒããªã¢ã«ã®æŠèŠã§æå®ãããèŠä»¶ã«åŸã£ãŠãMicrosoft Visual Studio * Professional 2013ã«ãã£ãŠéçºãããŸããã ãã®æ®µéã§ã¯ãIntel SGX SDKã¯å¿ èŠãããŸããããã»ãã¥ã¢ããŒãåããIntelããŒã¿ä¿è·ãã¯ãããžãŒããµããŒãããã·ã¹ãã ãå¿ èŠã«ãªããŸãã
å°æ¥ã®ãªãªãŒã¹ã§
ãã¥ãŒããªã¢ã«ã®ç¬¬4éšã§ã¯ããšã³ã¯ã¬ãŒããšããªããžæ©èœãéçºããŸãã ãã¥ãŒã¹ããã©ããŒããŠãã ããïŒ