只要是从事网络安全或安全软件开发的人,就都可能已经了解过公钥加密以及在20世纪70年代末和80年代前后创建的方法。现在我们可能需要学习更多的理论,因为我们所学的方法可能会受到量子计算机的威胁。
如果想开始学习这些新方法,那就有必要往下读了。
(mod p) 运算
在传统的公钥加密中,我们使用一个模数来创建有限域。虽然这听起来很复杂,但实际上这是一个非常简单的概念。对于有限域,我们引入一个模数,它通常是一个素数。对于素数,我们从整数除法中确定余数,然后取余数作为结果。例如,如果素数为17,我们将得到 0 到 16 范围内的输出值:
5 (mod 17) = 6
19 (mod 17) = 2
100 (mod 17) = 15
(mod p)运算的伟大之处在于,我们仍然可以进行加减乘除,并最终得到相同的结果,例如:
15 (mod 17) +100 (mod 17) = (15+100) (mod 17) = 13
15 (mod 17) * 100 (mod 17) = (15*100) (mod 17) = 4
在离散对数中,我们经常使用Diffie Hellman方法,我们选择一个共享素数 § 和一个共享生成器值 (g),并计算:
A = g^x (mod p)
B = g^y (mod p)
交换A和B,共享密钥为:
K = A^y (mod p)
之所以有效,是因为:
K = A^y (mod p) = (gx)y (mod p) = g^{xy} (mod p)
在RSA方法中,我们使用模数(N)。对于加密,我们有:
C = M^e (mod N)
要破译:
M = C^d (mod N)
在这种情况下,N是两个素数的乘积,RSA 的优势在于分解模数 (N) 的难度。椭圆曲线方法也使用一个素数§的模数,其中我们有:
y² =x³ + ax + b (mod p)
这将我们在椭圆曲线上使用的点的值限制在 0 和 (p-1) 之间。
多项式
但是,量子计算机将破解RSA、椭圆曲线和离散对数,那么后量子密码学中的模数相当于什么?我们可以使用格加密,这