安全协议:身份证明协议

挑战-响应协议:证明者向验证者通过展示与身份相关的秘密知识,证明自己的身份。

双向认证(基于共享密钥)

挑战:一方传送给对方一个随机数

响应:对方对这个数进行特定处理再返回

双向认证协议(1)

协议1

假设A也是可接受多个会话的通用计算机
考虑当攻击者伪装B的身份

受到反射攻击:

反射攻击

关键:伪装B,建立一个同A的会话;拦截一个A向B的会话;利用A的自动加密,分别套出两个随机数的加密值。

双向认证协议(2)

协议2

受到反射攻击:

反射攻击

改进方式:在每个加密消息里加入发送者、接收者在协议中的角色(这样攻击者就无法利用消息2)。

双向认证协议(3)
基于HMAC,对HMAC的 攻击难于对对称密钥算法的攻击。

协议3

双向认证协议(4)

协议4

攻击:

重放攻击:重放4给A;4中没有注明这个会话密钥和此次通信的关联。
类型缺陷攻击:攻击者在第四步重放2给A:虽然攻击者不一定知道RA+1,但猜测nonce比猜测密钥简单。解决方式:Nonce只被要求每次不同即可,不包含随机性。

Schnorr协议-基于整数模p的阶为q的乘法循环群

全局变量:p(大素数)、q(素数,p-1的因数)、g(生成元,0<g<p)、v(公钥,v=g^(-a) mod p)

私钥:a(0<a<q)

过程:

A 生成随机 r(0<r<q),将 g^{r} mod p 发给B(防止暴露a)

B 向 A 发送随机数 e(防止A伪造a,e<2^{t}<q)[挑战]

A 计算 y = r + ae mod q,将 y发给B,(B无法求离散对数得到r,进而得到e)(为什么mod q:q是阶)[响应]

B 计算 g^{y} (g^{-a})^{e} mod p 是否等于g^{r} mod p, 判定A的身份(如果A没有a,很难伪造私钥以通过验证)

问题

将Schnorr协议的过程1,2反序。协议是否安全:不安全,A可第三步构造t,第一步发送g^{t}g^{-a}^e来欺骗B

若A使用相同的r进行两次验证,监听者能否获得a:能,B将e设为r,即可获得a

基于公钥的认证

基于加密的认证:用X的公钥加密消息M

基于签名的认证:用X的私钥加密消息M

注意:不要将密钥用于多个目的,比如使用不同的密钥对进行签名和加密

认证协议设计一般原则

安全协议设计是困难的,需要不断设计,分析,改进。

协议中报文不能被重复使用。

通信的发起者先提供自己的身份的证明,然后才是响应者。

发起者和响应者使用不同的共享密钥。

发起者和响应者的挑战数来源于不同的集合。如发起者用偶数,响应者用奇数。

并行会话无法被利用。

安全协议:密钥建立协议

密钥建立:密钥传输

一方建立,安全地传给另一方。

1.无预先共享密钥的密钥传输

密钥 K 保密地(但无身份验证)从 A 传输到 B。

系统参数: 素数 p;A和B分别选择秘密随机数 a、b(1 ≤ a、b ≤ p − 2),均与p − 1互素(保证a逆 mod p-1存在)。

过程:

A → B : K^{a} mod p

A ← B : (K^{a})^{b} mod p

A → B : (K^{ab})^{a^(-1)} mod p

2.使用密钥分发中心的密钥传输

每个用户与KDC共享一个秘密密钥,KDC存储并管理所有密钥

方式一:

宽蛙嘴
攻击:重放2;
解决:加入时间戳或nonce

方式二:

简单票

攻击:

重放攻击:如果一个旧密钥 Ks及其KB(KS)泄露,则攻击者可假冒任何人的身份与Bob对话

中间人攻击1:Alice可在最后一步假冒任何人的身份与Bob对话

中间人攻击2:攻击方C申请和A、B对话,拿到KC(KS),KA(KS),KC(KS‘),KB(KS’),进而监听和篡改A、B之间的通信

解决:

解决重放攻击:
消息重放的实质是消息的新鲜性(Freshness)不能得到保证。

方式一:时间戳
对消息盖上本地时戳,只有当消息上的时戳与当前本地时间的差值在意定范围之内,才接受该消息。要求有一个全局同步时钟,但是如果双方时钟偏差过大或者允许的范围过大,则可以被攻击者利用。
方式二:挑战-应答机制
通过发送挑战值(Nonce)来确保消息的新鲜性。
方式三:序列号
通信双方通过消息中的序列号来判断消息的新鲜性。要求通信双方必须事先协商一个初始序列号,并协商递增方法。

解决中间人攻击:
简单票2

Alice无法假冒别的身份与Bob对话
Eva可以得到 KA(Ks,B)和 KB(Ks,A), 但无法解密Ks,也无法伪造身份(因为身份信息受到KDC的加密)

协议一:Needham-Schroeder 协议

协议
4,5是B向A证明身份,确认收到密钥,同时确认A的身份。注意:消息2对KB(A,KS)的加密是没有必要的。

攻击:Trudy得到了一个旧的 ks,则可以重放消息3。而B必须记住所有旧ks才能抵抗这种攻击。
解决:在2、3中加入时间戳,或者在3之前加入认证。

改进:Otway-Rees 协议
协议
不需要复杂的同步机制
通信双方都与KDC进行了一次挑战-应答
RA加入到4,保证了KS的新鲜性
接收方B不在线时,不能使用

改进:Yahalom协议
协议

协议二:Kerberos协议

协议
TGS票重用,一次登录可访问多个服务
这部分没看,ppt都是包浆的

密钥建立:密钥协商

共同参与计算一个共享密钥,任何一方不能预先确定结果

1.DH密钥协商

A 选择随机数 a,发送给B:g^{a} mod p
B 选择随机数 b,发送给A:g^{b} mod p
会话密钥 Ks = g^{ab} mod p

2.完美前向保密PFS

长期共享密钥K,当K被截获,不会造成Ks被破译:
A公开:EK(g^{a} mod p)
B公开:EK(g^{b} mod p)
会话密钥:Ks = g^{ab} mod p

安全协议:传输层安全的协议SSL/TLS

协议

服务:

身份认证。认证用户和服务器,确保数据发送到正确的客户机和服务器;
保密性。加密数据以防止数据中途被窃取;
完整性。维护数据的完整性,确保数据在传输过程中不被改变。

重要概念:

会话:会话是指客户机和服务器之间的关联。一个会话包含多个连接。SSL 会话使用了公钥算法,开销大。
连接:连接是客户和服务器之间的逻辑链路,用于提供合适的传输服务和操作环境。SSL连接使用SSL会话生成的pre-master secret生成密钥,不再使用公钥算法。
SSL/TLS握手协议负责协调客户机和服务器之间的会话的状态:当前操作状态和未决状态(在握手协议期间)。

简化的SSL会话建立

协议
S :pre-master secret,A生成的随机值。
K = h(S||RA||RB)
“msgs”是前边全部消息,用来证明前边消息已经正确接收。
CLNT,SRVR 是固定字符串。
h(msgs||CLNT||K)可以不加密。

问题:并没有认证A的身份。
解决:服务员在此后用其他手段认证A的身份。

有共享秘密pre-master secret后的SSL连接建立

协议
SSL会话已建立,用session-ID表示
K = h(S||RA||RB)
不需要公钥算法

参考资料:
1.Schnorr身份识别方案