2. 概述

2.1. 概述

CIPHER 是晶视智能数字媒体处理平台提供的安全算法模块,提供对称式加解密算法包括 AES/DES/SM4, 不对称加解密算法 RSA(Note SW), 随机数生成, 以及摘要算法包插HASH, HMAC, 主要用于对音视频码流进行加解密保护, 认证用户合法性等场景, 各功能划分如下:

对称加密算法

  • AES:支持 ECB/CBC/CTR/ CCM/GCM (Note SW)等工作模式,其中 CCM/GCM 模式下, 加解密结束后需获取一次 TAG 值。

  • DES:支持 ECB/CBC/CTR/ CFB/OFB (Note SW)等工作模式,其中 CFB 和 OFB 模式支持的位宽可为1/8/64

  • SM4: 支持 ECB/CBC/CTR等工作模式

以上算法除了 CTR/ CCM/GCM, 其它算法、模式的数据长度必须按块大小对齐;CCM/GCM 的 N、A 需要靠软件按标准把各个字段封装成块大小对齐的数据块;

不对称加解密算法

  • RSA (Note SW):支持密钥位宽 1024/2048/3072/4096

RSA 密钥位宽 1024 及以下算法为业界已知不安全算法,应禁止使用。

随机数生成

  • RNG:高速率获取随机数

摘要算法

  • HASH:支持 SHA1/SHA2/ SHA512/SM3 (Note SW);

  • HMAC : 支HMAC1/HMAC224/HMAC256/HMAC384/HMAC512 (Note SW);

SHA1 算法安全性较低,不能应用在参与生成“数字签名”的场景,推荐使用 SHA2(256 位及以上)算法。

2.2. 使用流程

2.2.1. 单包数据加解密

场景说明

当物理内存中有一段码流数据需要进行加/解密时,获取其物理地址后, 在用户层调用 CIPHER 模块实现单包数据加/解密。

工作流程

对数据进行对称的 AES/DES/SM4 加解密的过程如下:

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 获取 CIPHER 句柄。调用接口 CVI_UNF_CIPHER_CreateHandle 完成。

步骤 3 : 配置 CIPHER 控制信息,包含密钥、初始向量、加密算法、工作模式等信息。调用接口CVI_UNF_CIPHER_ConfigHandle 或CVI_UNF_CIPHER_ConfigHandleEx 完成。

步骤 4 : 对数据进行加/解密。调用以下任一接口进行加解密。

  • 单包加密, CVI_UNF_CIPHER_Encrypt

  • 单包解密, CVI_UNF_CIPHER_Decrypt

步骤 5 : 若使用 CCM、GCM (Note SW)模式,调用接口CVI_UNF_CIPHER_GetTag获取 TAG 值。

步骤 6 : 销毁 CIPHER 句柄。调用接口 CVI_UNF_CIPHER_DestroyHandle 完成。

步骤 7 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项

2.2.2. 多包数据加解密

场景说明

当物理内存中有多段码流数据需要进行加/解密时,获取其物理地址后, 在用户层调用 CIPHER 模块实现多包数据加/解密。

工作流程

对数据进行对称的 AES/DES/SM4 加解密的过程如下:

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 获取 CIPHER 句柄。调用接口 CVI_UNF_CIPHER_CreateHandle 完成。

步骤 3 : 配置 CIPHER 控制信息,包含密钥、初始向量、加密算法、工作模式等信息。调用接口 CVI_UNF_CIPHER_ConfigHandle 或 CVI_UNF_CIPHER_ConfigHandleEx 完成。

步骤 4 : 对数据进行加/解密。调用以下任一接口进行加解密。

  • 多包加密, CVI_UNF_CIPHER_EncryptMulti

  • 多包解密, CVI_UNF_CIPHER_DecryptMulti

步骤 5 : 销毁 CIPHER 句柄。调用接口 CVI_UNF_CIPHER_DestroyHandle 完成。

步骤 6 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项

2.2.3. HASH计算

场景说明

计算数据的HASH值, 可选择SHA1/SHA2/ SHA512/SM3 (Note SW)

工作流程

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 获取 HASH句柄, 选择HASH算法。调用接口 CVI_UNF_CIPHER_HashInit 完成。

步骤 3 : 输入数据,逐个数据块依次计算 HASH 值。调用接口 CVI_UNF_CIPHER_HashUpdate 完成。

步骤 4 : 如果摘要未计算完成,再次执行步骤 3。

步骤 5 : 完成摘要计算,结束输入,获取计算结果。调用接口 CVI_UNF_CIPHER_HashFinal 完成。

步骤 6 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项

2.2.4. HMAC计算 (NOTE SW)

场景说明

基于HASH算法, 计算数据的HMAC值。

工作流程

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 获取 HASH句柄, 选择HASH算法并配置HMAC计算的密钥,调用接口 CVI_UNF_CIPHER_HashInit完成。

步骤 3 : 输入数据,逐个数据块依次计算 HMAC 值。调用接口 CVI_UNF_CIPHER_HashUpdate 完成。

步骤 4 : 如果摘要未计算完成,再次执行步骤 3。

步骤 5 : 完成摘要计算,结束输入,获取HMAC计算结果。调用接口 CVI_UNF_CIPHER_HashFinal 完成。

步骤 6 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项

2.2.5. 产生随机数

场景说明

获取硬件产生的真随机数

工作流程

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 获取 256bits随机数, 调用接口 CVI_UNF_CIPHER_GetRandomNumber完成。

步骤 3 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项

2.2.6. RSA加解密操作步骤 (NOTE SW)

场景说明

对数据进行 RSA 不对称算法加解密。使用公钥加密的数据,必须使用私钥进行解密。反之,使用私钥加密的数据,必须使用公钥解密。

工作流程

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 对数据进行加解密或签名验证。根据使用的密钥不同,调用以下任一接口进行加解密、签名验证、生成密钥对等。

  • 公钥加密 : CVI_UNF_CIPHER_RsaPublicEncrypt

  • 私钥解密 : CVI_UNF_CIPHER_RsaPrivateDec

  • 私钥加密 : CVI_UNF_CIPHER_RsaPrivateEnc

  • 公钥解密 : CVI_UNF_CIPHER_RsaPublicDec

  • 私钥签名 : CVI_UNF_CIPHER_RsaSign

  • 公钥验证 : CVI_UNF_CIPHER_RsaVerify

步骤 3 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项

2.2.7. RSA签名及验签操作步骤

场景说明

对数据进行 RSA 签名及验签时,使用私钥进行数据签名,使用进行数据验签。

工作流程

步骤 1 : CIPHER设备初始化。调用接口 CVI_UNF_CIPHER_Init 完成。

步骤 2 : 对数据进行签名验证。

  • 私钥签名 : CVI_UNF_CIPHER_RsaSign

  • 公钥验证 : CVI_UNF_CIPHER_RsaVerify

步骤 3 : 关闭 CIPHER 设备。调用接口 CVI_UNF_CIPHER_Deinit 完成。

注意事项