现代密码学学习笔记(五)

一 回顾总计和补充

1. 分组密码:EBC、CBC、CFBOFBCTR后三者可以看作使用分组密码来实现流密码且安全性较高,是通常推荐使用的分组密码。

2. 选择密文攻击CCA:挑战者任选b\in \left \{ 0,1 \right \}m_{0},m_{1}中选取m_{b}加密后把密文c发送给敌手A A可以选择一些密文进行解密操作并尝试从解密结果或者解密过程中获取有关明文或其他密文的信息,输出b的值,猜测该密文是m_{0}还是m_{1}加密而成的。CCA安全确保了加密方案在面对选择明文攻击时仍然能够保持足够的机密性和完整性。

3.消息鉴别码:确保消息的完整性,因为所有的加密方案都不能保证消息的完整性

Mac-forge_{A,\prod }(n)说明了MAC的存在性不可伪造,实验成功则表示敌手能对一组未出现过的信息给出相应的消息鉴别码。

4. 对消息鉴别码的重放攻击:重放攻击是指将前面发送过得消息再次发送,如:将“A给B打款100元”重发九次B会收到十条一样的消息,可以使用时间戳抵挡住重放攻击,加上“this same message”表示只能被发送一次的数据信息,或为每个消息分配序列号。

二 利用PRF构造安全的消息鉴别码MAC

1.构造长度为n消息m的固定长度MAC方法(假设F是一个PRF):

①Gen:输入安全参数1^{n},均匀随机选择k\leftarrow \left \{ 0,1 \right \}^{n}

②Mac:输入密钥k\in \left \{ 0,1 \right \}^{n}和消息m\in \left \{ 0,1 \right \}^{n},输出标记t:=F_{k}(m)(若\left | m \right |\neq \left | k \right |则没有输出,即km长度必须相等,:=表示确定赋值);

③Verf:输入密钥k\in \left \{ 0,1 \right \}^{n}、消息m\in \left \{ 0,1 \right \}^{n}和标记t\in \left \{ 0,1 \right \}^{n},当且仅当t=F_{k}(m)输出1(若\left | m \right |\neq \left | k \right |则输出0)。

2. 生成变长信息的MAC的方法:

假设\prod {}'=(Gen{}',Mac{}',Verf{}')是针对长度为n的输出定长MAC的方案。

①Gen:同Gen{}'

②Mac:输入密钥k\in \left \{ 0,1 \right \}^{n}和消息m\in \left \{ 0,1 \right \}^{n},要求消息长度l<2^{\frac{n}{4}}(为了防止生日攻击,保证安全性),将m分成d个分块m_{1},...,m_{d},每个长度为\frac{n}{4}(需要填充时用0填充最后一个分块)然后,选择一个随机的标识码r\leftarrow \left \{ 0,1 \right \}^{\frac{n}{4}}

i=1,…d,计算标记t_{i}\leftarrow Mac{}'(r||l||i||m_{i}),其中i,l被唯一编码为长度为\frac{n}{4}的字符串,最后输出标记t:=<r,t_{1},...,t_{d}>(||表示拼接);

③Verf:输入密钥k\in \left \{ 0,1 \right \}^{n}和消息m\in \left \{ 0,1 \right \}^{n},要求消息长度l<2^{\frac{n}{4}}

