阶段四侧信道防护 — 功耗分析是最常见的侧信道攻击。本课从逻辑层到物理层,全面介绍功耗分析防护技术。
CMOS 电路的功耗与数据相关:
其中 α(翻转活动因子)与处理的数据直接相关。攻击者利用这种相关性提取密钥。
标准 CMOS:1→0 和 0→1 翻转的功耗不同。双轨逻辑让每次操作消耗相同功耗:
单轨信号:x ∈ {0, 1}(功耗与转换相关)
双轨信号:(x_t, x_f) ∈ {(1,0), (0,1), (0,0)},其中 (1,0)=逻辑1, (0,1)=逻辑0, (0,0)=预充电
每个时钟周期:预充电→求值,总是恰好一个信号翻转,功耗恒定!
// dual_rail_and.v - 双轨预充电 AND 门
module dual_rail_and (
input wire a_t, a_f, // 双轨输入 A
input wire b_t, b_f, // 双轨输入 B
input wire precharge, // 预充电信号
output reg z_t, z_f // 双轨输出 Z = A AND B
);
// 预充电阶段:输出置为 (0, 0)
// 求值阶段:计算 AND
always @(*) begin
if (precharge) begin
z_t = 1'b0;
z_f = 1'b0;
end else begin
// AND: z_t = a_t AND b_t, z_f = a_f OR b_f
z_t = a_t & b_t;
z_f = a_f | b_f;
end
end
endmodule
// dual_rail_xor.v - 双轨预充电 XOR 门
module dual_rail_xor (
input wire a_t, a_f,
input wire b_t, b_f,
input wire precharge,
output reg z_t, z_f
);
always @(*) begin
if (precharge) begin
z_t = 1'b0;
z_f = 1'b0;
end else begin
// XOR: z_t = (a_t AND b_f) OR (a_f AND b_t)
// z_f = (a_t AND b_t) OR (a_f AND b_f)
z_t = (a_t & b_f) | (a_f & b_t);
z_f = (a_t & b_t) | (a_f & b_f);
end
end
endmodule
// noise_generator.v - 功耗噪声注入器
module noise_generator #(
parameter WIDTH = 32
)(
input wire clk,
input wire rst_n,
input wire enable,
output wire [WIDTH-1:0] noise_out
);
// 多个 LFSR 并行,产生伪随机噪声
reg [7:0] lfsr0, lfsr1, lfsr2, lfsr3;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
lfsr0 <= 8'hA5; lfsr1 <= 8'h3C;
lfsr2 <= 8'hF0; lfsr3 <= 8'h69;
end else if (enable) begin
// 8位 LFSR 反馈
lfsr0 <= {lfsr0[6:0], lfsr0[7] ^ lfsr0[5] ^ lfsr0[4] ^ lfsr0[3]};
lfsr1 <= {lfsr1[6:0], lfsr1[7] ^ lfsr1[6] ^ lfsr1[5]};
lfsr2 <= {lfsr2[6:0], lfsr2[7] ^ lfsr2[6] ^ lfsr2[4]};
lfsr3 <= {lfsr3[6:0], lfsr3[7] ^ lfsr3[5] ^ lfsr3[3]};
end
end
assign noise_out = {lfsr0, lfsr1, lfsr2, lfsr3};
endmodule
1. 用双轨逻辑实现完整的 AES S-Box,与标准实现比较面积和延迟。
2. 模拟功耗噪声注入的效果:添加噪声后,DPA 攻击需要多少额外的轨迹?
3. 设计一个时钟抖动模块:随机化时钟周期 ±10%。
4. 分析:双轨预充电逻辑在 FPGA 上实现的特殊挑战(查找表结构 vs. 标准单元)。
你已掌握从逻辑层到物理层的功耗分析防护技术:双轨预充电、噪声注入、去耦和屏蔽。多层防护是抵抗 DPA 的关键!
获得徽章:🛡️ POWER_SHIELD
推荐使用以下工具链进行课程实践:
# 安装 Verilator
sudo apt install verilator
# 安装 Icarus Verilog(可选)
sudo apt install iverilog
# 安装 GTKWave(波形查看器)
sudo apt install gtkwave
# 验证安装
verilator --lint-only --version
iverilog -V
密码学硬件实现的关键性能指标:
这些指标之间通常存在 trade-off,设计时需根据应用场景权衡。
本课涉及的核心概念和技术关系:
Verilog 仿真调试的常用方法:
// 调试示例
initial begin
$dumpfile("sim.vcd");
$dumpvars(0, uut);
end
// 断言验证
assert property (@(posedge clk) valid |-> data !== 'x)
else $error("Invalid data when valid!");
# 1. 语法检查
verilator --lint-only module.v
# 2. 创建 C++ 测试主函数
cat > sim_main.cpp << 'EOF'
#include "Vmodule.h"
#include "verilated.h"
int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv);
Vmodule* top = new Vmodule;
top->clk = 0; top->rst_n = 0;
top->eval();
top->rst_n = 1;
for (int i = 0; i < 100; i++) {
top->clk = !top->clk;
top->eval();
}
delete top;
return 0;
}
EOF
# 3. 编译
verilator -cc module.v --exe sim_main.cpp
make -C obj_dir -f Vmodule.mk
# 4. 运行
./obj_dir/Vmodule
密码硬件的性能评估维度:
| 指标 | 单位 | 说明 |
|---|---|---|
| 面积 | GE / LUT | 等效门数或查找表数量 |
| 频率 | MHz | 最大时钟频率 |
| 吞吐量 | Gbps | 每秒处理的数据量 |
| 延迟 | 周期数 | 从输入到输出的周期 |
| 能效 | pJ/bit | 每比特能耗 |
| 面积效率 | Gbps/GE | 单位面积吞吐量 |
不同应用场景对指标优先级不同:IoT 偏重面积和能效,服务器偏重吞吐量。
本课涉及的核心概念和技术关系:
Verilog 仿真调试的常用方法:
// 调试示例
initial begin
$dumpfile("sim.vcd");
$dumpvars(0, uut);
end
// 断言验证
assert property (@(posedge clk) valid |-> data !== 'x)
else $error("Invalid data when valid!");
# 1. 语法检查
verilator --lint-only module.v
# 2. 创建 C++ 测试主函数
cat > sim_main.cpp << 'EOF'
#include "Vmodule.h"
#include "verilated.h"
int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv);
Vmodule* top = new Vmodule;
top->clk = 0; top->rst_n = 0;
top->eval();
top->rst_n = 1;
for (int i = 0; i < 100; i++) {
top->clk = !top->clk;
top->eval();
}
delete top;
return 0;
}
EOF
# 3. 编译
verilator -cc module.v --exe sim_main.cpp
make -C obj_dir -f Vmodule.mk
# 4. 运行
./obj_dir/Vmodule
密码硬件的性能评估维度:
| 指标 | 单位 | 说明 |
|---|---|---|
| 面积 | GE / LUT | 等效门数或查找表数量 |
| 频率 | MHz | 最大时钟频率 |
| 吞吐量 | Gbps | 每秒处理的数据量 |
| 延迟 | 周期数 | 从输入到输出的周期 |
| 能效 | pJ/bit | 每比特能耗 |
| 面积效率 | Gbps/GE | 单位面积吞吐量 |
不同应用场景对指标优先级不同:IoT 偏重面积和能效,服务器偏重吞吐量。