第七章 密码学 汕职院 计算机网络专业 7.1 密码学概述 密码编码学 Cryptography 主要研究对信息进行编码,实现对信息的隐蔽。 密码分析学Cryptanalysis 目的:得到密钥,而不是仅仅得到单个密文对应的 明文。 7.1.1 信息安全与密码学的关系 加密技术是信息安全技术的核心,已经渗透到大部分安全产 品中去了,而且有芯片化的趋势 信息的私密性(Privacy): 对称加密 信息的完整性(Integrity): 单向散列算法 信息的源发鉴别(Authentication): 数字签名 信息的防抵赖性(Non-Reputation): 数字签名 + 时间戳 7.1.2 密码学的目的和加密通信模型 密码学的目的:Alice和Bob两个人在不安全的信 道上进行通信,而窃听者Charly不能理解他们通 信的内容 7.1.3 相关概念 1 明文 plain text 2 密文 cipher text 4 密码算法cipher/cryptography algorithm 3 受限制的(restricted)算法:基于算法的保密 5 密钥 key:基于key的保密 7.1.4 密钥 是用户按照一种密码体制随机选取,它通常是一 随机字符串,是控制明文和密文变换的唯一参数 。 Charly 明文 Alice 明文 密文 加密 解密 密钥 密钥 密钥源 密钥源 密钥信道 Bob 如何理解密钥(1) 如何理解密钥(2) 如何理解密钥(3) 7.1.5 密码学的发展 第1阶段:(1949以前) 古典密码学 第2阶段:(1949~1975) 现代密码学 标志:1949年Shannon发表的《保密系统的信息理论》 第3阶段:(1976年至今) 公钥密码学 标志:1976年Diffie和Hellman发表了《密码学新方向》 7.1.6 密码的分类 单钥密码和双钥密码 私钥密码和公钥密码 流密码和分组密码 7.1.6.1 对称加密 传统密码/常规密码/私钥密码/单钥密码conventional / private-key / single-key 发送方和接收方共享一个共同的密钥 sender and recipient share a common key 所有的传统密码算法都是私钥密码 Kerckhoff原则:系统的保密性不依赖于对加密体制或 算法的保密,而依赖于对密钥的保密。 20世纪70年代以前私钥密码是唯一类型 至今仍广泛应用 7.1.6.2 对称加密的模型(Symmetric Cipher Model) 7.1.7 密码体系的安全性 绝对安全/无条件安全,unconditional security 无论有多少可使用的密文,都不足以唯一的确 定密文所对应的明文 除了一次一密之外,所有的加密算法都不是无 条件安全的 计算安全,computational security 破译密码的代价超过密文信息的价值; 破译密码的时间超出了密文信息的有效生命期。 穷举攻击 Key Size (bits) Number of Alternative Keys Time required at 1 decryption/µs Time required at 106 decryptions/µs 32 232 = 4.3 109 231 µs = 35.8 minutes 2.15 milliseconds 56 256 = 7.2 1016 255 µs = 1142 years 10.01 hours 128 2128 = 3.4 1038 2127 µs = 5.4 1024 years 5.4 1018 years 168 2168 = 3.7 1050 2167 µs = 5.9 1036 years 5.9 1030 years 2 1026 µs = 6.4 1012 years 6.4 106 years 26 characters (permutation) 26! = 4 1026 非技术因素的攻击 社会工程 偷窃 收买 逼问 … 7.2 古典密码 代换技术 将明文字母替换成其他字母、数字或符号的方 法; 如果把明文看成是0或1的序列,那么密文就是0 或1比特序列的另一种表达。 置换技术 7.2.1 非典型的单表代换——恺撒密码 加密算法:C=E(3,p)=(p+3)mod 26 算法的一般化: C=E(k,p)=(p+k)mod 26 解密算法:P=D(3,c)=(p-3)mod 26 算法的一般化: P=E(k,c)=(c-k)mod 26 恺撒密码的密码分析——穷举 恺撒密码的三个重要特征 已知加密和解密算法 共有密钥25个 明文所用的语言是已知 的,且意义易于识别 例: PHHW PH DIWHU 1 oggv og chvgt 2 nffu nf bgufs 3 meet 4 ldds … …… me after ls zesdq WKH vjg WRJD vqic SDUWB Rctva uif uphb qbsuz the Sgd toga snfz party ozqsx 7.2.2 典型的单表代换 每个明文字母随机代换到一个密文字母(任意代 换) 密钥数目: 26! 单表代换的密码分析——统计学 利用语言特征的密码分析 UZQSOVUOHXMOPVGPOZPEVSGZWSZOPFPESXUDBMET SXAIZVUEPHZHMDZSHZOWSFPAPPDTSVPQUZWYMX UZUHSX EPYEPOPDZSZUFPOMBZWPFUPZHMDJUDTMOHMQ P 13.33 H 5.83 F 3.33 B 1.67 C 0.00 Z 11.67 D 5.00 W 3.33 G 1.67 K 0.00 S 8.33 E 5.00 Q 2.5 Y 1.67 L 0.00 U 8.33 V 4.17 T 2.5 I 0.83 N 0.00 O 7.5 X 4.17 A 1.67 J 0.83 R 0.00 M 6.67 对应明文 itwasdisclosedyesterdaythatseveralinformalbutdire ctcontactshavebeenmadewithpoliticalrepresentativ esofthevietconginmoscow It was disclosed yesterday that several informal but direct contacts have been made with political representatives of the viet cong in moscow 单表代换的缺点 单表代换缺陷是:密文带有原始字母使用频率的 一些统计学特征 对策:每个字母提供多种代换 7.2.3 非典型的多表代换——Playfair密码 算法基于一个由密钥词构成的5×5字母矩阵 填写密钥单词 用其他字母填写剩下的空缺 M O N A R C H Y B D E F G I/J K L P Q S T U V W X Z Playfair密码的加/解密步骤 加密 明文分组:2个字母/组,相同字母间加填充字 母 同行字母对加密:循环向右,ei→FK 同列字母对加密:循环向下,cu→EM,xi→AS 其它字母对加密:矩形对角线字母,且按行排 序,hs→BP,es→IL(或JL) 解密 加密的逆向操作 Playfair密码安全性分析 明、密文字母不是一一对应关系 安全性优于单表代替密码 在WW1中使用多年 虽然明文中字母的统计规律在密文中得到了降低, 但密文中仍含有明文的部分结构信息 给定几百个字母,即分析出规律 7.2.4 非典型的多表代换——Hill密码 1929年由数学家Lester Hill发明 是多表代换密码 加密方法是由m个线性方程决定: c1=(k11p1+k12p2+k13p3)mod 26 c2=(k21p1+k22p2+k13p3)mod 26 c3=(k31p1+k32p2+k33p3)mod 26 用列向量和矩阵表示为: c1 k11 k12 k13 c 2 k 21 k 22 k 23 c3 k 31 k 32 k 33 p1 p 2 mod 26 p3 加密: Hill密码的加/解密过程 明文分组编码 C≡KP mod 26,其中,K为密钥矩阵,P、C分别 为明、密文列向量 解密: 密文分组编码 P≡K-1C mod 26 对密钥矩阵K的要求:在mod 26下可逆. 加密:paymoremoney 4 9 15 K-1= 15 17 6 24 0 17 密钥矩阵 17 17 5 K= 21 18 21 2 2 9 明文分组 P=“pay mor emo ney” 明文编码 p 15 = P= a 0 y 24 17 17 5 15 加密 C≡ 21 18 21 0 Mod 26≡ 2 2 19 24 C=“LNS” 全文加密后是:lnshdlewmtrw 375 11 ≡ 13 819 18 486 解密lnshdlewmtrw 密钥矩阵 密文分组 密文编码 4 9 15 17 17 5 K-1= 15 17 6 K= 21 18 21 24 0 17 2 2 9 C=“lns hdl ewm trw” l 11 C= n = 13 s 18 4 9 15 11 加密 C≡ 15 17 6 13 Mod 26≡ 24 0 17 18 P=“pay” 15 0 4 Hill的安全性分析 明、密文字母不是一一对应关系 连续m个明文替换成m个密文 完全隐藏了单字母的频率特性 随着矩阵的增大,字母的统计规律进一步降低 足以抗唯密文攻击,但容易被已知明文攻击破解 数学可解出密钥 7.2.5 典型的多表代换 多表代换的共同点: 采用单表代换规则 多个代换表规则 密钥决定使用具体规则 目的 使得字母的频率分布更加平坦 典型例子 Vigenère(维吉利亚)密码(1858) Vernam(唯尔南)密码(1918) Vigenère(维吉利亚)密码 加密过程 假设密钥k,明文p,则密文为k行p列的元素:z 例如:we are discovered save yourself K:deceptivedeceptivedeceptive P:wearediscoveredsaveyourself C:zicvtwqngrzgvtwavzhcqyglmgj 加密算法描述: ci=(pi+ki)mod26 i=1,2,…,n; 说明:若明文长度大于n,则K重复使用。 解密算法描述 Pi=(ci-ki)mod26 i=1,2,…,n; Vigenère的攻击方法 观察密文字母频率,如果与明文字母频率非常 接近,则可能是单表代换 如果认为是采用维吉尼亚加密,则破译能否取 得进展取决于:能否判定密钥词的长度 如何判定长度?观察上例 如果知道了K的长度L,则上例中,1,10, 19……为单表代换,以此类推 Vigenère的攻击方法 Vigenère的改进:密钥生成系统 K:deceptivewearediscoveredsav P:wearediscoveredsaveyourself C:zicvtwqngrzgvtwavzhcqyglmgj 对改进的Vigenère的攻击: P和k具有相同的频率分布特征,则用e加密e的发生概率接 近0.127*0.127,以此类推 最终的反破译手只能是采用和P一样长的k Vigenère密码的安全性 强度在于:每个明文字母对应着多个密文字母, 明、密文字母不是一一对应关系,字母的统计规 律进一步降低 Vigenére本人建议:密钥与明文一样长 观察上例:仍然保留了频率信息 特例:当k1 = k2 = … = kn =k时,是Caesar密码 Vernam(唯尔南)密码 ci=pi pi=ci ki ki 关于vernam 基于二进制 技术的关键在于构建K的方式 Vernam提出使用连续磁带 7.2.6 一次一密 与明文等长的随机密钥 安全强度取决于密钥的随机性 理论上不可破 实际上不可行 产生大量的随机密钥难 密钥分配与保护更难 7.2.7 置换技术—栅栏密码(Rail Fence cipher) 思想:以列(行)优先写出明文,以行(列)优先读出各 字母作为密文 例1:先行后列 例2:先列后行 明文:meet me after the toga party 写做: m e m a t r h t g p r y e t e f e t e o a a t 读出密文为: MEMATRHTGPRYETEFETEOAAT 栅栏密码的改进 改进:带有密钥 例: 4 3 1 2 5 6 7 K: a t t a c k p P: o s t p o n e d u n t i l t w o a m x y z C:TTNAAPTMTSUOAODWCOIXKNLYPETZ 再改进 再改进:重复加密,多步置换 例: K: 4 3 1 2 5 6 P: t t n a a p 7 t m t s u o a o d w c o i x k n l y p e t z C:NSCYAUOPTTWLTMDNAOIEPAXTTOKZ 7.2.8 轮转机 在现代密码之前,转轮密码是最广泛使用的复杂 的密码 广泛用在第二次世界大战中 German Enigma, Allied Hagelin, Japanese Purple 实现了复杂多变的多表代换密码,多层加密 采用一系列转轮,每一个都是一个代替表,转轮 可以依次旋转加密每个字母 用3个转轮就有 263=17576 代换表 2015年4月13日1时39分 西安电子科技大学计算机学院 46 7.2.9 隐写术 隐藏信息的存在 “藏头诗” 字符标记 用不可见的墨水 打字机的色带校正 缺点 需要额外的付出来隐藏相对较少的信息 Dear George, Greetings to all at oxford.many thanks for your letter and for the Summer examination package. All Entry Forms and Fees Forms should be ready for final despaetch to the syndicate by Friday 20th or at the very latest, I’m told.by the 21st. Admin has improve here, though there’s room for improvvement still; just give us two or three more years and we’llreally show you! Please don’t let these wretched 16t proposals destroy sort of change, if implemented immediately, would bring chaos. sincerely yours 2015年4月13日1时39分 50 7.3 现代密码学 古典密码学 安全性取决于算法的保密 主要技术:代换和置换 现代密码学 安全性取决于密钥的保密 主要技术: DES:代换、置换 AES:代换、置换、混淆(复杂代换) 7.3.1对称加密 传统密码/常规密码/私钥密码/单钥密码conventional / private-key / single-key 发送方和接收方共享一个共同的密钥 sender and recipient share a common key 所有的传统密码算法都是私钥密码 Kerckhoff原则:系统的保密性不依赖于对加密体制或 算法的保密,而依赖于对密钥的保密。 20世纪70年代以前私钥密码是唯一类型 至今仍广泛应用 对称加密的模型(Symmetric Cipher Model) 7.3.2 分组密码和流密码 流密码模型:每次加密数据流的一位或一个字节 密钥k 明文m 异或运算 密钥流 产生器 密文c 流密码体制模型 分组密码 将一个明文组作为整体加密且通常得到的是与 之等长的密文组 典型分组大小:64位或128位 分组密码的应用范围比流密码要广泛 绝大部分基于网络的对称密码应用使用的是分 组密码 7.3.3 DES算法 DES是使用最广泛的加密体制,77年被美国国家 标准局采纳为信息处理标准。这个算法本身值得 是DEA(数据加密算法)。 DES算法的发展(1) 20世纪60年代,IBM公司成立了由Horst Feistel负责的 计算机密码学研究项目。 1971年设计出了算法LUCIFER,后来给出了修订版: Tuchman-Meyer。 1973年,美国国家标准局NBS征求国家密码标准方案, IBM提交了该算法。 1977 年正式颁布为数据加密标准(DES - Data Encryption Standard)。 1979 年,美国银行协会批准使用 DES。 DES算法的发展(2) 1980 年,DES 成为美国标准化协会 (ANSI) 标准。 1984 年,ISO 开始在 DES 基础上制定数据加密的国 际标准。 美国国家安全局NSA每隔年对该算法进行评估 ,1994 年,决定1998年12月之后不再使用DES 。 现已经确定了选用Rijndael算法作为高级加密算法AES。 Feistel 密码结构 原理 乘积密码:一次使用两个或以 上基本密码,所得的密码强度大 于所有单个密码的强度 特别地,Feistel建议交替地使用 代换和置换。这是Shannon提出 的交替使用混淆和扩散乘积密 码的实际应用。 第i轮的输出: LEi = REi-1 REi = LEi-1 F(REi-1, ki) Feistel的解密 DES算法框架 General depiction 细化 分解:初始置换 分解:单轮变换 函数F 第i 轮输入 第i 轮输出 函数F 分解:F函数 Expansion: 32 -> 48 S-box: 48 -> 32 Permutation: 32 -> 32 分解:F函数 分解:扩展置换E:32bit→48bit 分解:压缩置换(S盒):6bit→4bit , 48bit→32bit 分解:8个S盒 分解:其中一个S盒 输入 输出 S8 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 0 1 2 3 13 01 07 02 02 15 11 01 08 13 04 14 04 08 01 07 06 10 09 04 b 1101012 10012 15 03 12 10 11 07 14 08 01 04 02 13 10 12 00 15 09 05 06 12 03 06 10 09 14 11 13 00 05 00 15 03 00 14 03 05 12 09 05 06 07 02 08 11 分解:P置换(P盒):32bit→32bit 分解:子密钥生成 分解:置换选择1,置换选择2 分解:循环移位 DES解密 逆序使用密钥 7.3.4 雪崩效应 明文或密钥的微小 改变将对密文生成 很大的影响。这是 任何加密算法需要 的一个好的性质 DES满足严格雪崩 准则(1—>50%) 7.3.5 DES的强度 56位密钥: 256 = 7.2 x 1016 (穷举空间) DES破译机(DES Cracker) :1998 计时攻击:利用加密算法或解密算法对于不同的输入所花 的时间的细微的差异。 差分分析和线性分析 7.3.6 AES AES是一种分组密码,用以取代DES的商业应用 比较两种分组密码: DES 64 56 Feistel AES 128 128/192/256 非 7.3.6.1 AES起源 NIST在99年发布了新版本DES标准:DES仅能用于遗留的系统 ,同时3DES将取代DES成为新标准 3DES优点:key长度足够(112,168);DES算法经过了长时间 的分析,未有比穷举攻击更有效的攻击方法 3DES缺点:软件实现的速度比较慢;分组长度64 NIST在97年征集高级加密标准(AES):安全性能不低于3DES ,具有更好的执行性能,分组长度必须是128,支持密钥长度 128、192、256 在2001年发布了最终标准:选择Rijndael算法作为AES算(比 利时密码学家joan daemen ,vicent rijmen)法 7.3.6.2 AES的评估 AES的安全性:最短密钥是128,穷举攻击不可能,重点考 虑密码分析 成本:全世界免费使用,能广泛应用于各种实际应用,计 算效率高 算法和执行特征:算法灵活;适用于软件和硬件实现;算 法简洁,容易分析 rijndael算法的特性:分组长度和密钥长度可以为128, 192,256 对所有已知的攻击免疫; 在各种平台上执行速度快,代码紧凑; 设计简单 7.3.7 3DES 3DES:多重加密(多个密钥) 2个key:112 C=E(k1,D(k2,E(k1,p))) 3个key: C=E(k3,E(k2,E(k1,p))) internet应用:PGP,S/MIME 7.3.8 RC4 流密码 可变密钥长度,面向字节操作 密码周期大于10100 RSA公司1987年设计该密码并列为商业机密, 1994年9月算法被匿名公开 internet应用:ssl/tsl,ieee802.11 WEP 强度:没有哪种方法对攻击使用足够长度密钥( 128位)的RC4有效;WEB协议漏洞在于密钥的产 生途径有漏洞,通过修改密钥产生途径可避免, 该攻击方法不适用于其他使用RC4的应用 7.3.8用对称密钥实现保密 安全隐患 被动攻击和主动攻击: 比较各种载体的安全性: 传输加密:链路加密和端到端加密 密钥分配: 密钥由A产生,亲自交给B 第三方产生密钥,亲自交给A和B 如果AB之前使用过某密钥,用它来加密新密钥传送 AB与第三方C有秘密渠道,C可以产生密钥后分别发送给A和B。 KDC:密钥分配中心 典型的KDC密钥分配模式 思考题 有人提出一种方法,可以用来确认你的密钥和对 方的是否相同。首先你产生一个与密钥等长的二 进制串,并且用来和密钥异或,并将结果通过某 渠道发出。对方将受到的位串与自己的密钥异或 ,并将结果发回来。你将发回的结果与开始的随 机位串核对,就可以知道你的密钥是否与对方相 同,而且整个过程没有发送密钥,对密钥是保密 的。这种方法有一个缺点,分析一下。 7.3.9 随机数 随机数的特性:随机性和不可预测性 随机性:具有良好的统计特性,即分布一致性和独立性 不可预测:多用伪随机数 伪随机数发生器(PRNG) 线性拟合发生器:Xn+1=(AXn+C)mod m 解决:利用内部系统时间来修正随机数流 密码学方法: BBS发生器: 真随机数发生器:离子辐射,漏电容 7.4 公钥密码学 公钥密码学 密码学发展历史中最伟大的一次革命 采用两个密钥:一个公钥,一个私钥 参与方不对等,所以是非对称的; 基于数论中的结论 是私钥密码的补充而不是代替 对称密码体系的缺陷 密钥分配问题:通信双方要进行加密通信,需要通过秘密 的安全信道协商加密密钥,而这种安全信道可能很难实现 ; 密钥管理问题:在有多个用户的网络中,任何两个用户之 间都需要有共享的秘密钥,当网络中的用户n很大时,需要 管理的密钥数目是非常大 。 没有签名功能:当主体A收到主体B的电子文挡(电子数据 )时,无法向第三方证明此电子文档确实来源于B。 公钥密码体制及其误解 公钥/双钥/非对称 密码都是指使用两个密钥: 公钥:可以对任何人公开的密钥,用于加密消息或验证签名。 私钥:只能由接收者私存,用于解密消息或签名。 非对称 用于加密消息或验证签名的人不能进行消息的解密或消息的签名。 三种误解 比传统密码更安全; 传统密码已过时; 公钥密码分配非常简单 公钥密码体制示意图 公钥密码体制:保密性和认证模型 公钥密码的应用 分为三类: 加密/解密 (提供保密性) 数字签名 (提供认证) 密钥交换 (会话密钥) 一些算法可用于上述三类,而有些只适用用于其中一类或 两类。 公钥密码的要求 公私钥对产生在计算上容易; 加密在计算上容易; 解密在计算上容易; 已知公钥,求私钥在计算上不可行; 已知公钥和密文,恢复明文计算上不可性。 加密和解密函数的顺序可以交换(附加条件) 公钥密码体制安全性分析 一样存在穷举攻击 使用的密钥一般都非常大 ( >512bits ) 为了便于实现加解密,密钥又必须足够短。 公钥密码目前仅限与密钥管理和签名中。 另外一种攻击方法:从给定的公钥计算出私钥的 方法。 到目前为止,还未在数学上证明对一特定公钥算法这种攻击是不 可行的。(包括RSA) 公钥体制特有的攻击 穷举消息攻击 7.5 RSA 1977由MIT的Rivest, Shamir 和 Adleman发明 已知的且被广泛使用的公钥密码方案 有限域中的乘方运算 乘方运算需要 O((log n)3) 操作 (容易的) 使用一些大的整数 (例如. 1024 bits) 安全性基于大数的素因子分解的困难性 素因子分解需要 O(e log n log log n) 操作 (困难的) RSA三剑客 RSA 密钥的建立 每一个用户通过以下方法产生一个公钥/私钥对: 随机地选择两个大的素数 p, q 计算方案中的模数 n = p.q ø(n) = (p-1) (q-1) 随机地选择一个加密密钥e 满足 1< e < ø(n), gcd (e, ø(n)) = 1 求解下面的方程,以得到解密密钥d e.d ≡ 1 mod ø(n) and 0 ≤ d ≤n 公开公钥: PU = {e, n} 保密私钥: PR = {d, n} RSA 的使用 为了加密消息M,发送方: 获得接收方的公钥 计算: C = Me mod n, 其中 0 ≤ M < n 为了解密密文C,接收者: 使用自己的私钥 计算: PU = { e, n } PR = { d, n } M = Cd mod n 消息M一定要比模数 n小 (如果需要的话,可以进 行分组) RSA 举例 – 密钥的建立 2015/4/13 1. 选择素数: p = 17 & q = 11 2. 计算 n = p q =17 x 11 = 187 3. 计算 ø(n) = (p–1) (q-1) = 16 x 10 = 160 4. 选择 e: gcd(e, 160) = 1; 选择 e = 7 5. 确定 d: d e = 1 mod 160 且 d < 160 d = 23 因为 23 x 7=161= 10x160+1 6. 公钥 PU = { 7, 187 } 7. 私钥 PR = { 23, 187 } 西安电子科技大学计算机学院 100 RSA 举例 – 加密/加密 明文消息 M = 88 ( 注意88 < 187) 加密: C = 887 mod 187 ≡ 11 解密: M = 1123 mod 187 ≡ 88 2015/4/13 西安电子科技大学计算机学院 101 RSA 密钥的产生 2015/4/13 RSA的用户必须: 随机确定两个素数 p, q 选择e或d,并求出另一个 素数 p, q 一定不能从n = p . q轻易得到 意味着数要足够大 典型地用猜测或可能性测试(MillerRabin) 指数e, d 是互逆的 (欧几里得扩展算法) 西安电子科技大学计算机学院 102 7.6 公钥密码体制的公钥分配 公钥分配方法: 公开发布 公开可访问目录 公钥授权 公钥证书 公钥的公开发布 公开可访问的目录 公钥授权 公钥证书 7.7 公钥体系的应用:分配密钥 简单的秘密钥分配(1979由Merkle提出) A 产生一个公钥对 A 发送自己的标识和公钥给 B B 产生一个会话密钥,并用 A 的公钥加密后发 送给 A A 解密会话密钥 问题是容易受到主动攻击,而通信双方却毫无察 觉。 应用:分配密钥 具有保密性和真实性的密钥分配:假设双发已安 全交换了各自的公钥 应用:分配密钥 混合方式的密钥分配 保留私钥配发中心( KDC ) 公钥用于分配主密钥 每用户与KDC共享一个主密钥 用主密钥分配会话密钥 在大范围分散用户的情况下尤其有用 三层结构 基本依据 性能 向后兼容性: 只需要花很小的代价,我们就可以很容易将混合方 法用于现有的KDC中。 7.8 消息认证和Hash函数 对认证的需求:可能的攻击 1. 泄密 2. 传输分析( 面向连接:频率、持续时间,无连接:消 息的数量和长度) 3. 伪装 4. 内容修改(插入、删除、转换和修改) 5. 顺序修改(插入、删除和重新排序) 6. 计时修改(延时和重放) 7. 发送方否认 8. 接收方否认 7.8.1 消息认证和数字签名 消息认证:验证所收到的消息确实是来自真实的发送 方且未被修改的消息,它也可验证消息的顺序和及时 性。 数字签名:是一种认证技术,其中的一些方法可用来 抗发送方否认攻击。(接收者可验证但不能伪造) 消息认证 数字签名 7.8.2 认证函数 两层:产生认证符 + 验证 产生认证符的函数类型: 消息加密:消息的密文作为认证符。 消息认证码:消息和密钥的函数,产生定长的 值作为认证符。 MAC: message authentication code Hash函数:将任意长消息映射为定长的hash值 作为认证符。 7.8.2.1 消息加密 消息加密也能提供一种认证的方法 对称密码,既可以提供认证又可以提供保密性, 但不是绝对的。 只有消息具有适当的结构、冗余或含有校验 和,接收方才可能对消息的任何变化进行检 测。 否则,认证难以完成。 114 消息加密 公钥体制中: 加密不能提供对发送方的认证(公钥是公开的) 发送方可用自己的私钥进行签名 接收方可用发送方的公钥进行验证 保密性和可认证性 115 116 7.8.2.2 消息认证码 (MAC) 一种认证技术 利用密钥来生成一个固定长度的短数据块(MAC),并 将该数据块附加在消息之后。 MAC的值依赖于消息和密钥 MAC = Ck(M) MAC函数于加密类似,但MAC算法不要求可 逆性,而加密算法必须是可逆的。 接收方进行同样的MAC码计算并验证是否与发送过来的 MAC码相同 117 Message Authentication Code 118 MAC 特性 MAC码是一个密码校验和 MAC = CK(M) 消息M的长度是可变的 密钥K是要保密的,且收发双方共享。 产生固定长度的认证码 MAC算法是一个多对一的函数 多个消息对应同一MAC值 但是找到同一MAC值所对应的多个消息应该 是困难的。 119 对MACs的要求: 抗多种攻击(例如穷举密钥攻击) 且满足: 1. 已知一条消息和MAC, 构造出另一条具 有同样MAC的消息是不可行的 2. MACs应该是均匀分布的 3. MAC应该依赖于消息的所有比特位 120 121 7.8.2.3 Hash函数 浓缩任意长的消息M到一个固定长度的取值 h = H(M) 通常假设hash函数是公开的且不使用密钥 (MAC使用密钥) Hash函数用户检测对消息的改变 多种工作方式 常用于产生数字签名 122 保密性和认证性 认证性 认证性和 数字签名 123 保密性、认证性和数字签名 认证性 124 Hash函数和数字签名 125 对Hash函数的要求 1. 2. 3. 4. • 5. • 6. • 可用于任何尺寸的消息M 产生固定长度的输出 h 对任何消息M ,计算h=H(M)是容易的。 给定 h ,计算满足H(x)=h的x在计算上是不可行的 单向性 给定x,计算满足H(y)=H(x)的y在计算上是不可行的 抗弱碰撞性(weak collision resistance) 找到任何满足 H(y)=H(x)的偶对( x,y ),在计算上是不可 行的。 抗碰撞性(strong collision resistance) 126 简单Hash函数举例 最简单的Hash函数: 分组之后按位异或 已有的算法 MD4 MD5 SHA-1 SHA-256 SHA- 127