标记t:=<r,t_{1},...,t_{d{}'}>,将m分成d个分块m_{1},...,m_{d}(对分块的要求同②),当且仅当

d{}'=d,且对于1\leq i\leq d时,Verf{}'_{_{k}}(r||i||l||m_{i},t_{i})时,输出1.(分块生成标记,但不是分块检验标记是否有效)

三 链式密码快消息认证码CBC-MAC(将分组密码转换为MAC的方法,和MAC一样防止数据在传输过程中被篡改

1. 构造CBC-MAC的方法:

①Gen:输入安全参数1^{n},均匀随机选择k\leftarrow \left \{ 0,1 \right \}^{n}

②Mac:输入一个密钥k\in \left \{ 0,1 \right \}^{n}和长度为l(n)\cdot n的消息m,(令l=l(n)),首先将m分块为m_{1},...,m_{l},每一个m_{i}的长度为n,并令t_{0}:=0^{n}

其次,对i=1,...l,令t_{i}=F_{k}(t_{i-1}\bigoplus m_{i})并输出t_{l}作为标记(只保留最后一个);

③Verf:输入一个密钥k\in \left \{ 0,1 \right \}^{n}、长度为l(n)\cdot n的消息m和长度为n的标记t,当且仅当t=Mac_{k}(m)时,输出1.

2. 变长消息的CBC-MAC:

初始化向量IV修改为|m|,|m|后置会不安全。

分别定义两个密钥k_{1},k_{2},其中k_{1}是消息m的基本CBC-MAC,记作t=Mac_{k_{1}}(m),然后输出结果\widehat{t}:=F_{t_{2}}(t).

变长消息的CBC-MAC模式示意图

3. CBC-MAC与CBC的比较:

①CBC模式使用初始向量IVCBC-MAC却没用到(用IV会不安全);

CBC中将所有的中间值c_{i}都被输出作为密文的一部分,CBC-MAC只输出最终t_{d}(输出每一个t_{i}不再安全)

CBC模式示意图

CBC-MAC模式示意图

四 抗碰撞散列函数

1. 散列函数是将任意长度的字符串通过特定的数学函数或者算法映射成固定大小的散列值的函数。散列函数是单向的,已知散列值也无法唯一确定原始数据是什么(单向性);输入发生微小变化,散列函数只会产生完全不同的结果(敏感性)。

2. 在密码学中,碰撞的含义是指两个不同的输入在通过同一哈希函数处理后,产生了相同的哈希值(或散列值或输出等),而抗碰撞则指哈希函数具备的安全性质,难以在合理时间内找到两个不同输入对应同一哈希值的情况。

抗碰撞性可以分为两个层次:弱抗碰撞性(Weak Collision Resistance)和强抗碰撞性(Strong Collision Resistance)。

弱抗碰撞性是指对于给定的一个消息m_{1}以及其哈希值H(m_{1}),要找到另一个不同的消息m_{2}使得H(m_{1})=H(m_{2}),在计算上是不可行的。这意味着即使攻击者知道了某个消息的哈希值也难以构造出另一个具有相同哈希值的不同消息。

强抗碰撞性是指要找到任意两个不同的消息,m_{1}m_{2}使得H(m_{1})=H(m_{2})在计算上也是不可行的。这意味着攻击者几乎不可能通过构造碰撞来破坏哈希函数的应用。

3.数学化定义:散列函数是一个PPT算法(Gen,H),满足如下条件:

①Gen:输入安全参数1^{n}并输出密钥s

②存在一个多项式l满足:对H输入一个密钥s和一个字符串x\in \left \{ 0,1 \right \}^{*}输出H^{s}(x)\in \left \{ 0,1 \right \}^{l(n)};

如果当输入x\in \left \{ 0,1 \right \}^{l{}'(n)}l{}'(n)>l(n)H^{s}有定义,就称(Gen,H)是输入长度为l{}'(n)的定长散列函数。

4. 碰撞发现实验Hash-coll_{A,\prod }(n)

实验目标:验证给定哈希函数H是否具备抗碰撞性

实验步骤:①运行Gen(1^{n})得到密钥s

②敌手输入s并输出xx{}'

当且仅当x\neq x{}'H^{s}(x)=H^{s}(x{}'),实验输出1,表示敌手发现了碰撞。

实验结论:如果存在PPT敌手A存在一个可忽略的函数negl(n)使得发现碰撞的概率

Pr[Hash-coll_{A,\prod }(n)=1]\leq negl(n)则哈希函数H是抗碰撞的

5. 散列函数三种典型安全水平:抗碰撞、抗第二原像(单向性)、抗原像(弱抗碰撞性)。

6. 生日攻击:在足够多的人中,至少有两人生日相同的概率会随着人数的增加而显著增加。

改进的生日攻击:①降低空间需求;

②缺乏对碰撞的控制,即不同的表达但同样的意思也算碰撞。

7. Merkel-Damgard变换(MD变换)

①主要目的:将一个固定长度的压缩函数转换为一个能够处理任意长度输入的哈希函数。通过迭代地应用压缩来实现,每次迭代都处理输入的一部分,并将前一次迭代地输出作为下一次迭代的输入。

②定长MD变换的构造方法(输入量压缩一半):

主要过程:填充,初始化,迭代压缩,输出。

令(Gen,h)是一个压缩函数(定长抗碰撞散列函数),其输入量长度为2l(n),输出量长度为l(n),构造变长散列函数(Gen,H)方法如下【Gen:同上】:

H:输入密钥s和一个串x\in \left \{ 0,1 \right \}^{*},其长度L<2^{l(n)}.

①假设B:=[\frac{L}{l}]x中的分块数量),用0把x的长度填充成l的倍数,将填充后的x分块解析:x_{1},...x_{l},令x_{B+1}:=L,其中L的长度为l;

②假设z_{0}:=0^{l}(长度为l所有位都设为0的序列);

③对于i=1,...,B+1,计算z_{i}=h^{s}(z_{i-1}||x_{i})

④输出z_{B+1}

.

MD变换示意图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值