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 完成。
注意事项