目录
7.1 非对称密码
本节将介绍三种常用的公钥密码系统,RSA,El Gamal和椭圆曲线密码(ECC)
PKI:公钥基础设施。
7.1.1 公钥和私钥
每个通信方都有一把私钥和一把公钥。
发送方通过对方的公钥加密,接受方通过私钥解密。
公钥系统使用的密钥必须比私钥系统所用的密钥更长,才能产生同等强度的密码系统。
7.2.2 RSA
RSA 算法所依靠的是因式分解大素数的天然计算难度。
各种密钥的强度还会因为你使用的密码系统而表现出巨大差异。下表所示 个非对称密码 系统的密钥长度都将提供同等级别的保护:
7.1.3 El Gamal
基于Diffie-Helhnan算法扩展而来。
相对于RSA优势:未申请专利,RSA在2000年才公开。
劣势:把由它加密的任何消息都加长了一倍。这在加密长消息或将 通过窄带宽通信线路传输的数据时,会造成很大的困难。
7.1.4椭圆曲线
1024 RSA 密钥在密码强度上等同千 160 位椭圆曲线密码系统密钥。
7.1.5 零知识证明
只告诉别人应该知道的信息,不会提供任何重要的信息,同时能证明自己的身份。
7.2 散列函数
执行数字签名是为了证明消息的不可否认性,散列函数是现代数字签名的算法。
散列函数确保了消息的完整性,数字签名确保了消息的身份验证和不可否认性。
散列函数的目的:从一个长消息衍生出一个唯一输出值,这就是消息摘要。发送者和接收者会比较消息摘要是否相同。
消息摘要同生成消息摘要的整条消息一起发送给对方,有两个原因
(1)接受者可用同一个散列函数根据整条消息重算消息摘要。
(2)消息摘要可用来执行数字签名算法。
消息摘要的不同表示方法:散列、散列值、散列总和、CRC、指纹、校验和数字ID。
消息摘要128位或者更长。
散列函数的基本要求:
(1)输入可以是任意长度;
(2)输出有一个固定长度;
(3)为任何输入计算散列函数都相对容易。
(4)散列函数是单向的。
(5)散列函数无冲突,没有相同散列值的两条消息。
本章计算四种常用散列算法:安全散列算法(SHA),消息摘要2(MD2),消息摘要4(MD4)、消息摘要5(MD5)。
7.2.1 安全散列算法(SHA)
安全散列算法(SHA),还有后面衍生的SHA1、SHA2、SHA3。
SHA1:可以提取任意输入长度,生成160的消息摘要。处理512位中的消息,不足则用数据填充。
SHA2:有四个变体。
• SHA-256, 512 位块大小生成 256 位消息摘要。
SHA3:通过一种更安全的算法提供与SHA2相同的变体和散列长度。
7.2.2 消息摘要2(MD2)
MD2会生成128位消息摘要。为8位处理器提供安全散列函数。消息长度要达到16字节的整数倍。
后来证明MD2不是一个单向函数。
7.2.3 消息摘要4(MD4)
支持32位处理器并提高安全性。消息的长度比512位消息小64位。
MD4算法静态3轮计算处理512位消息块。输出128位消息摘要。
MD4也被证明不是安全的散列算法。容易找到冲突(同一个散列值的两条不同消息)
7.2.4 消息摘要5(MD5)
MD5还是处理512位消息块,通过4轮计算生成128位消息摘要。消息长度要求同MD4相同。
MD5执行了新的安全性能,大幅降低了消息摘要的生成速度。
MD5也容易产生冲突。
下面的列表非常重要:
7.3数字签名
将消息摘要加密就变成了数字签名。一般用发送方的私钥加密,对方用公钥解密。
数字签名的两个目的:
(1)有数字签名的消息可以向接收者保证,消息确实来自声称的发送者。
(2)有数字签名的消息,可以向接收者保证,消息传递过程中没有改动过。
数字签名依靠公钥加密法和散列函数发挥作用。
请注意,数字签名流程并不对自己所含内容以及签名本身提供任何隐私保护。它只确保实 现密码的完整性、鉴别和不可否认性目标。如果要 提供消息的隐藏性,可以对消息用对方的公钥加密,然后对方用私钥解密。
如何选择密钥:
(1)如果你要加密消息,使用接收者的公钥。
(2) 如果你要解密发送给你的消息,使用自己的私钥。 ·
(3) 如果你要给将发送给别人的消息加上数字签名,使用自己的私钥。
7.3.1 HMAC
经过散列处理的消息鉴别码(HMAC)算法执行部分数字签名,只保证消息传输过程中的完整性,但不提供不可否认性的服务。
HMAC 可通过一个共享秘密密钥与任何标准消息摘要生成算法(例如 SHA-3)配套使用。因

7.3.2 数字签名标准
DSS中规定, 联邦批准的所有数字签名算法都必须使用 SHA-3 散列函数。
DSS 还规定了可用来支持数字签名基础设施的加密算法。当前得到批准的标准加密算法有 三种: