用于 ADF7023 和 ADF7023-J 的 AES 加密与解密

简介

本文说明 ADF7023 和 ADF7023-J 收发器可用的高级加密标准 (AES) 固件模块(在下文中,提到 ADF7023 的内容也适用于 ADF7023-J)。 可下载的 AES 固件模块支持密钥大小为 128 位、192 位和 256 位的 128 位块加密和解密。 它支持两种模式:电码本 (ECB) 模式和密码块链接 (CBC) 模式 1。

1.jpg

图 1. ECB 模式

ECB 模式利用一个密钥逐块地加密和解密 128 位数据,如图 1 所示。 CBC 模式 1 则是先做一次加法运算(通过模 2 算法,用户提供的 128 位初始化向量)再加密, 所得的密文用作下一个块的初始化向量,依此类推,如图 2 所示。

解密过程正好相反。 固件利用片内硬件加速模块来增大吞吐量,并将 AES 处理的延迟时间降至最短。

该固件模块名为 rom_ram_7023_2_2_RS_AES.dat,包含里德-所罗门 (RS) 前向纠错和AES加密,可从 www.analog.com/firmwaremodules-adf7023 下载。

2.jpg

图 2. CBC 模式 1

命令和数据包随机存取存储器寄存器位置

表 1. 需在 AES 加密或解密之前进行初始化的寄存器位置

3.jpg

1 这些寄存器定义针对该固件模块,不适用于 ADF7023 的正常操作

AES 配置变量、密钥和数据存储在数据包随机存取存储器 (RAM) 中。

表 2 中列出了执行 AES 加密、生成逆密钥或执行 AES 解密所需的命令。 有关 AES 加密和解密步骤的更多信息,参见 “AES 步骤”部分。

由于使用指针、不同密钥大小和两种不同模式,ADF7023 上的 AES 实现是高度可配置的。 图 3 显示了一个配置示例。

表 2. AES 命令

4.jpg

5.jpg

图 3. AES 操作的数据包 RAM 存储器分配示例

AES 步骤

向 ADF7023 写入 AES 固件模块

使用 AES 固件模块之前,用户必须将其写入 ADF7023 的程序 RAM 中。 下列步骤详细解释了如何向程序 RAM 写入 AES 固件模块:

1. 确保 ADF7023 处于 PHY_OFF 状态。

2. 发出 CMD_RAM_LOAD_INIT 命令(地址 0xBF)。

3. 使用串行外设接口 (SPI) 存储器块写入命令 (0x1E00 [固件模块])向程序 RAM 写入模块;有关块写入的更多信息,请参见 ADF7023 数据手册。

4. 发出 CMD_RAM_LOAD_DONE 命令(地址 0xC7)。

固件模块现已存储到程序 RAM 中。

AES 加密步骤

下列步骤详细说明了如何执行 AES 加密:

1. 将 AES 工作空间的起始地址写入 VAR_W_PTR。

2. 写入 VAR_KEYSIZE 以设置密钥大小。

3. 写入 VAR_AES_MODE 以选择 ECB 模式或 CBC 模式 1。

4. 若使用 CBC 模式 1 (若使用 ECB 模式则跳过此步),

a. 将加密初始化向量的起始地址写入 VAR_ECV_PTR。

b. 将初始化向量写入 VAR_ECV_PTR 指定的位置。

5. 将密钥的地址写入 VAR_WFOR_PTR。

6. 将密钥写入 VAR_WFOR_PTR 指定的位置。

7. 将要加密的 16 字节块数写入 VAR_NUM_BLOCKS。

8. 将要加密的数据地址写入 VAR_C_PTR。

9. 将要加密的数据写入 VAR_C_PTR 指定的位置。

10. 发出 CMD_AES_ENCRYPT (0xD0)。 用加密后的数据覆盖要加密的数据。

11. 等待命令完成。

AES 加密示例

在下面的 AES 加密示例中,将 SPI 命令写入 ADF7023:

1. 写入 0x18112A。 VAR_W_PTR 设置为 0x2A。 算法的 32 字节工作空间从地址 0x02A 开始。

2. 写入 0x18140C。 通过 VAR_KEYSIZE 选择 128 位的密钥。

3. 写入 0x181600。 通过 VAR_AES_MODE 选择 ECB 模式。

4. 不使用 CBC 模式 1,因此跳过第 4 步。

5. 写入 0x18136A。 VAR_WFOR_PTR 设置为 0x6A。 密钥从地址 0x06A 开始。

6. 将密钥写入从地址 0x06A 开始的数据包 RAM。

7. 写入 0x180101。 VAR_NUM_BLOCKS 设置为 0x01。 加密一个 16 字节块。

8. 写入 0x18108A。 VAR_C_PTR 设置为 0x8A。 要加密的数据从地址 0x08A 开始。

9. 将要加密的数据写入从地址 0x08A 开始的数据包 RAM。

10. 写入 0xD0。 发出 CMD_AES_ENCRYPT。

11. 等待命令完成。

AES 解密步骤

下列步骤详细说明了如何执行 AES 解密:

1. 将 AES 工作空间的起始地址写入 VAR_W_PTR。

2. 写入 VAR_KEYSIZE 以设置密钥大小。

3. 写入 VAR_AES_MODE 以选择 ECB 模式或 CBC 模式 1。

