陷门原指Bug漏洞,这里却巧妙的成为非对称密码算法的科学方法。这种非对称密码算法比RSA早7年。
这种陷门单向算法函数可以实现公钥加密,但无法做数据签名,还不是完善的非对称算法。
单向陷门函数(Trapdoor One-way Function) ,满足下列条件的函数 f f f:
(1)正向计算容易,即如果知道了密钥 p x px px和消息 x x x,容易计算 y = f p x ( x ) y=f_px (x) y=fpx(x)。
(2)在不知道密钥 s k sk sk的情况下,反向计算不可行,即如果只知道消息 y y y而不知道密钥 s k sk sk,则计算 x = f s k − 1 ( y ) x=f_{sk}^{-1} (y) x=fsk−1(y)是不可行的(所谓计算不可行,是指计算上相当复杂,在有限的时间和成本范围内很难得到想要的结果,已无实际意义)。
(3)在知道密钥 s k sk sk的情况下,反向计算是容易的,即如果同时知道消息 y y y和密钥 s k 4 sk4 sk4,则计算 x = f s k − 1 ( y ) x=f_{sk}^{-1} (y) x=fsk−1(y)是容易的,这里密钥 s k sk sk相当于陷门,它和 p k pk pk配对使用的。
也就是说,对于单向陷门函数,它是指除非知道某种附加的信息,否则这样的函数在一个方向上计算容易,在另外的方向上要计算是不可行的;有了附加信息,函数的逆就可以容易计算出来。
注:
①仅满足(1)(2)两条的为单向函数,第(3)条为陷门性,其中的密钥 s k sk sk称为陷门信息。
②当用陷门函数f作为加密函数时,可以将 p k pk pk公开,此时加密密钥 p k pk pk便称为公开密钥。 f f f函数的设计者将陷门信息 s k sk sk保密,用作解密密钥,此时密钥 s k sk sk被称作秘密密钥。由于加密函数 f f f是公开的,任何人都可以将信息 x x x加密成 y = f p x ( x ) y=f_px (x) y=fpx(x),然后发送给目的接收者。(当然可通过不完全信道传递)。由于目的接收者拥有 s k sk sk,自然可以解出 x = f s k − 1 ( y ) x=f_{sk}^{-1} (y) x=fsk−1(y)。
③单向陷门函数的第(2)条性质表明窃听者由截获的密文 y = f p x ( x ) y=f_px (x) y=fpx(x)推测消息的明文是不可行的。