- 密码学教程
- 密码学 - 首页
- 密码学 - 起源
- 密码学 - 历史
- 密码学 - 原理
- 密码学 - 应用
- 密码学 - 优点与缺点
- 密码学 - 现代
- 密码学 - 传统密码
- 密码学 - 加密的需求
- 密码学 - 双重强度加密
- 密码系统
- 密码系统
- 密码系统 - 组成部分
- 密码系统的攻击
- 密码系统 - 彩虹表攻击
- 密码系统 - 字典攻击
- 密码系统 - 暴力攻击
- 密码系统 - 密码分析技术
- 密码学的类型
- 密码系统 - 类型
- 公钥加密
- 现代对称密钥加密
- 密码学哈希函数
- 密钥管理
- 密码系统 - 密钥生成
- 密码系统 - 密钥存储
- 密码系统 - 密钥分发
- 密码系统 - 密钥撤销
- 分组密码
- 密码系统 - 流密码
- 密码学 - 分组密码
- 密码学 - Feistel分组密码
- 分组密码的工作模式
- 分组密码的工作模式
- 电子密码本 (ECB) 模式
- 密码分组链接 (CBC) 模式
- 密码反馈 (CFB) 模式
- 输出反馈 (OFB) 模式
- 计数器 (CTR) 模式
- 经典密码
- 密码学 - 反向密码
- 密码学 - 凯撒密码
- 密码学 - ROT13算法
- 密码学 - 转置密码
- 密码学 - 加密转置密码
- 密码学 - 解密转置密码
- 密码学 - 乘法密码
- 密码学 - 仿射密码
- 密码学 - 简单替换密码
- 密码学 - 简单替换密码的加密
- 密码学 - 简单替换密码的解密
- 密码学 - 维吉尼亚密码
- 密码学 - 维吉尼亚密码的实现
- 现代密码
- Base64编码与解码
- 密码学 - XOR加密
- 替换技术
- 密码学 - 单字母替换密码
- 密码学 - 单字母替换密码的破解
- 密码学 - 多字母替换密码
- 密码学 - Playfair密码
- 密码学 - Hill密码
- 多字母替换密码
- 密码学 - 一次性密码本
- 一次性密码本的实现
- 密码学 - 转置技术
- 密码学 - 栅栏密码
- 密码学 - 列置换密码
- 密码学 -隐写术
- 对称算法
- 密码学 - 数据加密
- 密码学 - 加密算法
- 密码学 - 数据加密标准 (DES)
- 密码学 - 三重DES
- 密码学 - 双重DES
- 高级加密标准 (AES)
- 密码学 - AES结构
- 密码学 - AES变换函数
- 密码学 - 字节替换变换
- 密码学 - 行移位变换
- 密码学 - 列混淆变换
- 密码学 - 轮密钥加变换
- 密码学 - AES密钥扩展算法
- 密码学 - Blowfish算法
- 密码学 - SHA算法
- 密码学 - RC4算法
- 密码学 - Camellia加密算法
- 密码学 - ChaCha20加密算法
- 密码学 - CAST5加密算法
- 密码学 - SEED加密算法
- 密码学 - SM4加密算法
- IDEA - 国际数据加密算法
- 公钥(非对称)密码算法
- 密码学 - RSA算法
- 密码学 - RSA加密
- 密码学 - RSA解密
- 密码学 - 创建RSA密钥
- 密码学 - 破解RSA密码
- 密码学 - ECDSA算法
- 密码学 - DSA算法
- 密码学 - Diffie-Hellman算法
- 密码学中的数据完整性
- 密码学中的数据完整性
- 消息认证
- 密码学数字签名
- 公钥基础设施 (PKI)
- 哈希
- MD5(消息摘要算法5)
- SHA-1(安全哈希算法1)
- SHA-256(安全哈希算法256位)
- SHA-512(安全哈希算法512位)
- SHA-3(安全哈希算法3)
- 哈希密码
- Bcrypt哈希模块
- 现代密码学
- 量子密码学
- 后量子密码学
- 密码协议
- 密码学 - SSL/TLS协议
- 密码学 - SSH协议
- 密码学 - IPsec协议
- 密码学 - PGP协议
- 图像与文件加密
- 密码学 - 图像
- 密码学 - 文件
- 隐写术 - 图像
- 文件加密和解密
- 密码学 - 文件加密
- 密码学 - 文件解密
- 物联网中的密码学
- 物联网安全挑战、威胁和攻击
- 物联网安全的密码技术
- 物联网设备的通信协议
- 常用密码技术
- 自定义构建密码算法(混合密码学)
- 云密码学
- 量子密码学
- 密码学中的图像隐写术
- DNA密码学
- 密码学中的一次性密码 (OTP) 算法
- 区别
- 密码学 - MD5 vs SHA1
- 密码学 - RSA vs DSA
- 密码学 - RSA vs Diffie-Hellman
- 密码学 vs 密码学
- 密码学 - 密码学 vs 密码分析
- 密码学 - 经典 vs 量子
- 密码学 vs 隐写术
- 密码学 vs 加密
- 密码学 vs 网络安全
- 密码学 - 流密码 vs 分组密码
- 密码学 - AES vs DES 密码
- 密码学 - 对称 vs 非对称
密码学速成指南
密码学的起源
从古至今,人类始终存在着两种内在需求:(a) 交流和分享信息;(b) 选择性地交流信息。这两种需求催生了对信息进行编码的艺术,只有预期的接收者才能访问这些信息。即使被加密的消息落入未授权者手中,他们也无法提取任何信息。
隐藏信息以在信息安全中引入保密性的艺术和科学被称为密码学。
“密码学”一词是由两个希腊词组合而成的,“Krypto”意为隐藏,“graphene”意为书写。
密码学历史
密码学的艺术被认为是随着书写艺术而诞生的。随着文明的发展,人类组织成部落、群体和王国。这导致了权力、战争、霸权和政治等观念的出现。这些观念进一步激发了人们秘密与特定接收者交流的自然需求,这反过来又确保了密码学的持续发展。
密码学的根源可以追溯到罗马和埃及文明。
象形文字——最古老的密码技术
密码学最早的已知证据可以追溯到“象形文字”的使用。大约4000年前,埃及人使用象形文字书写的消息进行交流。这种密码只有代表国王传递信息的抄写员才知道。下面显示了一个这样的象形文字。
后来,学者们在公元前500年到600年期间开始使用简单的单字母替换密码。这涉及到根据某种秘密规则用其他字母替换消息中的字母。这个**规则**变成了检索从乱码消息中检索回消息的**密钥**。
早期的罗马密码方法,俗称**凯撒移位密码**,依赖于将消息的字母按商定的数字进行移位(3是一个常见的选择),该消息的接收者然后将字母按相同的数字移回,并获得原始消息。
隐写术
隐写术类似,但为密码学增加了另一个维度。在这种方法中,人们不仅希望通过隐藏信息来保护信息的秘密,而且还希望确保任何未经授权的人都没有证据表明信息的存在。例如,**不可见水印**。
在隐写术中,意外的接收者或入侵者不知道观察到的数据包含隐藏信息。在密码学中,入侵者通常知道正在通信数据,因为他们可以看到编码/加密的消息。
密码学的发展
在欧洲文艺复兴时期及之后,意大利和教皇国推动了密码技术的迅速发展。在这个时代,人们研究了各种分析和攻击技术来破解秘密代码。
15世纪出现了改进的编码技术,例如**维吉尼亚编码**,它提供了在消息中移动字母的多个可变位置,而不是将它们移动相同数量的位置。
直到19世纪以后,密码学才从临时性的加密方法发展成为更复杂的信息安全艺术和科学。
在20世纪初期,机械和机电机器(例如**Enigma转子机**)的发明为编码信息提供了更先进和有效的方法。
在第二次世界大战期间,**密码学**和**密码分析**都变得极其数学化。
随着该领域取得的进步,政府组织、军事单位和一些公司开始采用密码学的应用。他们使用密码学来保护他们的秘密免受他人侵犯。现在,计算机和互联网的出现使普通民众都能使用有效的密码学。
现代密码学
现代密码学是计算机和通信安全的基础。它的基础是基于数论、计算复杂性理论和概率论等各种数学概念。
现代密码学的特点
有三个主要特点将现代密码学与经典方法区分开来。
经典密码学 | 现代密码学 |
---|---|
它直接操作传统字符,即字母和数字。 | 它在二进制位序列上运行。 |
它主要基于“安全性通过模糊性”。采用的编码技术保密,只有参与通信的双方才知道。 | 它依赖于公开的数学算法来编码信息。通过用作算法种子的秘密密钥来获得保密性。算法的计算难度、秘密密钥的缺失等,即使攻击者知道用于编码的算法,也使他无法获得原始信息。 |
它需要整个密码系统才能进行机密通信。 | 现代密码学只需要对安全通信感兴趣的各方拥有秘密密钥即可。 |
密码学的背景
密码学,即对密码系统的研究,可以细分为两个分支:
- 密码学
- 密码分析
什么是密码学?
密码学是创建能够提供信息安全的密码系统的艺术和科学。
密码学处理数字数据的实际安全。它指的是基于提供基本信息安全服务的数学算法的设计机制。您可以将密码学视为包含安全应用程序中不同技术的庞大工具包的建立。
什么是密码分析?
破解密文的艺术和科学被称为密码分析。
密码分析是密码学的姊妹分支,两者并存。密码学过程产生用于传输或存储的密文。它涉及对密码机制的研究,目的是破解它们。密码分析也用于新密码技术的安全性设计中,以测试其强度。
注意 − 密码学关注密码系统的设计,而密码分析研究密码系统的破解。
密码学的安全服务
使用密码学的首要目标是提供以下四项基本信息安全服务。让我们来看看密码学旨在实现的目标。
机密性
机密性是密码学提供的基本安全服务。它是一种防止未授权人员访问信息的安全性服务。有时也称为隐私或保密性。
机密性可以通过多种方式实现,从物理安全到使用数学算法进行数据加密。
数据完整性
这是一种处理识别数据任何更改的安全服务。数据可能被未授权的实体有意或意外地修改。完整性服务确认数据自上次被授权用户创建、传输或存储以来是否保持完整。
数据完整性无法防止数据被更改,但提供了一种检测数据是否被未授权方式操纵的方法。
身份验证
身份验证提供发件人的身份识别。它向接收方确认收到的数据仅由已识别和验证的发件人发送。
身份验证服务有两个变体:
消息认证识别消息的发起者,而不管发送消息的路由器或系统。
实体认证是确保数据来自特定实体(例如特定网站)的保证。
除了发件人之外,身份验证还可以提供关于数据的其他参数的保证,例如创建/传输的日期和时间。
不可否认性
这是一种确保实体无法拒绝先前承诺或行为所有权的安全服务。它保证数据的原始创建者不能否认已将所述数据创建或传输给接收者或第三方。
不可否认性是在可能发生数据交换争议的情况下最理想的属性。例如,一旦电子下单,如果在此交易中启用了不可否认性服务,则购买者无法否认采购订单。
密码学原语
密码学原语只不过是密码学中的工具和技术,可以选择性地使用它们来提供一组所需的安全服务:
- 加密
- 哈希函数
- 消息认证码 (MAC)
- 数字签名
下表显示了可以独立实现特定安全服务的原语。
注意 − 密码学原语彼此错综复杂地关联,通常会将它们组合起来以从密码系统中获得一组所需的安全服务。
密码系统
密码系统是密码技术的实现及其配套的基础设施,用于提供信息安全服务。密码系统也称为密码系统。
让我们讨论一个简单的密码系统模型,该模型为正在传输的信息提供机密性。该基本模型如下图所示:
该图显示了一个发送方,他希望以任何拦截或窃听通信信道的一方都无法提取数据的方式将一些敏感数据传输给接收方。
这个简单密码系统的目标是,在流程结束时,只有发送方和接收方才能知道明文。
密码系统的组成部分
基本密码系统的各个组成部分如下:
明文。这是在传输过程中需要保护的数据。
加密算法。这是一个数学过程,它为任何给定的明文和加密密钥生成密文。它是一种密码算法,它以明文和加密密钥作为输入,并产生密文。
密文。这是加密算法使用特定加密密钥生成的明文的混淆版本。密文不受保护。它在公共信道上传输。任何可以访问通信信道的人都可以拦截或破坏它。
解密算法,这是一个数学过程,它为任何给定的密文和解密密钥生成唯一的明文。它是一种密码算法,它以密文和解密密钥作为输入,并输出明文。解密算法本质上是反转加密算法,因此与之密切相关。
加密密钥。这是发送方已知的值。发送方将加密密钥与明文一起输入加密算法以计算密文。
解密密钥。这是接收方已知的值。解密密钥与加密密钥相关,但不总是与之相同。接收方将解密密钥与密文一起输入解密算法以计算明文。
对于给定的密码系统,所有可能的解密密钥的集合称为密钥空间。
拦截者(攻击者)是试图确定明文的未授权实体。他可以看到密文,并且可能知道解密算法。但是,他绝不能知道解密密钥。
密码系统的类型
从根本上说,根据系统中执行加密-解密的方式,密码系统有两种类型:
- 对称密钥加密
- 非对称密钥加密
这些密码系统之间的主要区别在于加密密钥和解密密钥之间的关系。从逻辑上讲,在任何密码系统中,两个密钥都密切相关。使用与加密密钥无关的密钥来解密密文实际上是不可能的。
对称密钥加密
使用相同的密钥加密和解密信息的加密过程称为对称密钥加密。
对称密码系统研究被称为对称密码学。对称密码系统有时也称为秘密密钥密码系统。
一些众所周知的对称密钥加密方法包括:数字加密标准 (DES)、三重 DES (3DES)、IDEA 和 BLOWFISH。
在 1970 年之前,所有密码系统都采用对称密钥加密。即使在今天,它的相关性也非常高,并且在许多密码系统中被广泛使用。这种加密不太可能消失,因为它比非对称密钥加密具有一定的优势。
基于对称密钥加密的密码系统的显著特征是:
使用对称密钥加密的人员必须在交换信息之前共享一个共同的密钥。
建议定期更改密钥以防止对系统进行任何攻击。
需要存在一个强大的机制来交换通信双方之间的密钥。由于需要定期更改密钥,因此此机制变得昂贵且繁琐。
在一组n人中,要启用任意两人之间的双向通信,该组所需的密钥数量为n × (n – 1)/2。
此加密中的密钥长度(位数)较小,因此加密-解密过程比非对称密钥加密快。
运行对称算法所需的计算机系统处理能力较低。
对称密钥密码系统的挑战
使用对称密钥密码学有两个限制性挑战。
密钥建立 − 在任何通信之前,发送方和接收方都需要就一个秘密对称密钥达成一致。它需要一个安全的密钥建立机制。
信任问题 − 由于发送方和接收方使用相同的对称密钥,因此隐含地要求发送方和接收方“相互信任”。例如,接收方可能已将密钥丢失给攻击者,而发送方未被告知。
这两个挑战对于现代通信来说是极大的限制。如今,人们需要与不熟悉且不可信的各方交换信息。例如,在线卖家和客户之间的沟通。对称密钥加密的这些限制导致了非对称密钥加密方案的出现。
非对称密钥加密
使用不同的密钥加密和解密信息的加密过程称为非对称密钥加密。尽管密钥不同,但它们在数学上是相关的,因此,通过解密密文来检索明文是可行的。该过程如下图所示:
非对称密钥加密是在 20 世纪发明的,以克服通信人员之间预共享秘密密钥的必要性。该加密方案的显著特征如下:
此系统中的每个用户都需要有一对不同的密钥,私钥和公钥。这些密钥在数学上是相关的——当使用一个密钥进行加密时,另一个密钥可以将密文解密回原始明文。
它需要将公钥放入公共存储库,并将私钥作为受保护的秘密。因此,这种加密方案也称为公钥加密。
尽管用户的公钥和私钥相关,但在计算上并不容易从一个密钥找到另一个密钥。这是此方案的优势。
当主机1需要向主机2发送数据时,他从存储库中获取主机2的公钥,加密数据并传输。
主机2使用他的私钥提取明文。
此加密中的密钥长度(位数)很大,因此加密-解密过程比对称密钥加密慢。
运行非对称算法所需的计算机系统处理能力更高。
对称密码系统是一个自然的概念。相反,公钥密码系统很难理解。
您可能会想,加密密钥和解密密钥如何“相关”,但又不可能根据加密密钥确定解密密钥?答案在于数学概念。可以设计一个具有此属性的密码系统。公钥密码学的概念相对较新。已知的公钥算法比对称算法少。
公钥密码系统的挑战
公钥密码系统面临一个重大挑战——用户需要相信他与某人通信时使用的公钥确实是该人的公钥,并且没有被恶意第三方欺骗。
这通常通过由可信第三方组成的公钥基础设施 (PKI) 来实现。第三方安全地管理并证明公钥的真实性。当请求第三方提供任何通信者 X 的公钥时,人们相信他们会提供正确的公钥。
第三方通过证明、公证或其他一些过程来验证用户身份——X 是唯一且全局唯一的 X。使已验证的公钥可用的最常见方法是将它们嵌入到由可信第三方数字签名的证书中。
加密方案之间的关系
以下是两种类型的密码系统的基本密钥属性的摘要:
对称密码系统 | 公钥密码系统 | |
---|---|---|
密钥之间的关系 | 相同 | 不同,但数学上相关 |
加密密钥 | 对称的 | 公开的 |
解密密钥 | 对称的 | 私有的 |
由于两种系统的优缺点,对称密钥和公钥密码系统经常在实际的信息安全系统中一起使用。
Kerckhoffs 密码系统原理
19 世纪,荷兰密码学家 A. Kerckhoffs 提供了良好密码系统的要求。Kerckhoffs 指出,即使密码系统的所有内容(密钥除外)都是公开的,该系统也应该是安全的。Kerckhoffs 为密码系统定义的六个设计原则如下:
密码系统即使在数学上并非如此,也应该实际上牢不可破。
密码系统落入入侵者手中不应导致系统受到任何损害,从而防止用户受到任何不便。
密钥应该易于沟通、记忆和更改。
密文应可以通过电报(不安全的信道)传输。
加密设备和文件应便于携带,并可由一人操作。
最后,系统必须易于使用,既不需要精神压力,也不需要了解一系列需要遵守的规则。
第二条规则目前被称为 **Kerckhoffs 原理**。它实际上应用于所有当代加密算法,例如 DES、AES 等。这些公共算法被认为是完全安全的。加密消息的安全完全取决于秘密加密密钥的安全。
将算法保密可能会对密码分析构成重大障碍。然而,只有在严格限制的范围内使用算法时,才能将算法保密。
在现代,密码学需要满足连接到互联网的用户。在这种情况下,使用秘密算法是不可行的,因此 Kerckhoffs 原理成为现代密码学中设计算法的基本准则。
对密码系统的攻击
在当今时代,不仅商业,几乎所有人类生活方面都由信息驱动。因此,保护有用的信息免受恶意活动(如攻击)的影响已成为当务之急。让我们考虑一下信息通常会受到哪些类型的攻击。
攻击通常根据攻击者执行的操作进行分类。因此,攻击可以是 **被动的** 或 **主动的**。
被动攻击
被动攻击的主要目标是获得 **对信息的未授权访问**。例如,拦截和窃听通信信道等行为可以被视为被动攻击。
这些行为本质上是被动的,因为它们既不影响信息也不中断通信信道。被动攻击通常被视为 *窃取* 信息。窃取实物和窃取信息的区别在于,窃取数据后,所有者仍然拥有该数据。因此,被动信息攻击比窃取货物更危险,因为信息窃取可能未被所有者注意到。
主动攻击
主动攻击涉及通过对信息进行某些处理来以某种方式更改信息。例如:
以未经授权的方式修改信息。
启动意外或未经授权的信息传输。
更改身份验证数据,例如与信息关联的发起者姓名或时间戳
未经授权删除数据。
拒绝合法用户访问信息(拒绝服务)。
密码学提供了许多工具和技术,用于实现能够防止上述大多数攻击的密码系统。
攻击者的假设
让我们看看密码系统周围普遍存在的环境,以及用于破坏这些系统的攻击类型:
密码系统周围的环境
在考虑对密码系统的可能攻击时,有必要了解密码系统环境。攻击者的假设和对环境的了解决定了他的能力。
在密码学中,对安全环境和攻击者的能力做出以下三个假设。
加密方案的细节
密码系统的设计基于以下两种密码算法:
**公共算法**——使用此选项,算法的所有详细信息都属于公共领域,众所周知。
**专有算法**——只有系统设计人员和用户知道算法的详细信息。
对于专有算法,安全是通过模糊性来确保的。私有算法可能不是最强大的算法,因为它们是在内部开发的,并且可能没有经过广泛的弱点调查。
其次,它们只允许封闭组之间的通信。因此,它们不适用于现代通信,在现代通信中,人们与大量已知或未知的实体进行通信。此外,根据 Kerckhoffs 原理,算法最好是公开的,加密强度在于 *密钥*。
因此,关于安全环境的第一个假设是 **攻击者知道加密算法**。
密文的可用性
我们知道,一旦明文加密成密文,它就会被放在不安全的公共信道(例如电子邮件)上进行传输。因此,攻击者显然可以假设它 **可以访问密码系统生成的密文**。
明文和密文的可用性
这个假设不像其他假设那么明显。但是,在某些情况下,攻击者可能 **可以访问明文和相应的密文**。一些可能的这种情况是:
攻击者影响发送者转换他选择的明文并获得密文。
接收者可能会无意中向攻击者泄露明文。攻击者可以访问从开放信道收集的相应密文。
在公钥密码系统中,加密密钥处于开放域,任何潜在的攻击者都知道。使用此密钥,他可以生成成对的相应明文和密文。
密码攻击
攻击者的基本意图是破坏密码系统并从密文中找到明文。要获得明文,攻击者只需要找出秘密解密密钥,因为算法已经在公共领域。
因此,他将最大努力用于找出密码系统中使用的秘密密钥。一旦攻击者能够确定密钥,则被攻击的系统就被认为是 *被破坏的* 或 *被破坏的*。
根据使用的方法,对密码系统的攻击分类如下:
**仅密文攻击 (COA)**——在这种方法中,攻击者可以访问一组密文。他无法访问相应的明文。当可以从给定的密文集确定相应的明文时,COA 就被认为是成功的。有时,可以从这种攻击中确定加密密钥。现代密码系统可以防止仅密文攻击。
**已知明文攻击 (KPA)**——在这种方法中,攻击者知道密文某些部分的明文。任务是使用此信息解密密文的其余部分。这可以通过确定密钥或通过其他方法来完成。这种攻击的最佳示例是对分组密码的 *线性密码分析*。
**选择明文攻击 (CPA)**——在这种方法中,攻击者有他选择的文本被加密。因此,他拥有他选择的密文-明文对。这简化了他确定加密密钥的任务。这种攻击的一个例子是应用于分组密码和哈希函数的 *差分密码分析*。流行的公钥密码系统 RSA 也容易受到选择明文攻击。
**字典攻击**——这种攻击有很多变体,所有这些变体都涉及编译“字典”。在这种攻击的最简单方法中,攻击者构建了一个包含他一段时间内学习到的密文和相应明文的字典。将来,当攻击者获得密文时,他将参考字典以查找相应的明文。
**暴力攻击 (BFA)**——在这种方法中,攻击者试图通过尝试所有可能的密钥来确定密钥。如果密钥是 8 位长的,则可能的密钥数量为 28 = 256。攻击者知道密文和算法,现在他逐一尝试所有 256 个密钥进行解密。如果密钥很长,则完成攻击所需的时间将非常长。
**生日攻击**——这种攻击是暴力技术的变体。它用于对抗密码哈希函数。当询问班上的学生他们的生日时,答案是可能的 365 个日期之一。让我们假设第一个学生的生日是 8 月 3 日。然后,要找到下一个生日是 8 月 3 日的学生,我们需要询问大约 1.25 * √365 ≈ 25 个学生。
类似地,如果哈希函数产生 64 位哈希值,则可能的哈希值是 1.8x1019。通过对不同输入重复评估函数,预计在大约 5.1x109 个随机输入后将获得相同的输出。
如果攻击者能够找到两个产生相同哈希值的不同的输入,则这是一个 **冲突**,并且该哈希函数被认为是被破坏的。
**中间人攻击 (MIM)**——这种攻击的目标主要是涉及密钥交换的公钥密码系统,在通信发生之前进行密钥交换。
主机 *A* 想要与主机 *B* 通信,因此请求 *B* 的公钥。
攻击者拦截此请求并发送他的公钥。
因此,主机 *A* 发送给主机 *B* 的任何内容,攻击者都可以读取。
为了保持通信,攻击者在读取后使用他的公钥重新加密数据并发送给 *B*。
攻击者发送其公钥作为A的公钥,以便B将其视为来自A。
侧信道攻击 (SCA) − 此类攻击并非针对任何特定类型的密码系统或算法。相反,它旨在利用密码系统物理实现中的弱点。
定时攻击 − 它们利用不同计算在处理器上花费不同时间这一事实。通过测量这些时间,可以了解处理器正在执行的特定计算。例如,如果加密花费的时间更长,则表示密钥较长。
功耗分析攻击 − 这些攻击类似于定时攻击,只是使用功耗量来获取有关底层计算性质的信息。
故障分析攻击 − 在这些攻击中,密码系统中会引入错误,攻击者会研究由此产生的输出以获取有用的信息。
攻击的实用性
此处描述的针对密码系统的攻击在很大程度上是学术性的,因为其中大部分来自学术界。事实上,许多学术攻击都涉及对环境以及攻击者能力相当不现实的假设。例如,在选择密文攻击中,攻击者需要数量不切实际的故意选择的明文-密文对。它可能根本不实用。
尽管如此,任何攻击的存在都应该引起关注,特别是如果攻击技术有可能改进。
传统密码
在第二章中,我们讨论了现代密码学的 fundamentals。我们将密码学等同于一个工具箱,其中各种密码技术被视为基本工具。这些工具之一是对称密钥加密,其中用于加密和解密的密钥相同。
本章将进一步讨论这项技术及其在开发各种密码系统中的应用。
早期的密码系统
在继续之前,您需要了解一些关于历史密码系统的事实:
所有这些系统都基于对称密钥加密方案。
这些系统提供的唯一安全服务是信息的机密性。
与将数据视为二进制数字的现代数字系统不同,早期系统以字母为基本元素。
这些早期的密码系统也称为密码。一般来说,密码只是一组用于执行加密和相应解密的步骤(算法)。
凯撒密码
这是一种单字母替代密码,其中明文的每个字母都被另一个字母替换以形成密文。它是最简单的替换密码方案。
该密码系统通常被称为移位密码。其概念是用另一个“移位”了某个固定数字(0到25之间)的字母来替换每个字母。
对于这种方案,发送方和接收方就字母的“秘密移位数字”达成一致。这个介于 0 和 25 之间的数字成为加密密钥。
当使用“移位三”时,有时会使用“凯撒密码”来描述移位密码。
移位密码的过程
为了加密明文字母,发送方将滑动尺放在第一组明文字母下方,并将其向左滑动秘密移位的位数。
然后将明文字母加密为滑动尺下方的密文字母。对于商定的三个位置的移位,此过程的结果如下图所示。在这种情况下,明文“tutorial”被加密为密文“WXWRULDO”。以下是移位 3 的密文字母表:
收到密文后,也了解秘密移位的接收方将滑动尺放在密文字母表下方,并将其向右滑动商定的移位数,在本例中为 3。
然后,他用滑动尺下方的明文字母替换密文字母。因此,密文“WXWRULDO”被解密为“tutorial”。要解密用移位 3 编码的消息,请使用“-3”的移位生成明文字母表,如下所示:
安全价值
凯撒密码不是安全的密码系统,因为只有 26 个可能的密钥需要尝试。攻击者可以使用有限的可用计算资源进行穷举密钥搜索。
简单替换密码
它是对凯撒密码的改进。此方案不是将字母移位某个数字,而是使用字母的某种排列。
例如,A.B…..Y.Z 和 Z.Y……B.A 是字母表中所有字母的两种明显的排列。排列只不过是一组乱序的字母。
字母表中有 26 个字母,可能的排列是 26!(26 的阶乘),等于 4x1026。发送方和接收方可以选择这些可能的排列中的任何一个作为密文字母表。此排列是方案的秘密密钥。
简单替换密码的过程
按自然顺序编写字母 A、B、C……Z。
发送方和接收方确定字母表的随机选择的排列。
在自然顺序字母下方,写出所选字母排列。为了加密,发送方通过替换表格中正下方对应的排列字母来替换每个明文字母。此过程如下图所示。在这个例子中,选择的排列是 K、D、G……O。明文“point”被加密为“MJBXZ”。
这是一个乱序的密文字母表,其中密文字母的顺序是一个密钥。
收到密文后,也了解随机选择的排列的接收方将底行中的每个密文字母替换为顶行中对应的明文字母。密文“MJBXZ”被解密为“point”。
安全价值
简单替换密码比凯撒密码有了相当大的改进。可能的密钥数量很大(26!),即使是现代计算系统也还不够强大,无法轻松发起暴力攻击来破解该系统。但是,简单替换密码设计简单,容易出现设计缺陷,例如选择明显的排列,这个密码系统很容易被破解。
单字母和多字母密码
单字母密码是一种替换密码,其中对于给定的密钥,每个明文字母的密码字母在整个加密过程中都是固定的。例如,如果“A”被加密为“D”,则在该明文中出现任意次数,“A”将始终被加密为“D”。
本章前面讨论的所有替换密码都是单字母的;这些密码极易受到密码分析的影响。
多字母密码是一种替换密码,其中明文字母的密码字母在加密过程中不同位置可能不同。接下来的两个例子,Playfair 密码和 Vigenere 密码是多字母密码。
Playfair 密码
在此方案中,加密的是字母对,而不是像简单替换密码那样单个字母。
在 Playfair 密码中,最初创建一个密钥表。密钥表是一个 5×5 的字母网格,用作加密明文的密钥。所有 25 个字母必须是唯一的,并且字母表中的一个字母(通常是 J)被省略,因为我们只需要 25 个字母而不是 26 个。如果明文包含 J,则将其替换为 I。
发送方和接收方确定一个特定的密钥,例如“tutorials”。在密钥表中,表中的第一个字符(从左到右)是该短语,不包括重复的字母。表中的其余部分将按自然顺序填充字母表中剩余的字母。密钥表如下所示:
Playfair 密码的过程
首先,将明文消息分成两字母的组(双字母)。如果字母数量为奇数,则在最后一个字母后添加 Z。假设我们要加密消息“hide money”。它将被写成:
HI DE MO NE YZ
加密规则如下:
如果两个字母都在同一列中,则取每个字母下方的字母(如果在底部则返回顶部)
T | U | O | R | I | “H”和“I”在同一列中,因此取它们下方的字母进行替换。HI → QC |
A | L | S | B | C | |
D | E | F | G | H | |
K | M | N | P | Q | |
V | W | X | Y | Z |
如果两个字母都在同一行中,则取每个字母右边的字母(如果在最右边则返回左边)
T | U | O | R | I | “D”和“E”在同一行中,因此取它们右边的字母进行替换。DE → EF |
A | L | S | B | C | |
D | E | F | G | H | |
K | M | N | P | Q | |
V | W | X | Y | Z |
如果前面两个规则都不成立,则用这两个字母形成一个矩形,并取矩形水平对角上的字母。
使用这些规则,“hide money”使用“tutorials”密钥加密的结果将是:
QC EF NU MF ZV
Playfair 密码的解密与反向执行相同的过程一样简单。接收方拥有相同的密钥,可以创建相同的密钥表,然后解密使用该密钥制作的任何消息。
安全价值
它也是一种替换密码,与简单替换密码相比更难破解。与替换密码一样,Playfair 密码也可能受到密码分析的影响,但是它针对的是 625 个可能的字母对(25x25 个字母),而不是 26 个不同的可能的字母。
Playfair 密码主要用于保护重要但不关键的秘密,因为它使用快捷,不需要特殊设备。
Vigenere 密码
这种密码方案使用文本字符串(例如,一个单词)作为密钥,然后将其用于对明文进行多次移位。
例如,假设密钥是“point”。密钥的每个字母都转换为其相应的数值:在这种情况下,
p → 16,o → 15,i → 9,n → 14,t → 20。
因此,密钥是:16 15 9 14 20。
维吉尼亚密码的过程
发送方和接收方确定一个密钥。假设密钥是“point”。此密钥的数字表示是“16 15 9 14 20”。
发送方想要加密消息,例如“attack from south east”。他将明文和数字密钥排列如下:
他现在将每个明文字母按其下方的数字移动以创建密文,如下所示:
这里,每个明文字符都移动了不同的数量——并且该数量由密钥决定。密钥必须小于或等于消息的大小。
为了解密,接收方使用相同的密钥并以相反的顺序移动收到的密文以获得明文。
安全价值
维吉尼亚密码的设计是对标准凯撒密码的改进,以降低对密文的密码分析的有效性,并使密码系统更强大。它比普通的凯撒密码安全得多。
历史上,它经常用于保护敏感的政治和军事信息。由于它对密码分析造成的困难,它被称为不可破的密码。
维吉尼亚密码的变体
维吉尼亚密码有两种特殊情况:
关键字长度与明文消息相同。这种情况称为维尔南密码。它比典型的维吉尼亚密码更安全。
维吉尼亚密码成为具有完美保密性的密码系统,称为一次性密码本。
一次性密码本
情况如下:
- 关键字的长度与明文的长度相同。
- 关键字是由字母组成的随机生成的字符串。
- 关键字仅使用一次。
安全价值
让我们比较移位密码和一次性密码本。
移位密码——易于破解
在移位密码的情况下,整个消息可能具有 1 到 25 之间的移位。这是一个非常小的范围,很容易进行暴力破解。但是,由于每个字符现在都有其自身的 1 到 26 之间的个体移位,因此对于消息而言,可能的密钥呈指数级增长。
一次性密码本——不可能破解
假设我们用一次性密码本加密名称“point”。这是一个 5 个字母的文本。要通过暴力破解来破解密文,你需要尝试所有可能的密钥,并对 (26 x 26 x 26 x 26 x 26) = 265 = 11881376 次进行计算。这是对于包含 5 个字母的消息而言。因此,对于更长的消息,计算量会随着每个额外字母的增加而呈指数级增长。这使得通过暴力破解计算上不可能破解密文。
置换密码
这是另一种类型的密码,其中明文中字母的顺序被重新排列以创建密文。实际的明文字母不会被替换。
一个例子是“简单的列置换”密码,其中明文以一定的字母宽度水平书写。然后,密文按如下所示垂直读取。
例如,明文是“golden statue is in eleventh cave”,选择的秘密随机密钥是“five”。我们将此文本水平排列在列数等于密钥值的表中。生成的文本如下所示。
密文通过从第一列到最后一列垂直向下读取列获得。密文是“gnuneaoseenvltiltedasehetivc”。
为了解密,接收方准备类似的表格。列数等于密钥数字。行数通过将密文字母总数除以密钥值并将商四舍五入到下一个整数值来获得。
然后,接收方垂直向下并从左到右列写入收到的密文。为了获得文本,他从左到右水平读取,从上到下读取行。
现代对称密钥加密
数字数据用二进制数字(位)字符串表示,不像字母那样。现代密码系统需要处理这些二进制字符串,将其转换为另一个二进制字符串。根据如何处理这些二进制字符串,对称加密方案可以分为:
分组密码
在这个方案中,明文二进制文本一次处理成块(组)位;即选择明文位块,对该块执行一系列操作以生成密文位块。块中的位数是固定的。例如,DES 和 AES 方案的块大小分别为 64 和 128。
流密码
在这个方案中,明文一次处理一位,即取一位明文,对其执行一系列操作以生成一位密文。从技术上讲,流密码是块大小为一位的块密码。
分组密码
分组密码的基本方案如下所示:
分组密码接收明文位块并生成密文位块,通常大小相同。块的大小在给定的方案中是固定的。块大小的选择不会直接影响加密方案的强度。密码的强度取决于密钥长度。
分组大小
虽然任何大小的块都是可以接受的,但在选择块大小时应牢记以下几个方面。
避免非常小的块大小——假设块大小为 m 位。则可能的明文位组合为 2m。如果攻击者发现了对应于某些先前发送的密文块的明文块,则攻击者可以通过建立已发送使用该加密密钥的明文/密文对的字典来发起一种“字典攻击”。更大的块大小使攻击更加困难,因为字典需要更大。
不要有非常大的块大小——对于非常大的块大小,密码的操作效率会降低。此类明文需要在加密之前进行填充。
8 位的倍数——首选的块大小是 8 的倍数,因为它易于实现,因为大多数计算机处理器处理的数据都是 8 位的倍数。
分组密码中的填充
分组密码处理固定大小的块(例如 64 位)。明文的长度大多不是块大小的倍数。例如,150 位明文提供两个 64 位块,第三个块剩余 22 位。最后一个位块需要用冗余信息填充,以便最后一个块的长度等于方案的块大小。在我们的例子中,剩余的 22 位需要添加额外的 42 个冗余位以提供一个完整的块。向最后一个块添加位的过程称为填充。
过多的填充会使系统效率降低。此外,如果始终使用相同的位进行填充,则填充有时可能会使系统不安全。
分组密码方案
有大量正在使用的分组密码方案。其中许多都是公开已知的。下面列出了最流行和最突出的分组密码。
数字加密标准 (DES)——20 世纪 90 年代流行的分组密码。现在它被认为是一个“已破译的”分组密码,这主要是由于其密钥大小较小。
三重 DES——它是一个基于重复 DES 应用的变体方案。它仍然是一个受人尊敬的分组密码,但与现在可用的新型更快分组密码相比效率较低。
高级加密标准 (AES)——它是一个相对较新的分组密码,基于在 AES 设计竞赛中获胜的加密算法Rijndael。
IDEA——它是一个足够强大的分组密码,块大小为 64,密钥大小为 128 位。许多应用程序使用 IDEA 加密,包括早期版本的 Pretty Good Privacy (PGP) 协议。由于专利问题,IDEA 方案的使用受到限制。
Twofish——这种分组密码方案使用 128 位的块大小和可变长度的密钥。它是 AES 决赛选手之一。它基于早期块大小为 64 位的分组密码 Blowfish。
Serpent——一种块大小为 128 位,密钥长度为 128、192 或 256 位的分组密码,也是 AES 竞赛的决赛选手之一。它速度较慢,但设计比其他分组密码更安全。
在接下来的部分中,我们将首先讨论分组密码模型,然后讨论 DES 和 AES,这是两个最具影响力的现代分组密码。
Feistel 分组密码
Feistel 密码不是一种特定的分组密码方案。它是一个设计模型,许多不同的分组密码都是由此衍生出来的。DES 只是 Feistel 密码的一个例子。基于 Feistel 密码结构的密码系统对加密和解密使用相同的算法。
加密过程
加密过程使用 Feistel 结构,该结构由对明文的多次处理组成,每轮处理由“替换”步骤和置换步骤组成。
Feistel 结构如下图所示:
输入到每一轮的块被分成两半,可以表示为 L(左半部分)和 R(右半部分)。
在每一轮中,块的右半部分 R 保持不变。但是左半部分 L 会经历一个取决于 R 和加密密钥的操作。首先,我们应用一个加密函数“f”,它有两个输入——密钥 K 和 R。该函数产生输出 f(R,K)。然后,我们将数学函数的输出与 L 进行异或。
在 Feistel 密码的实际实现中,例如 DES,不是在每一轮中都使用整个加密密钥,而是从加密密钥中导出一个依赖于轮次的密钥(子密钥)。这意味着每一轮使用不同的密钥,尽管所有这些子密钥都与原始密钥相关。
每一轮结束时的置换步骤会交换修改后的 L 和未修改的 R。因此,下一轮的 L 将是当前轮的 R。下一轮的 R 将是当前轮的输出 L。
上述替换和置换步骤构成一个“轮次”。轮数由算法设计指定。
完成最后一轮后,两个子块“R”和“L”按此顺序连接起来形成密文块。
设计 Feistel 密码的难点在于选择轮函数“f”。为了使方案不可破,该函数需要具备一些重要的特性,这些特性超出了我们的讨论范围。
解密过程
Feistel 密码的解密过程几乎相同。只是不是以明文块开始,而是将密文块输入 Feistel 结构的起始位置,然后接下来的过程与给定图示中描述的完全相同。
之所以说是几乎相同而不是完全相同,是因为在解密过程中,唯一的区别在于加密中使用的子密钥以相反的顺序使用。
Feistel 密码最后一步中“L”和“R”的最终交换至关重要。如果不交换它们,则生成的密文将无法使用相同的算法解密。
轮数
Feistel 密码中使用的轮数取决于系统所需的安全性。轮数越多,系统越安全。但与此同时,轮数越多意味着加密和解密过程效率越低,速度越慢。因此,系统中的轮数取决于效率与安全性的权衡。
数据加密标准
数据加密标准 (DES) 是美国国家标准与技术研究院 (NIST) 发布的对称密钥分组密码。
DES 是 Feistel 密码的一种实现。它使用 16 轮 Feistel 结构。分组大小为 64 位。虽然密钥长度为 64 位,但 DES 的有效密钥长度为 56 位,因为 64 位密钥中的 8 位没有被加密算法使用(仅用作校验位)。DES 的总体结构如下图所示:
由于 DES 基于 Feistel 密码,因此只需要指定以下内容即可:
- 轮函数
- 密钥调度
- 任何其他处理:初始置换和最终置换
初始置换和最终置换
初始置换和最终置换是彼此互逆的简单置换盒 (P 盒)。它们在 DES 中没有密码学意义。初始置换和最终置换如下所示:
轮函数
该密码的核心是 DES 函数 f。DES 函数将 48 位密钥应用于最右边的 32 位,以产生 32 位输出。
扩展置换盒:由于右侧输入为 32 位,而轮密钥为 48 位,因此我们首先需要将右侧输入扩展到 48 位。置换逻辑如下图所示:
DES 规范中通常将图示的置换逻辑描述为表格,如下所示:
异或 (白化):扩展置换后,DES 对扩展的右侧部分和轮密钥进行异或运算。轮密钥仅在此操作中使用。
替代盒:S 盒执行真正的混合 (混淆)。DES 使用 8 个 S 盒,每个 S 盒都有 6 位输入和 4 位输出。请参考下图:
S 盒规则如下所示:
共有八个 S 盒表格。然后将所有八个 S 盒的输出组合成 32 位部分。
简单置换:然后,S 盒的 32 位输出将进行简单置换,规则如下图所示:
密钥生成
轮密钥生成器从 56 位密码密钥中创建十六个 48 位密钥。密钥生成过程如下图所示:
奇偶校验丢弃、移位和压缩 P 盒的逻辑在 DES 说明中给出。
DES 分析
DES 满足分组密码所需的两个属性。这两个属性使密码非常强大。
雪崩效应:明文中的微小变化会导致密文中非常大的变化。
完整性:密文的每一位都依赖于许多位的明文。
在过去几年中,密码分析发现,当选择的密钥是弱密钥时,DES 存在一些弱点。这些密钥应避免使用。
DES已被证明是一个设计非常精良的分组密码。除了穷举密钥搜索之外,没有针对 DES 的重大密码分析攻击。
三重 DES
1990 年之后,针对 DES 的穷举密钥搜索速度开始引起 DES 用户的不适。然而,用户并不想更换 DES,因为更换已被广泛采用并嵌入大型安全架构中的加密算法需要花费大量时间和金钱。
务实的做法不是完全放弃 DES,而是改变 DES 的使用方式。这导致了三重 DES(有时称为 3DES)的改进方案。
顺便说一下,三重 DES 有两种变体,分别称为 3 密钥三重 DES (3TDES) 和 2 密钥三重 DES (2TDES)。
3 密钥三重 DES
在使用 3TDES 之前,用户首先要生成和分发 3TDES 密钥 K,它由三个不同的 DES 密钥 K1、K2 和 K3 组成。这意味着实际的 3TDES 密钥长度为 3×56 = 168 位。加密方案如下图所示:
加密解密过程如下:
使用密钥 K1 使用单 DES 加密明文块。
现在使用密钥 K2 使用单 DES 解密步骤 1 的输出。
最后,使用密钥 K3 使用单 DES 加密步骤 2 的输出。
步骤 3 的输出是密文。
密文的解密是一个反向过程。用户首先使用 K3 解密,然后使用 K2 加密,最后使用 K1 解密。
由于三重 DES 被设计为加密-解密-加密过程,因此可以通过将 K1、K2 和 K3 设置为相同的值来使用 3TDES(硬件)实现单 DES。这提供了与 DES 的向后兼容性。
三重 DES 的第二个变体 (2TDES) 与 3TDES 相同,只是 K3 被 K1 替换。换句话说,用户使用密钥 K1 加密明文块,然后使用密钥 K2 解密,最后再次使用 K1 加密。因此,2TDES 的密钥长度为 112 位。
三重 DES 系统比单 DES 安全得多,但它们显然比使用单 DES 加密的过程慢得多。
高级加密标准 (AES)
如今可能遇到的更流行和广泛采用的对称加密算法是高级加密标准 (AES)。它至少比三重 DES 快六倍。
由于 DES 的密钥大小太小,因此需要替换它。随着计算能力的提高,它被认为容易受到穷举密钥搜索攻击。三重 DES 的设计是为了克服这个缺点,但它被发现速度很慢。
AES 的特点如下:
- 对称密钥对称分组密码
- 128 位数据,128/192/256 位密钥
- 比三重 DES 更强大、更快
- 提供完整的规范和设计细节
- 可在 C 和 Java 中实现的软件
AES 的操作
AES 是一种迭代密码,而不是 Feistel 密码。它基于“替代-置换网络”。它包括一系列链接操作,其中一些操作涉及用特定输出替换输入(替代),而另一些操作则涉及重新排列位(置换)。
有趣的是,AES 执行的所有计算都是针对字节而不是位进行的。因此,AES 将明文块的 128 位视为 16 个字节。这 16 个字节被排列成四列四行,以矩阵形式进行处理:
与 DES 不同,AES 中的轮数是可变的,并且取决于密钥的长度。对于 128 位密钥,AES 使用 10 轮;对于 192 位密钥,使用 12 轮;对于 256 位密钥,使用 14 轮。每一轮都使用不同的 128 位轮密钥,该密钥是从原始 AES 密钥计算出来的。
AES 结构示意图如下所示:
加密过程
这里,我们只介绍 AES 加密的典型轮次。每一轮都包含四个子过程。第一轮过程如下图所示:
字节替代 (SubBytes)
通过查找设计中给出的固定表 (S 盒) 来替代 16 个输入字节。结果是一个四行四列的矩阵。
行移位 (ShiftRows)
矩阵的每一行都向左移动。任何“掉落”的条目都重新插入到行的右侧。移位如下进行:
第一行不移位。
第二行向左移动一个(字节)位置。
第三行向左移动两个位置。
第四行向左移动三个位置。
结果是一个新的矩阵,它包含相同的 16 个字节,但彼此之间发生了移位。
列混淆 (MixColumns)
现在使用特殊的数学函数变换四个字节的每一列。此函数以一列的四个字节作为输入,并输出四个全新的字节,这些字节替换原始列。结果是另一个包含 16 个新字节的新矩阵。需要注意的是,在最后一轮中不执行此步骤。
轮密钥加 (AddRoundKey)
矩阵的 16 个字节现在被视为 128 位,并与轮密钥的 128 位进行异或运算。如果这是最后一轮,则输出是密文。否则,将结果 128 位解释为 16 个字节,然后我们开始另一轮类似的轮次。
解密过程
AES 密文的解密过程与加密过程类似,但顺序相反。每一轮都包含四个以相反顺序进行的子过程:
- 轮密钥加
- 列混淆
- 行移位
- 字节替代
由于每一轮中的子过程都是反向的,因此与 Feistel 密码不同,加密和解密算法需要单独实现,尽管它们非常密切相关。
AES 分析
在当今的密码学中,AES 被广泛采用并在硬件和软件中都得到支持。迄今为止,尚未发现针对 AES 的任何实际密码分析攻击。此外,AES 具有内置的密钥长度灵活性,这使得它能够在一定程度上“面向未来”,以应对穷举密钥搜索能力的进步。
但是,与 DES 一样,只有正确实现 AES 并采用良好的密钥管理才能确保 AES 的安全性。
分组密码的工作模式
本章将讨论分组密码的不同操作模式。这些是通用分组密码的程序规则。有趣的是,不同的模式会导致实现不同的属性,从而增强底层分组密码的安全性。
分组密码处理固定大小的数据块。通常,消息的大小大于块大小。因此,长消息被分成一系列连续的消息块,密码一次对这些块进行操作。
电子密码本 (ECB) 模式
此模式是处理一系列连续列出的消息块的最直接方法。
操作
用户取明文的第一块,用密钥加密它,产生密文的第一块。
然后,他取明文的第二块,用相同的密钥重复相同的过程,以此类推。
ECB模式是**确定性**的,也就是说,如果明文块P1、P2……Pm用相同的密钥加密两次,输出的密文块将相同。
事实上,对于给定的密钥,从技术上讲,我们可以为所有可能的明文块创建一个密文代码本。加密将只需要查找所需的明文并选择相应的密文。因此,该操作类似于在代码本中分配代码字,因此获得了正式名称——电子密码本操作模式(ECB)。如下图所示:
ECB模式分析
实际上,任何应用程序数据通常都包含可以猜测的部分信息。例如,可以猜测工资范围。如果明文消息在可预测范围内,则来自ECB的密文可以允许攻击者通过反复试验来猜测明文。
例如,如果已知来自ECB模式的密文加密的是工资数字,则少量尝试将允许攻击者恢复该数字。一般来说,我们不希望使用确定性密码,因此在大多数应用程序中不应使用ECB模式。
密码分组链接 (CBC) 模式
CBC操作模式提供消息依赖性来生成密文,并使系统非确定性。
操作
CBC模式的操作如下图所示。步骤如下:
将n位初始化向量(IV)加载到顶部寄存器中。
将n位明文块与顶部寄存器中的数据值进行异或运算。
使用底层分组密码和密钥K加密异或运算的结果。
将密文块送入顶部寄存器,并继续操作,直到处理所有明文块。
对于解密,IV数据与解密的第一个密文块进行异或运算。第一个密文块也被送入寄存器,替换IV以解密下一个密文块。
CBC模式分析
在CBC模式中,当前明文块被添加到之前的密文块,然后结果用密钥加密。因此,解密是相反的过程,包括解密当前密文,然后将之前的密文块添加到结果中。
CBC优于ECB的优点是更改IV会导致相同消息的密文不同。缺点是,由于链式效应,传输中的错误会在解密期间传播到几个后续块。
值得一提的是,CBC模式构成了众所周知的数据来源认证机制的基础。因此,对于那些需要对称加密和数据来源认证的应用程序,它具有优势。
密码反馈 (CFB) 模式
在此模式下,每个密文块都被“反馈”到加密过程中,以便加密下一个明文块。
操作
CFB模式的操作如下图所示。例如,在本系统中,消息块的大小为“s”位,其中1 < s < n。CFB模式需要一个初始化向量(IV)作为初始随机n位输入块。IV不需要保密。操作步骤如下:
将IV加载到顶部寄存器中。
使用底层分组密码和密钥K加密顶部寄存器中的数据值。
仅取加密过程输出的“s”个最高有效位(左位),并将它们与“s”位明文消息块进行异或运算,以生成密文块。
通过将已有的数据左移,将密文块送入顶部寄存器,并继续操作,直到处理所有明文块。
本质上,之前的密文块用密钥加密,然后结果与当前明文块进行异或运算。
解密也遵循类似的步骤。预先确定的IV最初在解密开始时加载。
CFB模式分析
CFB模式与ECB模式有很大不同,给定明文块对应的密文不仅取决于该明文块和密钥,还取决于之前的密文块。换句话说,密文块取决于消息。
CFB有一个非常奇怪的特性。在此模式下,用户仅使用分组密码的加密过程来解密密文。从不使用底层分组密码的解密算法。
显然,CFB模式正在将分组密码转换为一种流密码。加密算法用作密钥流生成器,以生成放置在底部寄存器中的密钥流。然后,此密钥流与明文进行异或运算,就像流密码的情况一样。
通过将分组密码转换为流密码,CFB模式提供了一些流密码的优点,同时保留了分组密码的优点。
另一方面,由于块的更改,传输错误会传播。
输出反馈 (OFB) 模式
它涉及将来自底层分组密码的连续输出块反馈给它。这些反馈块提供了一系列位来馈送加密算法,该算法充当密钥流生成器,就像在CFB模式中一样。
生成的密钥流与明文块进行异或运算。OFB模式需要一个IV作为初始随机n位输入块。IV不需要保密。
操作如下图所示:
计数器 (CTR) 模式
它可以被认为是无反馈的CFB模式的基于计数器的版本。在此模式下,发送方和接收方都需要访问可靠的计数器,该计数器每次交换密文块时都会计算一个新的共享值。此共享计数器不一定是秘密值,但挑战在于双方必须保持计数器的同步。
操作
CTR模式中的加密和解密如下图所示。操作步骤如下:
加载顶部寄存器中的初始计数器值对于发送方和接收方都是相同的。它在CFB(和CBC)模式中扮演与IV相同的作用。
使用密钥加密计数器的内容,并将结果放置在底部寄存器中。
取第一个明文块P1并将其与底部寄存器的内容进行异或运算。结果为C1。将C1发送到接收方并更新计数器。计数器更新替换了CFB模式中的密文反馈。
继续以这种方式进行,直到加密最后一个明文块。
解密是相反的过程。密文块与加密的计数器值的输出进行异或运算。在每个密文块解密后,计数器都会像加密一样更新。
计数器模式分析
它没有消息依赖性,因此密文块不依赖于之前的明文块。
与CFB模式一样,CTR模式不涉及分组密码的解密过程。这是因为CTR模式实际上是使用分组密码生成密钥流,该密钥流使用XOR函数加密。换句话说,CTR模式也将分组密码转换为流密码。
CTR模式的一个严重缺点是它需要发送方和接收方具有同步计数器。同步丢失会导致明文恢复不正确。
但是,CTR模式几乎具有CFB模式的所有优点。此外,它根本不会传播传输错误。
公钥加密
公钥密码术
与对称密钥密码术不同,我们没有发现公钥密码术的历史用途。这是一个相对较新的概念。
对称密码术非常适合政府、军队和大型金融公司等参与机密通信的组织。
在过去几十年中,随着越来越多的不安全的计算机网络的普及,人们感到需要大规模使用密码术。由于对称密钥在密钥管理方面面临挑战,因此发现它不切实际。这导致了公钥密码系统的出现。
加密和解密过程如下图所示:
公钥加密方案最重要的属性是:
加密和解密使用不同的密钥。这是使此方案不同于对称加密方案的属性。
每个接收者拥有一个唯一的解密密钥,通常称为其私钥。
接收者需要发布一个加密密钥,称为其公钥。
此方案需要对公钥的真实性进行一些保证,以避免被对手冒充为接收者。通常,这种类型的密码系统涉及可信赖的第三方,该第三方证明特定的公钥只属于特定的人或实体。
加密算法足够复杂,可以阻止攻击者从密文和加密(公钥)中推断出明文。
尽管私钥和公钥在数学上是相关的,但从公钥计算私钥是不可行的。事实上,任何公钥密码系统的智能部分都在于设计两个密钥之间的关系。
公钥加密方案有三种类型。我们在以下部分讨论它们:
RSA密码系统
该密码系统是最初的系统之一。即使在今天,它仍然是最常用的密码系统。该系统由三位学者**Ron Rivest、Adi Shamir**和**Len Adleman**发明,因此被称为RSA密码系统。
我们将看到RSA密码系统的两个方面,首先是密钥对的生成,其次是加密解密算法。
RSA密钥对的生成
每个希望使用加密参与通信的人或一方都需要生成一对密钥,即公钥和私钥。密钥生成的流程如下:
生成RSA模数(n)
选择两个大素数,p 和 q。
计算 n=p*q。为了获得强大的不可破解加密,n 应该是一个很大的数,通常至少 512 位。
寻找导出数 (e)
数字e必须大于 1 且小于 (p − 1)(q − 1)。
e 和 (p − 1)(q − 1) 之间除了 1 以外,不能有其他公因子。换句话说,e 和 (p – 1)(q – 1) 互质。
形成公钥
数字对 (n, e) 构成 RSA 公钥,并公开。
有趣的是,虽然 n 是公钥的一部分,但大型素数难以分解确保攻击者无法在有限时间内找到用于获得 n 的两个素数 (p & q)。这是 RSA 的优势。
生成私钥
私钥 d 由 p、q 和 e 计算得出。对于给定的 n 和 e,存在唯一的数字 d。
数字 d 是 e 模 (p - 1)(q – 1) 的逆元。这意味着 d 是小于 (p - 1)(q - 1) 的数字,当它乘以 e 时,模 (p - 1)(q - 1) 等于 1。
这种关系可以用以下数学公式表示:
ed = 1 mod (p − 1)(q − 1)
扩展欧几里德算法以 p、q 和 e 为输入,并以 d 为输出。
示例
下面给出了生成 RSA 密钥对的一个示例。(为了便于理解,这里选择的素数 p & q 值较小。实际上,这些值非常大)。
设两个素数为 p = 7 和 q = 13。因此,模数 n = pq = 7 x 13 = 91。
选择 e = 5,这是一个有效的选择,因为除了 1 之外,5 和 (p − 1)(q − 1) = 6 × 12 = 72 没有公因子。
数字对 (n, e) = (91, 5) 构成公钥,可以提供给任何我们希望向其发送加密消息的人。
将 p = 7、q = 13 和 e = 5 输入扩展欧几里德算法。输出将为 d = 29。
通过计算以下内容来检查计算出的 d 是否正确:
de = 29 × 5 = 145 = 1 mod 72
因此,公钥是 (91, 5),私钥是 (91, 29)。
加密和解密
密钥对生成后,加密和解密过程相对简单,计算量也很小。
有趣的是,RSA 不直接对位串进行操作,就像对称密钥加密一样。它对模 n 的数字进行操作。因此,有必要将明文表示为一系列小于 n 的数字。
RSA 加密
假设发送方希望向公钥为 (n, e) 的某人发送文本消息。
然后,发送方将明文表示为一系列小于 n 的数字。
要加密第一个明文 P(它是模 n 的一个数字)。加密过程是一个简单的数学步骤:
C = Pe mod n
换句话说,密文 C 等于明文 P 自乘 e 次,然后模 n。这意味着 C 也是小于 n 的数字。
回到我们的密钥生成示例,明文 P = 10,我们得到密文 C:
C = 105 mod 91
RSA 解密
RSA 的解密过程也很简单。假设公钥对 (n, e) 的接收方收到了密文 C。
接收方将 C 乘方到其私钥 d。模 n 的结果将是明文 P。
Plaintext = Cd mod n
再次回到我们的数值示例,密文 C = 82 将使用私钥 29 解密为数字 10:
Plaintext = 8229 mod 91 = 10
RSA 分析
RSA 的安全性取决于两个独立函数的强度。RSA 密码系统是最流行的公钥密码系统,其强度基于对非常大的数字进行因式分解的实际难度。
加密函数:它被认为是一个将明文转换为密文的一维函数,只有知道私钥 d 才能将其反转。
密钥生成:从 RSA 公钥确定私钥的难度等同于对模数 n 进行因式分解。因此,除非攻击者能够对 n 进行因式分解,否则他无法使用 RSA 公钥的知识来确定 RSA 私钥。这也是一个单向函数,从 p & q 值到模数 n 很容易,但反过来则不可能。
如果这两个函数中的任何一个都被证明不是单向函数,那么 RSA 将被破解。事实上,如果开发出一种有效的因式分解技术,那么 RSA 将不再安全。
如果 p 和 q 不是大素数和/或选择的公钥 e 是一个小数,则 RSA 加密的强度会大幅下降。
ElGamal 密码系统
除了 RSA 之外,还提出了其他公钥密码系统。它们中的许多都基于离散对数问题的不同版本。
ElGamal 密码系统(称为椭圆曲线变体)基于离散对数问题。它的强度源于这样的假设:对于给定的数字,在实际时间范围内无法找到离散对数,而幂的逆运算可以有效地计算。
让我们来看一下 ElGamal 的一个简单版本,它使用模 p 的数字。在椭圆曲线变体的情况下,它基于完全不同的数字系统。
ElGamal 密钥对的生成
ElGamal 密码系统的每个用户都通过以下方式生成密钥对:
选择一个大素数 p。通常选择长度为 1024 到 2048 位的素数。
选择一个生成元 g。
这个数字必须在 1 和 p − 1 之间,但不能是任何数字。
它是模 p 整数乘法群的生成元。这意味着对于与 p 互质的每个整数 m,存在一个整数 k 使得 gk=a mod n。
例如,3 是群 5 (Z5 = {1, 2, 3, 4}) 的生成元。
N | 3n | 3n mod 5 |
---|---|---|
1 | 3 | 3 |
2 | 9 | 4 |
3 | 27 | 2 |
4 | 81 | 1 |
选择私钥。私钥 x 是任何大于 1 且小于 p−1 的数字。
计算公钥的一部分。值 y 由参数 p、g 和私钥 x 计算如下:
y = gx mod p
获得公钥。ElGamal 公钥由三个参数 (p, g, y) 组成。
例如,假设 p = 17 且 g = 6(可以确认 6 是群 Z17 的生成元)。私钥 x 可以是任何大于 1 且小于 71 的数字,因此我们选择 x = 5。然后计算值 y 如下:
y = 65 mod 17 = 7
因此私钥是 62,公钥是 (17, 6, 7)。
加密和解密
与 RSA 相比,ElGamal 密钥对的生成相对简单。但是加密和解密比 RSA 稍微复杂一些。
ElGamal 加密
假设发送方希望向 ElGamal 公钥为 (p, g, y) 的某人发送明文,则:
发送方将明文表示为一系列模 p 的数字。
要加密第一个明文 P(表示为模 p 的数字)。获得密文 C 的加密过程如下:
- 随机生成一个数字 k;
- 计算两个值 C1 和 C2,其中:
C1 = gk mod p C2 = (P*yk) mod p
一起发送由两个单独值 (C1, C2) 组成的密文 C。
参考上面给出的 ElGamal 密钥生成示例,明文 P = 13 加密如下:
- 随机生成一个数字,例如 k = 10
- 计算两个值 C1 和 C2,其中:
C1 = 610 mod 17 C2 = (13*710) mod 17 = 9
发送密文 C = (C1, C2) = (15, 9)。
ElGamal 解密
要使用私钥 x 解密密文 (C1, C2),需要执行以下两个步骤:
计算 (C1)x 模 p 的模逆元,即 (C1)-x,通常称为解密因子。
使用以下公式获得明文:
C2 × (C1)-x mod p = Plaintext
在我们的示例中,要使用私钥 x = 5 解密密文 C = (C1, C2) = (15, 9),解密因子为
15-5 mod 17 = 9
提取明文 P = (9 × 9) mod 17 = 13。
ElGamal 分析
在 ElGamal 系统中,每个用户都有一个私钥 x,并具有公钥的三个组成部分:素模数 p、生成元 g 和公钥 Y = gx mod p。ElGamal 的强度基于离散对数问题的难度。
安全密钥大小通常 > 1024 位。如今甚至使用 2048 位长的密钥。在处理速度方面,ElGamal 相当慢,它主要用于密钥身份验证协议。由于更高的处理效率,ElGamal 的椭圆曲线变体正变得越来越流行。
椭圆曲线密码术 (ECC)
椭圆曲线密码术 (ECC) 用于描述一套密码工具和协议,其安全性基于离散对数问题的特殊版本。它不使用模 p 的数字。
ECC 基于与称为椭圆曲线的数学对象相关的数字集。存在添加和计算这些数字倍数的规则,就像模 p 的数字一样。
ECC 包括许多最初为模数设计的密码方案的变体,例如 ElGamal 加密和数字签名算法。
人们认为,当应用于椭圆曲线上的点时,离散对数问题要困难得多。这促使人们从模 p 的数字切换到椭圆曲线上的点。如果我们使用基于椭圆曲线的变体,也可以获得等效的安全级别,而密钥长度更短。
较短的密钥带来两个好处:
- 密钥管理简便
- 高效计算
这些优点使基于椭圆曲线的加密方案变体对于计算资源受限的应用非常有吸引力。
RSA 和 ElGamal 方案——比较
让我们简要比较一下 RSA 和 ElGamal 方案的各个方面。
RSA | ElGamal |
---|---|
加密效率更高。 | 解密效率更高。 |
解密效率较低。 | 解密效率更高。 |
对于特定的安全级别,RSA 需要较长的密钥。 | 对于相同的安全级别,需要非常短的密钥。 |
它被广泛接受和使用。 | 它比较新,在市场上并不流行。 |
密码学中的数据完整性
到目前为止,我们讨论了使用对称和公钥方案来实现信息机密性。本章开始讨论旨在提供其他安全服务的不同密码技术。
本章重点关注数据完整性和用于实现相同目标的密码工具。
对数据完整性的威胁
交换敏感信息时,接收方必须确信消息完整地来自预期的发送方,并且不会无意中或以其他方式被修改。存在两种不同类型的数据完整性威胁,即被动和主动。
被动威胁
此类威胁是由于数据的意外更改而存在的。
这些数据错误可能是由于通信通道中的噪声引起的。此外,数据在磁盘上存储时也可能损坏。
纠错码和简单的校验和(如循环冗余校验 (CRC))用于检测数据完整性丢失。在这些技术中,数据的摘要是通过数学计算计算出来的,并附加到数据中。
主动威胁
在这种类型的威胁中,攻击者可以恶意操纵数据。
在最简单的层面上,如果数据没有摘要,则可以修改数据而不会被检测到。系统可以使用附加 CRC 到数据的方法来检测任何主动修改。
在更高层次的威胁中,攻击者可能会修改数据并尝试从现有摘要中为修改后的数据导出新的摘要。如果使用简单的机制(如 CRC)计算摘要,则这是可能的。
诸如哈希函数之类的安全机制用于解决主动修改威胁。
密码学哈希函数
哈希函数极其有用,几乎出现在所有信息安全应用中。
哈希函数是一种数学函数,它将数值输入值转换为另一个压缩的数值值。哈希函数的输入长度是任意的,但输出长度始终是固定的。
哈希函数返回的值称为消息摘要或简称为哈希值。下图说明了哈希函数:
哈希函数的特征
哈希函数的典型特征如下:
固定长度的输出(哈希值)
哈希函数将任意长度的数据转换为固定长度的数据。这个过程通常被称为对数据进行哈希。
通常情况下,哈希值远小于输入数据,因此哈希函数有时也被称为压缩函数。
由于哈希值是较大数据的较小表示,因此它也称为摘要。
具有n位输出的哈希函数被称为n位哈希函数。流行的哈希函数生成的哈希值长度在160到512位之间。
运算效率
通常,对于任何输入为x的哈希函数h,计算h(x)是一个快速操作。
在计算上,哈希函数比对称加密快得多。
哈希函数的特性
为了成为有效的密码工具,哈希函数需要具备以下特性:
抗原像性
此特性意味着反转哈希函数在计算上应该是困难的。
换句话说,如果哈希函数h产生了一个哈希值z,那么找到任何哈希到z的输入值x都应该是一个困难的过程。
此特性可以防止攻击者只拥有哈希值并试图找到输入。
抗第二原像性
此特性意味着,给定一个输入及其哈希值,应该很难找到另一个具有相同哈希值的输入。
换句话说,如果输入为x的哈希函数h产生哈希值h(x),那么应该很难找到任何其他输入值y,使得h(y) = h(x)。
哈希函数的此特性可以防止攻击者拥有一个输入值及其哈希值,并想用不同的值替换原始输入值。
抗碰撞性
此特性意味着应该很难找到两个不同的输入(长度任意),它们产生相同的哈希值。此特性也称为无碰撞哈希函数。
换句话说,对于哈希函数h,很难找到任何两个不同的输入x和y,使得h(x) = h(y)。
由于哈希函数是具有固定哈希长度的压缩函数,因此哈希函数不可能没有碰撞。无碰撞特性只确认这些碰撞应该很难找到。
此特性使得攻击者很难找到两个具有相同哈希值的输入值。
此外,如果哈希函数具有抗碰撞性,那么它也具有抗第二原像性。
哈希算法的设计
哈希的核心是一个数学函数,它对两个固定大小的数据块进行运算以创建哈希码。此哈希函数构成哈希算法的一部分。
每个数据块的大小根据算法的不同而不同。通常数据块的大小从128位到512位不等。下图演示了哈希函数:
哈希算法涉及到像块密码一样对上述哈希函数进行多轮运算。每一轮都接收固定大小的输入,通常是最近的消息块和上一轮输出的组合。
此过程将重复进行足够多的轮数,以对整个消息进行哈希运算。哈希算法的示意图如下所示:
由于第一个消息块的哈希值成为第二个哈希运算的输入,其输出会改变第三个运算的结果,依此类推。这种效应被称为哈希的雪崩效应。
雪崩效应导致两个即使只相差一位数据的邮件产生截然不同的哈希值。
正确理解哈希函数和算法的区别。哈希函数通过对两个固定长度的二进制数据块进行运算来生成哈希码。
哈希算法是使用哈希函数的过程,它指定了如何将消息分解以及如何将先前消息块的结果链接在一起。
流行的哈希函数
让我们简要了解一些流行的哈希函数:
消息摘要 (MD)
MD5在相当长的一段时间内是最流行和最广泛使用的哈希函数。
MD家族包括哈希函数MD2、MD4、MD5和MD6。它被采纳为互联网标准RFC 1321。它是一个128位哈希函数。
MD5摘要已广泛用于软件领域,以确保传输文件的完整性。例如,文件服务器通常会为文件提供预先计算的MD5校验和,以便用户可以将其与下载文件的校验和进行比较。
2004年,在MD5中发现了碰撞。据报道,使用计算机集群只需一个小时就能成功进行分析攻击。这种碰撞攻击导致MD5遭到破坏,因此不再推荐使用。
安全哈希算法 (SHA)
SHA家族包括四种SHA算法:SHA-0、SHA-1、SHA-2和SHA-3。虽然来自同一个家族,但在结构上有所不同。
原始版本SHA-0是一个160位的哈希函数,于1993年由美国国家标准与技术研究院(NIST)发布。它有一些弱点,并没有流行起来。后来在1995年,设计了SHA-1来纠正SHA-0的所谓弱点。
SHA-1是现有的SHA哈希函数中最广泛使用的。它被用于包括安全套接字层(SSL)安全在内的几个广泛使用的应用程序和协议中。
2005年,人们找到了一种方法,可以在实际时间范围内发现SHA-1的碰撞,这使得SHA-1的长期可用性令人怀疑。
SHA-2家族根据哈希值的位数,还有四种SHA变体,分别是SHA-224、SHA-256、SHA-384和SHA-512。目前还没有关于SHA-2哈希函数的成功攻击报告。
虽然SHA-2是一个强大的哈希函数。虽然差异很大,但其基本设计仍然遵循SHA-1的设计。因此,NIST呼吁新的竞争性哈希函数设计。
2012年10月,NIST选择Keccak算法作为新的SHA-3标准。Keccak具有许多优点,例如高效的性能和良好的抗攻击能力。
RIPEMD
RIPEMD是RACE完整性基元评估消息摘要的缩写。这组哈希函数是由开放研究社区设计的,通常被称为欧洲哈希函数家族。
该集合包括RIPEMD、RIPEMD-128和RIPEMD-160。该算法还存在256位和320位版本。
原始RIPEMD(128位)基于MD4中使用的设计原则,并被发现提供安全性存疑。RIPEMD 128位版本作为快速修复替代方案出现,以克服原始RIPEMD的漏洞。
RIPEMD-160是改进版本,也是该家族中使用最广泛的版本。256位和320位版本降低了意外碰撞的几率,但与RIPEMD-128和RIPEMD-160相比,其安全性并没有更高。
Whirlpool
这是一个512位的哈希函数。
它源自高级加密标准(AES)的修改版本。其中一位设计者是Vincent Rijmen,他是AES的共同创建者。
Whirlpool已经发布了三个版本:WHIRLPOOL-0、WHIRLPOOL-T和WHIRLPOOL。
哈希函数的应用
基于哈希函数的密码特性,它有两个直接的应用。
密码存储
哈希函数提供密码存储保护。
大多数登录过程不是以明文存储密码,而是在文件中存储密码的哈希值。
密码文件由一系列成对的值组成,形式为(用户ID, h(P))。
登录过程如下图所示:
即使入侵者访问了密码文件,也只能看到密码的哈希值。他既不能使用哈希值登录,也不能从哈希值推导出密码,因为哈希函数具有抗原像性。
数据完整性检查
数据完整性检查是哈希函数最常见的应用。它用于生成数据文件的校验和。此应用向用户保证数据的正确性。
该过程如下图所示:
完整性检查帮助用户检测对原始文件所做的任何更改。但是,它不保证文件的原始性。攻击者可以更改整个文件并计算一个全新的哈希值并发送给接收者,而不是修改文件数据。此完整性检查应用程序仅在用户确信文件的原始性时才有效。
消息认证
在上一章中,我们讨论了数据完整性威胁以及使用哈希技术来检测数据是否发生任何修改攻击。
数据存在的另一种威胁是缺乏消息认证。在这种威胁中,用户不确定消息的发送者。可以使用使用密钥进行加密的密码技术来提供消息认证。
消息认证码 (MAC)
MAC算法是一种对称密钥密码技术,用于提供消息认证。为了建立MAC过程,发送方和接收方共享一个对称密钥K。
本质上,MAC是在底层消息上生成的加密校验和,它与消息一起发送以确保消息认证。
使用MAC进行认证的过程如下图所示:
现在让我们尝试详细了解整个过程:
发送方使用一些公开的MAC算法,输入消息和密钥K,并产生一个MAC值。
与哈希类似,MAC函数也压缩任意长的输入到固定长度的输出。哈希和MAC的主要区别在于MAC在压缩过程中使用密钥。
发送方将消息及其MAC一起转发。在这里,我们假设消息以明文发送,因为我们关注的是提供消息来源认证,而不是机密性。如果需要机密性,则需要对消息进行加密。
收到消息和MAC后,接收方将接收到的消息和共享密钥K输入MAC算法并重新计算MAC值。
接收方现在检查新计算的MAC与从发送方收到的MAC是否相等。如果匹配,则接收方接受消息并确保消息是由预期发送方发送的。
如果计算出的MAC与发送方发送的MAC不匹配,接收方无法确定是消息被更改了还是来源被伪造了。底线是,接收方安全地假设该消息不是真实的。
MAC的局限性
MAC有两个主要局限性,这两个局限性都是由于其对称操作的性质:
共享密钥的建立。
它可以在拥有共享密钥的预先确定的合法用户之间提供消息认证。
这需要在使用MAC之前建立共享密钥。
无法提供不可否认性
不可否认性是指确保消息发送者无法否认其先前发送的任何消息、承诺或行为。
消息认证码 (MAC) 技术不提供不可否认性服务。如果发送方和接收方就消息来源发生争议,MAC 无法提供证明消息确实由发送方发送的证据。
尽管任何第三方都无法计算 MAC,但发送方仍可能否认已发送消息,并声称接收方伪造了消息,因为无法确定这两方中哪一方计算了 MAC。
可以使用下一节中讨论的基于公钥的数字签名来克服这两个限制。
密码学数字签名
数字签名是消息认证的公钥原语。在现实世界中,通常会在手写或打印的消息上使用手写签名。它们用于将签名者绑定到消息。
类似地,数字签名是一种将个人/实体绑定到数字数据的方法。接收方以及任何第三方都可以独立验证此绑定。
数字签名是从数据和仅签名者知道的私钥计算出的密码值。
在现实世界中,消息接收者需要确保消息属于发送者,并且发送者不应能够否认该消息的来源。此要求在业务应用程序中非常重要,因为交换数据发生争议的可能性非常高。
数字签名模型
如前所述,数字签名方案基于公钥密码学。数字签名方案的模型如下图所示:
以下几点详细解释了整个过程:
采用此方案的每个人都有一对公钥和私钥。
通常,用于加密/解密和签名/验证的密钥对是不同的。用于签名的私钥称为签名密钥,公钥称为验证密钥。
签名者将数据馈送到哈希函数并生成数据的哈希值。
然后将哈希值和签名密钥馈送到签名算法,该算法会生成给定哈希值的数字签名。签名附加到数据中,然后两者都发送给验证者。
验证者将数字签名和验证密钥输入验证算法。验证算法会输出某个值。
验证者还会对接收到的数据运行相同的哈希函数以生成哈希值。
为了验证,将此哈希值和验证算法的输出进行比较。根据比较结果,验证者确定数字签名是否有效。
由于数字签名是由签名者的“私钥”创建的,并且没有人拥有此密钥;签名者将来无法否认已签名数据。
需要注意的是,通常不是直接通过签名算法对数据进行签名,而是创建数据的哈希值。由于数据的哈希值是数据的唯一表示,因此对哈希值进行签名足以代替对数据进行签名。使用哈希值而不是直接对数据进行签名的最重要原因是方案的效率。
让我们假设 RSA 用作签名算法。如公钥加密章节所述,使用 RSA 的加密/签名过程涉及模幂运算。
通过模幂运算对大型数据进行签名在计算上代价高昂且耗时。数据的哈希值是数据的相对较小的摘要,因此**对哈希值进行签名比对整个数据进行签名更有效**。
数字签名的重要性
在所有密码原语中,使用公钥密码学的数字签名被认为是实现信息安全非常重要和有用的工具。
除了能够提供消息的不可否认性外,数字签名还提供消息认证和数据完整性。让我们简要了解数字签名是如何实现这一点的:
**消息认证** - 当验证者使用发送者的公钥验证数字签名时,他可以确保签名仅由拥有相应私钥的发送者创建,而不是其他人。
**数据完整性** - 如果攻击者可以访问数据并修改数据,则接收端处的数字签名验证将失败。修改后数据的哈希值和验证算法提供的输出将不匹配。因此,接收者可以安全地否认该消息,并假设数据完整性已被破坏。
**不可否认性** - 由于假定只有签名者知道签名密钥,因此他只能对给定数据创建唯一的签名。因此,如果将来发生任何争议,接收者可以向第三方出示数据和数字签名作为证据。
通过向数字签名方案添加公钥加密,我们可以创建一个能够提供四个基本安全要素的密码系统,即:隐私、身份验证、完整性和不可否认性。
带有数字签名的加密
在许多数字通信中,交换加密消息而不是明文以实现机密性是可取的。在公钥加密方案中,发送者的公钥(加密密钥)在公共领域可用,因此任何人都可以伪造其身份并将任何加密消息发送给接收者。
这使得使用 PKC 进行加密的用户必须寻求数字签名以及加密数据,以确保消息认证和不可否认性。
这可以通过将数字签名与加密方案相结合来实现。让我们简要讨论如何实现此要求。有**两种可能性:先签名后加密**和**先加密后签名**。
但是,基于先签名后加密的密码系统可以被接收者利用来伪造发送者的身份并将数据发送给第三方。因此,这种方法不被推荐。先加密后签名的过程更可靠且被广泛采用。如下图所示:
接收者在接收加密数据及其签名后,首先使用发送者的公钥验证签名。在确保签名的有效性后,他然后使用其私钥通过解密检索数据。
公钥基础设施 (PKI)
公钥基础设施 (PKI) 最显著的特点是它使用一对密钥来实现底层安全服务。密钥对包括私钥和公钥。
由于公钥在公共领域,因此它们很可能被滥用。因此,有必要建立和维护某种可信赖的基础设施来管理这些密钥。
密钥管理
不用说,任何密码系统的安全性都取决于其密钥的安全性如何管理。如果没有安全的密码密钥处理程序,使用强大密码方案的好处可能会丢失。
据观察,密码方案很少因其设计中的弱点而受到破坏。但是,它们通常由于密钥管理不善而受到破坏。
密钥管理有一些重要的方面,如下所示:
密码密钥只不过是特殊的数据片段。密钥管理是指对密码密钥的安全管理。
密钥管理处理整个密钥生命周期,如下图所示:
公钥密码学的密钥管理有两个具体要求。
**私钥的保密性。**在整个密钥生命周期中,秘密密钥必须对除所有者和授权使用它们的方以外的所有方保密。
**公钥的保证。**在公钥密码学中,公钥在公共领域,被视为公共数据。默认情况下,无法保证公钥是否正确,可以与谁关联,或可以用于什么目的。因此,公钥的密钥管理需要更明确地关注公钥目的的保证。
“公钥保证”的最重要要求可以通过公钥基础设施 (PKI) 来实现,这是一种支持公钥密码学的密钥管理系统。
公钥基础设施 (PKI)
PKI 提供公钥保证。它提供公钥的身份验证和分发。PKI 的结构包括以下组件。
- 公钥证书,通常称为“数字证书”。
- 私钥令牌。
- 认证机构。
- 注册机构。
- 证书管理系统。
数字证书
作为类比,证书可以被认为是签发给个人的身份证。人们使用身份证,例如驾驶执照、护照来证明自己的身份。数字证书在电子世界中做同样的事情,但有一点不同。
数字证书不仅签发给个人,还可以签发给计算机、软件包或任何其他需要在电子世界中证明身份的任何东西。
数字证书基于 ITU 标准 X.509,该标准定义了公钥证书和证书验证的标准证书格式。因此,数字证书有时也称为 X.509 证书。
属于用户客户端的公钥由认证机构 (CA) 存储在数字证书中,以及其他相关信息,例如客户端信息、到期日期、用途、发行者等。
CA 对所有这些信息进行数字签名,并将数字签名包含在证书中。
任何需要关于客户端公钥和关联信息保证的人,都可以使用 CA 的公钥执行签名验证过程。成功验证确保证书中提供的公钥属于证书中提供的详细信息的人。
个人/实体获取数字证书的过程如下图所示。
如插图所示,CA 接受客户端的申请以认证其公钥。CA 在适当验证客户端身份后,向该客户端颁发数字证书。
认证机构 (CA)
如上所述,CA 向客户端颁发证书,并帮助其他用户验证证书。CA 负责正确识别请求颁发证书的客户端身份,并确保证书中包含的信息正确无误,并对其进行数字签名。
CA 的关键功能
CA 的关键功能如下:
生成密钥对 – CA 可以独立或与客户端联合生成密钥对。
颁发数字证书 – 可以将 CA 视为 PKI 等效于护照机构 – CA 在客户端提供凭据以确认其身份后颁发证书。然后,CA 对证书进行签名以防止修改证书中包含的详细信息。
发布证书 – CA 需要发布证书以便用户可以找到它们。实现这一点有两种方法。一种是在相当于电子电话簿中发布证书。另一种是通过某种方式将您的证书发送给您认为可能需要它的那些人。
验证证书 – CA 将其公钥提供给环境,以帮助验证其在客户端数字证书上的签名。
吊销证书 – 有时,CA 会由于某些原因吊销已颁发的证书,例如用户私钥泄露或对客户端失去信任。吊销后,CA 会维护所有已吊销证书的列表,该列表可供环境使用。
证书类别
共有四类典型的证书:
第 1 类 – 通过提供电子邮件地址即可轻松获取这些证书。
第 2 类 – 这些证书需要提供额外的个人信息。
第 3 类 – 只有在对请求者的身份进行检查后才能购买这些证书。
第 4 类 – 这些证书可由需要极高信任级别的政府和金融机构使用。
注册机构 (RA)
CA 可以使用第三方注册机构 (RA) 来对请求证书的个人或公司进行必要的检查以确认其身份。RA 可能会在客户端看来像 CA,但他们实际上并没有签署颁发的证书。
证书管理系统 (CMS)
这是一个管理系统,通过该系统可以发布、暂时或永久吊销、续订或吊销证书。证书管理系统通常不删除证书,因为可能需要在某个时间点证明其状态,也许出于法律原因。CA 以及相关的 RA 运行证书管理系统,以便能够跟踪其责任和义务。
私钥令牌
虽然客户端的公钥存储在证书上,但相关的私钥可以存储在密钥所有者的计算机上。这种方法通常不被采用。如果攻击者访问了计算机,他可以轻松访问私钥。为此,私钥存储在安全的可移动存储令牌上,对该令牌的访问通过密码进行保护。
不同的供应商通常使用不同且有时是专有的密钥存储格式。例如,Entrust 使用专有的 .epf 格式,而 Verisign、GlobalSign 和 Baltimore 使用标准的 .p12 格式。
CA 的层次结构
随着庞大的网络和全球通信的需求,实际上不可能只有一个可信的 CA,所有用户都从该 CA 获取证书。其次,如果 CA 被破坏,只有一个 CA 的可用性可能会导致困难。
在这种情况下,分层证书模型非常重要,因为它允许在两个通信方与同一 CA 没有信任关系的环境中使用公钥证书。
根 CA 位于 CA 层次结构的顶部,根 CA 的证书是自签名证书。
直接隶属于根 CA 的 CA(例如,CA1 和 CA2)具有由根 CA 签名的 CA 证书。
层次结构中从属 CA 下的 CA(例如,CA5 和 CA6)的 CA 证书由更高级别的从属 CA 签名。
证书颁发机构 (CA) 层次结构反映在证书链中。证书链跟踪从层次结构中的分支到层次结构根的证书路径。
下图显示了一个 CA 层次结构,其中证书链从实体证书通过两个从属 CA 证书 (CA6 和 CA3) 到根 CA 的 CA 证书。
验证证书链是确保特定证书链有效、正确签名且值得信赖的过程。以下过程验证证书链,从为身份验证提供的证书开始:
正在验证其真实性的客户端提供其证书,通常还提供证书链直至根 CA。
验证者获取证书并使用发行者的公钥进行验证。发行者的公钥位于紧邻客户端证书的链中的发行者证书中。
现在,如果已签署发行者证书的更高 CA 受验证者信任,则验证成功并在此处停止。
否则,将以与上述步骤中客户端类似的方式验证发行者证书。此过程一直持续到找到受信任的 CA,或者持续到根 CA。
密码学 - 优点与缺点
如今,网络已走向全球,信息已采用位和字节的数字形式。关键信息现在以数字形式存储、处理和传输到计算机系统和开放通信通道上。
由于信息扮演着如此重要的角色,对手的目标是计算机系统和开放通信通道,目的是窃取敏感信息或破坏关键信息系统。
现代密码学提供了一套强大的技术,以确保挫败对手的恶意意图,同时确保合法用户能够访问信息。在本章中,我们将讨论我们从密码学中获得的好处、其局限性以及密码学的未来。
密码学 – 好处
密码学是必不可少的安全工具。它提供了信息安全四个最基本的服务:
机密性 – 加密技术可以保护信息和通信免受未经授权的泄露和访问。
身份验证 – MAC 和数字签名等密码技术可以保护信息免受欺骗和伪造。
数据完整性 – 密码散列函数在确保用户数据完整性方面发挥着至关重要的作用。
不可否认性 – 数字签名提供不可否认性服务,以防止因发送者否认传递消息而产生的争议。
密码学提供的所有这些基本服务使得能够以极其高效和有效的方式通过使用计算机系统的网络进行业务活动。
密码学 – 缺点
除了信息安全的四个基本要素之外,还有一些其他问题会影响信息的有效使用:
在关键的决策时刻,即使对于合法用户而言,强加密、身份验证和数字签名的信息也可能难以访问。网络或计算机系统可能会受到攻击,并被入侵者破坏功能。
信息安全的另一个基本方面高可用性无法通过使用密码学来保证。需要其他方法来防范诸如拒绝服务或信息系统完全崩溃之类的威胁。
信息安全的另一个基本需求选择性访问控制也不能通过使用密码学来实现。需要为此执行管理控制和程序。
密码学不能防范系统、协议和程序设计不当而产生的漏洞和威胁。需要通过适当的设计和防御基础设施的设置来解决这些问题。
密码学是有成本的。成本以时间和金钱来衡量:
在信息处理中添加密码技术会导致延迟。
使用公钥密码需要建立和维护公钥基础设施,这需要大量的资金预算。
密码技术的安全性基于数学问题的计算难度。解决此类数学问题的任何突破或计算能力的提高都可能使密码技术变得脆弱。
密码学的未来
椭圆曲线密码学 (ECC) 已经被发明,但其优点和缺点尚未完全了解。ECC 允许以极短的时间执行加密和解密,从而允许在安全性相同的情况下传递更多的数据。但是,与其他加密方法一样,ECC 也必须经过测试并证明其安全可靠后才能被政府、商业和私人使用所接受。
量子计算是一种新现象。虽然现代计算机使用称为“位”的二进制格式存储数据,其中可以存储“1”或“0”;量子计算机使用多个状态的量子叠加存储数据。这些多值状态存储在“量子位”或“量子比特”中。这允许以比传统的晶体管处理器快几个数量级的速度计算数字。
要理解量子计算机的强大功能,请考虑 RSA-640,这是一个具有 193 位数字的数字,可以通过 80 台 2.2GHz 计算机在 5 个月内进行因式分解,一台量子计算机可以在不到 17 秒的时间内进行因式分解。对于传统计算机来说通常需要数十亿年才能计算的数字,对于完全开发的量子计算机来说,可能只需要几小时甚至几分钟的时间。
鉴于这些事实,现代密码学必须寻找计算难度更大的问题,或者设计完全存档当前现代密码学所实现目标的新技术。