Lec3 Computational Security#
约 1490 个字 预计阅读时间 10 分钟
在了解了完善保密加密后,我们发现它最大的问题在于密钥至少要与明文一样长。因此我们设想另一种安全定义,它是被放宽的,牺牲了无条件下的安全性,以此获取更短密钥下的可实现性。
故,这两节的目标集中在如何定义和实现这种安全上。本节偏重于基础的前置知识的补充和定义。
Key words: Computational Security; Poly-time ; OWF
Reference: 3.1 3.2 6.1
Goal: Propose a proper security Notion that can be achieved with “Short” secret key.
计算安全概述#
假设敌手拥有无限计算能力的安全方案叫“信息理论安全”,即上一讲提到的“完美安全”。对应的,计算安全指的是只要攻破该加密方案所需的计算量很大,这个级别的安全就足够了,它明显比信息理论安全弱。并且计算安全强依赖于不能被证明的假设,而信息理论安全完全不需要。
任何对密码学构造方法的计算安全的无条件证明,都需要证明\(P\neq NP\).
两个放宽条件:#
- Relaxition1:Attacker’s computational power is bounded.
仅仅在对抗”Efficient”的敌手时,安全性存在。”Efficient”指的是在可行的时间内运行
- Relaxition2: Advantage is small.
敌手潜在成功概率非常小
Model the adversary#
构建简单的敌手模型。外界的框代表Perfect security,即信息理论安全;中间的小框代表被限制计算能力的敌手,即”efficient” adversary.
这里的efficient指的是polynomial running time
渐进方法#
对于两个放宽条件,具体的实现是通过复杂性理论中的渐进方法完成的。我们将引入安全参数\(n\),把敌手的运行事件以及成功概率视为\(n\)的函数。具体地说:
- “可行的”、“有效的”等价于以\(n\)为参数的多项式时间内运行的概率算法
- “小的成功概率”等价于小于任何以\(n\)为参数的多项式倒数
渐进方法的优点是不需要依赖于任何特定假设,并且把渐进安全的保证转换为具体安全的保证是相对简单的。
补充:计算安全下的归约形式
Definitions#
Def(Deterministic Algorithm)#
A deterministic algorithm is a turing machine with an input tape and an output tape
Def(running time)#
let \(M\) be a turing machine, we say the running time of \(M\) is \(T\) if \(\forall x\in \{ 0,1 \}^{*}\),
\(M(x\)) will halt in at most \(T(\lvert x\rvert)\) steps
Why Polynomial so important#
这揭示了多项式的多个性质:
- Language Independent: 语言转换后(java -> C)仍是Poly的
- composition: 任意Poly的组合仍是Poly的,\(eg: Poly \times Poly = Poly\)
- Natural: 经典算法都是Poly-time的
- Slow-growing: Long term时间内,增长缓慢
从Poly的重要性中,自然地引出 Poly-time Running Time定义
Def(Poly-time Running Time)#
Running time of \(M\) if Polynomial if \(\exists\) a const \(c\),\(\forall x\in \{0,1\}^*\),\(M(x)\) will halt in \(\lvert x \rvert^c\) steps.
One way function#
Onewayness: \(x \rightarrow f(x)\) is easy,while \(f(x) \rightarrow x\) is hard.
Worst-case One way function#
Let “f” be a function that maps \(\{0,1\}^* \rightarrow \{0,1\}^n\),we say “f” is an one-way function If
-
Easy to Compute: \(\exists\)poly-time \(M\), \(\forall x\in \{0,1\}^*\),that \(M(x) = f(x)\)
-
Hard to Invert: \(not\exists\) efficient Randomized Adversary,\(\forall x\in \{0,1\}^*,Pr[A(f(x))=t:f(t)=f(x)]=1\).
显然这个定义是非常宽松的,因为它只要求敌手不能攻破所有的x,即使有一部分x被攻破,也会被认为是安全的。
Strong One way function#
想要加强定义,需要在等式中引入x的分布约束,但是x是任意长字符串,空间是无穷的,无法通过直接定义 $$ \forall A,\Pr\limits_{x,r} [A(f(x))=t:f(t)=f(x)]\leq small $$ 来实现。又因为 \(\{0,1\}^*=\{\{0,1\}^1,\{0,1\}^2,\cdots ,\{0,1\}^n,\cdots\}\)
通过安全参数n,可以把x分割为有限空间,这样就可以引入x了,故强定义为: $$ \forall n,\Pr\limits_{x,r,x\leftarrow {0,1}^n}[A(f(x))=t:f(t)=f(x)]\leq small $$
如何定义small#
定义一个小量是困难的,自然地,我们会想到通过\(small=\frac{1}{big}\),通过一个足够大量的倒数来获得small
在这里,我们把这个大数取为 super-poly
super-poly:超多项式级,如\(2^n\),\(n^{\sqrt{n}}\),\(n^{logn}\)
Def: we say a function is super-poly if for any const c,\(\exists N,s.t.\) for any \(n\geq N\),\(f(n)\geq n^c\)
又因为这个small量是与安全参数的规模有关的,所以将它定义为:\(negl(n)\)
上面的强定义也就可以修正为: $$ \forall n,\Pr\limits_{x,r,x\leftarrow {0,1}^n}[A(f(x))=t:f(t)=f(x)]\leq negl(n) $$
补充:在引入安全参数n后,可对第一讲中定义的\(Gen(\cdot)\)中的参数做补充,修正为\(Gen(1^n)\rightarrow sk,\lvert k\rvert \geq 2^n\)
安全参数n决定了这是什么安全规模的安全系统
同时,negl函数具有技术上的良好性质:
Weak One way function#
在强定义中,条件过于苛刻,因为它要求每个x被攻破的概率很小。实际实现上,往往采用折中的方法,即定义一个Weak one way function,让被攻破的概率在小于某个值时是可以接受的
PPT:概率多项式时间
这样就把概率限制在了不是那么小的范围内了
eg:
当x,y取大素数时,就变成了大数分解问题,这就是一个Weak One way function
Further Discussion#
有些地方并不Care所谓强弱,比如教材对于难以求逆的定义是: $$ \Pr\limits_{x\leftarrow {0,1}^n}[A(f(x))\in f^{-1}(f(x))]\leq negl(n) $$ 但显然,它引入了函数\(negl(n)\),属于上面三种定义中的 “强定义”