长期支持版本

    社区创新版本

      使用 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 的命令格式如下:

      codegen < --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 --sgx --trusted-dir enclave-directory --untrusted-dir host-directory helloworld.edl
      
      • 转译 helloworld.edl ,在当前目录生成安全侧辅助代码,不生成非安全辅助代码的命令示例如下:
      $ codegen --sgx --trusted helloworld.edl
      
      • 转译 helloworld.edl ,在当前目录生成非安全侧辅助代码,不生成安全辅助代码的命令示例如下:
      $ codegen --sgx --untrusted  helloworld.edl
      
      • 转译 helloworld.edl ,在 当前目录生成安全侧和非安全侧辅助代码的命令示例如下:
      $ codegen --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即可。
      文档捉虫
      编组 3备份