44、阿斯康密码分析:零和区分器、立方攻击与差分线性分析

阿斯康密码分析:零和区分器、立方攻击与差分线性分析

在密码学领域,对加密算法的安全性进行深入分析至关重要。阿斯康(Ascon)作为一种新兴的加密算法,其安全性备受关注。本文将围绕阿斯康的密码分析展开,介绍零和区分器、立方攻击以及差分和线性密码分析等方法,探讨这些方法在阿斯康算法中的应用及效果。

1. 阿斯康算法基础结构

阿斯康算法的核心由替换层和线性层构成。
- 替换层 :采用5位S盒,该S盒与Keccak的χ映射仿射等价,在状态上并行应用64次。5个64位字(x0, …, x4)的每一位为64个S盒各贡献一位,其中x0始终作为最高有效位。S盒的代数标准型(ANF)如下:

y0 = x4x1 + x3 + x2x1 + x2 + x1x0 + x1 + x0
y1 = x4 + x3x2 + x3x1 + x3 + x2x1 + x2 + x1 + x0
y2 = x4x3 + x4 + x2 + x1 + 1
y3 = x4x0 + x4 + x3x0 + x3 + x2 + x1 + x0
y4 = x4x1 + x4 + x3 + x1x0 + x1
  • 线性层 :源自SHA - 2的Σ函数,对5个状态字分别应用Σ函数,每个字使用不同的旋转值:
Σ0(x0) = x0 ⊕(x0 ≫19) ⊕(x0 ≫28)
Σ1(x1) = x1 ⊕(x1 ≫61) ⊕(x1 ≫39)
Σ2(x2) = x2 ⊕(x2 ≫1) ⊕(x2 ≫6)
Σ3(x3) = x3 ⊕(x3 ≫10) ⊕(x3 ≫17)
Σ4(x4) = x4 ⊕(x4 ≫7) ⊕(x4 ≫41)
2. 零和区分器

零和区分器用于展示阿斯康置换的非理想特性。
- 代数模型 :寻找n位置换的一组输入和对应输出,使其在F₂ⁿ上的和为零。从置换中间开始计算,固定320 - d位,改变d位的所有可能赋值,得到2ᵈ个中间状态。若确定输出位的函数度数小于d,输出在F₂ⁿ上的和为零;若逆函数度数小于d,输入在F₂ⁿ上的和也为零,从而得到零和区分器。
- 度数分析
- 单个阿斯康S盒的代数度数为2,一轮阿斯康置换的整体度数为2,r轮的度数至多为2r。
- 逆阿斯康S盒的ANF代数度数为3,r轮逆阿斯康置换的度数至多为3r。
- 12轮基本区分器 :针对12轮阿斯康置换,选择第5轮后的中间状态,攻击5轮逆向和7轮正向。7轮置换度数上限为2⁷ = 128,5轮逆置换度数上限为3⁵ = 243。选择d = 244,固定320 - 244 = 76位中间状态,改变其余244位,计算得到的输入和输出在F₂ⁿ上的和为零。类似攻击也适用于11轮(d = 129)和13轮(d = 257)。
- 沃尔什谱分析改进 :通过分析置换的沃尔什谱,可进一步改进12轮区分器的复杂度。阿斯康S盒的沃尔什谱与Keccak S盒相同,为2³ - 可整除。非线性层并行应用64次S盒,其沃尔什谱可被2³·64 = 2¹⁹²整除。由此得到5轮逆置换度数的更精确界限,d = 210即可满足12轮攻击。
- 中间添加免费轮 :可在攻击中几乎免费添加一轮。设置d为5位S盒大小的倍数,选择d个可变位包含完整S盒。中间步骤后,非线性层输出与输入模式相同,可将原中间步骤作为逆向轮起点,非线性层输出作为正向轮起点,扩展攻击轮数。可得到12、13和14轮的零和区分器,d分别为130、210和260。
- 更多轮数 :可区分多达20轮的阿斯康置换,d = 319。不过,阿斯康置换的非理想特性似乎不影响其安全性,复杂度2¹³⁰高于密码声称的安全级别。

