【强单向函数】
定义
若函数 $f:\{0,1\}^{*} \to \{0,1\}^{*}$ 满足:
(1)容易计算:存在一个确定性多项式时间算法 $A$,使得对于任意输入 $x$,算法 $A$ 都能输出 $f(x)$,即:
(2)难以反演:对于任意概率多项式时间算法 $A’$,任意正多项式 $\mathrm{poly}(\cdot)$ 以及所有充分大的 $n$,都有:
则称该函数被称为强单向函数(Strong One-way Function)。其中,$U_n$ 表示 $\{0,1\}^{n}$ 上均匀分布的随机变量
需要注意的是,如果 $f(x)$ 是单射函数,那么 $x$ 是唯一原像。但在一般情况下,$f(x)$ 未必是单射函数,同一函数值可能对应多个原像。因此,反演算法 $A’$ 不一定要输出最初的输入 $x$ 本身,其只需要输出任意一个原像就算反演成功,即只要输出某个 $x’$,满足:
辅助输入 $1^n$ 的作用
在上述定义中,反演算法 $A’$ 的输入不仅包括函数 $f(x)$,还包括 $1^n$,这里的 $1^n$ 是用一元表示法给出的输入长度信息,其作用是告诉反演算法期望输出的原像长度
引入 $1^n$ 的主要原因,是为了排除一种不合理情况:某个函数之所以难以反演,并不是因为它真的具有计算困难性,而只是因为它把输入长度大幅压缩,导致反演算法连输出原像的时间都不够
例如,考虑函数 $f_{len}$,其将输入 $x$ 映射为 $|x|$ 的二进制表示:
由于输出长度为 $|f_{len}(x)|=\log_2 |x|$,反演算法的运行时间只能是关于 $|f_{len}(x)|$ 多项式,它甚至没有足够时间输出长度为 $|x|$ 的原像。因此,这种难以反演并不是真正的密码学困难性,而只是由输出过短造成的形式困难
因此,在给定辅助输入 $1^{|x|}$ 后,反演算法可以在关于主输入 $f(x)$ 和目标输出长度的总长度多项式时间内运行。这样,定义就避免了把极端压缩导致无法输出误认为真正的单向性
如果函数 $f$ 是长度保持函数(Length Preserving Function),即对所有 $x$ 都有:
那么辅助输入 $1^n$ 就是冗余的。更一般地,如果仅根据 $f(x)$ 就能在关于 $|x|$ 的多项式时间内生成 $1^{|x|}$,那么该辅助输入同样可以省略
反演困难性的概率空间
单向函数中的难以反演应理解为:对所有高效反演算法,其成功概率都有一个可忽略的上界
这个成功概率不是只对算法本身的随机性取概率,而是同时对两类随机性取概率:
- 输入分布的随机性:先从 $\{0,1\}^{n}$ 中均匀随机选取 $x$,再计算 $f(x)$ 作为反演算法的输入
- 算法内部的随机性:反演算法 $A’$ 可能是概率算法,因此它自身也有随机性
如果函数 $f$ 在 $\{0,1\}^n$ 上诱导一个置换,那么 $f(U_n)$ 仍然是在 $\{0,1\}^n$ 上均匀分布的。但一般情况下,函数 $f$ 未必是单向函数,因此 $f(U_n)$ 的分布可能与均匀分布相差很大
故而无论是哪种情况,定义都要求反演算法在上述概率空间中的成功概率是可忽略的
可忽略概率与显著概率
显著函数
在概率多项式实际模型中,介绍了可忽略函数。与其相对的,若对于任意多项式 $\mathrm{poly}(\cdot)$,均 $\exists N\in\mathbb{N}$,使得 $\forall n>N$,都有:
则 $\nu(\cdot)$ 称为显著函数(Noticeable Function)。
可忽略概率与显著概率
单向函数定义中的成功概率必须是可忽略概率(Negligible Probability),即当输入长度 $n$ 增大时,攻击算法成功的概率必须小于任意多项式倒数。与可忽略概率相对的是显著概率(Noticeable Probability),即当输入长度 $n$ 增大时,攻击算法成功的概率必须大于任意多项式倒数
需要注意的是,一个函数可能既不是可忽略的,也不是显著的。也就是说,不可忽略与显著在这里并不完全等价,二者之间还可能存在中间情形
这种定义方式与多项式时间计算自然对应:如果一个事件以可忽略概率发生,那么即使把实验重复多项式次,它发生的概率仍然是可忽略的
因此,在密码学中,把可行计算定义为多项式时间计算,把不可接受的攻击成功率定义为非可忽略成功率,二者是相互匹配的
反演算法的碰撞概率
单向函数的定义并不是要求反演绝对不可能,而是要求任何概率多项式时间算法都不能显著优于平凡策略
随机猜测算法
考虑一个平凡算法 $A_1$,在输入 $(y,1^n)$ 后,均匀随机地输出一个长度为 $n$ 的字符串。也就是说,它并不真正利用 $y$ 的结构,而只是随机猜测一个可能的原像 $x$
令 $U’_n$ 表示另一个独立地、均匀分布在 $\{0,1\}^n$ 上的随机变量,则 $A_1$ 的成功概率为:
这个概率被称为 $f(x)$ 的碰撞概率(Collision Probability)
进一步,考虑其下界。令 $p_y=P[f(U_n)=y]$,由于 $U_n$ 均匀分布在 $\{0,1\}^{n}$ 上,而 $\{0,1\}^n$ 中共有 $2^n$ 个输入,故 $f(U_n)$ 最多有 $2^n$ 个可能的输出。为使碰撞概率 $\sum\limits_{y} p_y^2$ 尽可能小,那就应该使这些概率尽量平均。最理想的一种情况是,一共有 $2^n$ 个可能输出,每个输出的概率都是 $\frac{1}{2^n}$,此时碰撞概率为:
所以一般情况下必有:
也就是说,哪怕 $A_1$ 只是随机猜测一个与原像相同的长度的输出,它的成功概率至少是 $2^{-n}$,因此单向函数的定义不能要求反演算法成功概率等于 $0$,因为平凡随机猜测总有非零成功概率
由此可以得到三个结论:
- 对于任意函数 $f$,随机猜测算法 $A_1$ 的成功概率都严格大于 $0$。因此,单向函数的定义不能要求所有高效算法永远反演失败
- 如果 $f$ 是单射函数,那么 $A_1$ 反演成功的概率是可忽略的。但这并不能说明 $f$ 是单向函数,只能说明 $A_1$ 本身是一个很弱的平凡算法
- 由于 $A_1$ 本身是一个概率多项式时间算法,它的成功概率也必须满足单向函数定义中的可忽略上界。即如果 $f$ 是单向函数,那么 $f(U_n)$ 的碰撞概率必须是可忽略的
固定输出算法
再考虑另一个平凡算法 $A_2$,其对所有相同长度的输入都输出同一个固定字符串,例如:
那么,对于任意函数 $f$,该算法的成功概率为:
由于 $U_n$ 在 $2^n$ 个字符串中均匀随机选择,其中有 $|f^{-1}(f(0^n))|$ 个字符串满足条件,因此有:
故有:
进一步,考虑其下界。按照原像集合的定义:
显然,令 $x=0^n$,即有:
因此,原像集合中至少有一个元素,故:
于是,对于 $\frac{|f^{-1}(f(0^n))|}{2^n}$,有:
即:
也就是说,哪怕 $A_2$ 只是固定的输出 $0^n$,它的成功概率至少是 $2^{-n}$,即在真实输入本来就是 $0^n$ 时成功。如果还有其他的 $x\neq 0^n$ 也满足 $f(x)=f(0^n)$,那么 $A_2$ 的成功概率会更大
由此,也可以得到三个结论:
- 对于任意函数 $f$,固定输出算法 $A_2$ 的成功概率也严格大于 $0$
- 如果 $f$ 是单射函数,那么 $A_2$ 反演成功的概率是可忽略的
- 如果 $f$ 是单向函数,那么被 $f$ 映射到 $f(0^n)$ 的输入所占比例必须是可忽略的
【弱单向函数】
定义
若函数 $f:\{0,1\}^{*} \to \{0,1\}^{*}$ 满足:
(1)容易计算:存在一个确定性多项式时间算法 $A$,使得对于任意输入 $x$,算法 $A$ 都能输出 $f(x)$,即:
(2)轻微难以反演:存在一个正多项式 $\mathrm{poly}(\cdot)$,使得对任意概率多项式时间算法 $A’$,以及所有充分大的 $n$,算法 $A’$ 反演 $f(U_n)$ 的失败概率至少为 $\frac{1}{\mathrm{poly}(n)}$,即
则称该函数被称为弱单向函数(Weak One-way Function)。其中,$U_n$ 表示 $\{0,1\}^{n}$ 上均匀分布的随机变量
等价地,对于失败概率,可以写为成功概率的上界形式:
需要注意的是,不是说每个算法 $A’$ 都可以有自己对应的多项式 $\mathrm{poly}_{A’}(\cdot)$,而是存在一个统一的多项式 $\mathrm{poly}(\cdot)$,可以同时约束所有高效反演算法的成功概率与失败概率
与强单向函数的区别
两者的差异主要体现在对反演成功概率的要求不同。对强单向函数来说,要求任意高效反演算法的成功概率都必须是可忽略的,即对任何概率多项式时间算法都几乎不可能成功反演
而弱单向函数不要求所有高效反演算法的成功概率都是可忽略的,只要求所有高效反演算法都会以某个显著概率失败
简单来说,强单向函数要求高效算法几乎总是失败,而弱单向函数只要求高效算法不能总是成功