打印
[国产单片机]

闲聊一下,东软载波的ES32F065 的硬件加密

[复制链接]
1551|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
硬件加密模块主要用于由硬件对数据进行加密或解密操作,支持的标准有 AES。
AES(Advanced Encryption Standard)是最新的分组对称密码算法,兼容联邦信息处理标
准出版物(FIPS PUB 197, 2001 年 11 月 26 日)规定的高级加密标准(AES)。  

使用特权

评论回复

相关帖子

沙发
一路向北lm|  楼主 | 2020-2-21 19:15 | 只看该作者
AES-ECB模式加密
AES 是以 128bit 作为一个数据单元进行加密,下图介绍了 AES 电子密码本(AES-ECB)
模式加密。一个数据单元(128bit 明文 P)经过位/字节/半字交换后作为一个输入单元(I)。
输入单元通过 AES 算法(AEA) 在加密状态下使用 128 位密钥进行处理。 得到的处理结
果再执行位/字节/半字交换后,得到 128bit 输出密文单元(C)。

使用特权

评论回复
板凳
一路向北lm|  楼主 | 2020-2-21 19:16 | 只看该作者
AES-ECB 模式加密

注 1: K = 密钥; C = 密文; I = 输入块; O = 输出块; P = 明文。
注 2:如果密钥大小 = 128:密钥 = [K3 K2];

使用特权

评论回复
地板
一路向北lm|  楼主 | 2020-2-21 19:16 | 只看该作者
操作示例:
1. 设置 CRYPT_CON.CRYSEL = 0,选择算法类型为 AES
2. 设置 CRYPT_CON.ENCS = 1,选择加密
3. 设置 CRYPT_CON.AESKS = 0,选择密钥长度 128bit
4. 设置 CRYPT_CON.MODE = 0,选择 ECB 模式
5. 向 CRYPT_KEY0...CRYPT_KEY3 中填入 128bit 长度的密钥,填入 KEY3/2/1/0 位置
6. 向 CRYPT_DATA0/1/2/3 中写入需要加密的明文
7. 设置 CRYPT_CON.GO = 1,启动加密
8. 通过 CRYPT_IF.DONE 判断加密是否完成,如果 CRYPT_IF.DONE = 0,则加密完成
9. 从 CRYPT_DATA0/1/2/3 中读出已经加密的密文

使用特权

评论回复
5
一路向北lm|  楼主 | 2020-2-21 19:23 | 只看该作者
AES-ECB模式解密
AES 是以 128bit 作为一个数据单元进行解密,下图介绍了 AES 电子密码本(AES-ECB)
模式解密。一个数据单元(128bit 密文 C)经过位/字节/半字交换后作为一个输入单元(I)。
输入单元通过 AES 算法(AEA) 在解密状态下使用 128 位密钥进行处理。 得到的处理结
果再执行位/字节/半字交换后,得到 128bit 输出明文单元(P)。

使用特权

评论回复
6
一路向北lm|  楼主 | 2020-2-21 19:24 | 只看该作者
AES-ECB 模式解密

注 1: K = 密钥; C = 密文; I = 输入块; O = 输出块; P = 明文。
注 2:如果密钥大小 = 128:密钥 = [K3 K2];

使用特权

评论回复
7
一路向北lm|  楼主 | 2020-2-21 19:24 | 只看该作者
操作示例:
1. 设置 CRYPT_CON.CRYSEL = 0,选择算法类型为 AES
2. 设置 CRYPT_CON.ENCS = 0,选择解密
3. 设置 CRYPT_CON.AESKS = 0,选择密钥长度 128bit
4. 设置 CRYPT_CON.MODE = 0,选择 ECB 模式
5. 向 CRYPT_KEY0...CRYPT_KEY3 中填入 128bit 长度的密钥,填入 KEY3/2/1/0 位置
6. 向 CRYPT_DATA0/1/2/3 中写入需要解密的密文
7. 设置 CRYPT_CON.GO = 1,启动解密
8. 通过 CRYPT_IF.DONE 判断解密是否完成,如果 CRYPT_IF.DONE = 0,则解密完成
9. 从 CRYPT_DATA0/1/2/3 中读出已经解密的明文

使用特权