以下是零和区分器攻击流程的mermaid流程图:

graph LR
    A[开始] --> B[固定320 - d位,改变d位得到2ᵈ中间状态]
    B --> C[计算2ᵈ中间状态的输出]
    C --> D{输出函数度数 < d?}
    D -- 是 --> E[输出和为零]
    D -- 否 --> F[重新选择参数]
    E --> G[计算输入值]
    G --> H{逆函数度数 < d?}
    H -- 是 --> I[输入和为零,得到零和区分器]
    H -- 否 --> F
    I --> J[结束]
    F --> B
3. 立方攻击

立方攻击是一种代数攻击方法,可用于阿斯康算法。
- 立方攻击简介 :大多数密码的输出位可表示为Fn₂上的多项式(ANF)。精心选择一组明文位并改变其所有可能值,其他位保持不变,输出的某一位的和(立方和)可能是仅由密钥位组成的线性多项式(超多项式)。通过收集多个这样的线性多项式可找到密钥。攻击分为离线预处理阶段和在线阶段:
- 离线预处理阶段 :随机选择立方变量,检查得到的超多项式是否为线性且包含密钥。
- 在线阶段 :利用离线阶段的知识恢复目标的密钥。
- 阿斯康的立方攻击 :在阿斯康的不同阶段中,只有初始化阶段非重复使用随机数(nonce)的对手能轻松保持置换的某些输入不变并确定性地影响其他输入。5轮初始化的度数至多为32,搜索31个变量的立方,得到的超多项式肯定是线性或常数。随着轮数增加,所需立方变量数上限也增加,6轮初始化时需寻找至多63个变量的立方,7轮时为至多127个变量。
- 立方测试器区分器 :存在一个针对6轮阿斯康置换的立方测试器,生成的输出位在F₂上的和为零,实际复杂度仅为2³³。由于阿斯康置换从替换层开始,5位S盒并行应用64次,若所有立方变量位于同一状态字中,应用S盒层后它们不会出现在同一项中。选择同一状态字的33个变量的立方,可得到空的超多项式,2³³个生成输出的和为零。该区分器可用于区分Ascon - 128在随机数滥用场景下生成的密钥流,但设计者严格禁止随机数重用。
- 类似立方攻击恢复密钥 :可对轮数减少的阿斯康版本(初始化减少到5或6轮)进行密钥恢复攻击。以5轮Ascon - 128为例,攻击分为两个步骤,每个步骤有离线和在线阶段,基于以下两个观察:
- 观察1 :若所有立方变量位于同一状态字中,应用替换层后它们不会出现在输出多项式的同一项中。
- 观察2 :通过S盒的ANF和初始值位置,可构建边界立方。例如,选择N2[0..15]作为立方变量,其余随机数保持不变。第一轮后,立方变量仅与K1[0..15]出现在同一项中,4轮后也不会与其余密钥位一起出现。
- 步骤1 :以16位块为单位恢复密钥字K1。选择4个不同的边界立方,每个立方包含N2中的16个变量,向在线预言机查询。离线阶段,固定其余密钥位,计算每个可能的16位密钥部分的立方和,与在线阶段得到的立方和匹配,得到密钥候选。平均每个16位块只有一个密钥候选,K1平均只有一个密钥候选。
- 步骤2 :以16位块为单位恢复K2。使用N1[i]创建边界立方,由于输出依赖于K1的位,需为上一步得到的每个K1猜测重复离线阶段。其余过程与恢复K1相同,平均每个K2也只有一个密钥猜测。5轮攻击的时间复杂度约为8·2³²,6轮攻击在乐观假设下时间复杂度为4·2⁶⁴。

