990 likes | 1.08k Vues
可信计算基础. 周福才 fczhou@mail.neu.edu.cn http://decweb.neu.edu.cn. 第三讲 认证技术与数字签名. 消息 / 数据. 证实一个收到的消息来自可信的源点且未被篡改的过程,(完整性、真实性)防止主动攻击。证明接收的消息是可信的内容未被篡改、可靠的消息来源、以正确的顺序及时发送. 消息认证用于保证信息的完整性与抗否认性. 认证. 身份 / 实体. 实体身份认证是鉴别对方数字身份的过程(用于鉴别一方证明另一方的用户身份)实体可以是人、进程、客户端、服务器等. 证实某主体的真实身份与其所声称的身份是否相符的过程(真实性).
E N D
可信计算基础 周福才 fczhou@mail.neu.edu.cn http://decweb.neu.edu.cn
消息/数据 证实一个收到的消息来自可信的源点且未被篡改的过程,(完整性、真实性)防止主动攻击。证明接收的消息是可信的内容未被篡改、可靠的消息来源、以正确的顺序及时发送 消息认证用于保证信息的完整性与抗否认性 认证 身份/实体 实体身份认证是鉴别对方数字身份的过程(用于鉴别一方证明另一方的用户身份)实体可以是人、进程、客户端、服务器等 证实某主体的真实身份与其所声称的身份是否相符的过程(真实性)
消息认证与实体认证的比较 • 消息(数据)认证可能不是实时的,但实体认证却需要实时的。 • 当BOB认证一条来源于Alice的消息(例如,E-MAIL)时,Alice可能没有连接到她的E-MAIL系统。 • 当Alice访问银行网站时,或者她从ATM取款时,银行网站/ATM 必须要对Alice进行认证。 • 认证的目标 • 对于每条消息,消息(数据源)认证必须要确认消息的新鲜性、完整性。 • 对于通信会话的整个阶段,实体认证必须要确认实体的身份。
基本概念 • 消息认证(Message Authentication): 是一个证实收到的消息来自可信的源点且未被篡改的过程。 • 散列函数( Hash Functions): 一个散列函数以一个变长的报文作为输入,并产生一个定长的散列码,有时也称报文摘要,作为输出。 • 数字签名(Digital Signature) 是一种防止源点或终点抵赖的鉴别技术。
从加密到认证和鉴别 • 窃听(通信量分析)等被动攻击 加密 • 假冒/窜改等主动攻击 认证和鉴别 • 报文(消息)的真实性/完整性 这条报文真的是他发出来的吗? 是不是假冒的?有没有被篡改过? • 身份的真实性 和我通信的这个人真的是他吗? 是不是假冒的?是不是会话重放? * 数字签名技术
对密文保护的保护 • 在加密之前,添加明文的结构特征 x || h(x) // h=crc,md5,sha1 • 加密 E ( x || h(x), k ) = y • 传输有可能出错或被窜改 • y会变做y’ • 解密 • 判断是否依旧符合 x || h(x)的结构特征
认证(真假)的核心思想 • 一个问题的两个角度 • 消息真实性和完整性 • 身份真实性 • 如何让真实性得到认证? • 该报文被实施了一种特意的、排他性的印记操作 • 该人能对任意的随机报文实施一种特意的、排他性的印记操作 • 什么样的操作? 一般是生成另外一个和原报文及操作人身份相关的附加小报文。 这需要某种特性的数学函数。
加密与认证分离 • 加密本身不能实现真实性认证功能(机密性) • 认证和加密的分离带来灵活性 某些信息只需要真实性(认证),不需要保密性 –广播的信息难以使用加密(信息量大) –网络管理信息等只需要真实性 –政府/权威部门的公告 - 不能加密的场合 • 启发:改变形态 E (x||h(x),k )x||E(h(x),k )
报文认证(MAC)函数特性 • 发送方:报文+某种印记特性 • 印记特性中得蕴含了发送方特有的信息(密钥) (M,K)=A • 传输 • 有被窜改可能,但是篡改导致特性丢失 M || A • 接收方:判断特性是否仍在 • 不符合则被认为有篡改 (M,K)=? A
报文鉴别码(MAC Message Authentication Code) • MAC函数 • 计算明文在密钥K的作用下的特征码 M || MAC(M, K) • 验证时,判断明文和MAC码是否一致 • 讨论 • MAC不需要可逆 • 为了方便,MAC码通常较短 • 实现MAC函数不排斥使用对称加密算法 • 防范重放攻击(加注时间、报文序号) * 对称MAC不能提供签名特性 散 列 函 数
MAC的用法 MAC=Ck(M)
引入散列函数(HMAC) • 生成MAC没有必要整个报文被加密 • 速度、进出口障碍 • 不需要能恢复原文 • MAC的计算过程只需体现明文的特征唯一 • Key是必要的 • 从报文产生特征的数学方法:HASH函数 • 先计算特征,再把特征加密的思想 • 把散列函数和Key结合得MAC HMAC = HashKey(Message)
HMAC • 把HASH值和一个Key结合起来 • 没有使用加密算法 • 目标 • 既能用当前的HASH函数,又易升级为新的HASH函数,并能保持和散列函数一样安全性 • 简单,并易进行密码学分析 • 标准 • RFC 2104 • HMAC:Keyed-Hashing for Message Authentication • FIPS 198 • The Keyed-Hash Message Authentication Code(HMAC)
散列函数 h=H(x) • 函数参数 • 输入:可以任意长度 • 输出:必须固定长度n比特,一般n=128、160 • 函数特性 • 单向性质:给定h,要找x使H(x)=h是困难的 • 弱抗碰撞特性: 对于给定的y,找x,使H(x)=H(y)是困难的 • 强抗碰撞特性(生日攻击): 找x和y,使H(x)=H(y)是困难的 * 如果碰撞则意味着数字签名容易被伪造/欺骗
生日悖论 1、要使k个人中有两个人的生日相同,k至少应该是多少? 366 2、要使k个人中有两个人的生日相同的概率大于0.5,k至少应该是多少? (23) 3、100个人中有两个人的生日相同的概率约为0.9999997!!!
计算方法 k个人中没有两个人的生日相同的概率为: k个人中至少有两个人的生日相同的概率为: 经计算k=23时:1-p=0.5073
单向散列函数(One-way Hash Function) • 单向散列函数(单向+散列) h = H(m) • 有的散列函数并不满足单向(抗冲突)性质 • 密码学上用的散列函数都是指单向散列函数 • 抗冲突性质 • 给定h,找m满足H(m)=h很难 • 给定m,找m’满足H(m’)=H(m)很难 • 找m1和m2满足H(m1)=H(m2)很难 • 举例 • MD5、SHA1
散列函数的应用 (a) AB: EK[ M||H(M)] Provides confidentiality -- only A and B share K Provides authentication-- H(M) is cryptographically protected (b) AB: M||EK[H(M)] Provides authentication-- H(M) is cryptographically protected (c) AB: M||EKRa[H(M)] Provides authentication and digital signature -- H(M) is cryptographically protected -- only A could create EKRa[H(M)]
散列函数的应用(续) (d) AB: EK[M||EKRa[H(M)]] Provides authentication and digital signature Provides confidentiality (e) AB: M||[H(M||S)] HMAC Provides authentication -- only A and B share S (f) AB: EK[M||[H(M||S)] Provides authentication -- only A and B share S Provides confidentiality -- only A and B share K
Hash与MAC的区别 • MAC需要对全部数据进行加密 • MAC速度慢 • Hash是一种直接产生鉴别码的方法
MD系列 • 作者 • Ronald Rivest • http://theory.lcs.mit.edu/~rivest/ • MD2、MD4、MD5 • MD2/4/5 RFC1319/1320/1321 • http://www.ietf.org/rfc/rfc1321.txt • 应用 • 曾经是最广泛的摘要算法 • 但是太短(128bits) • 而SHA有160bits
MD5简介 • Merkle于1989年提出hash function模型 •Ron Rivest于1990年提出MD4 •1992年, MD5 (RFC 1321) developed by Ron Rivestat MIT •MD5把数据分成512-bit块 •MD5的hash值是128-bit •在最近数年之前,MD5是最主要的hash算法 •现行美国标准SHA-1以MD5的前身MD4为基础
MD5 detail • 输入 任意长 • 输出 128bits • 过程 • 填充在Y[L] • 报文填充1~512bits,使之≡448mod512 • 填充64bits长度值 • 填充后报文被划分成512bits分组 • 初始MD寄存器(IV)(小数在前little endian/intel) • A=67452301 B=EFCDAB89 • C=98BADCFE D=10325476 • 分组处理 …
MD5: 总结 • 散列码(128b)的每一个比特均是输入的每一个比特的函数(随机选择两个报文,即使它们有相似规律性,也很难产生相同的HASH) • 易受生日攻击,所需操作的数量级264,因为 128位hash值太短。 • Dobbertin在1996年找到了两个不同的512- bit块,它们在MD5计算下产生相同的hash • 至今还没有真正找到两个不同的消息,它们的 MD5的hash相等 • MD5不是足够安全的
SHA1(Secure Hash Algorithm)简介 • 1992年NIST制定了SHA(128位) • 1993年SHA成为标准(FIPS PUB 180) • 1994年修改产生SHA-1(160位) • 1995年SHA-1成为新的标准,作为SHA-1(FIPS PUB180-1) • SHA-1要求输入消息长度<264 • 输入按512位的分组进行处理的 • SHA-1的摘要长度为160位,基础是MD4
SHA1 detail • 输入 任意报文(<2^64) • 输出 160bits • 过程 • 填充报文、长度成512bits分组(与MD5相同) • 初始化寄存器ABCDE • E = C3D2E1F0 • 分组处理 …
SHA1a block 512bits/32=16words 扩展至W[80]字 每1/4用20字
比较SHA1/ MD5 • 散列值长度 • MD5 128bits SHA1 160bits • 安全性 • SHA看来好些,但是SHA的设计原则没有公开 • 速度 • SHA1慢些 (openssl speed md5/sha1:) type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes md5 5425.31k 19457.48k 55891.45k 104857.60k 143211.40k sha1 5104.58k 16008.41k 37925.33k 57421.81k 68241.68k • 其他 • 雷同
Hash函数小结 • hash函数把变长信息映射到定长信息 • hash函数不具备可逆性 • hash函数速度较快 • hash函数与对称密钥加密算法有某种相似性 • 对hash函数的密码分析比对称密钥密码更困难 • hash函数可用于消息摘要 • hash函数可用于数字签名
消息认证用以保护双方之间的数据交换不被第三方侵犯;但它并不保证双方自身的相互欺骗。假定A发送一个认证的信息给B,双方之间的争议可能有多种形式:消息认证用以保护双方之间的数据交换不被第三方侵犯;但它并不保证双方自身的相互欺骗。假定A发送一个认证的信息给B,双方之间的争议可能有多种形式: (1)B伪造一个不同的消息,但声称是从A收到的。 (2)A可以否认发过该消息,B无法证明A确实发了该消息。 • 抵制通信双方的抵赖 • 对方(自己)否认发送过或收到过某个报文 • 向对方表明自己的身份 • 消息认证(来源) • 消息完整性(防消息修改) • 不可否认性(发方不可否认) 数字签名
考察手写签名的特性 • 签名的含义 • 签名者慎重表达认可文件内容的意向的行为 • 主要形式 • 手写签名、签章、手指纹印(其他生物技术) • 特性 • 不可伪造,特异性 • 不可重用,日期和时间相关性 • 不可改变,能发现涂改、转移意义或用途 • 不可抵赖,能够质证 • 可仲裁的,可做为法律证据
数字签名: 要适应的新变化 • 数字签名 • 数字文件 • 数字小文件 • 如何绑定 • 手写签名 • 纸质文件 • 手写签名 • 同一页纸 * 扫描手写字迹、鼠标手写 • No!
手写签名的数字化改造 • 数学支持-签名函数 • 被签署的是文件(大文件) • 签名生成另外一个文件(小文件) • 签名过程一定有签署人的身份和某种秘密(别人不知的)参与 • 简单易行 • 计算和存储 身份和秘密 报文 签名函数 报文 签名
用私钥加密当作签名 • 以RSA为例,主要操作 • 输入 报文明文、私钥 m^d = s • 输出 报文明文m、报文密文(签名) s (m, s) • 验证 (公钥e) s^e =? m • 是否满足签名要求的特性 • 讨论 • 私钥的管理: 和身份绑定、更新等 • 签名过程太慢: 启用散列函数 • 改进 • 对报文的散列值用私钥加密得到签名值
数字签名的执行方式 • 直接数字签名(direct digital signature) • 仲裁数字签名[信任中心](arbitrated digital signature)
直接数字签名(DDS) • (1) AB: EKRa[M] • 提供了认证与签名: • 只有A具有KRa进行加密; • 传输中无法被篡改; • 需要某些格式信息/冗余度; • 任何第三方可以用KUa 验证签名 (1’) AB: EKUb[EKRa(M)] 提供了保密(KUb)、认证与签名(KRa):
直接数字签名 (2) AB: M||EKRa[H(M)] 提供认证及数字签名 -- H(M) 受到密码算法的保护; -- 只有 A 能够生成 EKRa[H(M)] (2’) AB: EK[M||EKRa[H(M)]] 提供保密性、认证和数字签名。
直接数字签名的缺点 验证模式依赖于发送方的保密密钥; 发送方要抵赖发送某一消息时,可能会声称其私有密钥丢失或被窃,从而他人伪造了他的签名。 通常需要采用与私有密钥安全性相关的行政管理控制手段来制止或至少是削弱这种情况,但威胁在某种程度上依然存在。 改进的方式例如可以要求被签名的信息包含一个时间戳(日期与时间),并要求将已暴露的密钥报告给一个授权中心。 X的某些私有密钥确实在时间T被窃取,敌方可以伪造X的签名及早于或等于时间T的时间戳.
有信任中心帮助的签名 • 优点:可以简化用户的考虑,也可以使用对称算法 Kxa是发方X和可信中心A共享密钥, Kya是接收方X和可信中心A共享密钥 • 缺点:中心的安全故障、在线瓶颈、可靠性等问题
仲裁数字签名 (a) 单密钥加密方式,仲裁者可以看见消息 (1) XA:M||EKxa[IDx|| H(M)] (2) AY:EKay[IDx|| M || EKxa[IDx|| H(M)] || T] • X与A之间共享密钥Kxa,Y与A之间共享密钥Kay; • X:准备消息M,计算其散列码H(M),用X的标识符IDx和散列值构成签名,并将消息及签名经Kxa加密后发送给A; • A:解密签名,用H(M)验证消息M,然后将IDx,M,签名,和时间戳一起经Kay加密后发送给Y; • Y:解密A发来的信息,并可将M和签名保存起来。 • 解决纠纷: • Y:向A发送 EKay[IDx|| M || EKxa[IDx|| H(M)]] • A:用Kay恢复IDx,M,和签名( EKxa[IDx|| H(M)]),然后用Kxa解密签名并验证散列码