4. 将密钥的地址写入 VAR_WFOR_PTR。

5. 将密钥写入 VAR_WFOR_PTR 指定的位置。

6. 将逆密钥的地址写入 VAR_WINV_PTR。

7. 若使用 CBC 模式 1 (若使用 ECB 模式则跳过此步),

a. 将解密初始化向量的地址写入 VAR_DCV_PTR。

b. 将初始化向量写入 VAR_DCV_PTR 指定的位置。

c. 将解密需要的保留存储地址写入 VAR_CIPHERBUF_PTR。

8. 发出 CMD_AES_DECRYPT_INIT (0xD1)。 此命令生成并保存逆密钥。

9. 等待命令完成。

10. 将要解密的 16 字节块数写入 VAR_NUM_BLOCKS。

11. 将要解密的数据地址写入 VAR_C_PTR。

12. 将要解密的数据写入 VAR_C_PTR 指定的位置。

13. 发出 CMD_AES_DECRYPT (0xD2)。 用解密后的数据覆盖要解密的数据。

14. 等待命令完成。

AES 解密示例

在下面的 AES 解密示例中,将 SPI 命令写入 ADF7023:

1. 写入 0x18112A。 VAR_W_PTR 设置为 0x2A。 算法的 32 字节工作空间从地址 0x02A 开始。

2. 写入 0x18140C。 通过 VAR_KEYSIZE 选择 128 位的密钥。

3. 写入 0x181600。 通过 VAR_AES_MOD E选择 ECB 模式。

4. 写入 0x18136A。 VAR_WFOR_PTR 设置为 0x6A。 密钥从地址 0x06A 开始。

5. 将密钥写入从地址 0x06A 开始的数据包 RAM。

6. 写入 0x18124A。 VAR_WINV_PTR 设置为 0x4A。 逆密钥从地址 0x04A 开始。

7. 不使用 CBC 模式 1,因此跳过第 7 步。

8. 写入 0xD1。 发出 CMD_AES_DECRYPT_INIT。 此命令生成并保存逆密钥,从地址 0x04A 开始。

9. 等待命令完成。

10. 写入 0x180101。 VAR_NUM_BLOCKS 设置为 0x01。 解密一个 16 字节块。

11. 写入 0x18108A。 VAR_C_PTR 设置为 0x8A。 要解密的数据从地址 0x08A 开始。

12. 将要解密的数据写入从地址 0x08A 开始的数据包 RAM。

13. 写入 0xD2。 发出 CMD_AES_DECRYPT。

14. 等待命令完成。

确定 AES 命令完成的时间

使用 CMD_FINISHED 中断来确定 CMD_AES_ENCRYPT、CMD_AES_DECRYPT_INIT 和 CMD_AES_DECRYPT 命令何时完成。 要使能该中断,请置位 INTERRUPT_MASK_1 寄存器(地址 0x101) 的位 0 (CMD_FINISHED)。 置位该屏蔽位后,ADF7023 的中断引脚 (IRQ_GP3) 将在完成任何命令后置位。 向 INTERRUPT_SOURCE_1 (地址 0x337) 的位 0 写入逻辑 1 可清除中断。 有关中断产生的更多信息参见 ADF7023 数据手册。

AES 加密和解密时间

典型 AES 执行时间如表 3 所示。

表 3. AES 初始化、加密和解密时间

6.jpg

©2016 Analog Devices, Inc. All rights reserved. Trademarks and registered trademarks are the property of their respective owners.

AN14152-0-2/16(0)

ADI 技术视频more

LT3094: 在 1MHz 具 0.8μV<sub>RMS</sub> 噪声的负 LDO

LT3094: 在 1MHz 具 0.8μVRMS 噪声的负 LDO

LT3094 是一款高性能低压差负线性稳压器,其具有 ADI 的超低噪声和超高 PSRR 架构,适合为噪声敏感型应用供电。该器件可通过并联以增加输出电流和在 PCB 上散播热量。

观看此技术视频
LTM8002:高效率、超低 EMI 降压型电源 μModule

LTM8002:高效率、超低 EMI 降压型电源 μModule

LTM8002 是一款 40VIN、2.5A 降压型μModule® 稳压器。它内置了开关控制器、电源开关、电感器和所有的支持性组件。该器件支持 3.4V 至 40V 的输入电压范围,和 0.97V 至 18V 的输出电压。

观看此技术视频
具电源系统管理功能的超薄型 μModule 稳压器

具电源系统管理功能的超薄型 μModule 稳压器

LTM4686 是一款双通道 10A 或单通道 20A 超薄型降压 μModule 稳压器。该器件1.82mm 的高度使之可放置到非常靠近负载 (FPGA 或 ASIC) 的地方,从而共用一个散热器。其 PMBus 接口使用户能改变主要的电源参数。

观看此技术视频

电源管理杂志more

Journal of Power Management (2018 年 8 月刊) 英文版

Journal of Power Management (2018 年 8 月刊) 英文版

Journal of Power Management (2018 年 4 月刊) 英文版

Journal of Power Management (2018 年 4 月刊) 英文版

Journal of Power Management (2018 年 1 月刊) 英文版

Journal of Power Management (2018 年 1 月刊) 英文版

关闭ADI官方微信二维码