以下是立方攻击流程的表格总结:
| 攻击步骤 | 阶段 | 操作 |
| ---- | ---- | ---- |
| 离线预处理阶段 | 选择立方变量 | 随机选择立方变量,检查超多项式是否线性且含密钥 |
| 在线阶段 | 恢复密钥 | 利用离线知识,根据需求选择明文获取密文输出,恢复密钥 |
| 密钥恢复攻击步骤1 | 在线阶段 | 选择4个含N2中16个变量的边界立方,查询在线预言机 |
| 密钥恢复攻击步骤1 | 离线阶段 | 固定其余密钥位,计算每个可能16位密钥部分的立方和,匹配得到密钥候选 |
| 密钥恢复攻击步骤2 | 在线阶段 | 使用N1[i]创建边界立方 |
| 密钥恢复攻击步骤2 | 离线阶段 | 为每个K1猜测重复离线阶段,恢复K2 |

阿斯康密码分析:零和区分器、立方攻击与差分线性分析

4. 差分和线性密码分析

差分和线性密码分析是密码分析的两种标准工具,下面将展示对阿斯康现有差分特征的改进,给出阿斯康的首个线性特征,并利用差分和线性特征组合对轮数减少的阿斯康版本进行实际的密钥恢复攻击。

4.1 线性和差分界限

除了使用启发式搜索技术寻找阿斯康的实际特征外,还使用了完全搜索工具(MILP和SAT)来证明最佳可能的线性和差分特征的界限。

  • 线性规划 :将减少轮数的阿斯康置换差分特征中活动S盒数量最小化的问题建模为混合整数线性规划(MILP)。模型使用以下变量:
    • (x_{r,w,b} \in {0, 1}):指定第r轮S盒输入的第w个64位字的第b位在两个消息之间是否不同((b = 0, \ldots, 63),(w = 0, \ldots, 4))。
    • (y_{r,w,b} \in {0, 1}):指定第r轮S盒输出的第w个64位字的第b位在两个消息之间是否不同((b = 0, \ldots, 63),(w = 0, \ldots, 4))。
    • (d_{r,b} \in {0, 1}):指定第r轮的第b个S盒是否活动((b = 0, \ldots, 63))。
    • (u_{r,w,b} \in {0, 1, 2}):用于第r轮第w个64位字线性层模型的辅助变量。

优化目标是最小化活动S盒的数量:
(\min \sum_{r = 1}^{R} \sum_{b = 0}^{63} d_{r,b})

S盒的建模通过指定其分支数并与每个S盒的活动状态相关联:
(d_{r,b} \leq \sum_{w = 0}^{63} x_{r,w,b} \leq 5d_{r,b})
(\sum_{w = 0}^{63} (x_{r,w,b} + y_{r,w,b}) \geq 3d_{r,b})
(d_{r,b} \leq \sum_{w = 0}^{63} y_{r,w,b} \leq 5d_{r,b})

线性层的建模如下((r = 1, \ldots, R),(b = 0, \ldots, 63)):
(y_{r,0,b} + y_{r,0,b + 19} + y_{r,0,b + 28} + x_{r + 1,0,b} = 2 \cdot u_{r,0,b})
(y_{r,1,b} + y_{r,1,b + 61} + y_{r,1,b + 39} + x_{r + 1,1,b} = 2 \cdot u_{r,1,b})
(y_{r,2,b} + y_{r,2,b + 1} + y_{r,2,b + 6} + x_{r + 1,2,b} = 2 \cdot u_{r,2,b})
(y_{r,3,b} + y_{r,3,b + 10} + y_{r,3,b + 17} + x_{r + 1,3,b} = 2 \cdot u_{r,3,b})
(y_{r,4,b} + y_{r,4,b + 7} + y_{r,4,b + 41} + x_{r + 1,4,b} = 2 \cdot u_{r,4,b})

最后,至少有一个S盒需要活动:
(\sum_{w = 0}^{4} x_{0,w,0} \geq 1)

