安全协议概述
定义:建立在密码算法基础上的一种高互通协议,运行在计算机通信网或分布式系统中,为安全需求的各方提供一系列步骤,借助于密码算法达到密钥分发、身份认证、安全实现网络通信或电子交易的目的
密码算法是安全协议的基础和核心,安全协议是密码算法应用场景
密码协议是安全协议的子集
- 安全协议就是在消息处理环节使用了若干密码算法的协议,在密码算法的基础上为各种安全性需求提供实现方案
协议的概念包含了以下几层含义:
- 规定了一系列有序执行的步骤,必须依次执行
- 协议中有两个或以上的参与者,一个参与者不能构成协议
- 协议有明确的目的,需要完成的目标,防范的风险
两个例子
NSSK协议
若敌手获得曾经的$K_{ab’}$,重放3即可欺骗B,根本原因在于B对于协议的通信没有控制权,此时B只能相信A在场,而无法相信$K_{ab}$新鲜
攻击
- 假冒A与B通信让B以为在和A通信,可以在A离线时就进行重放消息3
- 冒充B,因为A无法确认B是否拥有会话密钥,即
$A \gets N_p$
$P \gets \{\ \{N_p\}_{K_{ab} }^{-1} -1 \} _ {k_{ab} }$
改进:
TLS协议
握手协议
客户端和服务器协商,确定密钥
记录协议
使用客户端和服务器协商后的密钥进行数据加密传输
安全协议的基本概念
安全协议的分类
从实现的目的来看:
- 密钥交换协议:完成会话密钥的建立
- 认证协议:防止假冒、篡改、否认等攻击,实现身份认证、消息完整性认证、数据源认证等
认证密钥交换协议:先认证实体身份再进行密钥交换
安全电子交易协议:set ikp
- 安全通信协议:ssl/tls
- 安全多方计算
- 协议的正确性和参与方输入的保密性
与具体应用的关系
- 基础安全协议:具体应用无关,设计应用安全协议的基础
- 应用安全协议
安全协议的特点
正确性
执行效率的要求
- 安全需求
- 保密性
- 认证性
- 不可抵赖性
- 鲁棒性:可能存在恶意参与者
- 要求在恶意参与者的情况下能够部分正确的执行,保护其他诚实参与者的秘密信息
- 恶意参与者的存在是安全协议和一般通信协议之间的重要区别
安全协议模型
- 协议参与者的类型
- 协议参与者:提供输入、获得输出
- 诚实参与者
- 半诚实参与者:窃听、尝试获取其他参与者的输入,被动攻击者
- 恶意攻击者:在半诚实参与者的基础上控制参与者按自己设计的方式进行协议
- 协议攻击者:窃听、篡改报文,和参与者之间没有明确界限
- 可信第三方
- 仲裁者
- 协议参与者:提供输入、获得输出
- 参与者之间的网络连接情况
- 同步网络
- 存在公共全局时钟 意味着可以使用时间戳
- 接收者在下一个时钟周期获得传送给自己的消息
- 非同步网络
- 不存在全局时钟
- 接收到的消息顺序可能不确定
- Internet
- 遗憾的是,非同步网络下设计安全协议比较复杂,大部分研究都在同步网络下
- 同步网络
- 协议攻击者的能力
- 计算能力
- 无限计算能力 Unbounded computation 信息论安全
- 概率多项式时间计算能力的敌手 PPT(Probabilistic Polynomial Time) 密码学安全 (计算安全)
- 对通信网络的控制能力
- 安全信道 无控制能力 不存在窃听和篡改
- 认证信道 非安全信道 存在窃听无篡改
- 未认证信道 完全控制权 窃听+篡改
- 是否主动攻击
- 被动攻击者和主动攻击者
- 静态攻击者和动态攻击者
- 静态:协议开始之前被买通的参照者已经确定
- 计算能力
- 系统环境:发送者、接收者、攻击者、管理消息发送和接收的规则
Dolev-Yao模型
贡献
- 将认证协议本身和采用的密码系统分开,在假定密码系统完美的基础上讨论协议本身的正确性、安全性、冗余性
- 为攻击者建立模型,永远不要低估攻击者的知识和能力
- 控制整个通信网络
- 熟悉密码原语
- 进行密码分析
- 了解参与者的实体标识符和公钥
安全协议的安全属性
目标:保证某些安全属性在协议执行完毕时得以实现
- 认证性:对抗假冒攻击
- 确保身份,获得信任
- 单向/双向认证
- claimant拿出证明身份证据的过程称为认证
- 机密性:抵抗被动攻击
- 不被泄露给非授权拥有消息的人
- 直观方法:加密
- 完整性:对抗主动攻击
- 保护消息不被非法篡改、删除、代替
- 增加冗余
- 签名、hash
- 不可否认性:对抗主动攻击
- 签名
- 收集证据
- 公平性
- 保证参与者不能单方面终止协议
- 没有相对其他参与者的额外优势
- 匿名性
- 保证消息发送者身份不泄露,身份和消息不绑定
安全协议的设计过程
- 需求分析:安全模型,协议目的,安全需求
- 需求定义:将需求描述
- 形式化语言
- 自然语言
- 协议具体步骤设计
- 如何通信
- 消息的格式
- 协议正确性分析
- 功能满足
- 各种分支是否考虑
- 协议安全性分析
- 安全需求
- 自然语言推理
- 形式化推理 BAN逻辑
- 某个安全模型下安全,满足了安全需求
协议设计过程是一个重复迭代的过程,在一轮迭代中设计出安全严谨的安全协议是不现实的
安全协议设计准则
缺陷的来源
- 设计不规范
- 具体执行时产生
消息独立完整性
消息的解释完全由内容决定,不必借助上下文推断
消息前提准确原则
应当明确指出与消息的执行相关的前提条件,并且正确性和合理性可以验证,判断消息是否应该接收
大嘴青蛙协议
主体身份标识原则
消息中最好附上主体名称
- 密钥交换协议
- 第一步是请求两个实体的证书(为什么A能得到B的证书呢)
- 第二步是S响应发送证书
- 第三步是A先用自己的私钥签名再用B的公钥加密
加密目的明确性原则
加密可实现多种安全目的,明白使用加密技术的目的,尽可能减少冗余
签名含义清晰性原则
先签名再加密,表明对消息知情
临时值使用原则
临时值可以用来确保时间连续性(新鲜性),可以用来确保关联性
- 1表明A想要和B协商密钥,采用A和S的对称密钥加密了此时的随机数,M是单次会话的标识符 ,B无法解密$N_a$,发给S的时候传递了联系
随机数使用原则
作用:提供新鲜性
关键问题:真正的随机性伪随机
时间戳使用原则
问题在于时钟的同步
密钥使用原则
考虑密钥是否最近使用过,指出密钥的编码方式
消息识别和编码准则
编码和协议相关
根据编码后的消息能够推断出消息来自于哪一条(例如NSSK的$N_b-1$)
否则可能被恶意重放
信任准则
协议设计者应该知道设计的协议依赖的信任关系
通常不能相信参与者选择一个好的会话密钥
安全协议缺陷分类
如果一个协议使得非法用户不能从协议中获得比此协议本身体现的更多的有用信息,称为该协议安全(太可证明了)
- 基本协议缺陷:设计时没有考虑攻击
口令/密钥猜测缺陷:口令容易猜测,不安全的伪随机函数构造密钥
- 能够检测不成功的登录,并限定
- 对于不可检测的以及离线的猜测
- 认证服务器只响应新鲜的请求
- 只响应可验证的
- 陈旧消息缺陷:没有考虑重放攻击
- 消息源、消息目的
- 并行会话缺陷
- 交换一定的协议消息
- 内部协议缺陷:协议的可达性存在问题
- 密码系统缺陷:密码强度不够
重放攻击
攻击者利用消息再生能力生成诚实用户期望的消息格式并重放
- 根据消息来源分为
- 轮内攻击:本次会话中的消息进行重放
- 轮外攻击:多轮会话之间进行重放
- 根据消息去向
- 偏转攻击:把消息传递给非意向实体
- 直接攻击:目标正确,延迟发送了
对策:提供消息的新鲜性
- 序列号
- 接收方比较消息中的序列号
- 每个消息实体都需要存储一对序列号,以及商议递增的方法
- 分布式系统中,存储开销太大
- 适合于通信成员少
- 时间戳
- 消息上的时间戳与当前时钟差值在一定范围内
- 全局时钟的问题
- 验证者弄错了时间,很容易攻击
- 接收方使用的是接收窗口
- 挑战响应机制(Challenge/response authentication)
- 简单的例子就是登录时需要口令(正确的应答)
- 多次握手增加了开销
- 适合于面向连接的通信
安全协议分析基础理论与方法概述
- 可证明安全性理论与方法
- 公理化分析方法
- 构造敌手 协议规约到基本数学问题
- 明确安全性定义 计算化语义 难以自动化分析
- 形式化分析理论与方法
- BAN逻辑为代表的基于推理结构性方法
- 以基于Dolev-Yao模型攻击结构性方法,自动化
- 基于证明结构性方法
- 缺点:容易自动化,语义不清楚
- 混合理论与方法
- 结合以上两种
- 零知识证明理论与方法
- 交互
- 非交互
- 安全多方计算理论与方法
认证协议
基本概念
认证协议是网络安全的一个重要组成部分,需要通过认证协议进行
- 实体间的认证
- 实体间安全分配密钥
- 确认发送、不可抵赖性
认证是一个通信过程,verifier验证claimant声称的某种属性,至少涉及两个实体
- 验证消息的某种属性,称为数据源认证,消息认证
- 验证实体的身份,称为实体认证
攻击者成功攻击:不攻破密码算法的前提下,已未经授权且不被察觉的方式获得某种信任或者破坏了密码服务,设计缺陷
经典认证协议
基于对称密码的实体认证
目的:实体和消息
单次传输,单向认证
一次传输,非交互,采用了时间戳或者序列号,前提是需要同步
同样可以采用随机数,但是协议需要进行交互,增加了交互的开销
两次传输,单向认证
第一条消息为challenge
第二条消息为response
随机数只使用一次,称为$Nonce$
临时值与时间戳的区别
- 临时值是某个主体产生的随机数,只能验证对方是否真实
- 时间戳不和某个主体关联,任何一个主体产生的时间戳都能被其他主体用来检验消息的随机性
- 时间戳不具有唯一性,带有一个有效范围
- 临时值具有唯一性,很长一段时间内临时值不会重复
两次传输,双向认证
缺点是时钟同步问题
三次传输,双向认证
基于哈希函数的实体认证
一次传输,单向认证
两次传输,单向认证
两次传输,双向认证
三次传输,双向认证
这里的$N_b$冗余?
基于公钥密码的实体认证
一次传输,单向认证
两次传输,双向认证
两次传输,单向认证
考虑此时若$N_b=Hash(把A的财产转移给B)$
A对自己的签名中的随机数没有控制
改进,此时$A$可以加入自己的随机数$N_a$
三次传输,双向认证
存在中间人攻击
基于TTP的认证协议
nssk
nspk
otway-Rees
A和B分别请求得到对方的公钥
后进行新鲜性认证
存在类似中间人攻击的情况,区别在于A假装和B通信
- 协议目的是A和B之间建立会话密钥
- A向B发送使用A和S密钥加密的随机数和通信实体,B传递该消息并自己生成同样格式的消息,发送给s
- s收到后判断通信实体是否正确,将$k_{ab}$和随机数分别加密两次给两个实体
攻击
- 类型缺陷攻击
- 假设M 64bit, A.B均为32bit, $k_{ab}$128bit
- 攻击者冒充B,在第四步发送1,实际上此时A可以区分$K_{ab}和M|A|B$,但是协议是否设计了验证阶段
- 类似的,攻击者可以冒充S
- 将2中加密的消息重放给B即可
考虑对大嘴青蛙协议的攻击
详见homework2
- 冒充A 二次认证
- 冒充A B 欺骗S 发起认证
反射攻击
直观定义:敌手收到消息后立即返回该消息,由于协议设计诚实参与者无法区分不同的消息
交错攻击
利用两次协议当中不同先后顺序的消息构造攻击
密钥交换协议
一般使用公钥密码或其他方法确立适用于对称密码的密码(对称密码学原语的扩展)
通信方在公开的信道上通过传递某些信息来共同建立一个共享的密钥
优势在于双方对于最后的输出均有主动权,密钥的质量高
安全目标:
- 只有AB知道k
- A和B确保对方知道k
- A和B知道k是新生成的
攻击者的目的:
- 欺骗双方接收一个过期的密钥
- 使得通信的某一方相信攻击者就是通信中的另一方,建立会话密钥
两方DH密钥协商
被动攻击
- Dlog
- CDH
中间人攻击
MTI协议
不签名实现消息传递
记号一塌糊涂,实际上就是两对公私钥交叉使用,对b而言:
考虑中间人攻击,发现无法实现(证书中含有ID和公钥)
ECMQV密钥交换
DH协议的扩展
安全协议的分析
分类见第一部分
形式化方法
现有的安全协议形式化分析方法主要有:
- 逻辑方法:采用基于信仰和知识逻辑的形式分析方法,如BAN逻辑
- 通用形式化分析方法:Petri网
- 模型检测方法:基于代数方法构造有限状态模型
- 定理证明方法:将密码协议的安全性作为定理证明
最早把形式化方法视为安全协议分析工具的是Needham和Schroeder,但最早的实际
工作由 Dolev 和 Yao 完成。
比特承诺
- 承诺阶段:发送方选择一个要承诺的比特b并发送给B
- 打开阶段:A把用于打开承诺的消息d和b发送给B,b用d打开并验证是否是A承诺的比特
安全的比特承诺方案需要满足:
- 隐藏性:第一个阶段B无法得知b的值,对于不诚实的接收方也要满足该条件
- 绑定性:A无法在打开阶段修改自己承诺的比特
和计算困难性假设和计算上绑定的/信息论隐藏的
比特承诺和公钥签名的差异
- 不是公开可验证的,只有承诺者给出额外信息才能验证承诺是否有效
- 验证者被动接受,如果承诺者拒绝打开承诺,得不到任何信息
常见的比特承诺协议
对称密码构造
B不知道密钥,无法尝试解密
使用单向散列函数构造
见homework3
使用伪随机数生成器
类似加法秘密分享
Pedersen协议
主要用于对消息承诺,y是G中一个随机选择元素,在(3)发送给B,整个方案类似Elgmal
此时y必须随机选择,存在陷门$y=g^x\bmod p$,则可随意修改b的值
TLS协议
http存在的问题
- 明文传输
- 不验证服务器身份
位于TCP/IP协议模型的传输层
- 认证:PKI
- 保密:对称加密
- 完整性:MAC
TLS对话
- 连接:协商密钥
- 应用:安全加密通信
TLS协议体系结构
- 记录协议:建立在传输层协议上,提供
保密性
和完整性
- 握手协议:提供认证性
- 算法协商
- 身份验证
- 确定密钥
- 报警协议
- 指示通信错误
- 修改密文协议
- application data
- 接收数据并加密
- 握手协议:提供认证性
- 高层协议
握手协议详解
主要分为4个阶段
- 建立安全能力
- 认证服务器和密钥交换
- 认证客户密钥交换
- 结束
- 第一条消息是ClientHello,客户端发送支持的tls版本以及加密、压缩算法集合
- 服务器收到后选定ssl/tls版本和算法,并发送ServerHello
- 可选字段 公钥算法就发送X.509v3
- 证书信息不足时额外发送serverKeyExchange
- 服务端可以验证客户机,要求客户机发送证书
- Hello消息处理结束后发送Done
- 协商结束,切换到加密模式
- 服务器发送done(四次握手已经结束)
- 之后进行应用层加解密
- 断开连接
四次握手参考:https://blog.csdn.net/odyyy/article/details/80256129
安全多方计算(MPC)
安全多方计算是指在无可信第三方情况下,多个参与方协同计算一个约定函数,且保证
每一方仅获取自己的计算结果,无法通过计算过程中的交互数据推测出其他任意一方的
输入和输出数据(除非函数本身可以由自己的输入推测出其他参与方的输入和输出)
安全多方计算架构
- 参与节点
- 枢纽节点:不参与实际计算,主要用于控制传输网络,路由寻址,计算逻辑传输等等
特性
- 隐私性
- 正确性
- 去中心化:参与方平等
真实-理想模型
存在一个虚拟的理想与真实环境对比,参与方与可信第三方交互
真实环境中无法产生比理想环境中的攻击者更多的危害
- 半诚实模型
恶意模型
基于噪声的安全计算方法
- 差分隐私
非噪音方法
- 混淆电路
- 秘密分享
- 同态加密
算法组成
- 通用框架:GC 效率低
- 专用算法:隐私查询、求交、差分隐私、四则运算等 效率高
秘密分享
基本概念
将秘密分割,实现分散风险,容忍入侵的目的,同时为密钥管理提供了新的途径
创痛的密钥管理:
- 一个人保存:
- 主密钥偶然或有意泄露,秘密信息会受到攻击
- 主密钥丢失或损坏,系统中的秘密信息无法恢复
- 硬件存储:成本开销过大
门限方案
秘密K被分割成n个子信息,每个子信息称为一个份额,由一个参与者持有,使得只有t个或大于r个参与者可以重构K
t称为方案的门限值
两个阶段:
- 分发阶段
- 秘密重构阶段
强健性:暴露至多t-1个份额不会危害密钥
两个算法:
$Shr(K,t,n)\to \{ k_1,\cdots k_n \}, Rec(k_1,\cdots,k_n)\to K$
Shamir 秘密分享
构造多项式$F(x)=K+a_1x+a_2x^2+ \cdots +a_{t-1}x^{t-1} \bmod p$
分配$F(i),i\in[1,n]$
恢复阶段用拉格朗日插值:
Blakley秘密分享
以上秘密分享只能抵抗被动攻击
- 分发阶段若庄家不诚实,可是使得分发的碎片不合法
- 重构阶段若某一参与者使用错误值,无法恢复真正秘密
设计可验证的秘密分享体制
分发中心广播对秘密的承诺
2选1OT
Sender with input $m_0,m_1$,outputs nothing. Receiver with input $b$, outputs $m_b$
Sender sends $pk_0,pk_1$
Receiver gets $r\gets \{0,1\}^n,c\gets Enc_{pk_b}(r)$
Senders calculates
Receivers calculates $m_b=d_b\oplus r$
考虑使用一组公钥原语,根据生成随机数和生成公钥的效率选择不同方案