ããŒã¿ããŒã¹ãç¥èã®ãœãŒã¹ãšããŠèšãã°ãããã¯åžžã«ãå€æ§ã§é åºä»ããããïŒãŸãã¯ããã§ã¯ãªãïŒæ
å ±ã®å€§ããªå庫ã§ããã ãã§ãªãããã®å®å
šãªä¿ç®¡å Žæã§ãããããšãæå³ããŸãã ã»ãã¥ãªãã£ãšã¯ãéåžžãéä¿¡ãã£ãã«ãä»ããäŒéäžã®äžæ£ã¢ã¯ã»ã¹ããããžã¿ã«ããŒã¿ãä¿è·ããããšãæããŸãããããŒã¿ãã£ãªã¢ã®ç©ççãªä¿è·ãå¿ããªãã§ãã ããã ããã«ãé¢ãããããµãŒããŒã«ãŒã ã«ã¯ã©ã®è£
ç²ãã¢ãé
眮ããã®ãè¯ãããå
¥ãå£ã§äœäººã®èŠåå¡ãå€åãããã¹ããã«ã€ããŠã¯è°è«ããŸããããæå·ã«ã€ããŠã話ããŸãã
æå·ãšããèšèã®æãåºãæå³ã§ã¯ãæ
å ±ã®æ©å¯æ§ãšä¿¡é Œæ§ã確ä¿ããããã®æ¹æ³ã®ç§åŠã§ãã ã€ãŸããèŠç¥ãã¬äººã«ããããŒã¿ã®èªã¿åããäžå¯èœã§ããããšãããã³ç¬¬äžè
ã«ããããŒã¿ã®ç§å¯ã®çœ®æãäžå¯èœã§ããããšãä¿èšŒããŸãã éå»4000幎ã«ããããç§åŠè
ããšã³ãžãã¢ããã®ä»ã®äººç©ã¯ãçŸåš1å°ã®ã³ã³ãã¥ãŒã¿ãŒã«çœ®ãæããããŠããå€ãã®ç¬åµçãªæå·åããã€ã¹ãšã¡ã«ããºã ãéçºããŠããŸããã ãããã£ãŠãçŸåšã®ããŸããŸãªæå·æ
å ±ä¿è·ããŒã«ïŒCIPïŒã¯ãã¹ãŠãããŸããŸãªã¢ã«ãŽãªãºã ã«ãã£ãŠæäŸãããŠããããã®å€ããçºæãããŠããŸãã
泚æã質åïŒ æå·ã®ç¥æµããé ãé¢ããéçºè
ã¯ãç¹å®ã®åã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ãã©ã®ããã«ä¿è·ã§ããŸããïŒ èªåã®ç¬åµçãªæå·åã¢ã«ãŽãªãºã ãèãåºãå¿
èŠããããŸããããããšã誰ããæžããæå·æ
å ±ã䜿çšã§ããŸããïŒ å¹žããªããšã«ãè»èŒªãåçºæããå¿
èŠã¯ãããŸããã ããšãã°ãåäžã®ãœãããŠã§ã¢ã€ã³ã¿ãŒãã§ã€ã¹ã§ããMS CryptoAPIã䜿çšã§ããŸãã ããŸããŸãªæå·åæ
å ±ã»ãã¥ãªãã£äŒæ¥ïŒæå·åãµãŒãã¹ãããã€ããŒãŸãã¯CSP-æå·åãµãŒãã¹ãããã€ããŒãšãåŒã°ããŸãïŒãç¬èªã®æ¹æ³ã§å®è£
ã§ããåºç¯ãªæå·åæ©èœãšã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æããŸãããåäžã®APIã䜿çšããŠãããã«ã¢ã¯ã»ã¹ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã«æå·åæ©èœãå®è£
ããã«ã¯ã次ã®ããšãè¡ãå¿
èŠããããŸãã
- ãŸãã䜿çšããæå·åä¿è·ã¢ã«ãŽãªãºã ã決å®ããŸãã éžæã¯ãæå·ã®ä¿¡é Œæ§ãäœæ¥ã®é床ãããŒã®é·ãããŸãã¯æè¡çãªã¿ã¹ã¯ã§åçŽã«èŠå®ããããšãã§ããŸãã
- 第äºã«ãã©ã®æå·ãããã€ããŒããã®ã¢ã«ãŽãªãºã ãå®è£
ããèªå®ãããããå®äŸ¡ã§ããããèŠã€ããããšã§ãã
- 3çªç®ã«ãCIPFã®ã©ã€ã»ã³ã¹ããã±ãŒãžã®å¹žããªææè
ã«ãªãããµãŒããŒã«ã€ã³ã¹ããŒã«ããŸãã
- 4çªç®ã«ãCIPFé¢æ°ãåŒã³åºããŠã¢ããªã±ãŒã·ã§ã³å
ã§åäœã§ããã¢ãžã¥ãŒã«ããœãªã¥ãŒã·ã§ã³ã«èšè¿°ããŸãã
ç§ãèªåã§èšå®ããã¿ã¹ã¯ã¯ããããã®åã¹ããããå®è¡ãããã®çµæãCachéãMS Crypto APIé¢æ°ã«ã¢ã¯ã»ã¹ã§ãããœãªã¥ãŒã·ã§ã³ãååŸããããšã§ããã
ææ¡ãããã¢ãããŒããæ€èšããçµæã次ã®2ã€ã®å€§ããªå©ç¹ãããããšãããããŸãã
- å€é
åŒããã€ã¹ã調ã¹ãŠãç¬èªã®æå·åãããã·ã¥ããŸãã¯ããŒã¿çœ²åã¢ã«ãŽãªãºã ãäœæããå¿
èŠã¯ãããŸããã
- å€ãã®æå·æ
å ±ä¿è·èšŒææžã¯GOSTã«åŸã£ãŠæ¢ã«èªèšŒãããŠãããå€ãã®é¡§å®¢äŒæ¥ãç¹ã«å·ã®äŒæ¥ã«ãšã£ãŠãããã¯æãéèŠãªèŠä»¶ã®1ã€ã§ãã
ãå°ããªããã€ãã¹ã1ã€ãããŸã-CryptoAPIã¯Windowsã§ã®ã¿åäœããŸãã
é·æã¯ç§ãã¡ã«ã€ã³ã¹ãã¬ãŒã·ã§ã³ãäžããçæã¯å€±æããªãã£ãããCachéDBMSãæäœããããã«CryptoAPIé¢æ°ã䜿çšããã¢ãããŒããèŠã€ãããšããã¿ã¹ã¯ã¯éåžžã«å
·äœçã ãšä»®å®ããŸãã CSPããã§ã«ã€ã³ã¹ããŒã«ããã³æ§æãããŠãããšããŸããCachéããCSPãæäœããæ¹æ³ã¯ïŒ 1ã€ã®ãªãã·ã§ã³ã¯ãCachéã«å®è£
ãããŠãã
ã³ãŒã«ã¢ãŠãã¡ã«ããºã ã䜿çšããããšã§ãã ããã«ã€ããŠããã«èª¬æããŸãã
ã³ãŒã«ã¢ãŠãã¯ãCachéã®DLLããé¢æ°ãåŒã³åºãããã«èšèšãããŠããŸãã å®éãããã¯ãããšãã°C ++ã§ã³ãŒããäœæããDLLã§æ§æããããã決å®ã«äœ¿çšã§ããããšãæå³ããŸãã ãŸãããã®ã¢ãããŒãã«ãããDLLã®äœææã«Windows APIã®ããŸããŸãªæ©èœãç¹ã«CryptoAPIã䜿çšã§ããŸãã
èšç»æ®µéã§ãããã«DLLèªäœïŒISCAPIãšåŒã°ããïŒã ãã§ãªãããã¹ãããã³ãããã°ããŒã«ïŒCryptoConsoleïŒãäœæããããšã«ããŸããã
äžã®å³ã§ã¯ãã°ã©ãã£ã«ã«ã«è¡šç€ºãããŠããŸãã åºæ¬ã¯ã©ã¹CacheCommonïŒC ++ïŒããããŸããããã¯ãæå·ãããã€ããŒã®æ§æãæå·æ
å ±ä¿è·ã·ã¹ãã ã®åæåãã³ã³ããã¹ããããŒãããã·ã¥ããŒã¿ã®ååŸãããžã¿ã«çœ²åã®äœæãšæ€èšŒãæå·åããã®ã³ã°ãªã©ãå¯èœã«ããæ©èœãå®è£
ããŠããŸãã ãããã®é¢æ°ã¯ãã¹ãŠããããã°ã³ã³ãœãŒã«ãšã©ã€ãã©ãªã§äžæ§ã«äœ¿çšãããŸãïŒã³ã³ãœãŒã«ãšDLLã¯C ++ã§èšè¿°ãããŠããŸãïŒã Cachéã®DLLã¯ãããã°ãéåžžã«é£ãããããåäžã®åœ¢åŒã®ã¢ã¯ã»ã¹ãç¹å¥ãªåœ¹å²ãæãããŸãããã®ãããéçºããããã°ãããã³ãã¹ãã®äž»ãªè² æ
ã¯ã³ã³ãœãŒã«ã«ãããŸãã ãœãªã¥ãŒã·ã§ã³å
šäœã®ã³ãŒãã¯å
¬éãããŠã
ãŸã ã
ãã¡ãã§èŠã€ããããšãã§ããŸãã
ãµãŒããŒåŽã§ã¯ãCachéã¯iscapi.Signerã¯ã©ã¹ãä»ããŠISCAPI.DLLãšå¯Ÿè©±ããŸã
ã¯ã©ã¹ããã¹ãiscapi.Signer ã³ãŒã«ã¢ãŠãã¡ã«ããºã ã¯ããã§å®è£
ãããŸããã€ãŸããCachéã¯ã©ã¹ã®ã¡ãœããããDLLã«ååšããCryptoAPIé¢æ°ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã ã¢ã¯ã»ã¹ã¯ãCachéObject Scriptããiscapi.Signerã¯ã©ã¹ã¡ãœãããåŒã³åºãããšã§å®è£
ãããŸãã ãšããããããã¯åå¿è
éçºè
ã«ãšã£ãŠæçãªäŸã§ãããCachéã®å€éšã©ã€ãã©ãªãæäœããæ©èœãç解ã§ããŸãã
ããã§ãå®è£
ãããæ©èœã«ã€ããŠããã€ã説æããŸãã ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ïŒCryptoConsole.exeïŒãããã§ãã¯ããã®ãæã䟿å©ã§ãã èµ·åçŽåŸã«ã䜿çšå¯èœãªãã¹ãŠã®ã³ãã³ããšããããåŒã³åºãããé åºã確èªã§ããŸãã é¢æ°ã®ãã©ã¡ãŒã¿ãŒãå
¥åããã«ã¯ãã¹ããŒã¹ã§åºåã£ãŠãªã¹ãããŸãã éåžžãããã€ãã®åèªã§æ§æãããé·ããã©ã¡ãŒã¿ãŒã¯ãåŒçšç¬Šã§å²ãŸããŠããŸãã
ã³ã³ãœãŒã«ã³ãã³ãã¯ã次ã®3ã€ã®ã¿ã€ãã«åé¡ã§ããŸãã
1.ãµãŒãã¹ããŒã å
žåçãªäŸã¯ãããã»ã¹ã§äœ¿çšå¯èœãªãã¹ãŠã®ã³ãã³ãã®ãªã¹ãã衚瀺ããhelpã³ãã³ãã§ãã ãµãŒãã¹ã³ãã³ãã«ã¯ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠããæå·åãããã€ããŒã«é¢ããæ
å ±ããŠãŒã¶ãŒã«è¡šç€ºããshowProvidersããã³showProvParamsã³ãã³ããå«ãŸããŸãã
2.åæåã³ãã³ãæå·åãããã€ããŒãæ§æããã³éå§ããã«ã¯ãåæåã³ãã³ããå¿
èŠã§ãã äžè¬ã«ãã³ã³ããã¹ããåæåããã«ã¯ã次ãæå®ããå¿
èŠããããŸãã
- æå·ãããã€ããŒã®ã¿ã€ãçªå·ïŒprovIDã³ãã³ãïŒã ããã¯ã»ãšãã©äœãæå³ããªãæ°å€ã§ãããã·ã¹ãã ãäœæ¥ããCSPãèå¥ããã®ã«åœ¹ç«ã¡ãŸãã
- ã¢ã«ãŽãªãºã çªå·ïŒsignAlgIDã³ãã³ãïŒã äžè¬çã«ãããã€ãã®ã¢ã«ãŽãªãºã ãååšããå¯èœæ§ããããŸãããã®å Žåãããã·ã¥ããã³ããŒã¿çœ²åã¢ã«ãŽãªãºã ãæå®ããããšããå§ãããŸãã
- ããŒã³ã³ããåïŒcontNameã³ãã³ãïŒã
- ããŒã³ã³ããããã®PINïŒcontPINã³ãã³ãïŒã ããŒã³ã³ããã®èšå®ã¯ãæå·åãããã€ããŒã®ã€ã³ã¹ããŒã«ããã³æ§æäžã«è¡ãããŸãã
- 䜿çšãããCSPã®ãã«ããŒã ïŒprovNameã³ãã³ãïŒã éåžžãããã¯é·ãæååã§ãã ã·ã¹ãã ãã©ã®æå·åãããã€ããŒã䜿çšããããç解ããããã«å¿
èŠã§ãããCSPã¿ã€ãã«è¿œå ãããã®ã§ãããããã ãã§ã¯äžæã«èå¥ã§ããŸããã
æå·åã¢ã«ãŽãªãºã ã®ã³ãŒããªã©ãã·ã¹ãã ã«èšå®ã§ããè¿œå ã®ãã©ã¡ãŒã¿ãŒããããŸããããããã®5ã€ã¯CSPã®åæåæåã«å¿
èŠã§ãã
3.æå·åã³ãã³ãCSPãåæåããããšãæå·åãããã€ããŒã³ã³ããã¹ãïŒaContextã³ãã³ãïŒãååŸããå¿
èŠããããŸãããã®åŸãããã·ã¥ãäœæããããŒã¿ã«çœ²åããæå·åã§ããŸããã€ãŸãããã®ããã±ãŒãžãäœæããããã¹ãŠãå®è¡ã§ããŸãã
äž»ãªããŒã ïŒ
- hashDataãããŒã¿æååãããã·ã¥ããŸã
- hashFileãããŒã¿ãã¡ã€ã«ãããã·ã¥ããŸã
- signCurrentHashãçŸåšã®èšç®ãããããã·ã¥ã«çœ²åãã
- signNewHashãã·ã¹ãã ã«æ°ããããã·ã¥ãäœæããŠçœ²åããŸã
- verifyHashã眲åäžèŽããã·ã¥ãæ€èšŒããŸã
- verifySignatureã眲åãå
ã®ããŒã¿ãšäžèŽããããšãæ€èšŒããŸã
- encryptDataãæååã®ããŒã¿ãæå·åããŸã
- decryptDataã以åã«æå·åãããããŒã¿ã埩å·åããŸãã
ã³ãã³ãã®ãªã¹ãã¯ãå®éã«ã¯ããã§ç€ºãããã®ãããã¯ããã«åºãã§ãã ãããŠãã€ã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ãåžžã«éçºäžã§ãããšããããšã ãã§ã¯ãããŸããã ãããã°ãšãã¹ããè¡ãå Žåãããã€ãã®é¢é£ããã·ãŒãžã£ãé çªã«åŒã³åºããæçµçµæã確èªããããã³ãŒãã§äºåå®çŸ©ãããå€ã§CSPãåæåããäžæã¹ã¯ãªããé¢æ°ãäœæãããšéåžžã«æçã§ãã
ååãšããŠããããã®é¢æ°ãããã¥ã¡ã³ãåãããããšã¯ãã£ãã«ãããŸããããã¢ããªã±ãŒã·ã§ã³ã³ãŒããèŠããšå°è±¡çã§ãã
æ°ããé¢æ°ãè¿œå ããå Žåã¯ããŸãCacheCommonã§ããããå®è£
ããã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãã¹ããã次ã«DLLã«è¿œå ããæåŸã«iscapi.Signerãä»ããŠãããã®é¢æ°ãžã®ã¢ã¯ã»ã¹ãéããŸãã ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãšåãæ¹æ³ã§ãåçã©ã€ãã©ãªã®é¢æ°ã«ååãä»ããããšããå§ãããŸãã ãZFBEGIN ... ZFENDããããã¯ã®DLLã³ãŒãã§ã¯ãå©çšå¯èœãªãã¹ãŠã®æé ã®åæãå¿
é ã§ããããšã«æ³šæããŠãã ããã
çŸåšå®è£
ãããŠããé¢æ°ã®ã»ããã¯å°ããã§ããã絶察ã«ãã¹ãŠãå®è¡ããããã«ã¿ã¹ã¯ãèšå®ããŠããŸããã ãã§ã«ããŒã¿ããã·ã¥ãäœæããŠçœ²åããããžã¿ã«çœ²åãæ€èšŒã§ããŸãã å°ãªããšããé¢å¿ã®ããåéçºè
ãæå·åãããã€ããŒããã°ããæ§æãããã®ã³ã³ããã¹ããåæåããŠäœ¿çšãéå§ã§ããããã«ãããã¬ãŒã ã¯ãŒã¯ããããŸãã æ°ããé¢æ°ã®è¿œå ã¯ãæ¢åã®é¢æ°ãšã®é¡æšã«ãã£ãŠå®è¡ããããããããã»ã©æéã¯ããããŸããã
ãã¹ãŠã®Cachééçºè
ãæåŸ
ããŠããããžã§ã¯ãã®çµæã䜿çšãããã®éçºã«åå ããããšæããŸãã