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

簡(jiǎn)介

本文說明 ADF7023 和 ADF7023-J 收發(fā)器可用的高級(jí)加密標(biāo)準(zhǔn) (AES) 固件模塊(在下文中,提到 ADF7023 的內(nèi)容也適用于 ADF7023-J)。 可下載的 AES 固件模塊支持密鑰大小為 128 位、192 位和 256 位的 128 位塊加密和解密。 它支持兩種模式:電碼本 (ECB) 模式和密碼塊鏈接 (CBC) 模式 1。

1.jpg

圖 1. ECB 模式

ECB 模式利用一個(gè)密鑰逐塊地加密和解密 128 位數(shù)據(jù),如圖 1 所示。 CBC 模式 1 則是先做一次加法運(yùn)算(通過模 2 算法,用戶提供的 128 位初始化向量)再加密, 所得的密文用作下一個(gè)塊的初始化向量,依此類推,如圖 2 所示。

解密過程正好相反。 固件利用片內(nèi)硬件加速模塊來增大吞吐量,并將 AES 處理的延遲時(shí)間降至最短。

該固件模塊名為 rom_ram_7023_2_2_RS_AES.dat,包含里德-所羅門 (RS) 前向糾錯(cuò)和AES加密,可從 www.analog.com/firmwaremodules-adf7023 下載。

2.jpg

圖 2. CBC 模式 1

命令和數(shù)據(jù)包隨機(jī)存取存儲(chǔ)器寄存器位置

表 1. 需在 AES 加密或解密之前進(jìn)行初始化的寄存器位置

3.jpg

1 這些寄存器定義針對(duì)該固件模塊,不適用于 ADF7023 的正常操作。

AES 配置變量、密鑰和數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)包隨機(jī)存取存儲(chǔ)器 (RAM) 中。

表 2 中列出了執(zhí)行 AES 加密、生成逆密鑰或執(zhí)行 AES 解密所需的命令。 有關(guān) AES 加密和解密步驟的更多信息,參見 “AES 步驟”部分。

由于使用指針、不同密鑰大小和兩種不同模式,ADF7023 上的 AES 實(shí)現(xiàn)是高度可配置的。 圖 3 顯示了一個(gè)配置示例。

表 2. AES 命令

4.jpg

5.jpg

圖 3. AES 操作的數(shù)據(jù)包 RAM 存儲(chǔ)器分配示例

AES 步驟

向 ADF7023 寫入 AES 固件模塊

使用 AES 固件模塊之前,用戶必須將其寫入 ADF7023 的程序 RAM 中。 下列步驟詳細(xì)解釋了如何向程序 RAM 寫入 AES 固件模塊:

1. 確保 ADF7023 處于 PHY_OFF 狀態(tài)。

2. 發(fā)出 CMD_RAM_LOAD_INIT 命令(地址 0xBF)。

3. 使用串行外設(shè)接口 (SPI) 存儲(chǔ)器塊寫入命令 (0x1E00 [固件模塊])向程序 RAM 寫入模塊;有關(guān)塊寫入的更多信息,請(qǐng)參見 ADF7023 數(shù)據(jù)手冊(cè)。

4. 發(fā)出 CMD_RAM_LOAD_DONE 命令(地址 0xC7)。

固件模塊現(xiàn)已存儲(chǔ)到程序 RAM 中。

AES 加密步驟

下列步驟詳細(xì)說明了如何執(zhí)行 AES 加密:

1. 將 AES 工作空間的起始地址寫入 VAR_W_PTR。

2. 寫入 VAR_KEYSIZE 以設(shè)置密鑰大小。

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 字節(jié)塊數(shù)寫入 VAR_NUM_BLOCKS。

8. 將要加密的數(shù)據(jù)地址寫入 VAR_C_PTR。

9. 將要加密的數(shù)據(jù)寫入 VAR_C_PTR 指定的位置。

10. 發(fā)出 CMD_AES_ENCRYPT (0xD0)。 用加密后的數(shù)據(jù)覆蓋要加密的數(shù)據(jù)。

11. 等待命令完成。

AES 加密示例

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

1. 寫入 0x18112A。 VAR_W_PTR 設(shè)置為 0x2A。 算法的 32 字節(jié)工作空間從地址 0x02A 開始。

2. 寫入 0x18140C。 通過 VAR_KEYSIZE 選擇 128 位的密鑰。

3. 寫入 0x181600。 通過 VAR_AES_MODE 選擇 ECB 模式。

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

5. 寫入 0x18136A。 VAR_WFOR_PTR 設(shè)置為 0x6A。 密鑰從地址 0x06A 開始。

6. 將密鑰寫入從地址 0x06A 開始的數(shù)據(jù)包 RAM。

7. 寫入 0x180101。 VAR_NUM_BLOCKS 設(shè)置為 0x01。 加密一個(gè) 16 字節(jié)塊。

8. 寫入 0x18108A。 VAR_C_PTR 設(shè)置為 0x8A。 要加密的數(shù)據(jù)從地址 0x08A 開始。

9. 將要加密的數(shù)據(jù)寫入從地址 0x08A 開始的數(shù)據(jù)包 RAM。

10. 寫入 0xD0。 發(fā)出 CMD_AES_ENCRYPT。

11. 等待命令完成。