线性密码分析的模型基本相同,只是旋转值不同。该MILP可以使用现成的线性优化工具(如CPLEX)求解,但由于问题的高度组合性质,SAT求解器更适合此类问题。

  • SAT求解器 :使用可满足性模理论(SMT)求解器的扩展建模语言,将基于位向量的CVC模型转换为合取范式(CNF),然后使用并行SAT求解器(如Biere的Treengeling)求解。为了获得更精确的界限,对S盒的建模采用了折中的方法。S盒的线性预处理和后处理部分可以精确建模,非线性核心(等效于Keccak S盒)进行近似建模。

差分模型的约束如下(输入差分字(a_0, \ldots, a_4 \in F_2^{64}),输出差分字(b_0, \ldots, b_4 \in F_2^{64})):
(b_i = a_i \oplus ((a_{i + 1} \vee a_{i + 2}) \wedge t_i)),(t_i \in F_2^{64}),(i = 0, \ldots, 4)

线性模型的约束(线性输入掩码(a_0, \ldots, a_4 \in F_2^{64}),输出掩码(b_0, \ldots, b_4 \in F_2^{64}))如下:
(a_i = b_i \oplus ((b_{i - 1} \vee b_{i - 2}) \wedge t_i)),(t_i \in F_2^{64}),(i = 0, \ldots, 4)

以下是差分和线性密码分析中使用工具的对比表格:
| 工具 | 优点 | 缺点 |
| ---- | ---- | ---- |
| MILP(线性规划) | 可以直接建模优化问题 | 高度组合问题不适合,求解效率低 |
| SAT求解器 | 更适合高度组合问题 | 需要将问题转换为可满足性问题,S盒建模需折中 |

以下是差分和线性密码分析流程的mermaid流程图:

graph LR
    A[开始] --> B[选择分析方法(MILP或SAT)]
    B --> C{MILP?}
    C -- 是 --> D[构建MILP模型]
    C -- 否 --> E[构建SAT模型]
    D --> F[使用线性优化工具求解]
    E --> G[转换为CNF]
    G --> H[使用SAT求解器求解]
    F --> I[得到结果]
    H --> I
    I --> J[结束]

总结

本文围绕阿斯康算法的密码分析展开,介绍了阿斯康算法的基础结构,包括替换层和线性层。详细阐述了零和区分器、立方攻击以及差分和线性密码分析等方法在阿斯康算法中的应用。

  • 零和区分器 :可用于展示阿斯康置换的非理想特性,通过代数模型和度数分析,可实现对不同轮数的阿斯康置换的区分攻击,还可通过沃尔什谱分析和中间添加免费轮等方法改进攻击复杂度。
  • 立方攻击 :是一种代数攻击方法,可在阿斯康的初始化阶段进行。通过立方测试器可区分特定轮数的阿斯康置换生成的密钥流,还可对轮数减少的阿斯康版本进行密钥恢复攻击。
  • 差分和线性密码分析 :使用MILP和SAT求解器证明阿斯康的线性和差分特征的界限,并利用这些特征对轮数减少的阿斯康版本进行密钥恢复攻击。

这些密码分析方法有助于深入了解阿斯康算法的安全性,为密码算法的设计和改进提供参考。虽然阿斯康置换存在一些非理想特性,但目前的攻击复杂度大多高于其声称的安全级别,表明阿斯康在一定程度上仍具有较好的安全性。

