第七章 密码协议
Last updated on June 30, 2023 pm
急急急 期末预习急急急
密码协议概述
- 协议是一种有序过程,每一步必须以此执行;需要至少两个或两个以上的参与者,且最终要完成某种任务,即实现某种功能
- 协议对参与者一定是完全 公开 的,且 按照规范 动作
- 协议的基本要求是 有效性、公平性、完整性
- 密码协议也叫 安全协议,是建立在 密码 体制的基础上的一种 交互式通信协议 ,借助于密码算法来达到安全功能
- 密码协议所能实现的安全功能是多种多样的
- 身份认证、密钥协商、消息 鉴别、公平抛币
- 多方计算、秘密共享、不经意传输
- 零知识证明
- 密码协议的应用
- 安全通信
- 电子选举
- 电子拍卖
- 公平电子交易
认证协议
认证协议概述
认证:一个实体向另一个实体 证明 某种声称的东西过程
认证协议:主要目标是确认某个主体的真实性,确保信息的安全性
安全可靠的通信 除需进行消息的认证 外,还需 建立一些规范的协议 对 数据来源的可靠性,通信实体的真实性加以认证,以防止欺骗、伪装等攻击
认证的分类
- 身份认证: 也称实体认证,验证消息发送者所声称的身份,发起通信或访问的实体是否具有合法身份和相应权限
- 密钥建立认证:生成、获得加解密密钥
- 数据源认证: 验证消息与其发送主体的一致性,数据从哪来
- 消息完整性认证: 验证消息是否被篡改
这些认证通常一起进行,也有时单独进行
- 即通信及之前首先进行实体认证(身份认证),身份认证之后会协商出会话密钥用于对每个传输数据的数据源认证和完整性认证
认证
身份认证
- 身份认证有两个层次:身份证实 和 身份识别 二者差别是是否出示身份
- 身份证实:你是否是你宣称的你,一般的身份认证都是指这种情况
- 验证方首先知道要验证的身份是谁,进一步来证实来访问与之通信的人是否具有该身份
- 一般用于A和B确定通信时所用,通常的网络认证协议都是身份证实
- 具体技术:输入个人信息,经公式或算法运算所得结果与卡中或数据库中存储信息经公司和运算所结果比较
- 身份识别:我是否知道你是谁
- 验证方不知道来访人是否为合法身份,没有比较确定的目标,只要满足某个条件就可判定身份的特点,验证者一般为权威机构
- 一般在实体认证中需要,比如判断来访者是否是在逃犯,是否为密码开启者,是否为本公司员工。通常用 指纹、虹膜技术
- 具体技术: 输入个人信息,经过处理提取模板信息,试着在存储数据库中找出一个与之匹配的模板而后得出结论
- 身份证实:你是否是你宣称的你,一般的身份认证都是指这种情况
- 主要验证用户 知道什么 如口令、密钥、私钥、秘密等,验证用户 拥有什么 如IC卡,验证用户 具有什么特征 如指纹、掌纹、虹膜、DNA等
- 基于口令的身份认证是比较重要的一类,具有广泛的应用,因为用户不需要携带或记忆复杂的密钥或认证消息
数据源认证和消息完整性认证的区别
数据源认证 一定 涉及通信,是一种安全服务
消息完整性认证 不一定 涉及通信,可用于存储的数据
数据源认证 一定 涉及消息源识别
而消息完整性 不一定 涉及该过程
比如用户A将一个由用户C签名的消息文件发给用户B,那么用户B能够通过验证C的签名判断消息完整性,但是消息的来源却不是C而是A
数据源认证 一定 涉及确认消息的新鲜性
而数据完整性却 无此必要
比如一组老的数据,或者重放的数据可能由完善的数据完整性,而是数据源认证要求确认收到的消息是新鲜的,即是当前新发送的,而不是旧消息的重放
认证需求
有的协议只需要认证身份
有的协议除了认证身份还需要建立之后通信的密钥以保护通信安全,即身份认证与密钥协商(密钥建立确认协议)
有的协议主要考虑对消息源的认证,这时一般首先要认证身份并建立密钥,然后再基于该会话密钥对传输的每个消息进行认证,以使收方确信收到的消息来自发方,而且不是重放,在顺序、时间等方面都是正确的,即完整性
常见攻击
- 常见针对认证和密钥建立协议的攻击
- 重放攻击 Replay attack
- 中间人攻击 Man-in-the-middle
- 已知密钥攻击 从以前用过的密钥确定新密钥
- 假冒攻击 Impresonation attack
- 篡改或替换
- 字典攻击 Dictionary attack 针对口令的一类攻击
- 拒接服务攻击
基本认证技术
- 证明消息的新鲜性和主体活现性的标准机制
- 双向认证和单向认证
- 包含可信第三方的认证
消息的新鲜性和主体的活现性
概念
- 消息的新鲜性,即实时性是数据源认证所不可或缺的一部分,而在这一过程中主体也要考虑 通信对端的身份真实性 以及 是否在线,即主体活现性 ,因此证明消息的新鲜性或主体的活现性就成为认证协议的最基本组成部分
- 消息的新鲜性经常伴随着主体活现性的认证,因为以新鲜性讨论为主
- 消息的新鲜性也称为实时性
- 新鲜性(实时性)对防治消息的重放攻击极为重要,一种方法是对交换的每一条消息都加上一个序列号,一个新消息仅当它有正确的序列号才被接收。这种方法的困难性是要求 每个用户分别记录 与其他每一用户交换的消息序列号,增加用户负担,因此 序列号方法一般不用于认证和密钥交换
两种实现消息新鲜性的技术
由两种方式实现消息新鲜性:时间戳 和 询问应答机制
时戳:
如果A消息收到的消息包括时戳,且在A看来这一时戳充分接近自己的当前时刻,A才认为收到的消息是新的并接受之,这种方案 要求所有各方的时钟是同步的
询问-应答:
用户A向B发出一个 一次性随机数作为询问 ,如果B收到发来的消息(应答),也包含一正确的一次性随机数,A就认为B发来的消息是新的并接受之
缺点
- 时间戳不能用于面向链接的应用过程
- 这是由于 时戳法在实现时固有的困难性
- 首先是需要在 不同的处理器时钟之间保持同步 ,那么 所用的协议必须是容错的以处理网络错误 ,并且是安全的以对付恶意攻击
- 第二,如果 协议中任一方的时钟出现错误而暂时失去了同步 ,则将使敌手攻击成功的可能性增加
- 最后还由于 网络本身存在延迟 ,因此不能期望协议的各方能保持精确的同步。 所以任何基于时戳的处理过程、协议等都 必须允许同步有一个误差范围 ,考虑到网络本身的延迟, 误差范围应足够大 ,考虑到可能存在攻击, 误差范围又应该足够小
- 询问-应答方式则不适合于无连接的应用过程
- 这是因为无连接传输以前需经询问-应答这一额外握手过程,这与无连接应用过程的本质特性不符
- 对于无连接的应用程序来说,利用某种安全的 时间服务器 保持各方始终同步是防止重放攻击最好的方法
- 关于有状态和无状态的协议
- 如果协议的运行需要一些历史和当前的状态作为上下文来维护,则称为有状态的协议,这样一次协议的运行要考虑历史的状态,会造成负担或者失同步的问题
- 如果每次协议运行独立于历史状态参数,则是无状态的,实现和资源占用更少
- 时间戳不能用于面向链接的应用过程
双向认证和单向认证
A 和 B是网络的两个用户 ,他们想过网络先建立安全的共享密钥在进行保密通信
A 和 B 如何确信自己正在和通信的人是 B 和 A 而不是 C呢? 即双方的身份认证
这种通信方式为 双向通信 ,此时的认证称为 相互认证
双向认证也叫相互认证 双方认证等
类似地 对于 单向通信 来说,认证称为 单向认证
包含可信第三方的认证
- A 和 B 直接进行认证的前提是二者之间具有共享的密钥,有时在实际应用中,这种方式并不实用,因为用户多是两两用户之间都要共享密钥,因此一种更为常见的方式是基于可信第三方的认证
- 这时,双方都与可信第三方共享初始密钥,系统扩展性好,便于密钥管理,借助可信第三方提供的帮助来实现认证和密钥协商
- 可信第三方可以在线也可以离线
建立共享密钥
A 和 B 两个用户在 建立共享密钥时 需要考虑的核心问题是 保密性和实时性
保密性: 为防止会话密钥的伪造或泄露,会话密钥在通信双方之间交换时应为密文形式,所以通信双方事先就应该有密钥或公开钥
实时性即新鲜性,可使用前述的基本认证技术(时间戳 and 询问-应答)
通信双方建立共享密钥时可采用 对称密钥加密体制 和 公钥加密体制
基于公钥加密和会话密钥的分配协议
- 由于 公钥加密的速度过慢 ,因此进行保密通信不太合适,但 用于分配对称密钥密码体制的密钥却非常合适
密钥分配
下图表示简单使用公钥加密算法建立会话密钥过程,如果A希望与B通信,可通过以下几步建立会话密钥
- A产生自己的一对密钥$\lbrace PK_A,SK_A \rbrace$, 并向B发送 $PK_A \left| \right| ID_A$,其中$ID_A$ 表示A的身份
- B产生会话密钥 $K_S$ ,并用A的公开钥 $PK_A$ 对 $K_S$ 加密后发往A
- A由 $D_{SKA} \left[E_{PK_A} \left[K_S \right]\right]$ 恢复密钥,因为只有A能解读 $K_S$ ,所以仅A和B知道这一共享密钥
- A销毁 $\lbrace PK_A SK_A \rbrace$ ,B销毁 $PK_A$
- A、B现在可以用单钥加密算法以 $K_S$ 作为会话密钥进行保密通信,通信完成后,又都将 $K_S$ 销毁
- 这种分配方法尽管简单,但却由于A、B双方在通信前和完成通信后,都未存储密钥 因此,密钥泄露的危险性为最小,且可以防止双方的通信被敌手监听
- 每次公私钥由发方临时产生
- 但由于公钥缺少证书管理机构认证且非物理传输容易受到主动攻击
中间人攻击
如果敌手E已接入A、B双方的通信信道,就可通过以下不被察觉的方式截获双方的通信:
E截获A的发送后,建立自己的一对密钥 $\lbrace PK_E,SK_E\rbrace$, 并将 $PK_E \left| \right | ID_A$ 发送给B
即把原本要发送的$PK_A$ 替换为$PK_E$
B产生会话密钥 $K_S$ 后,将 $E_{PKE}\left[K_S \right]$ 发送出去
E截获B发送的消息后,由 $D_{PKE} \left[ E_{PK_E}\left[ K_S\right] \right]$ 解读出 $K_S$
E再将 $E_{PK_A}\left[K_S \right]$ 发送 A
现在A和B知道 $K_S$ ,但并未意识到 $K_S$ 已被E截获,A、B在用$K_S$ 通信时,E就可以实时监听
Diffie-Hellman 密钥交换
概念
密钥交换是实现安全通信的基础
商用加密算法AES和DES需要在安全通信之前,实现通信双方的密钥共享
密钥交换的方法
- 基于RSA的密钥交换
- 基于KDC技术(Key Distributed Center,密钥分发中心)
- Diffile-Hellman密钥交换(简称:DH算法)
- 基于物理层的密钥交换
DH算法是不安全信道下实现安全密钥共享的一种方法,由 W.Diffie 和 M.Hellman 在1976年提出的第一个公开的公钥密码算法
交换流程
- 用户A和B协商一个素数p,以及该素数的本原元g
- 用户A选择一个随机数 $x,x<p$ ,用户B选择一个随机数 $y,y<p$
- 用户A计算 $Y_A = g^x \bmod p$ ,用户B计算 $Y_B = g^y \bmod p$
- 用户A,用户B交换 $Y_A$ ,$Y_B$
- 用户A计算密钥 $K = {Y_B}^x = g^{xy} \bmod p$ 用户B计算密钥 $K = {Y_A}^y = g^{xy} \bmod p$
- 完成密钥协商
- 例子
- 假设素数 $p = 97$ ,其本原元 $g=5$
- 用户A选取随机数 $x=36$ ,用户B选取随机数 $ x= 58 $
- 用户A计算:$Y_A \equiv g^x \equiv 5^{36} \equiv 50 \bmod 97 $
- 用户B计算:$Y_B \equiv g^y \equiv 5^{58}\equiv 44 \bmod 97 $
- 交换 $Y_A$ ,$Y_B$
- 用户A计算密钥:$K \equiv {Y_B}^x \equiv g^{xy} \equiv 44^{36} \equiv 75\bmod 97$
- 用户B计算密钥:$K \equiv {Y_A}^y \equiv g^{xy} \equiv 50^{58} \equiv 75\bmod 97$
安全问题
安全性分析
公开可截获的信息 素数 $p$、本原元 $ g $ 、中间值 $Y_A$ $Y_B$
若攻击者想要获取密钥 $K$ 必须通过
$ Y_A \equiv g^x \bmod p $ 和 $ Y_B \equiv g^y \bmod p $计算出 $x$ 和 $y$ ,然而这是一个很困难的问题
因此,算法的安全性基求于离散对数的困难性
其余安全问题
- 容易遭受阻塞攻击:因为幂运算时计算密性的,当敌手发起大量的密钥请求,受攻击者将花费大计算资源来做幂运算
- 容易遭受 中间人攻击 :敌手可分别冒充用户A和用户B中的一方,与另一方交换密钥,从而实现监听
中间人攻击
现有用户A 、用户B 、中间人C
用户A 、用户B 正常协商一个 素数 $p$ ,本原元 g
用户A 、用户B 正常选择自己的随机数 $x$ , $y$ ,并计算
$Y_A \equiv g^x \bmod p$ 和 $Y_B \equiv g^y \bmod p$
中间人C 选择随机数 $z$ ,计算 $Y_C \equiv g^Z \bmod p$
中间人截获用户A传递的 $Y_A$
- 利用 $Y_A$ 计算 $K_{AC} \equiv {Y_A}^z \equiv g^{xz} \bmod p$
- 并将 $Y_C$ 传给用户B
- 用户B根据 $Y_C$ 计算 $K_{BC} \equiv {Y_C}^y \equiv g^{yz}\bmod p$
中间人截获用户B传递的 $Y_B$
- 利用 $Y_B$ 计算 $K_{BC} \equiv {Y_B}^z \equiv g^{yz} \bmod p$
- 并将 $Y_C$ 传给用户A
- 用户A根据 $Y_C$ 计算 $K_{AC} \equiv {Y_C}^x \equiv g^{xz}\bmod p$
此时用户A以为共享密钥是 $K_{AC}$ ,用户B以为共享密钥是 $K_{BC}$ ,而中间人拥有 $K_{AC}$ , $K_{BC}$ ,可以监听用户A和用户B
秘密共享
问题引入:
- 保险柜的开启
- 保险柜中存放有10个人的共有财产
- 要从保险柜中取出物品,必须有 半数以上 的人在场才可取出,半数以下则不行
- 如何构造锁的设计方案
- 导弹控制发射,重要场所通行检验,通常需要多人同时参与才能生效,需要将秘密分为多人掌管,并且由一定 掌管秘密的人数同时到场才能恢复秘密
概念
定义
秘密 s (通过某种方案)被分割成n个部分,每个部分称为 份额(share) 或 影子(shadow) ,由一个参与者持有,使得:
- 由 k 个或多于 k 个参与者所持有的部分信息可重构 s 。
- 由少于 k 个参与者所持有的部分信息则无法重构 s 。
- 称该方案为 $(k,n)$ 秘密分割门限方案 ,k 称为门限值,少于 k 个参与者所持有的部分信息得不到 s 任何信息称该 门限方案是完善的