【Signal】ubuntu安装Intel SGX
<h2>先决条件</h2><p>Intel SGX开发环境搭建需要几个先决条件:</p>
<p>至少6th系列CPU,最好是8th系列CPU,以支持Intel增添的安全相关的FLC指令,更好地兼容ECDSA类型的RA服务<br>在BIOS中将SGX服务设为【enabled】<br>如果是8th的CPU,需要在BIOS中启动FLC。注意,有FLC和无FLC的开发环境搭建过程存在不同,现有的官方过程可能对有FLC的平台上SGX的开发环境搭建更为友好,在这里仅介绍无FLC的平台上SGX开发环境的搭建。<br><br></p>
<p>查看系统cpu是否支持:https://ark.intel.com/content/www/cn/zh/ark/products/122589/intel-core-i7-8550u-processor-8m-cache-up-to-4-00-ghz.html</p>
<h2>Build and Install the Intel® SGX Driver</h2>
<p>SGX驱动安装有两种方式,一种是运行可执行文件直接默认安装,一种是源码安装方式。源码安装比较复杂容易出问题,踩坑不少,不做推荐,感兴趣的可自行依照sgx-driver-old的指导安装sgx驱动。特别需要注意的是,这个驱动是老版本的驱动,并不支持FLC微指令以及相关的SGX指令集。新版本的驱动在sgx-driver-new(DCAP)项目中。<br>运行可执行文件直接默认安装的方法是:</p>
<p>1.安装必要依赖</p>
<ul>
<li>
<p><span style="color: rgba(0, 0, 0, 1)"><code>sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl</code></span></p>
</li>
</ul>
<p>2.到Linux-sgx-repo将三个文件下载(默认下载到/home/<username>/Downloads文件夹下):</p>
<p>3.到下载文件夹下,输入</p>
<ul>
<li>sudo chmod 777 sgx_linux_x64_driver_2.11.0_0373e2e.bin</li>
</ul>
<p>以赋予这个.bin文件执行权限<br>4. 运行这个.bin文件</p>
<ul>
<li>sudo ./sgx_linux_x64_driver_2.11.0_0373e2e.bin</li>
</ul>
<p>ok,驱动安装完成</p>
<h2>Build and install the Intel® SGX SDK and Intel® SGX PSW Package</h2>
<p><strong>准备阶段</strong></p>
<p>安装编译SGX SDK要用到的工具</p>
<ul>
<li>sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl</li>
</ul>
<p>特别注意,gcc的版本必须要在7.3以上,glibc的版本必须在2.27以上,如果没有,必须先升级(Ubuntu18.04默认安装的是刚好能够满足)</p>
<p>安装编译SGX PSW要用到的工具</p>
<ul>
<li>sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip</li>
</ul>
<p>从仓库获取源码</p>
<ul>
<li>git clone https://github.com/intel/linux-sgx.git</li>
<li>cd linux-sgx && make preparation</li>
</ul>
<p>如果报以下错误:</p>
<ul>
<li>./external/dcap_source/QuoteVerification/prepare_ssl.sh nobuild</li>
<li>./external/dcap_source/QuoteGeneration/download_prebuilt.sh</li>
</ul>
<p>说No such file or directory exists的话,OK,这就是个坑,这个dcap其实是ECDSA模式的RA的一个安全基础模块,Intel建议在安装驱动的时候一并安装(也就是可能会直接有什么语句把响应的包写在这个./external/dcap_source文件夹下面)。但是!这个服务它起效的前提条件是CPU支持FLC,我就佛了,敢情是不支持FLC的6th的CPU就没法用这个dcap(亲测可以安装但可能就是在以后调RA的时候会报错……问就是尝试踩坑然后到RA的时候总是没有untrusted的.so文件,RA失败,一切从头来过……),然后没有dcap,这一步都执行不下去<br>目前的解决办法是,到sgx-driver-new上将整个项目down下来,然后把./QuoteVerification和./QuoteGeneration俩文件夹直接copy到./external下,再运行make preparation。一切顺利执行,没有报错。</p>
<p>把准备好的工具列表添加到全局变量中,方便之后编译工作的展开:</p>
<ul>
<li>sudo cp external/toolset/{current_distr}/{as,ld,ld.gold,objdump} /usr/local/bin</li>
</ul>
<p>再用下面这个语句检查是不是添加成功:</p>
<ul>
<li> which as ld ld.gold objdump</li>
</ul>
<p>编译SGX SDK和SGX SDK安装工具(installer)<br>1.进入./linux-sgx文件夹(其实应该也是一直在这个文件夹下),命令行执行</p>
<ul>
<li>make sdk</li>
</ul>
<p>再命令行执行:</p>
<ul>
<li>make sdk_install_pkg</li>
</ul>
<p>成功运行的话,在linux/installer/bin文件夹下会有一个sgx_linux_x64_sdk_${version}.bin文件生成</p>
<p><strong>安装SGX SDK</strong><br>为什么先安装SDK而不是像官网说的先去吧SGX PSW也编译好呢?别问,问就是报错。如果先去编译psw,它会返回一个…/sgxsdk不存在的错误,说明psw需要依赖SGX SDK,或者它需要根据安装好的SDK构造一些依赖关系,所以,先安装SDK吧。</p>
<p>安装好需要用到的工具</p>
<ul>
<li>sudo apt-get install build-essential python</li>
</ul>
<p>无脑运行以下命令:</p>
<ul>
<li> cd linux/installer/bin</li>
<li>./sgx_linux_x64_sdk_${version}.bin</li>
</ul>
<p>这里特别提示存在一个坑,就是它询问是否存在当前文件夹的时候,最好选择“no”,然后将SGX SDK安装在/opt/intel/文件夹下。<br>为啥呢?<br>因为在搞psw的时候吼,它会从这个文件夹读取sgxsdk的一些内容,当然如果愿意改写Makefile的 话, 当我没说……</p>
<p>安装好了之后,会显示它安装的路径,记下来,以后编译运行sgx程序的时候需要先</p>
<ul>
<li> source ${sgx-sdk-install-path}/environment</li>
</ul>
<p>比如这里就是</p>
<ul>
<li>source /opt/intel/sgxsdk/environment</li>
</ul>
<p>令开发环境生效</p>
<p><strong>安装PSW</strong></p>
<p>诶还没编译咋就安装了呢?<br>PSW也有两种安装方式,一是按照编译源码得到installer,像SDK一样去安装,二是通过添加.git仓库,直接使用apt-get 的方式安装。<br>第一种属实是坑很多,个人是没搞出来,老是报错说没有deb_libsgx_qe3_logic_pkg,一看,确实没有,也没有在其他文件夹里找到,无奈,作罢。<br>第二种简单直接,适合无脑操作:</p>
<p>命令行运行以下命令添加下载Intel sgx psw的下载路径(但是我好像有报错说没这路径,直接跳过这一步最后也毫无问题,疑惑)</p>
<ul>
<li> echo 'deb https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list</li>
</ul>
<p>命令行运行:</p>
<ul>
<li> wget https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key </li>
<li>sudo apt-key add intel-sgx-deb.key</li>
</ul>
<p>据说是添加仓库拉取的ssh密钥?等一会儿看到【ok】就是运行成功。<br>3. 更新一下apt-get的列表:</p>
<ul>
<li>sudo apt-getupdate</li>
</ul>
<p>嫌速度慢可以换个镜像,aliyun不错<br>4. SGX PSW 提供了3个服务,分别是launch、EPID-based attestation和Algorithm agnostic attestation,从2.8版本开始,PSW整体拆分成这三个小服务,可以分别安装:</p>
<ul>
<li> sudo apt-get install libsgx-launch libsgx-urts</li>
<li> sudo apt-get install libsgx-epid libsgx-urts</li>
<li> sudo apt-get install libsgx-quote-ex libsgx-urts</li>
<li> sudo apt-get install libsgx-dcap-ql </li>
</ul>
<p>安装完毕,可以在/opt/intel/目录下找到一个sgx-asem-services目录</p>
<p><strong>测试一下吧!</strong><br>至此,按照driver→SGX SDK→SGX PSW的顺序将环境搭建好了,可以进入安装目录(我的是/opt/intel/sgxsdk),再进入/SampleCode/RemoteAttestation目录,测试一下RA是否能够运行。<br>首先准备一下编译环境:(这里其实可以不用,但以后开发必须要养成习惯,或者直接把这个写成全局环境变量)</p>
<ul>
<li>source /opt/intel/sgxsdk/environment</li>
</ul>
<p>命令行编译,此时不指定编译模式,默认是硬件模式</p>
<ul>
<li> make</li>
</ul>
<p>编译顺利不报错的话,会生成一个.app的文件,运行它</p>
<ul>
<li> ./app</li>
</ul>
<p>如果能够正常运行,说明目前的环境搭建是没有问题的,但之后会不会还有什么暂时没发现的问题就不得而知了,说不定又要再次开始orz……那是后话了</p><br><br>
来源:https://www.cnblogs.com/thsrite/p/14481220.html
頁:
[1]