求逆实验 I n v e r t A , f ( n ) Invert_{A,f}(n) InvertA,f(n),
一个函数 f : { 0 , 1 } ∗ → { 0 , 1 } ∗ f:\{0,1\}^* \rightarrow \{0,1\}^* f:{0,1}∗→{0,1}∗(任意长度)是单向函数(One-way Function),如果它满足两个条件:
注意,难以求逆说的是,任意多项式时间敌手 A A A,对于均匀随机的 x x x的像 f ( x ) f(x) f(x),难以计算出它的原像
P r x ← { 0 , 1 } ∗ [ A ( 1 n , f ( x ) ) ∈ f − 1 ( f ( x ) ) ] ≤ n e g l ( n ) \underset{x \leftarrow \{0,1\}^*}{Pr}[A(1^n, f(x)) \in f^{-1}(f(x))] \le negl(n) x←{0,1}∗Pr[A(1n,f(x))∈f−1(f(x))]≤negl(n)
OWF并非对所有点 x x x都难以求逆,甚至可以存在可数无限个求逆容易的点。不是OWF的函数,也可以存在某些难以求逆的点。
目前没有证明OWF存在,也没有证明OWF不存在。如果OWF存在,那么 P ≠ N P P \neq NP P=NP(因为 O W F ∉ P OWF \notin P OWF∈/P)。反之,因此即使 P ≠ N P P \neq NP P=NP,也无法证明OWF存在,因为一个函数 f ∉ P f \notin P f∈/P,仅仅是存在至少一个点 x x x, f ( x ) f(x) f(x)难以求逆,并不意味着 f f f一定是OWF。
如果一个OWF是并且length-preserving( ∣ f ( x ) ∣ = ∣ x ∣ , ∀ x |f(x)|=|x|,\forall x ∣f(x)∣=∣x∣,∀x)并且是双射,那么它是单向置换(One-way Permutation)
如果 1 n 1^n 1n足够大,那么 O W P ≡ c O W F OWP \overset{c}{\equiv} OWF OWP≡cOWF,它们计算上不可区分。
OWF难以求逆,但计算部分输入信息可以是容易的。令 g g g是OWF,那么 f ( x 1 , x 2 ) = ( x 1 , g ( x 2 ) ) f(x_1,x_2)=(x_1,g(x_2)) f(x1,x2)=(x1,g(x2))也是OWF。
一个函数 h c : { 0 , 1 } ∗ → { 0 , 1 } hc:\{0,1\}^* \rightarrow \{0,1\} hc:{0,1}∗→{0,1}是关于函数 f f f的硬核谓词,如果它满足
一个双射函数 f f f有硬核 h c hc hc,仅当 f f f是OWF(如果不是OWF,因为双射,可以求 f ( x ) f(x) f(x)原像 x x x,进而 h c ( x ) hc(x) hc(x)容易计算)
有硬核的函数未必是OWF,比如 f ( x 1 ⋯ x n ) = x 1 ⋯ x n − 1 f(x_1\cdots x_n)=x_1\cdots x_{n-1} f(x1⋯xn)=x1⋯xn−1和它的硬核 h c ( x 1 ⋯ x n ) = x n hc(x_1\cdots x_n)=x_n hc(x1⋯xn)=xn
Goldreich-Levin Theorem:假设存在一个单向函数(单向置换) f f f,那么就存在拥有硬核 h c hc hc的单向函数(单向置换) g g g,构造如下
g ( x , r ) : = ( f ( x ) , r ) h c ( x , r ) : = ⊕ i = 1 n x i ⋅ r i g(x,r) := (f(x), r)\\ hc(x,r) := \oplus_{i=1}^n x_i \cdot r_i g(x,r):=(f(x),r)hc(x,r):=⊕i=1nxi⋅ri
其中 ∣ x ∣ = ∣ r ∣ = n |x|=|r|=n ∣x∣=∣r∣=n。即:用 r r r挑选比特串 x x x的随机子集, f ( x ) f(x) f(x)可以隐藏这个随机子集的异或值。
一个确定性多项式时间算法 G : { 0 , 1 } n → { 0 , 1 } l ( n ) G:\{0,1\}^n \rightarrow \{0,1\}^{l(n)} G:{0,1}n→{0,1}l(n)是伪随机生成器(Pseudorandom Generator),如果它满足两个条件:
构造PRG:令 f f f是一个拥有硬核 h c hc hc的OWP,那么扩张因子为 l ( n ) = n + 1 l(n)=n+1 l(n)=n+1的伪随机生成器可以构造如下
G ( s ) : = f ( s ) ∣ ∣ h c ( s ) G(s) := f(s) || hc(s) G(s):=f(s)∣∣hc(s)
注意,OWF是不够的。例如, g g g是OWF,令 f = 2 g f=2g f=2g也是OWF,但从随机分布中区分出 f ( s ) ∣ ∣ h c ( s ) f(s) || hc(s) f(s)∣∣hc(s)是容易的,倒数第二个比特是偶数。
扩展PRG:如果存在扩张因子 l ( n ) = n + 1 l(n)=n+1 l(n)=n+1的伪随机生成器 G G G,那么就存在 l ( n ) = p o l y ( n ) l(n)=poly(n) l(n)=poly(n)的伪随机生成器 G ′ G' G′,构造如下
G 1 ( s ) : = G ( s ) = ( s 1 ∈ { 0 , 1 } n , σ 1 ∈ { 0 , 1 } ) G k ( s ) : = ( G ( s k − 1 ) , σ k − 1 , ⋯ , σ 1 ) = ( s k ∈ { 0 , 1 } n , σ k , ⋯ , σ 1 ) G ′ ( s ) : = G p ( n ) ( s ) G_1(s) := G(s) = (s_1 \in \{0,1\}^{n},\sigma_1 \in \{0,1\})\\ G_k(s) := (G(s_{k-1}), \sigma_{k-1},\cdots,\sigma_1) = (s_{k} \in \{0,1\}^{n}, \sigma_{k},\cdots,\sigma_1)\\ G'(s) := G_{p(n)}(s) G1(s):=G(s)=(s1∈{0,1}n,σ1∈{0,1})Gk(s):=(G(sk−1),σk−1,⋯,σ1)=(sk∈{0,1}n,σk,⋯,σ1)G′(s):=Gp(n)(s)
简单来说,就是每次迭代都只将前 n n n位输入 G G G,并将最后 1 1 1位保留在末尾。
令 F : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ F:\{0,1\}^* \times \{0,1\}^* \rightarrow \{0,1\}^* F:{0,1}∗×{0,1}∗→{0,1}∗是可以有效计算的带密钥函数(Efficient Keyed Function),它是伪随机函数(Pseudorandom Function),如果任意的PPT区分器 D D D,满足如下条件
∣ P r [ D F k ( 1 n ) = 1 ] − P r [ D f ( 1 n ) = 1 ] ∣ ≤ n e g l ( n ) |Pr[D^{F_k}(1^n)=1] - Pr[D^{f}(1^n)=1]| \le negl(n) ∣Pr[DFk(1n)=1]−Pr[Df(1n)=1]∣≤negl(n)
其中 k ∈ { 0 , 1 } n k\in\{0,1\}^n k∈{0,1}n是均匀随机的,均匀选取 f ∈ F u n c n f \in Func_n f∈Funcn,这里 F u n c n Func_n Funcn是所有 n n n比特输入输出函数的集合,大小为 ( 2 n ) 2 n (2^n)^{2^n} (2n)2n
构造PRF:如果存在扩张因子 l ( n ) = 2 n l(n)=2n l(n)=2n的伪随机生成器 G ( x ) = ( G 0 ( x ) , G 1 ( x ) ) G(x)=(G_0(x),G_1(x)) G(x)=(G0(x),G1(x)),那么就存在伪随机函数 F k : { 0 , 1 } n → { 0 , 1 } n F_k: \{0,1\}^n \rightarrow \{0,1\}^n Fk:{0,1}n→{0,1}n,构造如下
F k ( x 1 ⋯ x n ) : = G x n ( ⋯ ( G x 2 ( G x 1 ( k ) ) ) ) F_k(x_1\cdots x_n) := G_{x_n}(\cdots(G_{x_2}(G_{x_1}(k)))) Fk(x1⋯xn):=Gxn(⋯(Gx2(Gx1(k))))
其实,上述过程就是在以 k k k为根、以 G 0 , G 1 G_0,G_1 G0,G1为左右子树的二叉树上,用 x = x 1 ⋯ x n x=x_1\cdots x_n x=x1⋯xn作为路径检索叶子。
另外,反过来从PRF构建PRG也是容易的,如 G ( s ) : = F s ( 1 ) ∣ ∣ ⋯ ∣ ∣ F s ( l ) G(s):= F_s(1)||\cdots||F_s(l) G(s):=Fs(1)∣∣⋯∣∣Fs(l)
OWF的输出均匀,但是输出均匀的函数不一定是OWF。例如, F k ( x ) = k ⊕ x F_k(x)=k\oplus x Fk(x)=k⊕x,对于均匀随机的 k k k,它的输出是均匀的,但可以被差分分析。
令 F : { 0 , 1 } ∗ × { 0 , 1 } ∗ → { 0 , 1 } ∗ F:\{0,1\}^* \times \{0,1\}^* \rightarrow \{0,1\}^* F:{0,1}∗×{0,1}∗→{0,1}∗是可以有效计算的带密钥置换(Efficient Keyed Permutation),它是强伪随机置换(Strong Pseudorandom Permutation),如果任意的PPT区分器 D D D,满足如下条件
∣ P r [ D F k , F k − 1 ( 1 n ) = 1 ] − P r [ D f , f − 1 ( 1 n ) = 1 ] ∣ ≤ n e g l ( n ) |Pr[D^{F_k, F^{-1}_k}(1^n)=1] - Pr[D^{f,f^{-1}}(1^n)=1]| \le negl(n) ∣Pr[DFk,Fk−1(1n)=1]−Pr[Df,f−1(1n)=1]∣≤negl(n)
其中 k ∈ { 0 , 1 } n k\in\{0,1\}^n k∈{0,1}n是均匀随机的,均匀选取 f ∈ P e r m n f \in Perm_n f∈Permn,这里 P e r m n Perm_n Permn是所有 n n n比特置换的集合,大小为 ( 2 n ) ! (2^n)! (2n)!
注意,Strong
说的是,即使额外给定求逆预言机,依然难以区分。
构造PRP:如果存在伪随机函数 f f f,那么就存在强伪随机置换 F k ( 4 ) ( x ) F_k^{(4)}(x) Fk(4)(x),其中 k = { k 1 , k 2 , k 3 , k 4 } k=\{k_1,k_2,k_3,k_4\} k={k1,k2,k3,k4}, ∣ k i ∣ = n |k_i|=n ∣ki∣=n, x = ( L 0 , R 0 ) ∈ { 0 , 1 } 2 n x=(L_0,R_0) \in \{0,1\}^{2n} x=(L0,R0)∈{0,1}2n,构造如下
L i : = R i − 1 R i : = L i − 1 ⊕ F k i ( R i − 1 ) L_i := R_{i-1}\\ R_i := L_{i-1} \oplus F_{k_i}(R_{i-1}) Li:=Ri−1Ri:=Li−1⊕Fki(Ri−1)
最后将 ( L 4 , R 4 ) (L_4,R_4) (L4,R4)作为输出。这其实就是 4 4 4轮的Feistel network;如果是 3 3 3轮的,那么只是PRP,并不Strong
可以从PRG构造OWF,事实上 l ( n ) = 2 n l(n)=2n l(n)=2n的 G ( ⋅ ) G(\cdot) G(⋅)它本身就是单向的,值域比定义域大 2 n 2^n 2n倍。
使用线性反馈移位寄存器(Linear-Feedback Shift Registers,LFSRs)构造的流密码,它是PRG的候选。
使用PRG可以构造窃听安全(Eavesdropper)的对称加密,
可以从 E A V EAV EAV安全的对称加密构造OWF,构造为 f ( k , m , r ) : = E n c k ( m ; r ) ∣ ∣ m f(k,m,r):=Enc_k(m;r)||m f(k,m,r):=Enck(m;r)∣∣m,其中 ∣ k ∣ = n , ∣ m ∣ = 2 n , ∣ r ∣ = l ( n ) |k|=n,|m|=2n,|r|=l(n) ∣k∣=n,∣m∣=2n,∣r∣=l(n)
如果PRP存在,那么就存在 C C A CCA CCA安全的对称密码。
利用PRF,可以构造固定长度(fixed-length)的MAC, Π = ( G e n , M a c , V r f y ) \Pi=(Gen,Mac,Vrfy) Π=(Gen,Mac,Vrfy)
M a c Mac Mac:令 F F F是PRF,输入密钥 k ∈ { 0 , 1 } n k \in \{0,1\}^n k∈{0,1}n和消息 m ∈ { 0 , 1 } n m \in \{0,1\}^n m∈{0,1}n,输出 t : = F k ( m ) t:=F_k(m) t:=Fk(m)
V r f y Vrfy Vrfy:输入 k , m , t ∈ { 0 , 1 } n k,m,t \in \{0,1\}^n k,m,t∈{0,1}n,判断 t = F k ( m ) t = F_k(m) t=Fk(m)是否满足
它是在自适应选择消息攻击(Adaptive Chosen-message Attack)下的存在性不可伪造(Existentially Unforgeable)的,
P r [ M a c − f o r g e A , Π ( n ) = 1 ] ≤ n e g l ( n ) Pr[Mac-forge_{A,\Pi}(n)=1] \le negl(n) Pr[Mac−forgeA,Π(n)=1]≤negl(n)
从固定长度的MAC,可以构造任意长度(variable-length)的MAC
利用PRF,可以构造任意长度的CBC-MAC
一个 E U F − C M A EUF-CMA EUF−CMA的MAC,根据安全性定义,它就是OWF
抗碰撞Hash函数 H : { 0 , 1 } 2 n → { 0 , 1 } n H:\{0,1\}^{2n} \rightarrow \{0,1\}^n H:{0,1}2n→{0,1}n可以作为OWF,因为 P r [ I n v e r t A , f ( n ) ] = P r [ H a s h − c o l l A , Π ( n ) ) = 1 ] Pr[Invert_{A,f}(n)]=Pr[Hash-coll_{A,\Pi}(n))=1] Pr[InvertA,f(n)]=Pr[Hash−collA,Π(n))=1]
使用Merkle-Damgard Transform,可以将固定长度Hash函数 h s h^s hs转化为任意长度Hash函数 H H H,
Z 1 : = h s ( I V ∣ ∣ m 1 ) Z i : = h s ( Z i − 1 ∣ ∣ m i ) H ( m ) : = h s ( Z B ∣ ∣ L ) Z_1 := h^s(IV||m_1)\\ Z_{i} := h^s(Z_{i-1}||m_i)\\ H(m) := h^s(Z_{B}||L) Z1:=hs(IV∣∣m1)Zi:=hs(Zi−1∣∣mi)H(m):=hs(ZB∣∣L)
注意,这里的长度 L L L是后置的, I V IV IV是任意常数。
使用抗碰撞Hash函数 h h h构造HMAC,
k i n : = h s ( I V ∣ ∣ k ⊕ i p a d ) k o u t : = h s ( I V ∣ ∣ k ⊕ o p a d ) Z 1 : = h s ( k i n ∣ ∣ m 1 ) Z i : = h s ( Z i − 1 ∣ ∣ m i ) Z B + 1 : = h s ( Z B ∣ ∣ L ) t : = h s ( k o u t ∣ ∣ Z B + 1 ) k_{in} := h^s(IV||k\oplus ipad)\\ k_{out} := h^s(IV||k\oplus opad)\\ Z_1 := h^s(k_{in}||m_1)\\ Z_{i} := h^s(Z_{i-1}||m_i)\\ Z_{B+1} := h^s(Z_{B}||L)\\ t := h^s(k_{out}||Z_{B+1}) kin:=hs(IV∣∣k⊕ipad)kout:=hs(IV∣∣k⊕opad)Z1:=hs(kin∣∣m1)Zi:=hs(Zi−1∣∣mi)ZB+1:=hs(ZB∣∣L)t:=hs(kout∣∣ZB+1)
可以从因子分解、RSA、DLP等问题,构造出OWF、OWP、Hash等部件。
[1] J. Katz and Y. Lindell. Introduction to modern cryptography. CRC press, 2020.