规约证明是密码学领域中的核心证明方法,它通常被用于证明某个密码学方案是安全的。由于直接证明某个密码学方案的安全性通常是很困难的,所以我们采用规约证明。我们不需要假设给定的密码学构造是安全的,取而代之的策略是我们假设某个低层次的问题很难解决,然后基于这个假设,构造方案是安全的。换句话说,只要构造所依赖的问题是困难的,给定的密码学构造方案就是安全的。比如,RSA加密方案依赖的是整数分解的困难性,DH秘钥交换是基于离散对数问题而构建的。
读到这里,大家可能还是有一些困惑,接下来我对大家可能会产生的一些疑问做出解答。
首先,规约需满足什么条件呢?
假设有两个问题A和B,A是难问题,B是比A更难的问题。如果解决B意味着A也被解决,那么就可以把解决A问题规约到解决B问题上。解决A和解决B的关系:解决B解决A。那么,A不能被解决也就意味着B也不能被解决,即
解决A
解决B。这是显然的,举个例子,如果明天是晴天,我就去打篮球,那么明天我没去打篮球就意味着明天不是晴天。
对于以下的加密方案,我们把加密方案的安全性规约到伪随机函数的伪随机性,这是一个从右向左的规约,是否与我们之前的规约相矛盾呢?
这一点也不矛盾,把D区分出伪随机函数和真随机函数(A)规约到子敌手A攻破加密方案(B)和把把加密方案的安全性(
B)规约到伪随机函数的伪随机性(
A),其实说的是一件事,因为如果A
B为真,那么
B
A也为真。
规约证明是否必须用反证法?
我认为理论上是需要的,我们一般会采用一个比较tricky的方法,我们会构造一个概率f(n),通过我么所依赖的问题是否是难问题来确定f(n)是否为可忽略的。