根据本文提出的混沌映射S盒的设计原理,得到混沌S盒的具体设计步骤:
- 1)令X0=K,K∈(0,1), 精度为64位;
- 2)计算混沌迭代方程: Xn=AX,(1- X,),得到实数随机序列X。, X... X,序列长度n = 2000;
- 3)通过方程Y, =[MX]把随机序列X。映射为0至255之间的整数集,其中M = 256;
- 4)将整数集中的数按以下方式两两分组: G()={Y,Y}, i∈[0,n/2], 当i=1000时,G()={Y;,Yo};
- 5)设置初始表: Sbox = {0,1...255};
- 6)通过置换NewSbox = {Sbx(G())},交换Sbox中Y,与Y41的位置的值,得到新的S盒;
- 7)对6)进行i次置换,测试第i次NewSbox的8个布尔函数的非线性度(LP)和输入输出差分分布(DP);
- 8)如果DPmax大于10或LPmim小于100, 返回6);
- 9)如果DPmx小于10且LPmin大于100,将满足要求的S盒NewSbox;存储,并记录满足该条件的初始参数X。;
- 10)当迭代次数i= 1000时,若还没有满足条件的S盒,则修改K的值,并返回1);
- 11)若需要生成下一个S盒,返回1); 不需要,则结束。
- 第7部种一次置换的定义是什么?
- 两个元素交换一次算一次置换(感觉不太对劲)
- 整个Sbox按照划分的G全部置换算一次交换:带来的问题是:这样两次交换和0次交换好像影响相互抵消了(不确定,没细究,直觉)
- K(即X0)是否需要按照一定步长遍历区间(0,1)依次调用改方法来实现得到最优参数(机器计算出来)?还是这个参数是人计算出来的?
- i,置换次数同K.
示例如入口
sbox = Sbox(K = 0.356, A = 4, KStep = 0.001)
sbox.start()