密码学的三大目标
Confidentiality 机密性(保密性):确保信息未经非授权的访问,避免信息泄露。
Integrity 完整性:防止信息非法的修改和毁坏,包括保证信息的不可抵赖性和真实性。
Availability 可用性:保证信息及时且可靠地访问和使用
Hash函数
Hash函数主要用于数据完整性、数字签名、消息认证等。
Hash函数的特性如下:
(1)单向性(Oneway):已知x,求x=h(m)的m在计算上是不可行的。
(2)抗弱碰撞性(Weakly Collision-free):对于任意给定的消息m,如果找到另一个不同消息n,使得h(m)=h(n)在计算上是不可行的。
(3)抗强碰撞性(Strongly Collision-free):对于任意一对不同的消息m和n,使得h(m)=h(n)在计算上是不可行的。
2016年真题
【说明】用户的身份认证是许多应用系统的第一道防线,身份识别对确保系统和数据的安全保密及其重要。以下过程给出了实现用户B对用户A身份的认证过程。
(1)A→B:A
(2)B→A:{B,Nb}pk(A)
(3)A→B:h(Nb)
此处A和B是认证的实体,Nb是一个随机值,pk(A)表示实体A的公钥;{B,Nb}pk(A)表示用 A的公钥对消息B进行加密处理, h(Nb)表示用哈希算法h对Nb计算哈希值。
【问题1】
认证与加密有哪些区别?
参考答案(这里从目标不同出发):加密用于确保数据的机密性,阻止信息泄露。认证用于确保报文发送者和接收者身份的真实性以及报文的完整性,阻止如冒充、篡改等攻击。
【问题2】
(1)包含在消息2中的“Nb”起什么作用?
参考答案:Nb是一个随机值,只有发送方B和A知道,起到抗重放攻击作用。
(2) “Nb”的选择应满足什么条件?
参考答案:应具备随机性(不可预测性),不易被猜测。
【问题3】
为什么消息3中的Nb要计算哈希值?
参考答案:哈希算法具有单向性,经过哈希值运算之后的随机数,即使被攻击者截获也无法对该随机数进行还原,获取该随机数Nb的产生信息。
【问题4】
上述协议存在什么安全缺陷?请给出相应的解决思路。
参考答案(1):存在重放攻击和中间人攻击缺陷。
解决方案:针对重放攻击加入时间戳、验证码等;针对中间人攻击加入针对身份的双向验证。
参考答案(2):存在中间人攻击的安全缺陷。
解决方案:在响应中包含能够证明自己身份和挑战来源的信息。可以在消息2和消息3中加入身份标识。
2019年真题
【说明】假设用户A和用户B为了互相验证对方的身份,设计了如下通信协议:
(1)A→B:RA
(2)B→A:f(PAB || RA)RB
(3)A→B:f(PAB || )
其中:RA、RB是随机数,PAB是双方事先约定并共享的口令,“||”表示连接操作。f是哈希函数。
【问题1】
身份认证可以通过用户知道什么、用户拥有什么和用户的生理特征等方法来验证。请问上述通信协议是采用哪种方法实现的?
参考答案:通过用户知道什么来验证。
【问题2】
根据身份的互相验证需求,补充协议第3步的空白内容。
参考答案:RB
试题解析:协议的目标是互相验证。
第1步:A向B发送随机数RA,作为对B的挑战。
第2步:B收到了RA,用共享口令PAB和RA计算出f(PAB || RA),这是对A挑战的响应。同时,B生成了自己的随机数RB发送给A,作为对A的挑战。
第3步:A收到了B的响应和挑战。A需要首先验证B的身份,通过自己计算f(PAB || RA)并与收到的值比对。验证通过后,A需要响应B的挑战RB。因此,A需要计算f(PAB || RB)并发送给B。
第4步:B收到了A的响应。B需要验证A的身份,通过自己计算f(PAB || RB)并与收到的值比对。
【问题3】
通常哈希函数 f 需要满足下列性质:单向性、抗弱碰撞性、抗强碰撞性。
如果某哈希函数具备:找到任何满足f(x)=f(y)的偶对(x,y)在计算上是不可行的,请说明其满足哪条性质。
参考答案:满足抗强碰撞性。
【问题4】
上述协议不能防止重放攻击,以下哪种改进方式能使其防止重放攻击?
(1)为发送消息加上时间参量。
(2)为发送消息加上随机数。
(3)为发送消息加密。
参考答案:(1)和(2)
【问题5】
如果将哈希函数替换成对称加密函数,是否可以提高该协议的安全性?为什么?
参考答案:不能。
参考原因(1):对称加密方式密钥不具备哈希函数的单向性。
参考原因(2):这个协议最主要的安全风险是暴力破解攻击。将哈希函数替换为对称加密函数并没有解决这个核心的安全风险,所以无法提高协议的安全性。