本文介绍了设备如何通过更安全的身份认证方式(ID²)连接到阿里云物联网平台,并建立安全传输通道。适用于集成了ID²安全芯片的设备。
1. 术语
Soft-KM(Key Management)密钥管理,由阿里提供的软件安全沙箱,基于软件加固和虚拟化技术提供对密钥(IoT ID²)的安全保护。
OSA(Operation System Abstractor Layer)操作系统抽象层,定义内存申请和释放、日志打印、系统时间、网络通信等接口,非遵循POSIX标准的OS,需重新适配这些接口。
HAL(Hardware Abstractor Layer)硬件抽象层,根据设备硬件特性,完成对加解密算法、设备唯一ID、密钥管理和数据安全存储的接口适配。
TLS(Transport Layer Security)安全传输层协议, 用于两个通信实体之间,保护通信数据的私密性和完整性。
IoT(Internet of things)物联网,基于互联网实现万物互联。
LP(Link Platform)阿里云物联网平台,提供物联网的设备管理。
SE(Secure Element)安全元件,也称安全芯片,单独的防篡改硬件,专门用于存储和数据加密。
AT指令,终端设备和外设模块之间的连接和通信的指令。
ID²安全芯片,或ID²-SE芯片,在安全芯片生产时烧录ID²密钥,基于安全芯片的物理防护特性保护ID²密钥的存储和运行安全,通过SE AT指令提供ID²密钥的基础运算。
2. 产品架构
ID²控制中心:
ID²的Web控制台,提供对ID²产线灌装、ID²产品和配额申请、以及ID²使用统计的管理。
ID²服务中心:
ID²在云端的应用,提供ID²的各种安全能力,包括ID²密钥安全分发、设备认证、基于ID²的安全连接协议等;同时,提供各种能力的云端接口,支持业务平台的二次开发,支持不同的安全业务需求和场景。
ID² Client SDK:
ID²在设备端的功能组件和软件开发框架,可支持不同操作系统和不同硬件,为IoT设备提供基于ID²的端到端的设备认证、数据加解密等各种安全能力。
3. ID²接入流程
3.1 概述:
阿里云物联网平台接入的方式,ID²已默认同物联网平台打通,因此不需要进行服务端对接。
设备建连的过程,IoT设备通过物联网设备端Linkkit SDK调用ID²-iTLS,进行设备认证和会话密钥协商,最后建立数据安全传输通道。
设备建连成功后,IoT设备和物联网平台,通过安全通道进行应用数据的安全传输。
ID²对接步骤如下:
3.2 购买ID²:
购买ID²安全元器件:
点击购买链接 - ID²安全元器件。
选择硬件类型、型号和数量:
3.3 创建产品:
登录产品控制台,在左侧导航栏,选择常规>集成与部署 > IoT设备身份认证,单击组合使用(与阿里云物联网平台)卡片的开始接入按钮。
2. 在配置产品页面创建新产品&分配ID²授权,然后单击下一步按钮。
请选择新增产品,并输入产品名称。
ID²有效期:请选择1年、3年、或5年。
分配ID²授权数量:填写实际的设备数量,不超过账号下可分配ID²的数量。
3.4 选择设备认证算法:
IoT设备身份认证支持国际算法(AES-128、AES-192、AES-256)和国密算法(SM1-128、SM2-256、SM4-128),能满足企业不同安全等级的需求。
说明
国密算法SM1需要配合ID²安全芯片使用,SM2用于业务数据完整性校验和加密。
创建的ID²产品默认选择的设备认证算法是AES-128;如需选择其他设备认证算法,请按如下步骤操作:
在产品控制台,选择常规>集成与部署 > IoT设备身份认证,单击独立使用(三方物联网平台)卡片的开始接入按钮。
在配置产品页面获取配置信息,然后单击下一步按钮。
选择产品:请选择现有产品,在下拉框中勾选产品名称。
在获取配置信息页面,单击设备认证算法后的更换按钮,查看支持的密钥类型(如SM4-128),并确认。
在产品详情页面,记录下实例ID、ProductKey、ProductSecret。
实例ID:阿里云物联网平台的实例标识。企业实例ID是字符串,公共实例ID是符号“-”。
ProductKey:设备所属产品的ProductKey。
ProductSecret:由IoT设备身份认证颁发的产品密钥,与 ProductKey 成对出现。
3.5 设备端对接:
3.5.1 ID²设备端SDK框架:
IoT Application:
设备端的应用程序,负责业务数据处理,包括设备认证、设备建连和数据收发等。
2. IoT Linkkit:
阿里云物联网平台的接入SDK,提供IoT设备安全连接到阿里云IoT平台,提供数据连云的安全通道,以及业务数据的管理。
3. ID² Client SDK:
iTLS:轻量的安全连接协议TLS,基于ID²完成TLS的握手认证和密钥协议,提供应用数据的收发。
ID²:IoT设备认证的对外接口,上层应用/协议基于此接口进行开发。
KM:密钥管理模块,支持不同形式的载体:
Soft-KM:软件沙箱,基于软件加固和虚拟化技术提供对ID²密钥的安全保护。
SE:安全芯片,基于物理防护机制,提供对ID²密钥的安全保护,通过AT指令对设备提供ID²的运算。
Crypto:提供统一的加解密算法接口。
OSA:操作系统适配接口,厂商需根据使用的OS,重新进行接口适配。
HAL:硬件适配接口,提供算法库和Soft-KM的适配接口,厂商需根据选择的硬件平台,重新进行接口适配。
3.5.2 下载设备端SDK:
ID² SDK下载:
ID² Release Package目录:
目录/文件 | 说明 |
modules | 核心模块代码 |
include | 头文件 |
app | 测试代码,可用于集成调试 |
sample | ID²的示例代码 |
doc | 文档 |
make.settings | ID² SDK统一配置文件:
|
make.rules | 编译系统配置文件,可配置编译工具链和编译参数 |
makefile | 编译脚本 |
3.5.3 集成设备端SDK:
设备硬件及系统层集成, 详情请参考ID²安全Agent适配接口:
OSA接口适配:实现src/osa/ls_osa.c中的接口。
IROT HAL接口适配:
进入modules/irot/se目录。
在chipset目录, 创建新增安全芯片的目录(如fm1280),复制template中全部文件到新增的目录,并修改makefile指定到新建的目录。
打开chipset/fm1280/se_driver/se_driver.c, 适配SE芯片驱动接口:
se_open_session - SE初始化
se_transmit - 发送APDU指令,并获取response。
se_close_session - SE关闭。
设备端SDK的编译:
在ID² SDK的根目录,执行命令vi ./make.settings打开文件:
修改CONFIG_LS_ID2_ROT_TYPE的值为SE
修改CONFIG_LS_ID2_KEY_TYPE的值,同ID²产品选择的认证算法保持相同
执行命令“make clean & make plat=xxx”进行编译
Linux x86_64默认使用系统中的GCC作为编译工具,且默认指定“plat=x86_64”参数
如要编译其他架构,如armhf,在make.rules中配置编译工具,运行编译命令“make clean & make plat=armhf”
设备连接通道层集成:
第一步:下载Linkkit代码:
登录物联网平台控制台。
进入SDK定制页面 - 获取C Link SDK。
在SDK定制页面,根据需求配置相关参数,设备认证方案需要选择ID²:
第二步:在Linkkit根目录,新建libs目录,并将已适配好的ID²静态库拷贝到libs目录:
第三步:修改Linkkit 配置:
在Link_SDK目录内, 打开./core/sysdep/core_adapter.c, 关闭宏CORE_ADAPTER_MBEDTLS_ENABLED。
第四步:修改Linkkit Makefile,链接ID²静态库:
第五步:修改示例代码中的产品信息和实例ID:
demos/mqtt_id2_demo.c:
在使用LP企业版实例时,需在mqttclient中增加实例ID:
重新配置extend_clientid字段(demos/mqtt_id2_demo.c),其中instanceId填入实例页面中的ID:
第六步:固件编译:
根目录重新执行编译,正确编译,可生成output/mqtt-id2-demo可执行文件。
3.6 安全接入:
在完成设备端集成的基础上,运行设备应用, 或者演示示例接入阿里云物联网平台
使用演示示例接入阿里云物联网平台:
运行固件mqtt_id2_demo,查看设备端打印的日志
在日志中,可以看到此设备上的ID² ID(“ 000FF...”)
基于ID²进行设备和LP平台之间的双向认证(“Verify iTLS Server AuthCode OK”),并建立设备和LP平台的TLS安全传输通道(ID²-iTLS)
查看设备状态:
登录产品控制台,在左侧导航栏,选择资产>设备,查看设备状态为正常,安全状态为安全。