基于ARX结构的新型序列密码算法FlashLightFlashLight算法简介FlashLight算法属于对称加密算法5大分支之一的序列密码算法。它是在Salsa20的基础上进行改变的相较于Salsa20来说其每轮的混淆性和扩散性更好可以更有效地抵抗现有的和未知的密码分析。其核心是一种800比特输入800比特输出的ARX结构部件密钥长度分为128比特和256-bit两种规格。FlashLight算法参数FlashLight算法主要以Word(32位)为单位来进行处理每个Word定义为32-bit二进制数。FlashLight算法的核心函数是将一个128-bit(将128比特密钥扩展为256比特) 或者256-bit的密钥(k1……k7)一个128-bit的时间标号(t0t1t2t3)一个128-bit的初始IV(v0v1v2v3)和9个32-bit的常数(c0c1…c7c8)转换为一个800-bit的输出。其输入可以用两个5×5矩阵的映射关系来表示如下图所示FlashLight算法初始化其中9个32位常数(c0c1…c7c8)如下图所示FlashLight算法状态更新流密码FlashLight的轮函数是RoundFunction总共进行20轮。经过20轮(“FlashLight”中的20即指轮数)后得到最终的密钥流。其中RoundFunction伪代码如下所示XRoundFunction(X){X[5][5]X[25]Part1.行变换FFFFF0(X[0][*])FFFFF1(X[1][*])FFFFF2(X[2][*])FFFFF3(X[3][*])FFFFF4(X[4][*])Part2.左对角线变换X[2][2]X[2][2]⊕(X[0][0]6)⊕(X[1][1]11)⊕(X[3][3]15)⊕(X[4][4]26)Part3.列变换FFFFF0(X[*][0])FFFFF1(X[*][1])FFFFF2(X[*][2])FFFFF3(X[*][3])FFFFF4(X[*][4]) \\Part4.右对角线变换X[2][2]X[2][2]⊕(X[0][4]13)⊕(X[1][3]18)⊕(X[3][1]10)⊕(X[4][0]21)}其中输入和输出均为5个32位字的5个混淆扩散函数(相当于160比特大S盒)FFFFF0FFFFF1FFFFF2FFFFF3FFFFF4分别如下图所示FlashLight算法密钥流生成记执行20轮的轮变换操作后的状态为S20(x020……x2420)则输出密钥流为FlashLight(S0)S0S20。设明文为M密文为C加密过程可表示为CM⊕FlashLight(S)解密过程为MC⊕FlashLight(S)。FlashLight算法总结FlashLight和Salsa20很类似主要有三点不同内部状态矩阵的初始化轮函数及向量进入轮函数的方式。感兴趣的同学可以参考基于ARX结构的流密码算法Salsa20。FlashLight是一个脱胎于Salsa20的新型序列密码算法它凭借卓越的软件性能、强抗时序攻击能力和简洁设计在与AES的竞争中赢得了重要地位。FlashLight仅使用ARX操作无需复杂的S盒查表使其算法描述简洁代码实现紧凑易于在多种平台上部署。它与Poly1305的组合已成为保护互联网通信的基石之一。
基于ARX结构的新型序列密码算法FlashLight
发布时间:2026/6/8 1:33:20
基于ARX结构的新型序列密码算法FlashLightFlashLight算法简介FlashLight算法属于对称加密算法5大分支之一的序列密码算法。它是在Salsa20的基础上进行改变的相较于Salsa20来说其每轮的混淆性和扩散性更好可以更有效地抵抗现有的和未知的密码分析。其核心是一种800比特输入800比特输出的ARX结构部件密钥长度分为128比特和256-bit两种规格。FlashLight算法参数FlashLight算法主要以Word(32位)为单位来进行处理每个Word定义为32-bit二进制数。FlashLight算法的核心函数是将一个128-bit(将128比特密钥扩展为256比特) 或者256-bit的密钥(k1……k7)一个128-bit的时间标号(t0t1t2t3)一个128-bit的初始IV(v0v1v2v3)和9个32-bit的常数(c0c1…c7c8)转换为一个800-bit的输出。其输入可以用两个5×5矩阵的映射关系来表示如下图所示FlashLight算法初始化其中9个32位常数(c0c1…c7c8)如下图所示FlashLight算法状态更新流密码FlashLight的轮函数是RoundFunction总共进行20轮。经过20轮(“FlashLight”中的20即指轮数)后得到最终的密钥流。其中RoundFunction伪代码如下所示XRoundFunction(X){X[5][5]X[25]Part1.行变换FFFFF0(X[0][*])FFFFF1(X[1][*])FFFFF2(X[2][*])FFFFF3(X[3][*])FFFFF4(X[4][*])Part2.左对角线变换X[2][2]X[2][2]⊕(X[0][0]6)⊕(X[1][1]11)⊕(X[3][3]15)⊕(X[4][4]26)Part3.列变换FFFFF0(X[*][0])FFFFF1(X[*][1])FFFFF2(X[*][2])FFFFF3(X[*][3])FFFFF4(X[*][4]) \\Part4.右对角线变换X[2][2]X[2][2]⊕(X[0][4]13)⊕(X[1][3]18)⊕(X[3][1]10)⊕(X[4][0]21)}其中输入和输出均为5个32位字的5个混淆扩散函数(相当于160比特大S盒)FFFFF0FFFFF1FFFFF2FFFFF3FFFFF4分别如下图所示FlashLight算法密钥流生成记执行20轮的轮变换操作后的状态为S20(x020……x2420)则输出密钥流为FlashLight(S0)S0S20。设明文为M密文为C加密过程可表示为CM⊕FlashLight(S)解密过程为MC⊕FlashLight(S)。FlashLight算法总结FlashLight和Salsa20很类似主要有三点不同内部状态矩阵的初始化轮函数及向量进入轮函数的方式。感兴趣的同学可以参考基于ARX结构的流密码算法Salsa20。FlashLight是一个脱胎于Salsa20的新型序列密码算法它凭借卓越的软件性能、强抗时序攻击能力和简洁设计在与AES的竞争中赢得了重要地位。FlashLight仅使用ARX操作无需复杂的S盒查表使其算法描述简洁代码实现紧凑易于在多种平台上部署。它与Poly1305的组合已成为保护互联网通信的基石之一。