Cipher的使用说明
1. 概述¶
cipher支持对称加密/解密(AES,DES,TDES)、非对称加密/解密(RSA)、哈希计算(SHA)和随机数生成器(RNG)等。
-
AES(Advanced Encryption Standard):是一种区块加密标准,AES的区块长度固定为128位,密钥长度则可以是128,192或256位,分为AES128、AES192、AES256
-
DES(Data Encryption Standard):也是一种使用密钥加密的块算法,DES的密钥长度是8个字节共64位,其中有8位是用来校验的,剩下56位用来参与加密
-
AES和DES根据加密模式又分为ECB (Electronic Code Book电子密码本)、CBC (Cipher Block Chaining,加密块链)、CTR (Counter,计数)、ECB_CTS和CBC_CTS
-
AES和DES加密算法的比较:
相同点:
(1)两个加密算法都是对数据进行分块加密
(2)两个加密算法都需要去扩展密钥
(3)都有自己对应的表对要加密的明文去做转换
(4)都是用子密钥去对转换之后的明文做加密处理
不同点:
(1)DES:分组密码,Feist结构,明文密文64位,有效密钥56位。有弱密钥,有互补对称性。适合硬件实现,软件实现麻烦。安全。算法是对合的。运算速度较慢。安全性相对较低。
(2)AES:分组密码,SP结构,明文密文128位,密钥长度可变≥128位。无弱密钥,无互补对称性。适合软件和硬件实现。安全。算法不是对合的。运算速度快。安全性相对较高。
-
TDES(Triple DES):TDES/3DES是DES加密算法的一种模式,使用3条64位的密钥对数据进行三次加密,TDES是对DES的一种升级
-
RSA:需先生成密钥对,即公钥和私钥,一个用于加密,一个用于解密,所以称为非对称性加解密
-
SHA(Secure Hash Algorithm):本地引擎只支持SHA1和 SHA256
-
RNG(Random Numeral Generator):不依赖与寄存器控制,每1us生成一个16bit随机数
2. Cipher开发指导¶
2.1. Uboot下cipher驱动接口¶
打开CONFIG_CMD_VERIFYAESDMA,在console执行verifyaes。
如果需要sample code,请查看drivers/mstar/aesdma/cmd_verifyaes.c
签章参考代码位于drivers/mstar/aesdma/cmd_sigauth.c
的go_sig_auth函数
go_sig_auth()
->call runAuthenticate() ->call MDrv_RSA_Run() ->call MDrv_SHA_Run() ->call runDecrypt() ->call MDrv_AESDMA_Run()
2.2. 应用层使用cipher¶
应用层使用cipher(AES RSA SHA)有两种方式:
-
使用linux标准接口,需要先insmod cryptodev.ko
-
使用MI CIPHER接口,需要先insmod mi_cipher.ko。
2.3. Kernel下cipher驱动接口¶
详细请参考MI_CIPHER
注意:
-
SDK里默认没有带出MI_CIPHER.ko,需要联系FAE提供。
-
MI接口只支持128bit length AES加密,如果需要192/256 bit,需要走linux标准接口。
-
MI接口只支持SW key,不支持OTP key做加解密。
2.4. Linux提供的cipher标准接口¶
-
如何使用/ dev / crypto设备进行加密
代码路径:
drivers/sstar/crypto/cryptodev/examples/readme
-
关于Linux cryptodev 介绍请访问 http://cryptodev-linux.org/
-
关于Linux Kernel Crypto API 介绍请访问https://www.kernel.org/doc/html/v4.10/crypto/。请参考v4.10。