陷门函数

在理论计算机科学和密码学中，陷门函数是一种在一个方向上很容易计算，但在没有特殊信息的情况下很难在相反方向上计算（寻找它的逆）的函数，称为“陷门”。陷门函数是单向函数的一种特殊情况，广泛用于公钥密码学中。 

用数学术语来说，如果f是陷门函数，则存在一些秘密信息t ，因此给定f ( x ) 和t ，很容易计算x 。考虑一把挂锁和它的钥匙。通过推动卸扣，无需使用钥匙即可将挂锁锁上。然而，想要轻松地开锁，则必需使用钥匙。这里的钥匙是陷门，而挂锁则是陷门函数。

一个简单的数学上的陷门示例是：“6895601 是两个素数的乘积。那两个素数是多少？”一个典型的“蛮力”解决方案是尝试将 6895601 不停除以一些素数，直到找到答案。但是如果已知 1931 是其中一个数字，你可以通过在任何计算器中输入“6895601 ÷ 1931”来找到答案。这个例子不是一个可靠的陷门函数——现代计算机可以在一秒钟内猜出所有可能的答案——但是这个例子可以通过使用两个更大的素数的乘积来改进。

随着Diffie 、Hellman和Merkle在 1970 年代中期发表了非对称（或公钥）加密技术后，陷门函数开始在密码学中崭露头角。事实上，创造了这个术语。已经提出了几个函数类，很快就发现陷门函数比最初想象的更难找到。例如，早期的建议是使用基于子集和问题的方案，但事实很快证明这是不合适的。

，已知最好的陷门函数 (族) 候选函数是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)) 可以忽略不计。   

如果上述集合中的每个函数都是单向排列，则该集合也称为陷门排列'''。 

 例子 
在下面的两个例子中，我们假设分解一个大的合数是很困难的（参见整数分解）。

 RSA 假设 
在此示例中，具有e模 φ(n) 的逆，即n''的欧拉总函数，是陷门：

 

如果分解已知，可以计算出，那么的逆可以通过计算得出，然后给定，我们可以找到。它的困难程度遵循 RSA 中的假设。

拉宾的二次剩余假设 

设是一个大的合数，使得，其中和是大素数，满足，并且对攻击者保密。问题是在给定的情况下计算使得。这里的陷门是的因式分解。使用陷门，的解可以给出为， 其中。有关详细信息，请参阅中国剩余定理。请注意，给定素数和 ，我们可以找到和。这里的条件保证了解和可以很好地定义。

参見 
 单向函数
 椭圆曲线密码学
 RSA加密演算法

笔记

参考 

 
 
 
 
 
 
密碼原語
密码学
密码学理论