Cipher的使用说明

1. 概述


cipher支持对称加密/解密(AES,DES,TDES)、非对称加密/解密(RSA)、哈希计算(SHA)和随机数生成器(RNG)等。

  1. AES(Advanced Encryption Standard):是一种区块加密标准,AES的区块长度固定为128位,密钥长度则可以是128,192或256位,分为AES128、AES192、AES256

  2. DES(Data Encryption Standard):也是一种使用密钥加密的块算法,DES的密钥长度是8个字节共64位,其中有8位是用来校验的,剩下56位用来参与加密

  3. AES和DES根据加密模式又分为ECB (Electronic Code Book电子密码本)、CBC (Cipher Block Chaining,加密块链)、CTR (Counter,计数)、ECB_CTS和CBC_CTS

  4. AES和DES加密算法的比较:

    相同点:

    (1)两个加密算法都是对数据进行分块加密

    (2)两个加密算法都需要去扩展密钥

    (3)都有自己对应的表对要加密的明文去做转换

    (4)都是用子密钥去对转换之后的明文做加密处理

    不同点:

    (1)DES:分组密码,Feist结构,明文密文64位,有效密钥56位。有弱密钥,有互补对称性。适合硬件实现,软件实现麻烦。安全。算法是对合的。运算速度较慢。安全性相对较低。

    (2)AES:分组密码,SP结构,明文密文128位,密钥长度可变≥128位。无弱密钥,无互补对称性。适合软件和硬件实现。安全。算法不是对合的。运算速度快。安全性相对较高。

  5. TDES(Triple DES):TDES/3DES是DES加密算法的一种模式,使用3条64位的密钥对数据进行三次加密,TDES是对DES的一种升级

  6. RSA:需先生成密钥对,即公钥和私钥,一个用于加密,一个用于解密,所以称为非对称性加解密

  7. SHA(Secure Hash Algorithm):本地引擎只支持SHA1和 SHA256

  8. 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)有两种方式:

  1. 使用linux标准接口,需要先insmod cryptodev.ko

  2. 使用MI CIPHER接口,需要先insmod mi_cipher.ko。

2.3. Kernel下cipher驱动接口

详细请参考MI_CIPHER

注意:

  1. SDK里默认没有带出MI_CIPHER.ko,需要联系FAE提供。

  2. MI接口只支持128bit length AES加密,如果需要192/256 bit,需要走linux标准接口。

  3. MI接口只支持SW key,不支持OTP key做加解密。

2.4. Linux提供的cipher标准接口

  1. 如何使用/ dev / crypto设备进行加密

    代码路径:drivers/sstar/crypto/cryptodev/examples/readme

  2. 关于Linux cryptodev 介绍请访问 http://cryptodev-linux.org/

  3. 关于Linux Kernel Crypto API 介绍请访问https://www.kernel.org/doc/html/v4.10/crypto/。请参考v4.10。