欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差

程序员文章站 2022-05-11 20:29:24
...

对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差

什么是偏差:

对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差

S盒是DES中连接Bi和Ci的桥梁:

对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差
每个Bi都是6bits,每个Ci都是4bits,S盒是一个6bits->4bits的代换。设S盒的输入为X1~X6,S盒的输出为Y1~Y4

第一个S盒的结构:

对DES中的第一个S盒子S1,计算随机变量 X2⊕Y1⊕Y2⊕Y3⊕Y4 的偏差

代码:

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