AES 解密步驟

下列步驟詳細(xì)說明了如何執(zhí)行 AES 解密:

1. 將 AES 工作空間的起始地址寫入 VAR_W_PTR。

2. 寫入 VAR_KEYSIZE 以設(shè)置密鑰大小。

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. 將解密需要的保留存儲(chǔ)地址寫入 VAR_CIPHERBUF_PTR。

8. 發(fā)出 CMD_AES_DECRYPT_INIT (0xD1)。 此命令生成并保存逆密鑰。

9. 等待命令完成。

10. 將要解密的 16 字節(jié)塊數(shù)寫入 VAR_NUM_BLOCKS。

11. 將要解密的數(shù)據(jù)地址寫入 VAR_C_PTR。

12. 將要解密的數(shù)據(jù)寫入 VAR_C_PTR 指定的位置。

13. 發(fā)出 CMD_AES_DECRYPT (0xD2)。 用解密后的數(shù)據(jù)覆蓋要解密的數(shù)據(jù)。

14. 等待命令完成。

AES 解密示例

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

1. 寫入 0x18112A。 VAR_W_PTR 設(shè)置為 0x2A。 算法的 32 字節(jié)工作空間從地址 0x02A 開始。

2. 寫入 0x18140C。 通過 VAR_KEYSIZE 選擇 128 位的密鑰。

3. 寫入 0x181600。 通過 VAR_AES_MOD E選擇 ECB 模式。

4. 寫入 0x18136A。 VAR_WFOR_PTR 設(shè)置為 0x6A。 密鑰從地址 0x06A 開始。

5. 將密鑰寫入從地址 0x06A 開始的數(shù)據(jù)包 RAM。

6. 寫入 0x18124A。 VAR_WINV_PTR 設(shè)置為 0x4A。 逆密鑰從地址 0x04A 開始。

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

8. 寫入 0xD1。 發(fā)出 CMD_AES_DECRYPT_INIT。 此命令生成并保存逆密鑰,從地址 0x04A 開始。

9. 等待命令完成。

10. 寫入 0x180101。 VAR_NUM_BLOCKS 設(shè)置為 0x01。 解密一個(gè) 16 字節(jié)塊。

11. 寫入 0x18108A。 VAR_C_PTR 設(shè)置為 0x8A。 要解密的數(shù)據(jù)從地址 0x08A 開始。

12. 將要解密的數(shù)據(jù)寫入從地址 0x08A 開始的數(shù)據(jù)包 RAM。

13. 寫入 0xD2。 發(fā)出 CMD_AES_DECRYPT。

14. 等待命令完成。

確定 AES 命令完成的時(shí)間

使用 CMD_FINISHED 中斷來確定 CMD_AES_ENCRYPT、CMD_AES_DECRYPT_INIT 和 CMD_AES_DECRYPT 命令何時(shí)完成。 要使能該中斷,請(qǐng)置位 INTERRUPT_MASK_1 寄存器(地址 0x101) 的位 0 (CMD_FINISHED)。 置位該屏蔽位后,ADF7023 的中斷引腳 (IRQ_GP3) 將在完成任何命令后置位。 向 INTERRUPT_SOURCE_1 (地址 0x337) 的位 0 寫入邏輯 1 可清除中斷。 有關(guān)中斷產(chǎn)生的更多信息參見 ADF7023 數(shù)據(jù)手冊(cè)。

AES 加密和解密時(shí)間

典型 AES 執(zhí)行時(shí)間如表 3 所示。

表 3. AES 初始化、加密和解密時(shí)間

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 技術(shù)視頻more

LT3094: 在 1MHz 具 0.8μV<sub>RMS</sub> 噪聲的負(fù) LDO

LT3094: 在 1MHz 具 0.8μVRMS 噪聲的負(fù) LDO

LT3094 是一款高性能低壓差負(fù)線性穩(wěn)壓器,其具有 ADI 的超低噪聲和超高 PSRR 架構(gòu),適合為噪聲敏感型應(yīng)用供電。該器件可通過并聯(lián)以增加輸出電流和在 PCB 上散播熱量。

觀看此技術(shù)視頻
LTM8002:高效率、超低 EMI 降壓型電源 μModule

LTM8002:高效率、超低 EMI 降壓型電源 μModule

LTM8002 是一款 40VIN、2.5A 降壓型μModule® 穩(wěn)壓器。它內(nèi)置了開關(guān)控制器、電源開關(guān)、電感器和所有的支持性組件。該器件支持 3.4V 至 40V 的輸入電壓范圍,和 0.97V 至 18V 的輸出電壓。

觀看此技術(shù)視頻
具電源系統(tǒng)管理功能的超薄型 μModule 穩(wěn)壓器

具電源系統(tǒng)管理功能的超薄型 μModule 穩(wěn)壓器

LTM4686 是一款雙通道 10A 或單通道 20A 超薄型降壓 μModule 穩(wěn)壓器。該器件1.82mm 的高度使之可放置到非?拷(fù)載 (FPGA 或 ASIC) 的地方,從而共用一個(gè)散熱器。其 PMBus 接口使用戶能改變主要的電源參數(shù)。

觀看此技術(shù)視頻

電源管理雜志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 月刊) 英文版

關(guān)閉ADI官方微信二維碼