本程序能够针对不同版本Speck算法,在给定差分路径的条件下,求取输入各比特集合是(广义)中性比特(Neutral Bits)的概率,(广义)中性比特类型包括
- 单中性比特
- 同步中性比特
- 条件中性比特
此外,程序还支持对不同Speck算法版本,
- 给定一个差分路径,生成(每轮差分值)经旋转移位之后的差分路径,
- 分析其是否合法,计算其概率,并
- 搜索其各种广义中性比特
程序采用Python语言,以脚本的形式呈现,方便后续功能添加与修改。结果以以下两种方式呈现:
- 输出到txt文件,有具体的中性比特集合,以及其概率的文件,
- 输出到csv(excel可读)文件,统计将一个trail_base 旋转移位不同位数之后不同路径的差分概率、概率超过给定阈值的中性比特个数、条件中性比特个数。
- 通过柱状图展示考虑了1、2、3个同步中性比特时,(5类可明确表示关系的)比特集合(横坐标)是广义中性比特的概率(纵坐标),背景为差分路径上比特的活跃性(每轮模加的输入输出处的差分)。
程序对不同Speck算法版本、不同差分路径、考虑候选同步中性比特中包含的最多比特个数进行了适配,只需修改相关变量即可,使用说明详见4。
个人电脑或服务器,程序支持多线程,可利用多核处理器加快计算速度。搜索Speck64、Speck96、Speck128等大版本时,若使用32个线程,服务器的内存需求大概 32 ~ 128 GB,可根据服务器的内存大小调整使用的线程数。
需要安装Python >= 3.10.12环境,依赖库如下
matplotlib == 3.5.1
numpy == 1.21.5
pandas == 2.1.2
PyPDF2 == 3.0.1
scipy == 1.8.0
seaborn == 0.13.0
需要安装 sage
- 存放结果的目录命名规则:
.\分组长度\路径名称_TrailRol移位数_分组长度_轮数_哪几轮_同步中性比特中同时翻转比特的个数: 如:.\32\32_8020_4101_TrailRol00_32_3r_[3_0]_1-3xors\表示:- 版本为Speck32 的路径的结果都放在文件夹
.\32\中, - 子目录
32_8020_4101_TrailRol00_32_3r_[3_0]_1-3xors中存放的结果对应于以下设置的结果:- 差分路径名为
32_8020_4101、 - 在旋转移位(TrailRol)为0、
- 3轮路径、
- 从第3轮到第0轮、
- 考虑1~3个同步中性比特集合
- 差分路径名为
- 子目录
.\32\中包含32_8020_4101_TrailRol_32_3r_[3_0]_1-3xors_tredFq_0.7.csv: 是对所有给定的循环移位TrailRol后的统计结果。- 第一列为循环移位数
- 第二列为差分路径的weight(-log2(Pr))
- 第三列为中性概率超过给定阈值独立中性比特集合的个数
- 第四列为包括条件中性比特集合在内的中性概率超过给定阈值独立中性比特集合的个数
TrailRol_32_3r_[3_0]_1-3xors_tredFq_0.7_rank.csv: 如果一次搜索了好多不同名字的差分路径,它们各自的32_8020_4101_TrailRol_32_3r_[3_0]_1-3xors_tredFq_0.7.csv将会总和在这个文件中。32_8020_4101_TrailRol00_32_3r_[3_0]_1-3xors_test1024_tredFq_0.7.pdf: 是对不同路径、旋转移位不同位置之后,中性比特集合和它们的中性概率的柱状图。
- 子目录
32_8020_4101_TrailRol00_32_3r_[3_0]_1-3xors中包含summary_3r_8020_4101_0040_0000_test1024_tredFq_0.7.txt(此为主要输出文件):- 中性概率超过阈值的无条件中性比特,及其概率
- 中性概率超过阈值的线性独立的无条件中性比特
- 中性概率超过阈值的条件中性比特,及其概率
- 中性概率超过阈值的线性独立的无条件+条件中性比特
- 以下为更为细节的结果输出和保存
print_trails.txt: 打印的差分路径几各轮概率3r_8020_4101_0040_0000_analysis.txt: 差分路径正确对需要满足的条件的分析3r_8020_4101_0040_0000_alls_test1024_tredFq_0.7_proc.txt: 中性概率超过阈值的无条件中性比特,及其概率,以及各种关心的事件发生的概率3r_8020_4101_0040_0000_cnds_test1024_tredFq_0.7_proc.txt: 中性概率超过阈值的条件中性比特,它们的条件中性概率、无条件中性概率,以及可能依赖的条件发生的概率3r_8020_4101_0040_0000_allc_test1024_tredFq_0.7_proc.txt: 为搜索条件而计算的各概率3r_8020_4101_0040_0000_1xor_test1024_tredFq_0.7_proc.txt/_freq.npy/_nbs.npy: 同步中性比特集合有且只有1个比特,中性概率超过阈值的无条件中性比特3r_8020_4101_0040_0000_2xor_test1024_tredFq_0.7_proc.txt/_freq.npy/_nbs.npy: 同步中性比特集合有且只有2个比特,中性概率超过阈值的无条件中性比特3r_8020_4101_0040_0000_3xor_test1024_tredFq_0.7_proc.txt/_freq.npy/_nbs.npy: 同步中性比特集合有且只有3个比特,中性概率超过阈值的无条件中性比特3r_8020_4101_0040_0000_proc_CorPl.npy: 保存的 1024 个正确对的明文的左分支3r_8020_4101_0040_0000_proc_CorPr.npy: 保存的 1024 个正确对的明文的右分支3r_8020_4101_0040_0000_proc_CorK.npy: 保存的 1024 个正确对对应的主密钥
- 版本为Speck32 的路径的结果都放在文件夹
spcek.py:实现Speck各版本算法search_neutral_bits.py:搜索中性比特
请根据需求,修改 config.py 文件中相关参数,再运行脚本。
-
指定Speck版本:修改
config.py文件中VER参数,如VER = 0则指定为Speck32/64。 -
指定差分路径:查看
DIFFs列表与get_trails函数中是否包括要使用的差分路径,可以对其中的差分路径进行修改或增删。get_trails函数根据DIFFs列表中给出的差分路径名称设置差分路径,差分路径的表示是从下到上的传播顺序。- 程序支持搜索多个差分路径的中性比特, 通过修改以下参数进行选择:
START_DIFF_idx,END_DIFF_idx, 见注释 - 程序支持搜索每个差分路径中间若干轮路径的中性比特, 通过修改以下参数进行选择:
START_NRound,END_NRound,START_FirstRoundIdx,END_FirstRoundIdx, 见注释 - 程序支持搜索将
trail_base的每轮差分都旋转移位之后得到的新的路径的中性比特, 通过修改以下参数进行选择:ROT_LIST, 见注释
- 程序支持搜索多个差分路径的中性比特, 通过修改以下参数进行选择:
-
指定检测同步中性比特集合中同时修改的最大比特个数, 通过修改以下参数进行选择:
XORN, 如XORN = 3表示同步中性比特集合中同时修改最多3个比特。 -
指定搜索的中性比特的概率阈值, 通过修改以下参数进行选择:
threshold_freq -
指定搜索条件中性比特时,所考虑的比特条件对条件中性比特的中性度影响阈值, 通过修改以下参数进行选择:
GPT, 如GPT = 0.2表示条件中性度与无条件中性度的差别大于0.2时,认为该比特导致候选比特集为条件中性比特集。 -
运行脚本,会在
.\BLOCK_SIZE\文件夹下生成结果文件。
具体实例请参见 config.py 的 Set Test Cases部分。
- 输入:
idx—— 线程号 - 功能:搜索中性比特的概率以及在各类约束条件成立时是中性比特的概率,结果会存储在以分组长度、差分路径的名字
DIFF等为名称的目录中.txt和.csv文件中,在主进程中会根据本函数的运行结果进行绘图,写入.pdf(见3 文件结构)。
- 输入:
summaryfile: 将测试结果写入的文件neutral_bits: 所有搜索到的同步中性比特集合
- 功能:对所得到的每个广义中性比特使用1024个新的正确对进行中性度验证、测试中性比特集合的整体中性概率,将正确的对使用所有独立的中性比特进行扩展形成明文structure,测试structure中所有对都正确对的概率
- 输入:
idx—— 线程号 - 功能:生成符合差分路径的明文对以及对应的主密钥,将结果存储在
.npy文件中。
- 输入:
pt0—— 明文xpt1—— 明文ydiff—— 输入差分neutral_bits—— 候选中性比特索引 - 输出:
p0—— 明文x和翻转比特后的x的列表p1—— 明文y和翻转比特后的y的列表p0b——p0经过差分后的列表p1b——p1经过差分后的列表 - 功能:根据给定的输入差分和候选中性比特,将输入的明文扩展成相应的明文结构,明文结构为n行m列的列表,第0列为原始明文,其它列为使用中性比特翻转比特后的明文。
[BGLMT22] Zhenzhen Bao, Jian Guo, Meicheng Liu, Li Ma, Yi Tu: Enhancing Differential-Neural Cryptanalysis. ASIACRYPT (1) 2022: 318-347
[CBSY22] Yi Chen, Zhenzhen Bao, Yantian Shen, Hongbo Yu: A Deep Learning aided Key Recovery Framework for Large-State Block Ciphers. IACR Cryptol. ePrint Arch. 2022: 1659 (2022)