第三方支付功能的技术人员;尤其适合从事电商、在线教育、SaaS类项目开发的工程师。; 使用场景及目标:① 实现微信支付宝的Native、网页/APP等主流支付方式接入;② 掌握支付过程中关键的安全机制如签名验签、证书管理敏感信息保护;③ 构建完整的支付闭环,包括下单、支付、异步通知、订单状态更新、退款对账功能;④ 通过定时任务处理内容支付超时概要状态不一致问题:本文详细讲解了Java,提升系统健壮性。; 阅读应用接入支付宝建议:建议结合官方文档沙微信支付的全流程,涵盖支付产品介绍、开发环境搭建箱环境边学边练,重点关注、安全机制、配置管理、签名核心API调用及验签逻辑、异步通知的幂等处理实际代码实现。重点异常边界情况;包括商户号AppID获取、API注意生产环境中的密密钥证书配置钥安全接口调用频率控制、使用官方SDK进行支付。下单、异步通知处理、订单查询、退款、账单下载等功能,并深入解析签名验签、加密解密、内网穿透等关键技术环节,帮助开发者构建安全可靠的支付系统。; 适合人群:具备一定Java开发基础,熟悉Spring框架HTTP协议,有1-3年工作经验的后端研发人员或希望快速掌握第三方支付集成的开发者。; 使用场景及目标:① 实现微信支付Native模式支付宝PC网页支付的接入;② 掌握支付过程中核心的安全机制如签名验签、证书管理、敏感数据加密;③ 处理支付结果异步通知、订单状态核对、定时任务补偿、退款及对账等生产级功能; 阅读建议:建议结合文档中的代码示例官方API文档同步实践,重点关注支付流程的状态一致性控制、幂等性处理异常边界情况,建议在沙箱环境中完成全流程测试后再上线。
matlab2python 这是一个Python脚本,用于将Matlab文件或代码行转换为Python。此项目处于alpha阶段。 该实现严重依赖于Victor Leikehman的SMOP项目。 当前实现围绕SMOP构建,具有以下差异: 力图生成不依赖libsmop的代码,仅使用如numpy这样的标准Python模块。 使用常见缩写如np而非全称numpy。 尝试重排数组循环索引,从0开始而不是1。 不使用来自libsmop的外部类matlabarraycellarray。 增加了对Matlab类的基本支持,类体中声明的属性在构造函数中初始化。 因上述改动,产出代码“安全性较低”,但可能更接近用户自然编写的代码。 实现相对直接,主要通过替换SMOP使用的后端脚本,这里称为smop\backend_m2py.py。 一些函数替换直接在那里添加。 额外的类支持、导入模块以及其他微调替换(或说是黑客技巧)在matlabparser\parser.py文件中完成。 安装 代码用Python编写,可按如下方式获取: git clone https://github.com/ebranlard/matlab2python cd matlab2python # 安装依赖项 python -m pip install --user -r requirements.txt # 让包在任何目录下都可用 python -m pip install -e . # 可选:运行测试 pytest # 可选:立即尝试 python matlab2python.py tests/files/fSpectrum.m -o fSpectrum.py 使用方法 主脚本 存储库根目录下的主脚本可执行,并带有一些命令行标志(部分直接取自SMOP)。要将文件file.m转换为file.py,只需输入:
【信号识别】识别半监督粗糙模糊拉普拉斯特征图(Matlab代码实现)内容概要:本文档围绕“信号识别”主题,重点介绍了基于半监督粗糙模糊拉普拉斯特征图的信号识别方法,并提供了完整的Matlab代码实现。该方法结合了半监督学习、粗糙集理论、模糊逻辑拉普拉斯特征映射技术,用于提升在标签样本稀缺情况下的信号分类性能,尤其适用于复杂背景噪声下的信号特征提取识别任务。文中详细阐述了算法原理、数学模型构建过程及关键步骤的编程实现,旨在帮助科研人员深入理解并应用该混合智能识别技术。; 适合人群:具备一定信号处理基础Matlab编程能力的研究生、科研人员及从事通信、雷达、电子系统等领域工程开发的技术人员;熟悉机器学习模式识别的基本概念者更佳; 使用场景及目标:①应用于低标注成本、高噪声环境下的信号分类任务,如雷达信号识别、通信信号监测等;②用于学术研究中对半监督学习特征降维融合方法的探索性能验证;③作为撰写相关领域论文或项目开发的技术参考代码基础; 阅读建议:建议读者结合文档中的理论推导Matlab代码逐段分析,动手运行并调试程序以加深理解;可尝试在不同信号数据集上进行实验对比,进一步优化参数设置模型结构,提升实际应用场景下的识别精度鲁棒性。
基于Python的织物表面缺陷检测系统源代码 本资源提供了一套完整的织物表面质量检测系统实现方案,采用Python编程语言开发。该系统通过计算机视觉技术,能够自动识别织物生产过程中产生的各类表面瑕疵,适用于纺织行业的质量控制环节。 系统核心功能包括图像预处理、特征提取、缺陷分类定位。预处理模块对采集的织物图像进行标准化处理,包括灰度化、噪声滤除对比度增强,以优化后续分析条件。特征提取环节采用多种算法组合,有效捕捉纹理异常、色差、孔洞、污渍等常见缺陷的视觉特征。 缺陷识别部分整合了传统图像处理技术机器学习方法,实现对瑕疵类型的准确分类严重程度评估。系统支持实时检测批量处理两种模式,可集成于生产线进行在线质量监控,亦可用于离线样本分析。 代码结构清晰,包含完整的模型训练脚本推理接口,并附有详细注释说明各模块功能参数配置方法。用户可根据实际生产环境中的织物材质缺陷类型,调整特征参数分类阈值,以提升检测精度。 该系统为纺织制造业提供了一种高效、自动化的表面质量检测解决方案,有助于减少人工检验成本,提高产品合格率生产一致性。所有功能模块均基于开源库实现,无需依赖特定硬件设备,具备较高的可移植性扩展性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
《Unity引擎下的经典平台游戏实现剖析》 在当代游戏开发实践中,Unity引擎凭借其高效的三维图形处理能力、多平台适配特性以及直观的脚本编写界面,已成为广泛采用的工具之一。本文将以一个具体的案例——基于Unity环境重新构建的经典平台跳跃游戏为例,系统阐述该引擎在复刻传统游戏过程中的技术应用实现逻辑。 Unity采用组件化设计理念,游戏内的每个实体均由多种功能模块组合而成。在本案例中,游戏角色、地形模块及敌对单位均通过添加相应组件实现其基础功能。以主角为例,其视觉呈现依赖于精灵渲染组件,二维刚体组件负责模拟物理运动规律,而自定义编写的行为脚本则定义了角色的移动、跳跃及交互响应等核心逻辑。 项目主目录通常包含完整的源代码资源,其中C#脚本构成了游戏行为控制的基石。开发者通过定义“主角控制类”来封装角色的状态管理动作响应,同时设计“关卡管理类”用于统筹场景布局进度控制,“道具效果类”则处理角色能力强化等特殊事件。项目说明文档一般会提供详细的环境配置指引代码结构说明,帮助使用者快速理解项目架构并掌握修改方法。 在Unity中,场景作为游戏世界的容器,承载了所有对象的空间关系属性配置。本案例可能包含多个独立场景,分别对应不同难度或主题的关卡,每个关卡内均预设了平台排布、敌对单位生成点及通关条件等要素。动画系统的运用进一步丰富了角色表现,通过状态机控制器可实现行走、跳跃、受伤等动作间的平滑过渡。 音效背景音乐是塑造游戏氛围的关键要素。借助Unity的音频管理模块,开发者能够根据游戏进程动态触发对应的声效资源,重现原版游戏的听觉体验。物理引擎在二维平台游戏中尤为重要,通过为对象添加矩形或圆形碰撞体,可实现精确的接触检测力学反馈。 总体而言,该案例不仅展示了利用Unity引擎重构经典游戏的技术路径,更为学习者提供了深入理解二维游戏开发流程的实践样本。从脚本编写到系统集成,从资源管理到交互设计,该项目全面呈现了现代游戏开发工具在传承经典玩法过程中的方法论价值,为不同阶段的开发者提供了可借鉴的技术范本设计思路。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值