IntelSGXã®æŠèŠãšã¯ã©ãŠãã§ã®ãã®åœ¹å²
Intel Software Guard ExtensionsïŒIntel SGXïŒã¯ããŠãŒã¶ãŒã¬ãã«ã®ã³ãŒããé 眮ãããŠããã¢ããªã±ãŒã·ã§ã³ã®ã¢ãã¬ã¹ç©ºéã«ãã©ã€ããŒãä¿è·é åïŒãšã³ã¯ã¬ãŒãïŒãäœæããäžé£ã®CPUåœä»€ã§ãããã®ãã¯ãããžãŒã«ãããæ©å¯ããŒã¿ã®æ©å¯æ§ãšæŽåæ§ãä¿èšŒãããŸãããããããšã³ã¯ã¬ãŒãã«åé¢ããããšã«ãããã¯ã©ãŠããããã€ããŒããã®äžæ£ãªå€éšã¢ã¯ã»ã¹ãšãç¹æš©ãœãããŠã§ã¢ããã®æ»æãå«ãå éšã®è åšã®äž¡æ¹ããã®ä¿è·ã匷åãããŸãã
ä»äºã®ååãIntel SGXãã¯ãããžã¯ãããã»ããµäºçŽã¡ã¢ãªïŒPRMïŒã¡ã¢ãªé åãå²ãåœãŠãŠãã³ãŒããæ ŒçŽããããŒã¿ããšã³ã¯ã¬ãŒãããŸãã CPUã¯ãã«ãŒãã«ããã€ããŒãã€ã¶ãŒãžã®ã¢ã¯ã»ã¹ãå«ããã¹ãŠã®å€éšåŒã³åºãããCPUãä¿è·ããŸãã PRMã«ã¯ã4 KiBããŒãžãããã¯ã®ãšã³ã¯ã¬ãŒãããŒãžãã£ãã·ã¥ïŒEPCïŒãå«ãŸããåããŒãžã¯1ã€ã®ãšã³ã¯ã¬ãŒãã®ã¿ãææããå¿ èŠãããããã®ç¶æ ã¯ãšã³ã¯ã¬ãŒãããŒãžãã£ãã·ã¥ã¡ã¿ããŒã¿ïŒEPCMïŒã«ãã£ããã£ãããCPUã«ãã£ãŠç£èŠãããŸãã
EPCã®ã»ãã¥ãªãã£ã¯ãCPUã«æ ŒçŽãããŠããæå·åããŒãçæããã¡ã¢ãªæå·åãšã³ãžã³ïŒMEEïŒã«ãã£ãŠä¿èšŒãããŸããããŒãžã¯ãç©çããã»ããµã³ã¢å ã§ã®ã¿åŸ©å·åã§ãããšæ³å®ãããŠããŸãã
å©ç¹ãIntel SGXã¯ãæ¥åã§æ©å¯ããŒã¿ïŒãã¹ã¯ãŒããæå·åããŒãIDãçäœèªèšŒãå»çããŒã¿ãããã³ç¥ç財ç£ã«é¢é£ããæ å ±ïŒã䜿çšããçµç¹ã®ãããªãã¯ã¯ã©ãŠãã«å¯Ÿããä¿¡é Œã®ã¬ãã«ãé«ããã®ã«åœ¹ç«ã¡ãŸããéèã»ã¯ã¿ãŒãå»çãšãã«ã¹ã±ã¢ãå°å£²ãã²ãŒã éçºããã¬ã³ã ãã¡ãã£ã¢åéãªã©ãããŸããŸãªæ¥çã®ä»£è¡šè ã«ã€ããŠè©±ããŠããŸãã
IntelSGXå®è£ ãžã®ã¢ãããŒã
G-CoreLabsã®ãããªãã¯ã¯ã©ãŠãã§IntelSGXãšã³ã¯ã¬ãŒãã䜿çšããŠä»®æ³ãã·ã³ãå²ãåœãŠãããšãã§ããããã«ããã«ã¯ãããããé©çšããKVMããã³ QEMUã«ãŒãã«ã®ã³ã³ãã€ã«ãããOpenStackNovaãµãŒãã¹ã§ã®Pythonã¹ã¯ãªããã®èšè¿°ã«ç§»è¡ããå¿ èŠããããŸãã ãé«ã»ãã¥ãªãã£ä»®æ³ãã·ã³ãå¥ã®ã¢ã°ãªã²ãŒã¿ãŒã«å²ãåœãŠãããã«äœ¿çšãããäºå®ã®èšç®ããŒããå®çŸ©ããããšã«ããŸãããããã¯ã远å ã®æ§æãå¿ èŠãªäžçš®ã®èšç®ãªãœãŒã¹ã§ãããã®ãããªããŒãã§ã¯ã次ã®ããšãå¿ èŠã§ããã
- Intel SGXBIOSãµããŒããæå¹ã«ããŸãã