评论回复
8
一路向北lm|  楼主 | 2020-2-21 19:25 | 只看该作者
AES-CBC模式加密
AES是以 128位作为一个数据单元进行加密,下图介绍了 AES加密分组链接(AES-CBC)
模式加密。该模式首先将明文消息分成多个 128 位数据明文单元。在 CBC 加密过程中,
一个数据单元经过执行位/字节/半字交换后作为明文单元(P1),通过与一个 128 位初始
化向量(IV)进行异或运算(IV^P1),作为第一个输入单元(I1)。 该输入单元通过 AES
算法(AEA)在加密状态下使用 128 位密钥进行加密处理。生成的 128 位输出单元(O1)
将直接用作密文(C1),即 C1 = O1。然后,第一个密文单元与第二个明文数据单元进
行异或运算(C1^P2),从而生成第二个输入单元(I2)。第二个输入单元通过以上 AES 处
理而生成第二个密文单元。 加密处理会不断将后续密文单元和明文单元链接到一起,直到
消息中所有的明文单元都加密完成为止。 如果消息中最后的数据单元不是一个 128 位数据
单元,则由应用程序按照一定规则对不完整数据单元进行加密。

使用特权

评论回复
9
一路向北lm|  楼主 | 2020-2-21 19:26 | 只看该作者
AES-CBC 模式加密

注 1: K = 密钥; C = 密文; I = 输入块; Ps = 交换前(解码时)或 交换后(编码时)的明文; P = 明文; IV = 初
始化向量。
注 2: IVx = [IVxR IVxL], R = 右, L = 左。
注 3:如果密钥大小 = 128: 密钥 = [K3 K2];

使用特权

评论回复
10
一路向北lm|  楼主 | 2020-2-21 19:26 | 只看该作者
操作示例:
1. 设置 CRYPT_CON.CRYSEL = 0,选择算法类型为 AES
2. 设置 CRYPT_CON.ENCS = 1,选择加密
3. 设置 CRYPT_CON.AESKS = 0,选择密钥长度 128bit
4. 设置 CRYPT_CON.MODE = 1,选择 CBC 模式
5. 向 CRYPT_KEY0...CRYPT_KEY3 中填入 128bit 长度的密钥,填入 KEY3/2/1/0 位置
6. 向 CRYPT_IV0/1/2/3 填入初始向量
7. 向 CRYPT_DATA0/1/2/3 中写入需要加密的明文
8. 设置 CRYPT_CON.GO = 1,启动加密
9. 通过 CRYPT_IF.DONE 判断加密是否完成,如果 CRYPT_IF.DONE = 0,则加密完成
10. 从 CRYPT_DATA0/1/2/3 中读出已经加密的密文
11. 回到步骤 7 继续进行加密
12. 所有加密完成

使用特权

评论回复
11
一路向北lm|  楼主 | 2020-2-21 19:26 | 只看该作者
操作示例:
1. 设置 CRYPT_CON.CRYSEL = 0,选择算法类型为 AES
2. 设置 CRYPT_CON.ENCS = 1,选择加密
3. 设置 CRYPT_CON.AESKS = 0,选择密钥长度 128bit
4. 设置 CRYPT_CON.MODE = 1,选择 CBC 模式
5. 向 CRYPT_KEY0...CRYPT_KEY3 中填入 128bit 长度的密钥,填入 KEY3/2/1/0 位置
6. 向 CRYPT_IV0/1/2/3 填入初始向量
7. 向 CRYPT_DATA0/1/2/3 中写入需要加密的明文
8. 设置 CRYPT_CON.GO = 1,启动加密
9. 通过 CRYPT_IF.DONE 判断加密是否完成,如果 CRYPT_IF.DONE = 0,则加密完成
10. 从 CRYPT_DATA0/1/2/3 中读出已经加密的密文
11. 回到步骤 7 继续进行加密
12. 所有加密完成

使用特权

评论回复
12
一路向北lm|  楼主 | 2020-2-22 14:59 | 只看该作者
AES-CBC模式解密
AES是以 128位作为一个数据单元进行解密,下图介绍了 AES密码分组链接(AES-CBC)
模式解密。该模式首先将密文消息分成多个 128 位数据密文单元,第一个密文单元(C1)
经过位/字节/半字交换后作为一个输入单元(I1),该输入单元(I1)通过 AES 算法(AEA)
在解密状态下使用 128 位密钥进行解密处理, 生成的 128 位输出单元(O1),再与 IV 进
行异或运算(O1^IV),从而生成第一个明文单元。然后,第二个密文单元作为下一个输入
单元,经过以上 AES 解密处理,生成的输出单元再与第一个密文单元进行异或运算
(O2^C1),从而生成第二个明文数据单元(P2)。依次进行解密,直到消息中所有的密文
单元都解密完成为止。

