跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
CAI算法

AES-CCM 的 FPGA/Verilog 设计笔记

这份实现围绕 AES-CCM 的 FPGA/Verilog 设计展开,包含 AES 加解密与密钥扩展、CCM 认证模块、嵌入式 C 参考代码、NIST 测试向量和基于 Modelsim 的自动化仿真环境。整体思路是先把算法路径跑通,再用测试向量逐项核对结果,重点在于密钥扩展、轮变换和认证标签的正确性。

Kubernet发布于 2026/6/300 浏览
AES-CCM 的 FPGA/Verilog 设计笔记

AES-CCM 的 FPGA/Verilog 设计笔记

这份实现把 AES、CCM 认证、测试向量和仿真环境放在一套目录里,目标很明确:能跑、能测、能对结果。硬件部分以 Verilog 为主,软件侧补了嵌入式 C 参考代码,方便先把算法跑通,再去看硬件映射是否合理。

主要内容

  • AES 加密、解密、密钥扩展的 Verilog 实现
  • AES-CCM 128 位算法的 Verilog 实现
  • AES-CCM 的嵌入式 C 语言参考代码
  • AES-CCM 算法测试向量
  • AES-CCM 算法自动化仿真环境(Modelsim 和 Makefile)

核心模块

1. AES 加密、解密与密钥扩展

AES 的难点不在单次轮变换本身,而在于轮密钥怎么稳定地产生出来。这里给出的密钥扩展示例是一个典型的 Verilog 写法:

module key_expansion ( input wire [127:0] key, output reg [127:0] w[0:10] );
  always @(*) begin
    w[0] = key;
    for (int i = 1; i < 11; i = i + 1) begin
      if (i % 4 == 0) begin
        // 轮常量异或等操作
        w[i] = w[i - 1] ^ {w[i - 4][111:0], w[i - 4][127:112]} ^ {8'h01 << (i / 4 - 1), 56'h0};
      end else begin
        w[i] = w[i - 1] ^ w[i - 4];
      end
    end
  end
endmodule

这段逻辑的重点是把输入密钥拆成每轮要用的子密钥。实现上看起来不复杂,但一旦轮常量、移位和索引有偏差,后面加密结果就会整片跑偏,所以这部分通常是最先拿测试向量去对的。

2. AES-CCM 128 位算法

CCM 模式是在 AES 之上再加一层认证。加密能不能出密文是一回事,认证标签对不对又是另一回事,实际排错时往往后者更花时间。下面的示例展示了认证码计算的结构:

module ccm_auth ( input wire [127:0] block, input wire [127:0] key, output reg [127:0] auth_tag );
  reg [127:0] state;
  // 初始化状态
  always @(*) begin
    state = block;
    for (int i = 0; i < 10; i = i + 1) begin
      // 与子密钥异或
      state = state ^ key;
      // 执行 AES 轮变换操作(类似加密轮操作)
      // 这里省略具体轮变换代码实现
    end
    auth_tag = state;
  end
endmodule

这里的实现方式比较直白:先初始化状态,再按轮次与密钥混合并做轮变换。它适合先把数据通路搭起来,后续如果要做面积或时序优化,再考虑把组合逻辑拆开。

3. 嵌入式 C 语言参考代码

硬件实现之外,配一份 C 代码很有用。它不一定是最终产品代码,但对理解参数组织、调用顺序和 CCM 的附加处理很直接:

void aes_ccm_encrypt(unsigned char *plaintext, unsigned char *key, unsigned char *iv, unsigned char *ciphertext) {
  // 初始化相关参数
  // 调用 AES 加密函数对明文进行加密
  aes_encrypt(plaintext, key, ciphertext);
  // 进行 CCM 模式相关的额外操作,如计算认证码等
  // 这里省略具体代码
}

这类参考实现的价值不在'完整',而在于它能帮你确认接口顺序和数据流。很多 FPGA 设计最后不是卡在密码学本身,而是卡在输入输出约定没统一。

4. 测试向量

测试向量是这类工程里最省事、也最不能省的部分。NIST 的已知输入输出能快速告诉你实现是不是已经偏了。文件格式示例如下:

text
plaintext: 00112233445566778899aabbccddeeff
key: 000102030405060708090a0b0c0d0e0f
ciphertext: 69c4e0d86a7b0430d8cdb78070b4c55a

只要把实现结果和这些样本逐项比对,就能把大多数轮函数错误、字节序问题和密钥扩展问题揪出来。对 AES 这种算法来说,越早比对越省时间。

5. 自动化仿真环境

仿真环境放在 sim 目录下,核心是 Modelsim 和 Makefile 的配合:

SIMULATION := modelsim -c -do "run -all; quit"
all: $(SIMULATION)
clean: rm -rf transcript vsim.wlf *.log

这种写法不花哨,但够用。make 直接拉起仿真,make clean 清掉中间文件,适合在调试阶段反复跑向量。对硬件工程来说,自动化仿真比手工点界面靠谱得多。

目录结构

  • src:设计文件和测试激励(*.v, *.sv)
  • doc:设计相关文档
  • sim:Modelsim 仿真环境
  • software:嵌入式软件 C 代码
  • testvector:NIST 提供的测试向量

小结

这套实现的思路比较务实:先把 AES-CCM 的关键路径拆出来,Verilog、C 代码和测试向量一起配齐,再用自动化仿真去收口。它不追求把每个模块写得最漂亮,但对验证算法、定位错误、后续继续做 FPGA 化调整都够用了。

目录

  1. AES-CCM 的 FPGA/Verilog 设计笔记
  2. 主要内容
  3. 核心模块
  4. 1. AES 加密、解密与密钥扩展
  5. 2. AES-CCM 128 位算法
  6. 3. 嵌入式 C 语言参考代码
  7. 4. 测试向量
  8. 5. 自动化仿真环境
  9. 目录结构
  10. 小结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 让 AI 文案更像人写的 15 条提示词
  • 在 Qt Creator 里启用 GitHub Copilot
  • 2025 年 AI IDE 怎么选:Trae、Copilot、Windsurf、Cursor 实测对比
  • GLPI 安装与基础配置笔记
  • Vivado AXI4-Stream Data FIFO 配置与仿真记录
  • Web 开发里的 5 种加密算法:原理与代码
  • Spring 国际化原理与实战:MessageSource、LocaleResolver、LocaleContextHolder、MessageFormat
  • C++ list 容器的用法与简化实现
  • OpenClaw 飞书机器人部署记录
  • StyleSelectorXL:在 SDXL 里管理 77 种绘画风格
  • libpqxx 安装与配置实战
  • JavaScript 浮点数精度丢失与金额分摊解决方案
  • Oh My Open Code:把单模型 IDE 变成多模型协作系统
  • TapNow 影视级 AI 视频平台实测:更可控的镜头和更稳的一致性
  • OpenClaw 飞书机器人部署笔记
  • 链表三题:环检测、数组交集与随机链表复制
  • Typora 的安装与基础设置
  • Linux 下用 gdb 和 cgdb 调试 C/C++
  • 基于 FPGA 的 8B10B 编码驱动实现与逻辑解析
  • C++ 虚函数、多态与对象内存布局

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online