上篇回顾:
- 一次一密是完善保密的,但因为有许多缺陷而无法广泛应用;
- 香农定理:①Gen产生任何密钥k的概率都是;②任意选择的明文m和密文c均能从密钥空间K中找到对应的k,满足.
- 密码学中计算方法:具体方法(量化安全)和渐进方法(引入安全参数n和可忽略函数)
一、语义安全(不可区分与语义安全等价)
直白理解:没有关于明文的任何有意义的信息泄露。
表示敌手预先了解的关于明文的外部消息,表示敌手希望获取的关于明文的有意义的信息。
加密方案是窃听者出现时语义安全的定义:如果对于任意敌手、任意明文分布、任意函数f和h,一个敌手根据密文和获得,,另一个敌手只根据获得,则两个敌手成功概率之间的差异是可以忽略的。
二、伪随机性
1.完善保密的局限性要求密钥和密文一样长,不可区分性是对完善保密的放松,那么伪随机是对真正随机性的放松,通过伪随机性的要求产生足够长但不完全随机的密钥。
一个固定的字符串谈不上是否随机或伪随机,随机或伪随机指的是产生字符串的过程。
无法绝对地证明随机性。
2.区分器(Distinguisher)[统计测试]
一类判断是否随机的方法:从一个随机生成器中得到多个随机序列并进行一套统计测试。例如:一组生成好的字符串0和1的数量之差不应该太大且最长连续相同的字符不应该太长等。
伪随机性意味着下一bit不可预测(next-bit unpredictable)。
三、伪随机生成器(Pseudorandom Generator, PRG)
1.定义:令为多项式,G是一个确定的多项式时间算法,满足对于任意输入,G输出一个长度为的字符串,满足以下两个条件则称G是一个PRG:
①延展:,只有生成更长的字符串才有意义,否则可以直接从种子中复制一段输出;
②伪随机:对于任意PPT区分D,,其中,r是随机的,种子s随机的,是延长因子。意思是输出不同结果的概率差可以忽略。
2.充分种子空间(种子必须足够长来抵抗蛮力攻击)
蛮力攻击:如果给定无穷的时间,通过枚举所有的种子来产生所有串,则能以较高的概率区分伪随机串。
四、规约法和规约证明
1.规约法
规约法是将一个问题A变换为另一个问题B,即A可以通过解决B来解决。表示A可规约为B,如果B的解存在并且给定该解时A可解,其中m表示映射规约。即:解决A不能比解决B更难,因为A可以通过解决B来得到解决。
2.规约证明
证明一个加密方案在假设下是安全的,即破解该方案不可解。可将“解决假设的算法
”规约到“破解的算法”。
先令一个PPT算法能够以概率破解。假设一个问题是难以解决的,即不存在PPT算法来解决,是一个解决的概率算法。
规约:解决假设问题可以通过破解,将规约到,通过作为子函数以解决问题。
矛盾:若加密方案可以被有效破解,即不可忽略,则可以以不可忽略的概率解决问题,与假设矛盾,因此一定可忽略。
五、构造安全的加密方案
1.一个安全的定长加密方案(窃听下不可区分)
令G是一个带扩展因子l的伪随机发生器,,,一个PRG以长度为n的密钥作为种子,输出与明文相同长度的pad。
- Gen:输入,均匀随机选择,输出密钥;
- Enc:输入一个密钥,以及明文,加密方式和一次一密一样,输出密文;
- Dec:解密方式也和一次一密一样,输入密钥和密文,最终输出解密的明文.
对该方案的评价:除了密钥更短并且用伪随机生成器生成比特串与明文异或,其他方面和一次一密相同,对敌手而言,该方案和一次一密完全相同,可以说该方案解决了一次一密密钥过长的问题。
2.对该定长加密方案的证明(类似于第二章的PrivK窃听不可区分实验)
该方案的特别之处在于不需要生成密钥,而是以长度为n的密钥作为种子输出与明文相同长度的,。根据的两种可能:
①当是由G生成的,即伪随机串,敌手A面对的是;
②当是真随机串,则敌手A面对的就是一次一密。
证明敌手A在实验中的成功概率可忽略:
①真随机串即一次一密:;
②当为伪随机串,;
①式-②式可得:;
所以可以忽略。
3.输出长度可变的伪随机发生器
G接受两个输入:种子s以及输出长度l,G应当输出一个长度为l的伪随机字符串。
4.流密码(Stream Cipher)
受一次一密方案的启发,通过将变长消息与密钥的异或进行加密。
流密码方案:通过将多个消息“拼成”一个消息,与伪随机的密钥流进行异或加密。用一小段密钥产生加密明文所有密钥。(主要依靠硬件来实现)
方案优点:逻辑简单,比分组密码(划分明文,每组分别加密)更快;
方案缺点:难以做到安全。
5.CPA(Chosen-Plaintext Attacks)选择明文攻击
敌手具有获得其所选择明文对应密文的能力。oracle(预言机)敌手选择明文m传给加密者,加密者使用加密算法得到c返回给敌手,将这一过程看做一次查询,可进行任意多次且每次使用同样的密钥k。
6.CPA不可区分实验
①提前生成密钥,为下一步提供加密预言机;
②敌手A被给予输入和对加密函数的预言机访问(oracle access),输出相同长度的明文;
③生成随机比特,将密文发送给A;
④A继续对进行访问,输出,如果,则A成功,,否则输出0.
其中,预言机是一个黑盒,只接受输入并返回输出。该实验与区别在于敌手始终可以访问加密预言机,可以根据明文和密文进行构造性的查询,因此CPA敌手更加强大。