使用 secGear 工具
secGear codegener 是基于 intel SGX SDK edger8r 开发的工具,用于解析 EDL 文件生成中间 C 代码,即辅助生成安全测与非安全侧文件互相调用的代码。
secGear codegener 定义的 EDL 文件格式与 intel SGX SDK edger8r 相同,但是不支持 Intel 的完整语法定义:
- 只能在方法中使用 public,不加 public 的函数声明默认为 private
- 不支持从非安全侧到安全侧,以及安全侧到非安全侧的 Switchless Calls
- OCALL(Outside call) 不支持部分调用模式(如 cdecl,stdcall,fastcall)
EDL 文件语法为类 C 语言语法,这里主要描述与 C 语言的差异部分:
命令格式
codegen 的命令格式如下:
- x86_64 架构:
codegen_x86_64 < —trustzone | —sgx > [—trusted-dir
codegen_arm64 < —trustzone | —sgx > [—trusted-dir
参数说明
各参数含义如下:
示例
- 转译 helloworld.edl ,在 enclave-directory 下生成安全侧辅助代码,host-directory 下生成非安全辅助代码的命令示例如下:
- 转译 helloworld.edl ,在当前目录生成安全侧辅助代码,不生成非安全辅助代码的命令示例如下:
- 转译 helloworld.edl ,在当前目录生成非安全侧辅助代码,不生成安全辅助代码的命令示例如下:
- 转译 helloworld.edl ,在 当前目录生成安全侧和非安全侧辅助代码的命令示例如下:
签名工具 sign_tool
secGear sign_tool 是一款命令行工具,包含编译工具链和签名工具,用于 enclave 签名。sign_tool 有两种签名形式:
- 单步签名:仅适用于 debug 调试模式
- 两步签名:商用场景。需要从第三方平台或者独立的安全设备获取签名私钥,对 envlave 进行签名
命令格式
sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令(生成摘要值)。命令格式为:
sign_tool.sh -d [sign | digest] -x
参数说明
单步签名
两步签名
以 SGX 为例,两步签名的操作步骤如下:
生成摘要值
使用 sign_tool 签名,生成摘要值 digest.data 和临时中间文件 signdata(该文件在生成签名文件时使用,并在签名后自动删除)。参考命令如下:
将 digest.data 发送至签名机构或平台,并获取对应签名。
使用获取的签名生成签名后的动态库 signed.enclave。