在理论计算机科学和密码学中,陷门函数是一种在一个方向上很容易计算,但在没有特殊信息的情况下很难在相反方向上计算(寻找它的逆)的函数,称为“陷门”。陷门函数是单向函数的一种特殊情况,广泛用于公钥密码学中。 [2]
用数学术语来说,如果f是陷门函数,则存在一些秘密信息t ,因此给定f ( x ) 和t ,很容易计算x 。考虑一把挂锁和它的钥匙。通过推动卸扣,无需使用钥匙即可将挂锁锁上。然而,想要轻松地开锁,则必需使用钥匙。这里的钥匙是陷门,而挂锁则是陷门函数。
一个简单的数学上的陷门示例是:“6895601 是两个素数的乘积。那两个素数是多少?”一个典型的“蛮力”解决方案是尝试将 6895601 不停除以一些素数,直到找到答案。但是如果已知 1931 是其中一个数字,你可以通过在任何计算器中输入“6895601 ÷ 1931”来找到答案。这个例子不是一个可靠的陷门函数——现代计算机可以在一秒钟内猜出所有可能的答案——但是这个例子可以通过使用两个更大的素数的乘积来改进。
随着Diffie 、Hellman和Merkle在 1970 年代中期发表了非对称(或公钥)加密技术后,陷门函数开始在密码学中崭露头角。事实上,Diffie & Hellman (1976)创造了这个术语。已经提出了几个函数类,很快就发现陷门函数比最初想象的更难找到。例如,早期的建议是使用基于子集和问题的方案,但事实很快证明这是不合适的。
截至2004年 (2004-Missing required parameter 1=month!)[update],已知最好的陷门函数 (族) 候选函数是RSA和Rabin函数族。两者都是一个合数的幂取模,而且都跟质因数分解有关。
与离散对数问题的难度相关的函数(模素数或在椭圆曲线上定义的群)不是已知的陷门函数,因为没有关于这个群的已知“陷门”信息可以实现高效地计算离散对数。
密码学中的陷门具有上述非常具体的含义,不要与后门混淆(它们经常互换使用,这是不正确的)。后门是一种故意添加到密码算法(例如,密钥对生成算法、数字签名算法等)或操作系统中的机制,例如,它允许一个或多个未授权方以某种方式绕过或破坏系统。
陷门函数是单向函数的集合 { fk : Dk → Rk } ( k ∈ K ),其中K, Dk, Rk都是二进制字符串 {0, 1}*的子集,满足以下条件:
- 存在概率多项式时间 (PPT)采样算法 Gen st Gen(1n ) = (k, tk) 其中k ∈ K ∩ {0, 1}n并且t k ∈ {0, 1}*满足 | tk | < p(n),其中p是某个多项式。每个tk称为对应于k的陷门。每个陷门都可以被有效地采样。
- 给定输入k ,也存在输出x ∈ Dk的 PPT 算法。也就是说,每个Dk都可以被有效地采样。
- 对于任何k ∈ K ,都存在正确计算fk的 PPT 算法。
- 对于任意k ∈ K ,都存在一个 PPT 算法A 满足对于任意x ∈ D k,令y = A(k, fk (x), tk),那么我们有fk(y) = fk(x)。也就是说,给定陷门,很容易反转。
- 对于任何k ∈ K ,没有陷门tk ,对于任何 PPT 算法,能够正确反转fk的概率(即给定fk(x)的情况下,找到一个x'使得fk(x') = fk(x)) 可以忽略不计。 [3] [4] [5]
如果上述集合中的每个函数都是单向排列,则该集合也称为陷门排列。 [6]
在下面的两个例子中,我们假设分解一个大的合数是很困难的(参见整数分解)。
设是一个大的合数,使得,其中和是大素数,满足,并且对攻击者保密。问题是在给定的情况下计算使得。这里的陷门是的因式分解。使用陷门,的解可以给出为, 其中。有关详细信息,请参阅中国剩余定理。请注意,给定素数和 ,我们可以找到和。这里的条件保证了解和可以很好地定义。 [8]
- Diffie, W.; Hellman, M., New directions in cryptography (PDF), IEEE Transactions on Information Theory, 1976, 22 (6): 644–654 [2022-03-21], CiteSeerX 10.1.1.37.9720 , doi:10.1109/TIT.1976.1055638, (原始内容存档 (PDF)于2017-12-03)
- Pass, Rafael, A Course in Cryptography (PDF), [27 November 2015], (原始内容 (PDF)存档于2022-05-23)
- Goldwasser, Shafi, Lecture Notes on Cryptography (PDF), [25 November 2015], (原始内容 (PDF)存档于2022-04-20)
- Ostrovsky, Rafail, Foundations of Cryptography (PDF), [27 November 2015], (原始内容 (PDF)存档于2022-02-16)
- Dodis, Yevgeniy, Introduction to Cryptography Lecture Notes (Fall 2008), [17 December 2015], (原始内容存档于2017-11-05)
- Lindell, Yehuda, Foundations of Cryptography (PDF), [17 December 2015], (原始内容 (PDF)存档于2022-01-19)
Bellare, M. Many-to-one Trapdoor Functions and their Relation to Public-key Cryptosystems. Advances in Cryptology. June 1998.
Goldwasser's lecture notes, def. 2.16
Ostrovsky, pp. 6-10, def. 11
Pass's notes, def 56.1; Dodis's def 7, lecture 1.
Goldwasser's lecture notes, 2.3.2; Lindell's notes, pp. 17, Ex. 1.
Goldwasser's lecture notes, 2.3.4