使用特权

评论回复
13
一路向北lm|  楼主 | 2020-2-22 14:59 | 只看该作者
AES-CBC 模式解密

注 1: K = 密钥; C = 密文; I = 输入块; Ps = 交换前(解码时)或 交换后(编码时)的明文; P = 明文; IV = 初
始化向量。
注 2: IVx = [IVxR IVxL], R = 右, L = 左。
注 3: 如果密钥大小 = 128: 密钥 = [K3 K2];

使用特权

评论回复
14
一路向北lm|  楼主 | 2020-2-22 15:00 | 只看该作者
操作示例:
1. 设置 CRYPT_CON.CRYSEL = 0,选择算法类型为 AES
2. 设置 CRYPT_CON.ENCS = 0,选择解密
3. 设置 CRYPT_CON.AESKS = 0,选择密钥长度 128bit
4. 设置 CRYPTCON.MODE = 1,选择 CBC 模式
5. 向 CRYPT_KEY0...CRYPT_KEY3 中填入 128bit 长度的密钥,填入 KEY3/2/1/0 位置
6. 向 CRYPT_IV0/1/2/3 填入初始向量
7. 向 CRYPT_DATA0/1/2/3 中写入需要解密的密文
8. 设置 CRYPT_CON.GO = 1,启动解密
9. 通过 CRYPT_IF.DONE 判断解密是否完成,如果 CRYPT_IF.DONE = 0,则解密完成
10. 从 CRYPT_DATA0/1/2/3 中读出已经解密的明文
11. 回到步骤 7 继续进行解密
12. 所有解密完成

使用特权

评论回复
15
一路向北lm|  楼主 | 2020-2-22 15:00 | 只看该作者
AES-CTR模式加解密
AES 计数模式(AES-CTR)即把一个 32bit 的计数器和一个随机数作为 AES 加解密模块
的输入,输出的密文流作为密钥流,对明文或密文进行异或从而得到相应的密文或明文。
在此模式下,解密操作与加密操作的操作方式完全相同。图 17-5 和图 17-6 分别给出了加
密流程和解密流程。

使用特权

评论回复
16
一路向北lm|  楼主 | 2020-2-22 15:01 | 只看该作者
CTR 加密流程

使用特权

评论回复
17
一路向北lm|  楼主 | 2020-2-22 15:02 | 只看该作者
CTR 解密流程

使用特权

评论回复
18
一路向北lm|  楼主 | 2020-2-22 15:02 | 只看该作者
随机数(nonce)和 32 位计数器存储在 IV 寄存器中,如图

使用特权

评论回复
19
一路向北lm|  楼主 | 2020-2-22 15:04 | 只看该作者
随机数是一个 32 位的一次性值。每个不同的通信都应得到最新的随机值。
 初始化向量(IV)是一个 64 位的值,为确保一个给定值只用于一个给定的密钥,
必须选择 IV。
 32 位的计数器是一个大端模式的整数,随着块的加密次数增加而增加。计数器的初
始值应设置为“1”。
 为保持计数器块的最高有效 96 位不变,其使用最低有效 32 位进行增量的计数。

使用特权

评论回复
20
一路向北lm|  楼主 | 2020-2-22 15:05 | 只看该作者
操作示例:
1. 设置 CRYPT_CON.CRYSEL = 0,选择算法类型为 AES
2. 设置 CRYPT_CON.ENCS = 1/0,选择加密/解密
3. 设置 CRYPT_CON.AESKS = 0,选择密钥长度 128bit
4. 设置 CRYPT_CON.MODE = 2,选择 CTR 模式
5. 向 CRYPT_KEY0...CRYPT_KEY3 中填入 128bit 长度的密钥,填入 KEY3/2/1/0 位置
6. 向 CRYPT_IV0/1/2/3 填入初始向量为初始计数器块
7. 向 CRYPT_DATA0/1/2/3 中写入需要加密的明文/解密的密文
8. 设置 CRYPT_CON.GO = 1,启动加密/解密
9. 通过 CRYPT_IF.DONE 判断加密/解密是否完成,如果 CRYPT_IF.DONE = 0,则加
密/解密完成
10. 从 CRYPT_DATA0/1/2/3 中读出已经加密/的密文/解密的明文
11. 回到步骤 7 继续进行加密/解密
12. 所有加密/解密完成

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

277

主题

3805

帖子

76

粉丝