对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差
程序员文章站
2022-05-11 20:29:24
...
对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差
什么是偏差:
S盒是DES中连接Bi和Ci的桥梁:
每个Bi都是6bits,每个Ci都是4bits,S盒是一个6bits->4bits
的代换。设S盒的输入为X1~X6
,S盒的输出为Y1~Y4
。
第一个S盒的结构:
代码:
from fractions import Fraction
# DES S盒1
list = [[14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7],
[0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8],
[4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0],
[15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13]]
print("Ci十进制 Ci二进制(Y1~Y4) 行 列 行二进制 列二进制 Bi二进制(X1~X6)")
row=0
count=0
for i in list:
row += 1
row_binary = '{:02b}'.format(row-1)
column = 0
for j in i:
column += 1
column_binary = '{:04b}'.format(column-1)
Yi = '{:04b}'.format(j) # Y1Y2Y3Y4
Xi = row_binary[0]+column_binary+row_binary[1]
print("%7s%13s (%2s,%2s)%7s%7s%11s"%(j,Yi,row,column,row_binary,column_binary,Xi))
if (int(Xi[1])+int(Yi[0])+int(Yi[1])+int(Yi[2])+int(Yi[3]))%2==0:
count+=1
print("\n对于DES中的第一个S盒子S1,随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差为:",Fraction(count,64)-Fraction(1,2))
运行结果:
Ci十进制 Ci二进制(Y1~Y4) 行 列 行二进制 列二进制 Bi二进制(X1~X6)
14 1110 ( 1, 1) 00 0000 000000
4 0100 ( 1, 2) 00 0001 000010
13 1101 ( 1, 3) 00 0010 000100
1 0001 ( 1, 4) 00 0011 000110
2 0010 ( 1, 5) 00 0100 001000
15 1111 ( 1, 6) 00 0101 001010
11 1011 ( 1, 7) 00 0110 001100
8 1000 ( 1, 8) 00 0111 001110
3 0011 ( 1, 9) 00 1000 010000
10 1010 ( 1,10) 00 1001 010010
6 0110 ( 1,11) 00 1010 010100
12 1100 ( 1,12) 00 1011 010110
5 0101 ( 1,13) 00 1100 011000
9 1001 ( 1,14) 00 1101 011010
0 0000 ( 1,15) 00 1110 011100
7 0111 ( 1,16) 00 1111 011110
0 0000 ( 2, 1) 01 0000 000001
15 1111 ( 2, 2) 01 0001 000011
7 0111 ( 2, 3) 01 0010 000101
4 0100 ( 2, 4) 01 0011 000111
14 1110 ( 2, 5) 01 0100 001001
2 0010 ( 2, 6) 01 0101 001011
13 1101 ( 2, 7) 01 0110 001101
1 0001 ( 2, 8) 01 0111 001111
10 1010 ( 2, 9) 01 1000 010001
6 0110 ( 2,10) 01 1001 010011
12 1100 ( 2,11) 01 1010 010101
11 1011 ( 2,12) 01 1011 010111
9 1001 ( 2,13) 01 1100 011001
5 0101 ( 2,14) 01 1101 011011
3 0011 ( 2,15) 01 1110 011101
8 1000 ( 2,16) 01 1111 011111
4 0100 ( 3, 1) 10 0000 100000
1 0001 ( 3, 2) 10 0001 100010
14 1110 ( 3, 3) 10 0010 100100
8 1000 ( 3, 4) 10 0011 100110
13 1101 ( 3, 5) 10 0100 101000
6 0110 ( 3, 6) 10 0101 101010
2 0010 ( 3, 7) 10 0110 101100
11 1011 ( 3, 8) 10 0111 101110
15 1111 ( 3, 9) 10 1000 110000
12 1100 ( 3,10) 10 1001 110010
9 1001 ( 3,11) 10 1010 110100
7 0111 ( 3,12) 10 1011 110110
3 0011 ( 3,13) 10 1100 111000
10 1010 ( 3,14) 10 1101 111010
5 0101 ( 3,15) 10 1110 111100
0 0000 ( 3,16) 10 1111 111110
15 1111 ( 4, 1) 11 0000 100001
12 1100 ( 4, 2) 11 0001 100011
8 1000 ( 4, 3) 11 0010 100101
2 0010 ( 4, 4) 11 0011 100111
4 0100 ( 4, 5) 11 0100 101001
9 1001 ( 4, 6) 11 0101 101011
1 0001 ( 4, 7) 11 0110 101101
7 0111 ( 4, 8) 11 0111 101111
5 0101 ( 4, 9) 11 1000 110001
11 1011 ( 4,10) 11 1001 110011
3 0011 ( 4,11) 11 1010 110101
14 1110 ( 4,12) 11 1011 110111
10 1010 ( 4,13) 11 1100 111001
0 0000 ( 4,14) 11 1101 111011
6 0110 ( 4,15) 11 1110 111101
13 1101 ( 4,16) 11 1111 111111
对于DES中的第一个S盒子S1,随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差为: -9/32
对于DES中的第一个S盒子S1,随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4
的偏差为: -9/32
上一篇: Linux 的文件权限与目录配置
下一篇: 整数的质因数分解