首页
社区
课程
招聘
[原创]基于循环移位和异或运算的线性变换的逆变换求解方法
发表于: 4天前 194

[原创]基于循环移位和异或运算的线性变换的逆变换求解方法

4天前
194

基于循环移位和异或运算的线性变换的逆变换求解方法

学过密码学的都知道,对称加密算法的两大设计准则是混淆性(S盒提供)和扩散性(P盒提供)。关于常见对称加密算法所使用的S盒和P盒设计细节详见对称加密算法中的混淆层(S盒)大盘点对称加密算法中的扩散层(P盒)大盘点这两篇文章,这里不再讲解。通过参考各大对称加密算法的设计文档,我们容易发现,有不少的对称加密算法采用循环移位和异或运算作为扩散层(也即线性变换),因为该类变换可以提供良好的扩散性(分支数大)和软件实现上的高效性(效率高)。

接下来本文将给出求解该类线性变换的逆变换的2个方法,然而这可能也并没什么卵用。(弱弱的说一句:我写什么样的文章,不是看你们想看什么样的文章,而是要看我会什么。嘿嘿嘿!!!)

采用循环移位和异或运算作为线性扩散变换的对称加密算法(包含分组加密算法,序列密码算法,密码杂凑算法,认证加密算法和消息鉴别算法)如下图所示:

本文将会给出两个求解该类线性变换的逆变换的方法。

方法1

(1)对于FFF(X)=(X<<<a)⊕(X<<<b)⊕(X<<<c)

(其中X∈F,0≤a<b<c<32(a,b,c均为正整数))

FFF(X)=(X<<<a)⊕(X<<<b)⊕(X<<<c)=(a,b,c)

FFF(X)=(X<<<2a)⊕(X<<<2b)⊕(X<<<2c)=(2a,2b,2c)

FFF(X)=(X<<<4a)⊕(X<<<4b)⊕(X<<<4c)=(4a,4b,4c)

FFF(X)=(X<<<8a)⊕(X<<<8b)⊕(X<<<8c)=(8a,8b,8c)

FFF(X)=(X<<<16a)⊕(X<<<16b)⊕(X<<<16c)=(16a,16b,16c)

FFF(X)=(X<<<32a)⊕(X<<<32b)⊕(X<<<32c)=(32a,32b,32c)=X(由此可以看出FFF变换为双射,故其存在逆变换。)

故FFF(X)=FFF(X),又因为

将243个循环移位项对32求模之后,删除出现偶数次的项(出现偶数次的项会两两抵消),再将剩余的项按照从小到大的顺序排列即可得到FFF的逆变换FFF。

(2)对于FFFFF(X)=(X<<<a)⊕(X<<<b)⊕(X<<<c)⊕(X<<<d)⊕(X<<<e)

(其中X∈F,0≤a<b<c<d<e<32(a,b,c,d,e均为正整数))

FFFFF(X)=(X<<<a)⊕(X<<<b)⊕(X<<<c)⊕(X<<<d)⊕(X<<<e)=

(a,b,c,d,e)

FFFFF(X)=(X<<<2a)⊕(X<<<2b)⊕(X<<<2c)⊕(X<<<2d)⊕(X<<<2e)=

(2a,2b,2c,2d,2e)

FFFFF(X)=(X<<<4a)⊕(X<<<4b)⊕(X<<<4c)⊕(X<<<4d)⊕(X<<<4e)=

(4a,4b,4c.4d,4e)

FFFFF(X)=(X<<<8a)⊕(X<<<8b)⊕(X<<<8c)⊕(X<<<8d)⊕(X<<<8e)=

(8a,8b,8c,8d,8e)

FFFFF(X)=(X<<<16a)⊕(X<<<16b)⊕(X<<<16c)⊕(X<<<16d)⊕(X<<<16e)=

(16a,16b,16c,16d,16e)

FFFFF(X)=(X<<<32a)⊕(X<<<32b)⊕(X<<<32c)⊕(X<<<32d)⊕(X<<<32e)=

(32a,32b,32c,32d,32e)=X(由此可以看出FFFFF变换为双射,故其存在逆变换。)

故FFFFF(X)=FFFFF(X),又因为

将3125个循环移位项对32求模之后,删除出现偶数次的项(出现偶数次的项会两两抵消),再将剩余的项按照从小到大的顺序排列即可得到FFFFF的逆变换FFFFF。

方法2

(1)对于FFF(X)=(X<<<a)⊕(X<<<b)⊕(X<<<c)

(其中X∈F,0≤a<b<c<32(a,b,c均为正整数))

设字长为 n,循环左移为 <<<,异或为 

把 n位字看成 GF(2)上的多项式,循环左移等价于乘以 z,则

若 gcd(F(z),z^n-1)=1,则逆变换存在。设

则逆变换为

其中 gi∈{0,1}


传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!

收藏
点赞 2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回