HWSec-CSIC/Efficient_Masked_Keccak_2ndOrder_TIDOM

GitHub: HWSec-CSIC/Efficient_Masked_Keccak_2ndOrder_TIDOM

提供Keccak算法的无掩码及一二阶阈值实现掩码版本,集成ChipWhisperer平台的侧信道TVLA分析完整工具链。

Stars: 0 | Forks: 0

# KECCAK_ASM ## 文件 - **firmware/mcu**:包含所有与 STM32 目标执行相关的文件。 - **/hal**:固件正常运行所需的库和驱动程序。此文件夹在 ChipWhisperer 提供的版本基础上进行了修改,以启用中断、定时器和其他功能。 - **/keccak_unmasked_Opt_ASSEMBLY**:无掩码的 Keccak 源代码。 - **Keccak1600NoOpt.s**:无掩码 Keccak 置换的 ASM 实现(ARM Cortex-M3)。 - **KeccakFW.c**:高级框架。 - **/keccak_masked_TI3shares_1stOrder_Opt_ASSEMBLY/no-remasking**:有掩码的 Keccak 源代码(一阶三份额 Threshold Implementation)。 - **Keccak1600NoOpt.s**:有掩码 Keccak 置换的 ASM 实现(ARM Cortex-M3)。 - **KeccakFW.c**:高级框架。 - **/keccak_masked_TI3shares_2ndOrder_Opt_ASSEMBLY/no-remasking**:有掩码的 Keccak 源代码(一阶+二阶三份额 Threshold Implementation)。 - **Keccak1600NoOpt.s**:有掩码 Keccak 置换的 ASM 实现(ARM Cortex-M3)。 - **KeccakFW.c**:高级框架。 - **jupyter/KECCAK_Notebooks**:包含使用 ChipWhisperer、采集 trace 以及执行 TVLA 的 notebook。 - **CW_Capture.ipynb**:用于采集和存储 trace 的 ChipWhisperer 客户端。 - **TVLA.ipynb**:处理由 `CW_Capture.ipynb` 采集的 trace 以进行 TVLA 分析。 ## 安装 1. 按照 [https://chipwhisperer.readthedocs.io/en/latest/installation.html](https://chipwhisperer.readthedocs.io/en/latest/installation.html) 上的说明安装 **ChipWhisperer 6.0.0**。 2. 将 **firmware/mcu/** 和 **jupyter/KECCAK_Notebooks/** 文件夹复制到 **chipwhisperer/** 目录中,替换所有现有文件。 ## 使用方法 ### 采集 Trace 1. 打开 notebook **jupyter/KECCAK_Notebooks/CW_Capture.ipynb**。 2. 在第一个单元格中定义你的参数: - **base_dir_traces**:用于存储所有 trace 的实验子文件夹的创建路径。 - **experiment_name**:在 _base_dir_traces_ 中创建的子文件夹名称,本次实验的所有 trace 将存储于此。 - **masking_list**:如果要运行多个实现,这是需按顺序执行的实现列表。 - **remasking_list**:与 _lista_remasking_ 关联的标签列表,指示在对应的每个实现中是否应用掩码刷新。 - **iteration_start**:第一组 5000 条 trace 的 ID(用于 trace 组织管理)。 - **iteration_end**:最后一组 5000 条 trace 的 ID(用于 trace 组织管理)。它与 _iteration_start_ 共同定义了要采集的 trace 总数。 - **iterations_per_full_trace**:在同一条 trace 中包含 24000 个样本的采集次数(需设置适当的偏移量,以便下一次采集紧接着上一次开始)。对于无掩码实现设置为 3,对于有掩码实现设置为 11。 3. 执行第一个代码单元格以应用这些参数。 4. 执行第二个代码单元格以初始化 ChipWhisperer 平台。 5. 执行第三个代码单元格以编译所有源代码。这将生成用于烧录微控制器的 `.hex` 文件。如果 `.hex` 文件已包含正确的编译结果,则可跳过此步骤。 6. 执行第四个代码单元格以定义采集 `.h5` 格式 trace 的函数。每个生成的文件包含 5000 条 trace:2500 条使用固定明文,2500 条使用随机明文,两者交替排列。每个文件的 trace 数量可以通过 _TRACES_PER_FILE_ 参数修改。 7. 最后,执行第五个代码单元格以启动 trace 采集。 ### 执行 TVLA 1. 打开 notebook **jupyter/KECCAK_Notebooks/TVLA.ipynb**。 2. 在第一个单元格中定义你的参数: - **base_path**:包含所有 trace 的实验子文件夹路径(必须是 _base_dir_traces_ + _experiment_name_,与 `CW_Capture.ipynb` 中定义的路径一致)。 - **num_iterations**:每条 trace 中包含 24000 个样本的采集次数(必须与 `CW_Capture.ipynb` 中定义的 _iterations_per_full_trace_ 相匹配)。 3. 执行第一个代码单元格以应用这些参数。 4. 执行第二个代码单元格以开始 TVLA 计算。 5. 执行第三、第四和第五个代码单元格以可视化 TVLA 结果。
标签:ARM Cortex-M3, ChipWhisperer, CPA, DPA, FIPS 202, Keccak, NoSQL, SHA-3, STM32, TVLA, 一阶掩码, 三阶掩码, 二阶掩码, 侧信道分析, 侧信道攻击, 功耗分析, 加密算法实现, 反取证, 固件, 安全测试, 安全评估, 客户端加密, 密码学, 密码工程, 嵌入式安全, 嵌入式系统, 差分功耗分析, 微控制器, 手动系统调用, 抗侧信道攻击, 掩码方案, 攻击性安全, 散列函数, 汇编优化, 泄漏检测, 硬件安全, 私有化部署, 能量分析, 逆向工具, 门限实现, 防御规避