使用 secGear 工具

secGear 提供了一套工具集,方便用户开发应用程序。本章介绍相关工具及其使用方法。

代码生成工具 codegener

简介

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 语言的差异部分:

成员含义
include “my_type.h”使用外部包含文件中定义的类型
trusted声明 TA(Trusted Application)侧可用安全函数
untrusted声明 TA 侧可用不安全函数
return_type定义返回值类型
parameter_type定义参数类型
[in , size = len]对ecall而言,表示该参数需要将数据从非安全侧传入安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer)
[out, size = len]对ecall而言,表示该参数需要将数据从安全侧传出到非安全侧,ocall反之(指针类型需要使用此参数,其中 size 表示实际使用的 buffer)

使用说明

命令格式

codegen 的命令格式如下:

  • x86_64 架构:

codegen_x86_64 < –trustzone | –sgx > [–trusted-dir | –untrusted-dir | –trusted | –untrusted ] edlfile

ARM 架构:

codegen_arm64 < –trustzone | –sgx > [–trusted-dir | –untrusted-dir | –trusted | –untrusted ] edlfile

参数说明

各参数含义如下:

参数是否可选参数含义
–trustzone | –sgx必选只在当前运行命令目录下生成机密计算架构对应接口函数,不加参数默认生成 SGX 接口函数
–search-path 可选用于指定被转译的edl文件所依赖文件的搜索路径
–use-prefix可选用于给代理函数名称加上前缀,前缀名为edl的文件名
–header-only可选指定代码生成工具只生成头文件
–trusted-dir 可选指定生成安全侧辅助代码所在目录,不指定该参数默认为当前路径
–untrusted-dir 可选指定生成非安全侧函数辅助代码所在目录
–trusted可选生成安全侧辅助代码
–untrusted可选生成非安全侧辅助代码
edlfile必选需要转译的 EDL 文件,例如 hello.edl

示例

  • 转译 helloworld.edl ,在 enclave-directory 下生成安全侧辅助代码,host-directory 下生成非安全辅助代码的命令示例如下:
$ codegen_x86_64 --sgx --trusted-dir enclave-directory --untrusted-dir host-directory helloworld.edl
  • 转译 helloworld.edl ,在当前目录生成安全侧辅助代码,不生成非安全辅助代码的命令示例如下:
$ codegen_x86_64 --sgx --trusted helloworld.edl
  • 转译 helloworld.edl ,在当前目录生成非安全侧辅助代码,不生成安全辅助代码的命令示例如下:
$ codegen_x86_64 --sgx --untrusted  helloworld.edl
  • 转译 helloworld.edl ,在 当前目录生成安全侧和非安全侧辅助代码的命令示例如下:
$ codegen_x86_64 --sgx helloworld.edl

签名工具 sign_tool

简介

secGear sign_tool 是一款命令行工具,包含编译工具链和签名工具,用于 enclave 签名。sign_tool 有两种签名形式:

  • 单步签名:仅适用于 debug 调试模式
  • 两步签名:商用场景。需要从第三方平台或者独立的安全设备获取签名私钥,对 envlave 进行签名

使用指导

命令格式

sign_tool 包含 sign 指令(对 enclave 进行签名)和 digest 指令(生成摘要值)。命令格式为:

sign_tool.sh -d [sign | digest] -x -i -p -s [OPTIONS] –o

参数说明

sign 指令参数参数含义是否必选
-a api_level,标识 iTrustee TA 的 GP API version,默认为 1可选
-c 配置文件可选
-d 指定签名工具要进行的操作( sign 或者 digest )单步仅执行sign,两步需要先执行digest,再执行sign
-e 设备的公钥证书,用于保护加密 rawdata 的 AES key (iTrustee必需)仅 iTrustee 类型必选
-f OTRP_FLAG,是否支持 OTRP 标准协议,默认为 0可选
-i 待签名的库文件必选
-k 单步签名所需私钥(pem文件)仅 SGX 类型必选
-m 安全配置文件 mainfest.txt,由用户自行配置仅 iTrustee 类型必选
-o 输出文件必选
-p 两步签名所需的签名服务器公钥证书(pem文件)必选
-s 两步签名所需的已签名摘要值必选
-t TA_TYPA,标识 iTrustee 的 TA 二进制格式,默认为 1可选
-x encalve type(sgx 或 trustzone)必选
-h打印帮助信息可选

单步签名

enclave 类型为 SGX,给 test.enclave 签名,输出签名文件 signed.enclave 的示例如下:

$ sign_tool.sh –d sign –x sgx –i test.enclave -k private_test.pem –o signed.enclave

两步签名

以 SGX 为例,两步签名的操作步骤如下:

  1. 生成摘要值

    使用 sign_tool 签名,生成摘要值 digest.data 和临时中间文件 signdata(该文件在生成签名文件时使用,并在签名后自动删除)。参考命令如下:

    $ sign_tool.sh –d digest –x sgx –i input –o digest.data
    
  2. 将 digest.data 发送至签名机构或平台,并获取对应签名。

  3. 使用获取的签名生成签名后的动态库 signed.enclave。

    $ sign_tool.sh –d sign –x sgx–i input  –p pub.pem –s signature –o signed.enclave
    

说明:为发布 Intel SGX 支持的正式版本应用,需要申请 Intel 白名单。流程请参考 Intel 文档:https://software.intel.com/content/www/us/en/develop/download/overview-on-signing-and-whitelisting-for-intel-software-guard-extensions-enclaves.html

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。