![](https://habrastorage.org/files/295/e63/fdc/295e63fdcd184ca4bef75ed483a6dfa8.jpg)
Intel Software Guard Extensionsãã¯ãããžãŒ
ãœãããŠã§ã¢ã¢ããªã±ãŒã·ã§ã³ã¯ãå€ãã®å Žåããã¹ã¯ãŒããã¢ã«ãŠã³ãçªå·ã財åããŒã¿ãæå·åããŒãå»çããŒã¿ãªã©ã®æ©å¯æ å ±ãåŠçããå¿ èŠããããŸãã ãã®ããŒã¿ãžã®ã¢ã¯ã»ã¹ã¯ãèš±å¯ãããåä¿¡è ã®ã¿ãå©çšã§ããå¿ èŠããããŸãã Intel SGXã®çšèªã§ã¯ããã®ãããªæ©å¯æ å ±ã¯ãã¢ããªã±ãŒã·ã§ã³ã·ãŒã¯ã¬ããããšåŒã°ããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¿ã¹ã¯ã¯ããããã®ã·ãŒã¯ã¬ãããä»ã®ãŠãŒã¶ãŒãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã«èª€ã£ãŠé瀺ãããªãããã«ãã³ã³ãã¥ãŒã¿ãŒã«ã»ãã¥ãªãã£ããªã·ãŒãé©çšããããšã§ãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¯ããŠãŒã¶ãŒãå¥ã®ãŠãŒã¶ãŒã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããããšãèš±å¯ããŸããïŒæ瀺çãªèš±å¯ãä»äžãããŠããªãå ŽåïŒã ããã¢ããªã±ãŒã·ã§ã³ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãªã«ã¢ã¯ã»ã¹ããã®ãé²ããŸãã å³å¯ã«å¶åŸ¡ããããªãœãŒã¹ãé€ããOSãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã«å¿ èŠãªæš©éã®ãªããŠãŒã¶ãŒãèš±å¯ããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã¿æå·åãªã©ã®è¿œå ã®ä¿è·æ段ã䜿çšããŠã第äžè ãã¹ãã¬ãŒãžããããã¯ãŒã¯æ¥ç¶çµç±ââã§éä¿¡ãããããŒã¿ã«ã¢ã¯ã»ã¹ã§ããªãããã«ããŸããããšãæ»æè ãOSãæ©åšã«ã¢ã¯ã»ã¹ã§ãããšããŠãã§ãã
ãããã®ãã¹ãŠã®ä¿è·å¯Ÿçã«ãããããããã»ãšãã©ã®ã³ã³ãã¥ãŒã¿ãŒã·ã¹ãã ã«ã¯è匱æ§ãæ®ã£ãŠããŸãã ããŸããŸãªã¡ã«ããºã ããããã¢ããªã±ãŒã·ã§ã³ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ããä¿è·ããæš©éãæããªããŠãŒã¶ãŒããOSãä¿è·ããŸãããéåžžãã¢ããªã±ãŒã·ã§ã³ã¯OSèªäœãå«ããããé«ãã¬ãã«ã®æš©éã§å®è¡ãããããã»ã¹ããã»ãšãã©ä¿è·ãããŸããã 管çè æš©éãæã€æªæã®ããããã°ã©ã ã¯ããã¹ãŠã®ã·ã¹ãã ãªãœãŒã¹ããã³ã·ã¹ãã ã§å®è¡ãããŠãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«ç¡å¶éã«ã¢ã¯ã»ã¹ã§ããŸãã é«åºŠãªãã«ãŠã§ã¢ã¯ãã¢ããªã±ãŒã·ã§ã³ã®é²åŸ¡ã¡ã«ããºã ãæ»æããŠãæå·åããŒãæ©å¯ããŒã¿ãããã¡ã¢ãªããçŽæ¥æœåºã§ããŸãã
ã€ã³ãã«ã¯ãé«ã¬ãã«ã®ç§å¯ãšãã®ãããªãœãããŠã§ã¢æ»æããä¿è·ããããã«ã€ã³ãã«SGXæ¡åŒµæ©èœãéçºããŸããã Intel SGXã¯ãã¢ããªã±ãŒã·ã§ã³ãé£ã³å°ãäœæã§ããããã«ããCPUåœä»€ã®ã»ããã§ããã¢ããªã±ãŒã·ã§ã³ã®ã¢ãã¬ã¹ç©ºéå ã®ä¿è·ãããé åã¯ãé«åºŠãªãã«ãŠã§ã¢ã§ãæ©å¯æ§ãšæŽåæ§ãä¿èšŒããŸãã ãšã³ã¯ã¬ãŒãã³ãŒãã¯ç¹å¥ãªæ瀺ã«ãã£ãŠãµããŒããããŠãããWindows * DLLïŒãã€ãããã¯ãªã³ã¯ã©ã€ãã©ãªïŒãã¡ã€ã«ãšããŠã³ã³ãã€ã«ããã³ããŒããããŸãã
Intel SGXæ¡åŒµæ©èœã¯ãã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ã軜æžããŸãã å³ å³1ã¯ãIntel SGXãšã³ã¯ã¬ãŒãã®æç¡ã§ã®æœåšçãªæ»æé åã®å€§ããªéãã瀺ããŠããŸãã
![](https://habrastorage.org/files/639/60f/2f8/63960f2f86554b318de58b61c09633e2.png)
å³1.ã€ã³ãã«ãœãããŠã§ã¢ã¬ãŒããšã¯ã¹ãã³ã·ã§ã³ã®æç¡ã«ãããããæ»æãšãªã¢
Intel Software Guard ExtensionsãããŒã¿ãä¿è·ããæ¹æ³
Intel SGXã¯ãããŒããŠã§ã¢ãšãœãããŠã§ã¢ãæšçãšããæ»æã«å¯ŸããŠæ¬¡ã®ä¿è·ãæäŸããŸãã
- ãšã³ã¯ã¬ãŒãã®å€éšããã®èªã¿åãããã³æžã蟌ã¿ã®ããã®ãšã³ã¯ã¬ãŒãã®ã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ã¯ãçŸåšã®æš©éã¬ãã«ãšCPUã®åäœã¢ãŒãã«é¢ä¿ãªãååšããŸãã
- äœæ¥ã¬ãã«ã®é£ã³å°ã¯ããœãããŠã§ã¢ãŸãã¯ããŒããŠã§ã¢ãããã¬ãŒã䜿çšãããããã°ã«ã¯äœ¿çšã§ããŸããã ïŒãããã°å±æ§ãæã€ãšã³ã¯ã¬ãŒããäœæã§ããŸããã€ã³ãã«SGXãããã¬ãŒã¯ãæšæºãããã¬ãŒãšåãæ¹æ³ã§ãšã³ã¯ã¬ãŒãã®å 容ã衚瀺ã§ããŸããããã¯ããœãããŠã§ã¢éçºããã»ã¹ã®å©äŸ¿æ§ãé«ããããã«è¡ãããŸããïŒ
- åŸæ¥ã®é¢æ°åŒã³åºããé·ç§»ãã¬ãžã¹ã¿æäœããŸãã¯ã¹ã¿ãã¯ã䜿çšããŠãé£ã³å°ç°å¢ã«å ¥ãããšã¯ã§ããŸããã ãšã³ã¯ã¬ãŒãé¢æ°ãåŒã³åºãå¯äžã®æ¹æ³ã¯ãããã€ãã®ã»ãã¥ãªãã£ãã§ãã¯ãå®è¡ããæ°ããåœä»€ã䜿çšããããšã§ãã
- ãšã³ã¯ã¬ãŒãã¡ã¢ãªã¯ãåçä¿è·ä»ãã®æšæºæå·åã¢ã«ãŽãªãºã ã䜿çšããŠä¿è·ãããŸãã ã¡ã¢ãªãèªã¿åãããRAMã¢ãžã¥ãŒã«ãå¥ã®ã·ã¹ãã ã«æ¥ç¶ãããšãæå·åãããããŒã¿ã®ã¿ãååŸã§ããŸãïŒå³2ãåç §ïŒã
- ã¡ã¢ãªã®æå·åããŒã¯ãé»æºã®å ¥ãçŽããå€æŽããããã³ã«ã©ã³ãã ã«å€æŽãããŸãïŒããšãã°ãããŒãæãã¹ãªãŒãããã³äŒæ¢ç¶æ ã®åŸã«äœæ¥ãåéãããšãïŒã ããŒã¯CPUå ã«ä¿åãããå€éšããã¢ã¯ã»ã¹ã§ããŸããã
- ããŒã¿ã¯ãšã³ã¯ã¬ãŒãã§å²ãŸããŠããããã®ãšã³ã¯ã¬ãŒãã®ã³ãŒãã§ã®ã¿äœ¿çšå¯èœã§ãã
ä¿è·ãããã¡ã¢ãªé åã®ãµã€ãºã¯å³å¯ã«å¶éãããã·ã¹ãã BIOSã«ãã£ãŠèšå®ãããŸãã ããã¯éåžžã64 MBãŸãã¯128 MBã§ãã äžéšã®ã·ã¹ãã ã¡ãŒã«ãŒã¯ãBIOSã§ãã®å€ãæ§æããæ©èœãæäŸããŠããŸãã åãšã³ã¯ã¬ãŒãã®ãµã€ãºã«å¿ããŠã5ã20åã®ãšã³ã¯ã¬ãŒããã¡ã¢ãªå ã«åæã«äœæã§ããŸãã
![](https://habrastorage.org/files/85f/868/a1c/85f868a1c66c4ed884d9830d8ed410ae.png)
å³2.å®å šãªã¢ããªã±ãŒã·ã§ã³ã§ã®Intel Software Guard Extensionsãšã³ã¯ããŒãžã£ãŒã®ããŒã¿ä¿è·
ä»çµã¿
Intel SGXã䜿çšããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã2ã€ã®ã³ã³ããŒãã³ãã«åå²ããå¿ èŠããããŸãïŒå³3ãåç §ïŒã
- ä¿¡é Œãããã³ã³ããŒãã³ãã ããã¯é£ã³å°ã§ãã ä¿¡é Œã§ããã³ã³ããŒãã³ãã®ã³ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç§å¯ã«ã¢ã¯ã»ã¹ããŸãã åäžã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãè€æ°ã®ä¿¡é Œã§ããã³ã³ããŒãã³ã/ãšã³ã¯ã¬ãŒããããå ŽåããããŸãã
- ä¿¡é ŒãããŠããªãã³ã³ããŒãã³ãã ããã¯ã¢ããªã±ãŒã·ã§ã³ã®æ®ãã®éšåã§ããããã®ã¢ãžã¥ãŒã«ã®ããããã§ãã ãšã³ã¯ã¬ãŒãã®èŠ³ç¹ããã¯ãOSãšVMMã®äž¡æ¹ãä¿¡é Œã§ããªãã³ã³ããŒãã³ããšèŠãªãããããšã«æ³šæããŠãã ããã
ä¿¡é Œã§ããã³ã³ããŒãã³ãã¯ã§ããã ãå°ããããæãä¿¡é Œæ§ã®é«ãä¿è·ãå¿ èŠãªããŒã¿ãšããã®ããŒã¿ãçŽæ¥æäœããæäœã®ã¿ãå«ããå¿ èŠããããŸãã è€éãªã€ã³ã¿ãŒãã§ãŒã¹ãæã€å€§ããªé£ã³å°ã¯ãããå€ãã®ä¿è·ãããã¡ã¢ãªãæ¶è²»ããã ãã§ãªããè匱æ§ãå¢å ãããŸãã
ãšã³ã¯ã¬ãŒãã¯ãä¿¡é Œã§ããã³ã³ããŒãã³ããšä¿¡é Œã§ããªãã³ã³ããŒãã³ãéã®çžäºäœçšãæå°éã«æããå¿ èŠããããŸãã ãšã³ã¯ã¬ãŒãã¯ã¡ã¢ãªã®ä¿è·é åãè¶ ããŠãä¿¡é Œã§ããªãã³ã³ããŒãã³ãã®é¢æ°ãåŒã³åºãïŒç¹å¥ãªåœä»€ã䜿çšïŒããšãã§ããŸãããæ»æã«å¯Ÿãããšã³ã¯ã¬ãŒãã®ããä¿¡é Œæ§ã®é«ãä¿è·ãæäŸããããã«ããã®ãããªäŸåé¢ä¿ãå¶éããããšããå§ãããŸãã
![](https://habrastorage.org/files/65e/a41/aba/65ea41aba1e14110b37dca9e785b26b9.png)
å³3. Intel Software Guard Extensionsã¢ããªã±ãŒã·ã§ã³ã®å®è¡
èªèšŒ
SGXã¢ãŒããã¯ãã£ã§ã¯ãèªèšŒã¯ãã©ãããã©ãŒã äžã«ç¹å®ã®ãšã³ã¯ã¬ãŒããäœæãããããšã®ç¢ºèªã§ãã 2ã€ã®èªèšŒã¡ã«ããºã ããããŸãã
- åããã©ãããã©ãŒã äžã«é 眮ããã2ã€ã®é£ã³å°ã¯ãçžäºèªèšŒãå®è¡ãããšãã«ãããŒã«ã«èªèšŒãçºçããŸãã
- å§ä»»ç¶ã¯ããªã¢ãŒãé£ã³å°ã»ãµãã©ã€ã€ã§ç¢ºèªãããæç¹ãªã¢ãŒãèªèšŒãçºçããŸãã
ããŒã«ã«èªèšŒ
ããŒã«ã«èªèšŒã¯ãã¿ã¹ã¯ãå®äºããããã«é£æºããŠåäœããå¿ èŠãããè€æ°ã®ãšã³ã¯ã¬ãŒããã¢ããªã±ãŒã·ã§ã³ã«ããå ŽåããŸãã¯2ã€ã®å¥åã®ã¢ããªã±ãŒã·ã§ã³ããšã³ã¯ã¬ãŒãéã§ããŒã¿ã亀æããå¿ èŠãããå Žåã«åœ¹ç«ã¡ãŸãã åãšã³ã¯ã¬ãŒãã¯ãç°ãªããšã³ã¯ã¬ãŒãããã§ãã¯ããŠãä¿¡é Œã§ããããšã確èªããå¿ èŠããããŸãã ãã®åŸãé£ã³å°ã¯å®å šãªã»ãã·ã§ã³ã確ç«ããECDHããŒäº€æã䜿çšããŠã»ãã·ã§ã³ããŒãå ±æããŸãã ãã®ã»ãã·ã§ã³ããŒã¯ãäž¡æ¹ã®ãšã³ã¯ã¬ãŒãã«å ±éããããŒã¿ãæå·åããããã«äœ¿çšã§ããŸãã
äž¡æ¹ã®ãšã³ã¯ã¬ãŒããåãã¢ããªã±ãŒã·ã§ã³ã§äœæãããŠããå Žåã§ãããããšã³ã¯ã¬ãŒãã¯å¥ã®ãšã³ã¯ã¬ãŒãã®ä¿è·ãããã¡ã¢ãªç©ºéã«ã¢ã¯ã»ã¹ã§ããªãããããã¹ãŠã®ãã€ã³ã¿ãŒããå€ãžã®åç §ãåé€ããŠã³ããŒããå¿ èŠããããŸãã å®å šãªããŒã¿ã»ããããããšã³ã¯ã¬ãŒãããå¥ã®ãšã³ã¯ã¬ãŒãã«è»¢éããå¿ èŠããããŸãã
ãªã¢ãŒãèªèšŒ
ãªã¢ãŒãèªèšŒã«ãããIntel SGXãã©ã°ã€ã³ãšãã©ãããã©ãŒã æ©åšã¯ãä¿¡é Œã確ç«ããããã«ãµãŒãããŒãã£ã®ãµãŒããŒã«éä¿¡ãããææ¡ã圢æããŸãã ãã®ãœãããŠã§ã¢ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãšã³ã¯ã¬ãŒãã«å ããŠãIntelãæäŸããQuoting EnclaveïŒQEïŒããã³Provisioning EnclaveïŒPvEïŒã³ã³ããŒãã³ããå«ãŸããŠããŸãã èªèšŒæ©åš-Intel SGXããµããŒãããCPUã ãã©ãããã©ãŒã åºæã®é察称æ©åšããŒãšçµã¿åãããããã°ã©ã æ å ±ã®èŠçŽã䜿çšããŠãæ¿èªããããã£ãã«ãä»ããŠãªã¢ãŒããµãŒããŒã«éä¿¡ãããææ¡ãäœæããŸãã ãšã³ã¯ã¬ãŒãã€ã³ã¹ã¿ã³ã¹ãæ£ããäœæãããIntel SGXããµããŒãããããã»ããµã§å®è¡ãããŠãããšãªã¢ãŒããµãŒããŒãå€æããå ŽåããµãŒããŒã¯ä¿¡é Œã確ç«ããæ€èšŒæžã¿ã®ãã£ãã«ãä»ããŠã·ãŒã¯ã¬ãããéä¿¡ããŸãã
ããŒã¿ã·ãŒãªã³ã°
ããŒã¿ã·ãŒãªã³ã°ãšã¯ãããŒã¿ãæå·åããããšã§ãã³ã³ãã³ããå ¬éããã«ä¿¡é Œã§ããªãã¡ã¢ãªãŸãã¯ã¹ãã¬ãŒãžã«æžã蟌ãããšãã§ããŸãã ãã®ããŒã¿ã¯åŸã§ãšã³ã¯ã¬ãŒãã«ãã£ãŠèªã¿åãããå°å·ïŒåŸ©å·åïŒã§ããŸãã æå·åããŒã¯ãªã¯ãšã¹ãã«å¿ããŠå éšã§äœæããããšã³ã¯ã¬ãŒãã«å ¬éãããŸããã
ããŒã¿ãå°å°ããã«ã¯2ã€ã®æ¹æ³ããããŸãã
- ã¢ã€ãã³ãã£ãã£é£ã³å°ã ãã®ã¡ãœããã¯ãç¹å®ã®ãšã³ã¯ã¬ãŒãã«åºæã®ããŒãäœæããŸãã
- ã¢ã€ãã³ãã£ãã£ã·ãŒã«ã ãã®æ¹æ³ã¯ããšã³ã¯ããŒãžã£ãŒã®ã·ãŒãªã³ã°ã»ã³ã¿ãŒã®IDã«åºã¥ããŠããŒãäœæããŸãã åã眲å蚌人ã®è€æ°ã®é£ã³å°ãåãéµã圢æã§ããŸãã
ãšã³ã¯ããŒãžã£ãŒã·ãŒãªã³ã°
ãšã³ã¯ã¬ãŒã蚌ææžã§å°å°ãããŠããå ŽåãããŒã¯ããŒã¿ãå°å°ããç¹å®ã®ãšã³ã¯ã¬ãŒãã«åºæã§ãã ãšã³ã¯ã¬ãŒãã®å€æŽã眲åã«åœ±é¿ãããšãæ°ããããŒãäœæãããŸãã ãã®æ¹æ³ã䜿çšãããšããšã³ã¯ã¬ãŒãã®1ã€ã®ããŒãžã§ã³ã«ãã£ãŠã·ãŒã«ãããããŒã¿ã¯ãåããšã³ã¯ã¬ãŒãã®å¥ã®ããŒãžã§ã³ã§ã¯äœ¿çšã§ããªããªããŸãã ãã®æ¹æ³ã®å¯äœçšã¯ãå°å°ãããããŒã¿ãã¢ããªã±ãŒã·ã§ã³ãšãã®é£ã³å°ã®æ°ããããŒãžã§ã³ã«è»¢éã§ããªãããšã§ãã ãã®ã¢ãããŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ã§å€ãã·ãŒã«ããŒã¿ã䜿çšããªããªãã¡ãŒã察象ãšããŠããŸãã
ã·ãŒãªã³ã°èšŒææžã«ããã·ãŒãªã³ã°
ã·ãŒã«èšŒææžã§ã·ãŒã«ãããšãåãã»ã³ã¿ãŒã®è€æ°ã®é£ã³å°ãäºãã®ããŒã¿ãã·ãŒã«ããŠå°å·ã§ããŸãã ããã«ããããšã³ã¯ã¬ãŒãã®ããããŒãžã§ã³ããå¥ã®ããŒãžã§ã³ã«ããŒã¿ã転éããããåããããã€ããŒã®è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãšããŒã¿ãå ±æãããã§ããŸãã
ãœãããŠã§ã¢ã®å€ãããŒãžã§ã³ãžã®ã¢ã¯ã»ã¹ãæåŠããã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ã§å°å°ãããããŒã¿ã«ãšã³ã¯ã¬ãŒãããå Žåã¯ããšã³ã¯ã¬ãŒãã«çœ²åãããšãã«ãœãããŠã§ã¢ã®ããŒãžã§ã³çªå·ã䜿çšã§ããŸãã æå®ããããœãããŠã§ã¢ããŒãžã§ã³çªå·ããå€ããšã³ã¯ã¬ãŒãããŒãžã§ã³ã¯ããŒãçæã§ããªããããããŒã¿ãå°å·ã§ããŸããã
ãã¥ãŒããªã¢ã«ã§ã®Intel Software Guard Extensionsãã¯ãããžãŒã®äœ¿çšæ¹æ³
Intel SGXã®3ã€ã®éèŠãªã³ã³ããŒãã³ãã§ãããé£ã³å°ãèªèšŒãããã³ã·ãŒãªã³ã°ã«ã€ããŠèª¬æããŸããã ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãã€ã³ãã«SGXã®ã³ã¢ã§ãããšã³ã¯ã¬ãŒãã®å®è£ ã«çŠç¹ãåœãŠãŸãã é£ã³å°ãäœæããã«èªèšŒãŸãã¯å°å°ãè¡ãããšã¯ã§ããŸããã ããã«ãããã«ãããã¥ãŒããªã¢ã«ã®ãµã€ãºãå¶éãããŸãã
å°æ¥ã®ãªãªãŒã¹ã§
ææã®ã·ãªãŒãºã®ç¬¬äºéšã§ã¯ã€ã³ãã«ã»ãœãããŠã§ã¢ã¬ãŒãæ¡åŒµæ©èœæ¡åŒµæ©èœïŒããŒã2ãã¢ããªã±ãŒã·ã§ã³ã®äœæ ãæã ã¯ã€ã³ãã«SGXã®æ¯æŽãåããŠäœæããããã¹ã¯ãŒããããŒãžã£ãèŠãŠãã ããã ãã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããã®èŠä»¶ãå¶éãããã³ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠèª¬æããŸãã ãã¥ãŒã¹ããã©ããŒããŠãã ããã
ãã®ã·ãªãŒãºã®ãã¹ãŠã®ææã®ãªã¹ããåç §ããŠãã ãããèšäºã¯ã æ¡åŒµã¬ãŒããœãããŠã§ã¢ã€ã³ãã«ã®ææã®ã·ãªãŒãºãæäŸããŸã ã