设备端接入开发

最近更新时间:2019-09-12 12:30:54

操作场景

腾讯云 TID 接入类型分为三种:SE(Secure Element)安全芯片、TEE(Trusted Execution Environment)可信执行环境、WBC(White-Box Cipher)软加固。
在使用之前,请您先根据设备使用场景选择合适的安全等级,从软加固 > TEE > SE,安全等级依次提高。

  • 对于安全高度敏感的设备,建议您使用最高等级的 SE 方式,例如,智能门锁产品。
  • 如果采用 SE 方式,您需要向腾讯云的 合作伙伴 采购安全芯片并集成至您的设备中。
  • 如果采用 TEE 或软加固方式,则通过本控制台即可完成自助服务。

SE 接入方式

本文档介绍设备端如何使用 SE 方式接入。

下载 SDK

下载地址:设备端 SDK

设备端 SDK 包括以下两部分:

  • SE 芯片 SDK:提供调用 SE 芯片安全能力的 API,不同厂家/型号的 SE 芯片具备不同的 SDK。
  • TID 安全协议:定制优化的轻量级 TLS 协议实现的 TID-TLS,基于 TID 实现了 TCP 链路层的安全。

版本说明

设备端 SDK 版本说明如下:

  • 版本:V1.0 版本。
  • 发布日期:2019/06/19。
  • 开发环境:Linux GNU、Keil、IAR。
  • 编程语言:C 语言。

主要接口

设备端使用 TID 过程中涉及到的主要函数接口说明如下:

TID 初始化

  • 函数:status_t tid_client_init()
  • 参数说明:无
  • 返回: 函数执行的状态,0为成功,其余请参考 错误状态码 说明。

获取设备认证码

  • 函数:status_t tid_client_get_authcode( uint8_t *authcode, size_t *buf_len)
  • 参数说明:
    • authcode:获取从设备端生成的 authcode 的 buffer。
    • buf_len:authcode buffer 的长度,同时用于返回实际生成的 authcode 的长度。
  • 返回:函数执行的状态,0为成功,其余请参考 错误状态码 说明。

认证设备状态码

  • 函数:status_t tid_client_validate_authcode( const uint8_t *authcode, size_t in_buf_len, uint8_t *token, size_t *token_len)
  • 参数说明:
    • authcode:输入的从 Server 端获取的待验证的 authcode。
    • in_buf_len:authcode 的长度。
    • token:用于输出认证成功之后产生的 token。
    • token_len:输出的 token 的长度。
  • 返回:函数执行的状态,0为成功,其余请参考 错误状态码 说明。

会话密钥导入

  • 函数:status_t tid_client_import_sesskey(uint8_t *sess_key, int key_len, int key_index)
  • 参数说明:
    • sess_key:会话密钥。
    • key_len:session_key 长度。
    • key_index:导入的 session index。
  • 返回:函数执行的状态,0为成功,其余请参考 错误状态码 说明。

会话数据加解密

  • 函数:status_t tid_client_sym_crypto(const uint8_t *in_buf, uint8_t *out_buf, int in_buf_len, int key_index, int is_enc)
  • 入参:
    • in_buf:输入数据。
    • out_buf:加解密后的结果。
    • in_buf_len:输入 buffer 的大小。
    • key_index:session 的 index。
    • is_enc:加密还是解密,1表示加密,0表示解密。
  • 返回:函数执行的状态,0为成功,其余请参考 错误状态码 说明。

集成 SDK

按照以下步骤进行设备端 SDK 的集成:

  • 将 SDK 集成到设备的开发环境中,支持常见的嵌入式开发环境:嵌入式 Linux、Keil、IAR 等。
  • 支持 cmake 的环境(例如:嵌入式 Linux)可以通过 cmake 来生成 Makefile 进行编译,使用 IDE(例如:Keil 和 IAR)可使用 IDE 通过修改工程文件即可完成集成。

配置 SDK

根据您的应用场景修改 tid_config.h 中对应的配置项,主要的配置项包括:

  • 是否开启 TID-TLS,TID-TLS 适用于支持通过 TCP/IP 接入网络的设备。
  • 是否要求支持国密,默认为不支持,如需支持,需进行配置。
  • 配置和安全芯片通信的接口,例如:I2C、SPI 等。

以下为配置使用 I2C 接口的复旦微安全芯片时,tid_config.h 的配置示例代码:

#define TID_SE_VENDOR   TID_SE_VENDOR_FM
#define TID_BUS_TYPE    TID_BUS_I2C

TID 双向校验

按照下列流程调用相关函数进行 TID 双向校验,函数的使用说明请参见本文 设备端主要接口

说明:

服务端可不返回 Token,此时 SE 安全芯片将维持上一个 Token 不变,后续所有业务数据的加解密操作均由 SE 安全芯片完成。详情请参见 设备端 SDK 相关代码

软加固接入方式

如果要使用软加固方式,需满足以下条件:

  • 确保设备端上的操作系统支持动态链接。
  • CPU 的芯片架构在控制台的主芯片架构列表中。

下载到软加固的动态链接文件(.so)后,放在 SDK 的 lib 目录下,在 tid_config.h 配置开启软加固的宏:

#define TID_SEC_TYPE     TID_SEC_SOFT

完成配置之后,SDK 的使用流程和基于 SE 安全芯片方式接入 TID 的情况一致。