- ããããé©çšããQEMU / KVMãã€ã³ã¹ããŒã«ããŸãã
æåã¯ããããã©ã®ããã«æ©èœããã®ãããããŠæçµçã«ã¯ç®çã®æ§æã®VMãååŸããããã«äœããã蟌ãå¿ èŠãããã®ãââãçè§£ããŠããŸããã§ãããInteléçºè ã¬ã€ãã®äžéšã¯ããããæŽçããã®ã«åœ¹ç«ã¡ãŸã ãããã®å©ããåããŠãSGXã§åäœããããã«èšç®ããŒããæºåããæ¹æ³ãšãä»®æ³ãã·ã³ã®XMLæ§æãã¡ã€ã«ã«å¿ èŠãªè¿œå ã®ãã©ã¡ãŒã¿ãŒãåŠã³ãŸãããããã§ã¯ãKVMä»®æ³åã䜿çšããŠIntelSGXã䜿çšããŠã²ã¹ããã·ã³ãäœæããæ¹æ³ã«é¢ããå æ¬çãªæ å ±ãèŠã€ããŸããããã®ãã¯ãããžãŒã確å®ã«ãµããŒãã§ããããã«ããããã«ã次ã®2ã€ã®æ¹æ³ã䜿çšããŸããã
- / proc / $ PID / smapsãã¡ã€ã«ã®/ dev / sgx / virt_epcã»ã¯ã·ã§ã³ã確èªããŸããã
[root@compute-sgx ~]# grep -A22 epc /proc/$PID/smaps 7f797affe000-7f797b7fe000 rw-s 00000000 00:97 57466526 /dev/sgx/virt_epc Size: 8192 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB LazyFree: 0 kB AnonHugePages: 0 kB ShmemPmdMapped: 0 kB FilePmdMapped: 0 kB Shared_Hugetlb: 0 kB Private_Hugetlb: 0 kB Swap: 0 kB SwapPss: 0 kB Locked: 0 kB THPeligible: 0 VmFlags: rd wr sh mr mw me ms pf io dc dd hg
- ãããŠãSGXãã©ã€ããŒãã€ã³ã¹ããŒã«ããåŸããã®ã·ã§ã«ã¹ã¯ãªããã䜿çšããŸããïŒãã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯VMå
ã§å®è¡ãããŸããïŒã
[root@sgx-vm ~]# cat check_sgx.sh #!/bin/bash METRICS="sgx_nr_total_epc_pages \ sgx_nr_free_pages \ sgx_nr_low_pages \ sgx_nr_high_pages \ sgx_nr_marked_old \ sgx_nr_evicted \ sgx_nr_alloc_pages \ " MODPATH="/sys/module/isgx/parameters/" for metric in $METRICS ; do echo "$metric= `cat $MODPATH/$metric`" done [root@sgx-vm ~]# curl -fsSL https://raw.githubusercontent.com/scontain/SH/master/install_sgx_driver.sh | bash -s - install -p metrics -p page0 [root@sgx-vm ~]# ./check_sgx.sh sgx_nr_total_epc_pages= 2048 sgx_nr_free_pages= 2048 sgx_nr_low_pages= 32 sgx_nr_high_pages= 64 sgx_nr_marked_old= 0 sgx_nr_evicted= 0 sgx_nr_alloc_pages= 0
1ããŒãžã4KiBã®å Žåã2048ããŒãžã«ã¯8 MiBïŒ2048 x 4 = 8192ïŒãå¿ èŠã§ããããšã«æ³šæããŠãã ããã
éçºã®é£ãããšããããå æãã
Intel SGXãOpenStackã«çµ±åããããã®æè¡ææžããªãããšããå®è£ æã®äž»ãªåé¡ã§ããããã®æ€çŽ¢ ã«ãããSecureCloudãããžã§ã¯ãã«ããèšäºãèŠã€ãããŸããããã®èšäºã§ã¯ãSGXãšã³ã¯ã¬ãŒãã䜿çšããŠä»®æ³ãã·ã³ã管çããæ¹æ³ã瀺ãããŠããŸãã
èŠã€ãã£ãæ å ±ã¯ãç§ãã¡ãäœã«åãçµãå¿ èŠãããããæ£ç¢ºã«çè§£ããã®ã«åœ¹ç«ã¡ãŸããããã®çµæã次ã®ã¿ã¹ã¯ã圢æããŸããã
- OpenStack NovaãµãŒãã¹ãå ¥æããŠãIntelSGXããµããŒãããä»®æ³ãã·ã³çšã®è¿œå ãã©ã¡ãŒã¿ãŒãå«ãXMLãã¡ã€ã«ãçæããŸãã
- OpenStack Novaã¹ã±ãžã¥ãŒã©ãã£ã«ã¿ãŒãèšè¿°ããŠãèšç®ããŒãã®ãšã³ã¯ã¬ãŒãã«äœ¿çšå¯èœãªã¡ã¢ãªã決å®ãããã®ä»ã®ãã§ãã¯ãå®è¡ããŸãã
ãããã®å®è¡ã¯ãIntelSGXããããªãã¯ã¯ã©ãŠãã«çµ±åããã®ã«ååã§ããã
ããã«ãEPCãèæ ®ããçµ±èšã®ã³ã¬ã¯ã·ã§ã³ã远å ããŸããã
# openstack usage show
Usage from 2020-11-04 to 2020-12-03 on project a968da75bcab4943a7beb4009b8ccb4a:
+---------------+--------------+
| Field | Value |
+---------------+--------------+
| CPU Hours | 47157.6 |
| Disk GB-Hours | 251328.19 |
| EPC MB-Hours | 26880.02 |
| RAM MB-Hours | 117222622.62 |
| Servers | 23 |
+---------------+--------------+
ã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã®å®å šãªç°å¢
Intel SGX察å¿VMã®ããããžã§ãã³ã°ãåŠç¿ããåŸãScontainã®SCONEãã©ãããã©ãŒã ã䜿çšããŠãç¹æš©ãœãããŠã§ã¢ã®è åšãçºçããå Žåã«ã³ã³ããåãããã¢ããªã±ãŒã·ã§ã³ãå®å šã«å®è¡ã§ããããã«ããŸããã DockerãKubernetesãããã³Rancherç°å¢ã®å Žåããã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããã¡ã€ã«ã·ã¹ãã ãééçã«ä¿è·ããããã«ãIntelSGX察å¿ããã»ããµãšLinuxSGXãã©ã€ããå¿ èŠã§ãã
åã³ã³ããã®èµ·åã¯ãSCONEãã©ãããã©ãŒã ã®ã¯ã©ã€ã¢ã³ãæ¡åŒµæ©èœã«ãã£ãŠäœæãããæ§æãã¡ã€ã«ãããå Žåã«ã®ã¿å¯èœã§ããããã«ã¯ãæå·åããŒãã¢ããªã±ãŒã·ã§ã³åŒæ°ãããã³ç°å¢å€æ°ãå«ãŸããŠããŸãããã¡ã€ã«ããããã¯ãŒã¯ãã©ãã£ãã¯ãããã³æšæºã®I / Oã¹ããªãŒã ïŒstdin / stdoutïŒã¯ééçã«æå·åãããŠãããrootãŠãŒã¶ãŒã§ãã¢ã¯ã»ã¹ã§ããŸããã
SCONEãã©ãããã©ãŒã ã«ã¯ãæ¿èªãããã»ãã¥ãªãã£ããªã·ãŒã«å¯ŸããŠã¢ããªã±ãŒã·ã§ã³ãæ€èšŒããçµã¿èŸŒã¿ã®èªèšŒããã³æ§æãµãŒãã¹ãè£ åãããŠããŸãããšã³ã¯ã¬ãŒãå ã§ã®ã¿äœ¿çšã§ããç§å¯éµãšèšŒææžãçæããŸãã転éããã»ã¹ã«ãããããŒã¿ã®æ©å¯æ§ãšæŽåæ§ã¯ãTLSæå·åãããã³ã«ã«ãã£ãŠä¿èšŒãããŸãã
SGXãã©ã€ããŒã¯ãä»®æ³ã¢ãã¬ã¹ç©ºéã®ãšã³ã¯ã¬ãŒãããšã«æå€§64GBã®ã¡ã¢ãªãäºçŽããŸããSCONEãã©ãããã©ãŒã ã¯ãC / C ++ / CïŒ/ Rust / Go / Python / Javaããã°ã©ãã³ã°èšèªããµããŒãããŠããŸããç¹å¥ãªã³ã³ãã€ã©ãŒã«ããããœãŒã¹ã³ãŒãã¯Intel SGXãšçµã¿åãããŠäœ¿çšââããããã«èªåçã«ïŒè¿œå ã®å€æŽãå¿ èŠãšããã«ïŒæºåãããŸãã
Aggregionã±ãŒã¹
Intel SGXã®çµ±åã«å¿ èŠãªãã¹ãŠã®äœæ¥ãå®äºããåŸãAggregion忣ããŒã¿ç®¡çãã©ãããã©ãŒã ããããªãã¯ã¯ã©ãŠãã«æ¥ç¶ããŸããã
ããã¯ãéèããã³ä¿éºãµãŒãã¹ãæ¿åºã黿°éä¿¡ãå°å£²ãªã©ãããŸããŸãªæ¥çã®ä»£è¡šè ã«ããå ±åããŒã±ãã£ã³ã°ãããžã§ã¯ãã®å®æœãç®çãšããŠããŸããããŒãããŒã¯ãæ¶è²»è ã®è¡åãåæããååããµãŒãã¹ã®çãçµã£ãããã¢ãŒã·ã§ã³ãéçºããèŠæ±ããããã€ã€ã«ãã£ããã°ã©ã ãéçºããAggregionãã©ãããã©ãŒã ã§å¿ååãããããŒã¿ã»ããã亀æããã³åŠçããŸããæ©å¯æ å ±ã®æŒæŽ©ã¯éåžžã«æãŸãããªããæ·±å»ãªè©å€ãªã¹ã¯ãæãæãããããããå瀟ã¯ã»ãã¥ãªãã£ã®åé¡ã«ç¹å¥ãªæ³šæãæã£ãŠããŸãã
AggregionãœãããŠã§ã¢ã¯ãããŒã¿ãããã€ããŒã«å®å šã«çµ±åãããŠããŸããã€ãŸããIntelSGXãèªç±ã«ãµããŒãã§ããã€ã³ãã©ã¹ãã©ã¯ãã£ãåããŠããŸããå瀟ã®ã客æ§ã¯ãç©çãµãŒããŒãã¬ã³ã¿ã«ãŸãã¯è³Œå ¥ãã代ããã«ããããªãã¯ã¯ã©ãŠããžã®æ¥ç¶ãæ€èšã§ããããã«ãªããŸããã
Aggregionãã©ãããã©ãŒã ã§ã®å®å šãªäœæ¥ã®ååãåãµãã©ã€ã€ã®ã«ãŒãã§ã¯ãæ©å¯ããŒã¿ã¯å®éã«ã¯ãã©ãã¯ããã¯ã¹ã§ããIntel SGXãšã³ã¯ã¬ãŒãã«åé¢ãããŸããå éšã§çºçããããšã¯ãã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ãããã€ããŒãå«ã誰ããå©çšã§ããŸããããšã³ã¯ã¬ãŒãã®åæç¶æ ãšæ©å¯æ å ±ã®ä¿åã«äœ¿çšã§ããå¯èœæ§ã®æ€èšŒã¯ãMrEnclaveã®å Žåããªã¢ãŒãèªèšŒãéããŠå®è¡ãããŸãã ããã·ã¥å€ãå®çŸ©ããŸãã
æœåšçãªé¡§å®¢ã®å©çãè€æ°ã®ãã³ããŒã®ããŒã¿ããŒã¹ãçµã¿åããããšãå ±ååºåãã£ã³ããŒã³ã®å¹æãé«ããããšãã§ããŸããæå®ããããã©ã¡ãŒã¿ã«åŸã£ãŠã¿ãŒã²ãããªãŒãã£ãšã³ã¹ãå²ãåœãŠããããšãã»ã°ã¡ã³ãã®ãããã³ã°ïŒãããã³ã°ïŒã¯ãIntelSGXãšã³ã¯ã¬ãŒãããµããŒãããã³ã³ããå ã§çŽæ¥å®è¡ãããŸããæçµçµæã®ã¿ãç¯å²å€ã«è¡šç€ºãããŸããããšãã°ãéžæãã屿§ã«äžèŽãããŠãŒã¶ãŒã®æ°ãªã©ã§ãããã£ã³ããŒã³ã®æå¹æ§ãåæ§ã®æ¹æ³ã§è©äŸ¡ãããŸããåºåã®è¡šç€ºåæ°ãšå®äºãã販売ã«é¢ããããŒã¿ããšã³ã¯ã¬ãŒãã«ã¢ããããŒããããã³ã³ãããŒã«ã°ã«ãŒããšæ¯èŒããã¿ãŒã²ããã°ã«ãŒãã®è³Œå ¥ã®å¢å ãèšç®ãããããã«äœ¿çšããããã«éä¿¡ãããŸãã
çµè«
Intel SGXã¯ããŒã¿ä¿è·ã®äžèœè¬ã§ã¯ãªãããšãçè§£ããŠãããHabréãå«ãããã®ãã¯ãããžãŒãéé£ããå€ãã®èšäºãèŠã€ããããšãã§ããŸãã宿çã«ããšã³ã¯ã¬ãŒãããæ©å¯ããŒã¿ãæœåºã§ããæ»æã®å ±åããããŸããããšãã°ã2018幎ã®MeltdownãšSpectreã¯ã2020幎ã«SGXããŒã«ãSGAxeãCrossTalkãéããŸãããæ¬¡ã«ãIntelã¯ãããã»ããµã®ãã€ã¯ãã³ãŒãã®æŽæ°ãéããŠãç¹å®ãããè匱æ§ã«å¯ŸåŠããŠããŸãã
ãªããã®ãã¯ãããžãŒãå®è£ ããããšã«ããã®ã§ããïŒIntel SGXã®äœ¿çšã¯ãG-Core Labsã®ã¯ã©ãŠââãã€ã³ãã©ã¹ãã©ã¯ãã£ã«è¿œå ã®ä¿è·ã«ãŒããäœæãããã§ã«äœ¿çšãããŠããæ å ±ã»ãã¥ãªãã£ãã¯ãããžãŒã䜿çšããŠãæ©å¯ããŒã¿ã®ä¿åãšåŠçã«å¯ŸãããŠãŒã¶ãŒã®ä¿¡é Œãé«ããããšã«ããããµã€ããŒæ»æã®æœåšçãªé åãåæžããæ©äŒãšèŠãªããŠããŸããç§ãã¡ã®èšäºãæ°ããè匱æ§ãçºèŠããŠæé€ãããšãã話ã«åºã¥ããŠããªãããšã䞻匵ããããšã¯çŽæããŸããããå°æ¥çã«ã¯æåããã¯ã©ã€ã¢ã³ãã®äºäŸããŸã ããªããšå ±æããŠããªãããšãé¡ã£ãŠããŸãããããŸã§ã®éãã³ã¡ã³ãã§æ©å¯ããŒã¿ãä¿è·ããæ¹æ³ãå ±æããããšããå§ãããŸãã