第 2章 信息安全机制
本章学习目标
通过本章学习, 读者应该掌握以下内容,
对称加密机制及典型算法
非对称加密机制及算法
数字签名的原理
数据完整性验证的原理及典型算法
PGP的使用
2.1 加密机制
2.1.1 密码学基础知识
一个密码体制被定义为一对 数据变换,其中一个变
换应用于我们称之为 明文 的数据项,变换后产生的
相应数据项称为 密文 ;而另一个变换应用于密文,
变换后的结果为明文。这两个变换分别称为 加密变
换( Encryption)和解密变换( Decryption) 。加密
变换将明文和一个称为 加密密钥 的独立数据值作为
输入,输出密文;解密变换将密文和一个称为 解密
密钥 的数据值作为输入
加 密 解 密
K
E
C C
K
D
MM
加密和解密
加密 解密
M:明文 C:密文 KE:加密密钥 KD:解密密钥
2.1.2 对称加密算法
加密,Ek(M)=C
解密,Dk(C)=M
序列密码算法( stream cipher)
分组密码算法 (block cipher)
加密过程主要是重复使用混乱和扩散两种技术,混乱(
confusion)是改变信息块使输出位和输入位无明显的统计关
系。扩散( diffusion)是将明文位和密钥的效应传播到密文的
其它位。
对称密码算法有很多种, DES,triple DES,IDEA,RC2、
RC4,RC5,RC6,GOST,FEAL,LOKI
2.1.3 DES算法
首先把明文分成若干个 64-bit的分组,算法以一个分组
作为输入,通过一个 初始置换( IP) 将明文分组分成
左半部分( L0)和右半部分( R0),各为 32-bit。然后
进行 16轮完全相同的运算,这些运算我们称为 函数 f,
在运算过程中数据与密钥相结合。经过 16轮运算后,
左、右两部分合在一起经过一个 末转换(初始转换的
逆置换 IP-1),输出一个 64-bit的密文分组。
1,算法描述
密钥位移位,从密钥的 56位中选出 48位 。①
通过一个 扩展置换 将数据的左半部分扩展成
48位,②并通过一个 异或操作 与 48位密钥结
合,③通过 8个 S盒 ( substitution box)将这
48位替代成新的 32位,④再依照 P-盒置换 一
次。以上四步构成 复杂函数 f(图中虚线框里
的部分)。 然后通过另一个异或运算,将复
杂函数 f的输出与左半部分结合成为新的右半
部分 。
每一轮的运算过程,
密钥通常表示为 64-bit,但每个第 8位用作奇偶校验,实
际的密钥长度为 56-bit。在 DES的每一轮运算中,从 56-
bit密钥产生出不同的 48-bit的子密钥( K1,K2……K 16)。
首先,56-bit密钥分成两部分(以 C,D分别表示这两部
分),每部分 28位,然后每部分分别循环左移 1位或 2
位(从第 1轮到第 16轮,相应左移位数分别为,1,1、
2,2,2,2,2,2,1,2,2,2,2,2,2,1)。再
将生成的 56-bit组经过一个压缩转换( compression
permutation),舍掉其中的某 8个位并按一定方式改变
位的位置,生成一个 48-bit的子密钥 Ki。
每一轮中的子密钥的生成
48-bit组被分成 8个 6-bit组, 每一个 6-bit组作为一个 S盒
的输入, 输出为一个 4-bit组 。 每个 S-盒是一个 4行 16列
的表, 表中的每一项都是一个 4-bit的数 。 S盒的 6-bit的
输入确定其输出为表中的哪一个项, 其方式是,6-bit数
的首, 末两位数决定输出项所在的行;中间的四位决定
输出项所在的列 。 例如:第 6个 S盒如表 2-1所示, 假设
第 6个 S-盒的输入为 110101,则输出为第 3行第 10列的
项 ( 行或列的记数从 0开始 ), 即输出为 4-bit组 0001。
S-盒置换
三重 DES
如上所言, DES一个致命的缺陷就是密钥长度
短, 并且对于当前的计算能力, 56位的密钥长度
已经抗不住穷举攻击, 而 DES又不支持变长密钥
。 但算法可以一次使用多个密钥, 从而等同于更
长的密钥 。 三重 DES算法表示为,
C=EK3( DK2( EK1( M)))
通常取 K3=K1,则上式变为,
C=EK1( DK2( EK1( M)))
2.1.4 RC5算法
RC5是 Ron Revist发明的 。 RSA实验室对 64bit分组的
RC5算法进行了很长时间的分析, 结果表明对 5轮的
RC5,差分攻击需要 264个明文;对 10轮需要 245个明文;对 15轮需要 268个明文, 而这里最多只可能有 264个
明文, 所以对 15轮以上的 RC5的攻击是失败的 。
Rivest推荐至少使用 12轮 。
RC5是具有参数变量的分组密码算法, 其中可变的
参量为:分组的大小, 密钥的大小和加密的轮次 。 该
算法主要使用了三种运算:异或, 加, 循环 。
RC5的分组长度是可变的, 下面我们将采用
64bit的分组来描述算法 。 加密需要使用 2r+2
( 其中 r表示加密的轮次 ) 个与密钥相关的
32bit字, 分别表示为 S0,S1,S2…… S2r+1。 创
建这个与密钥相关的数组的运算如下:首先将
密钥的字节拷贝到 32bit字的数组 L,如果需要,
最后一个字可以用零填充 。 然后利用线性同余
发生器初始化数组 S,
S0=P
Si=(Si-1+Q) mod 232
( 其中 i=1 to 2(r+1)-1,
P=0xb7e15163,Q=0x9e3779b9)
最后将 L与 S混合,
初始化,
i=j=0
A=B=0
然后做 3n次循环,(其中 c为密钥所占 32bit
字数目, 亦即数组 L的长度, n为 2(r+1)和 c
中的最大值 )。
A=Si=(Si+A+B)<<<3
B=Lj=(Lj+A+B)<<<(A+B)
i=(i+1) mod 2(r+1)
j=(j+1) mod c
加密过程,
首先将明文分组 ( 64bit) 分成两个 32位
字 A和 B( 假设字节进入字的顺序为第一
个字节进行寄存器的低位置 ), 然后进行
如下的运算,
A=A+S0
B=B+S1
for(i=1;i<=r;i++)
{ A=((A⊕ B)<<<B)+S2i;
B=((B⊕ A)<<<A)+S2i+1;
}
输出的 A,B为密文
解密时, 把密文分成 A和 B,然
后进行如下运算,
for(i=r;r>=1;r--)
{
B=((B-S2i+1)>>>A) ⊕ A;
A=((A-S2i)>>>B) ⊕ B;
}
B=B-S1
A=A-S0
此时输出的 A,B为解密后得到
的明文 。
2.1.5 非对称加密体制
公开密钥体制把信息的加密密钥和解密密钥分离,通
信的每一方都拥有这样的一对密钥。其中加密密钥可
以像电话号码一样对外公开,由发送方用来加密要发
送的原始数据;解密密钥则由接收方秘密保存,作为
解密时的私用密钥。公开密钥加密算法的核心是一种
特殊的数学函数 ―― 单向陷门函数( trap-door one
way function)。即该函数从一个方向求值是容易的,
但其逆变换却是极其困难的,因此利用公开的加密密
钥只能作正向变换,而逆变换只有依赖于私用的解密
密钥这一, 陷门, 才能实现 。
公开密钥体制最大的优点就是不需要对密钥通信进
行保密, 所需传输的只有公开密钥 。 这种密钥体制还
可以用于数字签名, 即信息的接收者能够验证发送者
的身份, 而发送者在发送已签名的信息后不能否认 。
公开密钥体制的缺陷在于其加密和解密的运算时间比
较长, 这在一定程度上限制了它的应用范围 。 公开密
钥体制在理论上被认为是一种比较理想的的计算密码
的方法, 但现在真正实用的公开密钥算法还不是很多,
目前公认比较安全的要算 RSA算法及其变种 Rabin算
法 。 算法表示为,
Ek1(M)=C
Dk2(C)=M
Dk2(Ek1(M))=M (其中 k1和 k2为一对密钥中的私有密
钥和公开密钥 )
2.1.6 RSA算法
RSA算法的思路如下:为了产生两个密钥, 先取两
个大素数, p和 q。 为了获得最大程度的安全性, 两
数的长度一样 。 计算乘积 n=p*q,然后随机选取加
密密钥 e,使 e和 (p-1)*(q-1)互素 。 最后用欧几里得
( Euclidean) 扩展算法计算解密密钥 d,d满足 ed≡1
mod (p-1)(q-1),即 d≡e-1 mod (p-1)(q-1)。 则 e和 n为
公开密钥, d是私人密钥 。 两个大数 p和 q
应该立即丢弃,不让任何人知道。一般选择公开密
钥 e比私人密钥 d小。最常选用的 e值有三个 3,17,
65537。
加密消息时, 首先将消息分成比 n小的数据
分组 ( 采用二进制数, 选到小于 n的 2的最大
次幂 ), 设 mi表示消息分组, ci表示加密后的
密文, 它与 mi具有相同的长度 。
加密过程,ci=mie(mod n)
解密过程,mi=cid(mod n)
2.1.7 密钥与密码破译方法
1,密钥的穷尽搜索
破译密文最简单的方法,就是尝试所有可能的钥匙组合
。
2,密码分析
在不知道钥匙的情况下,利用数学方法破译密文或找到
秘密钥匙的方法,称为密码分析。密码分析有两个基本
目标:利用密文发现明文,利用密文发现钥匙。
3,其它密码破译方法
2.2 数据完整性机制
密码学除了为数据提供保密方法以外, 还可以用于
其他的作用,
鉴别 ( authentication),消息的接收者可以确定
消息的来源, 攻击者不可能伪装成他人 。
抗抵赖 ( nonrepudiation),发送者事后不能否认
自己已发送的消息 。
完整性( integrity),消息的接收者能够验证消息
在传送过程中是否被修改;攻击者不可能用假消息
来代替合法的消息。
2.2.1 数据完整性验证
消息的发送者用要发送的消息和一定的算法生成一个附件,并
将附件与消息一起发送出去;消息的接收者收到消息和附件后,
用同样的算法与接收到的消息生成一个新的附件;把新的附件
与接收到的附件相比较,如果相同,则说明收到的消息是正确
的,否则说明消息在传送中出现了错误。
消 息
消 息 附 件
H
消 息 附 件
H
c o m p a r e
+
2.2.2 单向散列函数
单向散列函数 ( one-way hash function), 也叫压
缩函数, 收缩函数, 它是现代密码学的中心, 是许多
协议的另一个结构模块 。 散列函数长期以来一直在计
算机科学中使用, 散列函数是把可变长度的输入串
( 叫做预映射, pre-image) 转换成固定长度的输出
串 ( 叫做散列值 ) 的一种函数 。
利用单向散列函数生成消息的指纹可以分成两种情况 。 一
种是不带密钥的单向散列函数, 这种情况下, 任何人都能验
证消息的散列值; 另一种是带密钥的散列函数, 散列值是预
映射和密钥的函数, 这样只有拥有密钥的人才能验证散列值
。 单向散列函数的算法实现有很多种, 如 Snefru算法, N-Hash
算法, MD2算法, MD4算法, MD5算法, SHA-1算法等等 。
MD5算法描述
MD5以 512bit的分组来处理输入文本,每一分组又划
分为 16个 32bit的子分组。算法的输出由 4个 32bit分组
组成,将它们级联形成一个 128bit的散列值。首先填
充消息使用其长度恰好为一个比 512的倍数仅小 64bit
的数。填充方法是在消息后面附一个 1,然后填充上所
需要的位数的 0,然后在最后的 64位上附上填充前消息
的长度值。这样填充后,可使消息的长度恰好为 512的
整数倍,且保证不同消息在填充后不相同。
2.2.3 消息摘要算法 MD5
2.3 数字签名机制
数字签名机制需要实现以下几个目的,
l 可信,消息的接收者通过签名可以确
信消息确实来自于声明的发送者 。
l 不可伪造,签名应是独一无二的, 其
它人无法假冒和伪造 。
l 不可重用,签名是消息的一部分, 不
能被挪用到其它的文件上 。
l 不可抵赖,签名者事后不能否认自己
签过的文件 。
2.3.1 数字签名的基本原理
数字签名实际上是附加在数据单元上的一些数据或是
对数据单元所作的 密码变换, 这种数据或变换能使数
据单元的接收者确认数据单元的 来源和数据的完整性
,并保护数据, 防止被人 ( 如接收者 ) 伪造 。
签名机制的本质特征是该签名只有通过签名者的私有
信息才能产生, 也就是说, 一个签名者的 签名只能唯
一地由他自己产生 。 当收发双方发生争议时, 第三方
( 仲裁机构 ) 就能够根据消息上的数字签名来裁定这
条消息是否确实由发送方发出, 从而实现抗抵赖服务
。 另外, 数字签名应是所发送数据的函数, 即 签名与
消息相关, 从而防止数字签名的伪造和重用 。
2.3.2 数字签名的实现方法
1、使用对称加密和仲裁者实现数字签名
M
C
E
E
D
M S
C' D
M S
K
AC
K
BC
K
BC
K
AC
A方 仲裁第三方
B方
2,使用公开密钥体制进行数字签名
公开密钥体制的发明, 使数字签名变得更
简单, 它不再需要第三方去签名和验证 。 签
名的实现过程如下,
l A用他的私人密钥加密消息, 从而对文
件签名;
l A将签名的消息发送给 B;
l B用 A的公开密钥解消息, 从而验证签
名;
3,使用公开密钥体制与单向散列
函数进行数字签名 M
H E
| | M H
D
c o m p a r e
S
签名过程 签名的认证
4,加入时间标记的签名
5、多重签名
6、盲签名
2.4 复合型加密系统 PGP
2.4.1 PGP简介
2.4.2 PGP应用系统介绍
本章学习目标
通过本章学习, 读者应该掌握以下内容,
对称加密机制及典型算法
非对称加密机制及算法
数字签名的原理
数据完整性验证的原理及典型算法
PGP的使用
2.1 加密机制
2.1.1 密码学基础知识
一个密码体制被定义为一对 数据变换,其中一个变
换应用于我们称之为 明文 的数据项,变换后产生的
相应数据项称为 密文 ;而另一个变换应用于密文,
变换后的结果为明文。这两个变换分别称为 加密变
换( Encryption)和解密变换( Decryption) 。加密
变换将明文和一个称为 加密密钥 的独立数据值作为
输入,输出密文;解密变换将密文和一个称为 解密
密钥 的数据值作为输入
加 密 解 密
K
E
C C
K
D
MM
加密和解密
加密 解密
M:明文 C:密文 KE:加密密钥 KD:解密密钥
2.1.2 对称加密算法
加密,Ek(M)=C
解密,Dk(C)=M
序列密码算法( stream cipher)
分组密码算法 (block cipher)
加密过程主要是重复使用混乱和扩散两种技术,混乱(
confusion)是改变信息块使输出位和输入位无明显的统计关
系。扩散( diffusion)是将明文位和密钥的效应传播到密文的
其它位。
对称密码算法有很多种, DES,triple DES,IDEA,RC2、
RC4,RC5,RC6,GOST,FEAL,LOKI
2.1.3 DES算法
首先把明文分成若干个 64-bit的分组,算法以一个分组
作为输入,通过一个 初始置换( IP) 将明文分组分成
左半部分( L0)和右半部分( R0),各为 32-bit。然后
进行 16轮完全相同的运算,这些运算我们称为 函数 f,
在运算过程中数据与密钥相结合。经过 16轮运算后,
左、右两部分合在一起经过一个 末转换(初始转换的
逆置换 IP-1),输出一个 64-bit的密文分组。
1,算法描述
密钥位移位,从密钥的 56位中选出 48位 。①
通过一个 扩展置换 将数据的左半部分扩展成
48位,②并通过一个 异或操作 与 48位密钥结
合,③通过 8个 S盒 ( substitution box)将这
48位替代成新的 32位,④再依照 P-盒置换 一
次。以上四步构成 复杂函数 f(图中虚线框里
的部分)。 然后通过另一个异或运算,将复
杂函数 f的输出与左半部分结合成为新的右半
部分 。
每一轮的运算过程,
密钥通常表示为 64-bit,但每个第 8位用作奇偶校验,实
际的密钥长度为 56-bit。在 DES的每一轮运算中,从 56-
bit密钥产生出不同的 48-bit的子密钥( K1,K2……K 16)。
首先,56-bit密钥分成两部分(以 C,D分别表示这两部
分),每部分 28位,然后每部分分别循环左移 1位或 2
位(从第 1轮到第 16轮,相应左移位数分别为,1,1、
2,2,2,2,2,2,1,2,2,2,2,2,2,1)。再
将生成的 56-bit组经过一个压缩转换( compression
permutation),舍掉其中的某 8个位并按一定方式改变
位的位置,生成一个 48-bit的子密钥 Ki。
每一轮中的子密钥的生成
48-bit组被分成 8个 6-bit组, 每一个 6-bit组作为一个 S盒
的输入, 输出为一个 4-bit组 。 每个 S-盒是一个 4行 16列
的表, 表中的每一项都是一个 4-bit的数 。 S盒的 6-bit的
输入确定其输出为表中的哪一个项, 其方式是,6-bit数
的首, 末两位数决定输出项所在的行;中间的四位决定
输出项所在的列 。 例如:第 6个 S盒如表 2-1所示, 假设
第 6个 S-盒的输入为 110101,则输出为第 3行第 10列的
项 ( 行或列的记数从 0开始 ), 即输出为 4-bit组 0001。
S-盒置换
三重 DES
如上所言, DES一个致命的缺陷就是密钥长度
短, 并且对于当前的计算能力, 56位的密钥长度
已经抗不住穷举攻击, 而 DES又不支持变长密钥
。 但算法可以一次使用多个密钥, 从而等同于更
长的密钥 。 三重 DES算法表示为,
C=EK3( DK2( EK1( M)))
通常取 K3=K1,则上式变为,
C=EK1( DK2( EK1( M)))
2.1.4 RC5算法
RC5是 Ron Revist发明的 。 RSA实验室对 64bit分组的
RC5算法进行了很长时间的分析, 结果表明对 5轮的
RC5,差分攻击需要 264个明文;对 10轮需要 245个明文;对 15轮需要 268个明文, 而这里最多只可能有 264个
明文, 所以对 15轮以上的 RC5的攻击是失败的 。
Rivest推荐至少使用 12轮 。
RC5是具有参数变量的分组密码算法, 其中可变的
参量为:分组的大小, 密钥的大小和加密的轮次 。 该
算法主要使用了三种运算:异或, 加, 循环 。
RC5的分组长度是可变的, 下面我们将采用
64bit的分组来描述算法 。 加密需要使用 2r+2
( 其中 r表示加密的轮次 ) 个与密钥相关的
32bit字, 分别表示为 S0,S1,S2…… S2r+1。 创
建这个与密钥相关的数组的运算如下:首先将
密钥的字节拷贝到 32bit字的数组 L,如果需要,
最后一个字可以用零填充 。 然后利用线性同余
发生器初始化数组 S,
S0=P
Si=(Si-1+Q) mod 232
( 其中 i=1 to 2(r+1)-1,
P=0xb7e15163,Q=0x9e3779b9)
最后将 L与 S混合,
初始化,
i=j=0
A=B=0
然后做 3n次循环,(其中 c为密钥所占 32bit
字数目, 亦即数组 L的长度, n为 2(r+1)和 c
中的最大值 )。
A=Si=(Si+A+B)<<<3
B=Lj=(Lj+A+B)<<<(A+B)
i=(i+1) mod 2(r+1)
j=(j+1) mod c
加密过程,
首先将明文分组 ( 64bit) 分成两个 32位
字 A和 B( 假设字节进入字的顺序为第一
个字节进行寄存器的低位置 ), 然后进行
如下的运算,
A=A+S0
B=B+S1
for(i=1;i<=r;i++)
{ A=((A⊕ B)<<<B)+S2i;
B=((B⊕ A)<<<A)+S2i+1;
}
输出的 A,B为密文
解密时, 把密文分成 A和 B,然
后进行如下运算,
for(i=r;r>=1;r--)
{
B=((B-S2i+1)>>>A) ⊕ A;
A=((A-S2i)>>>B) ⊕ B;
}
B=B-S1
A=A-S0
此时输出的 A,B为解密后得到
的明文 。
2.1.5 非对称加密体制
公开密钥体制把信息的加密密钥和解密密钥分离,通
信的每一方都拥有这样的一对密钥。其中加密密钥可
以像电话号码一样对外公开,由发送方用来加密要发
送的原始数据;解密密钥则由接收方秘密保存,作为
解密时的私用密钥。公开密钥加密算法的核心是一种
特殊的数学函数 ―― 单向陷门函数( trap-door one
way function)。即该函数从一个方向求值是容易的,
但其逆变换却是极其困难的,因此利用公开的加密密
钥只能作正向变换,而逆变换只有依赖于私用的解密
密钥这一, 陷门, 才能实现 。
公开密钥体制最大的优点就是不需要对密钥通信进
行保密, 所需传输的只有公开密钥 。 这种密钥体制还
可以用于数字签名, 即信息的接收者能够验证发送者
的身份, 而发送者在发送已签名的信息后不能否认 。
公开密钥体制的缺陷在于其加密和解密的运算时间比
较长, 这在一定程度上限制了它的应用范围 。 公开密
钥体制在理论上被认为是一种比较理想的的计算密码
的方法, 但现在真正实用的公开密钥算法还不是很多,
目前公认比较安全的要算 RSA算法及其变种 Rabin算
法 。 算法表示为,
Ek1(M)=C
Dk2(C)=M
Dk2(Ek1(M))=M (其中 k1和 k2为一对密钥中的私有密
钥和公开密钥 )
2.1.6 RSA算法
RSA算法的思路如下:为了产生两个密钥, 先取两
个大素数, p和 q。 为了获得最大程度的安全性, 两
数的长度一样 。 计算乘积 n=p*q,然后随机选取加
密密钥 e,使 e和 (p-1)*(q-1)互素 。 最后用欧几里得
( Euclidean) 扩展算法计算解密密钥 d,d满足 ed≡1
mod (p-1)(q-1),即 d≡e-1 mod (p-1)(q-1)。 则 e和 n为
公开密钥, d是私人密钥 。 两个大数 p和 q
应该立即丢弃,不让任何人知道。一般选择公开密
钥 e比私人密钥 d小。最常选用的 e值有三个 3,17,
65537。
加密消息时, 首先将消息分成比 n小的数据
分组 ( 采用二进制数, 选到小于 n的 2的最大
次幂 ), 设 mi表示消息分组, ci表示加密后的
密文, 它与 mi具有相同的长度 。
加密过程,ci=mie(mod n)
解密过程,mi=cid(mod n)
2.1.7 密钥与密码破译方法
1,密钥的穷尽搜索
破译密文最简单的方法,就是尝试所有可能的钥匙组合
。
2,密码分析
在不知道钥匙的情况下,利用数学方法破译密文或找到
秘密钥匙的方法,称为密码分析。密码分析有两个基本
目标:利用密文发现明文,利用密文发现钥匙。
3,其它密码破译方法
2.2 数据完整性机制
密码学除了为数据提供保密方法以外, 还可以用于
其他的作用,
鉴别 ( authentication),消息的接收者可以确定
消息的来源, 攻击者不可能伪装成他人 。
抗抵赖 ( nonrepudiation),发送者事后不能否认
自己已发送的消息 。
完整性( integrity),消息的接收者能够验证消息
在传送过程中是否被修改;攻击者不可能用假消息
来代替合法的消息。
2.2.1 数据完整性验证
消息的发送者用要发送的消息和一定的算法生成一个附件,并
将附件与消息一起发送出去;消息的接收者收到消息和附件后,
用同样的算法与接收到的消息生成一个新的附件;把新的附件
与接收到的附件相比较,如果相同,则说明收到的消息是正确
的,否则说明消息在传送中出现了错误。
消 息
消 息 附 件
H
消 息 附 件
H
c o m p a r e
+
2.2.2 单向散列函数
单向散列函数 ( one-way hash function), 也叫压
缩函数, 收缩函数, 它是现代密码学的中心, 是许多
协议的另一个结构模块 。 散列函数长期以来一直在计
算机科学中使用, 散列函数是把可变长度的输入串
( 叫做预映射, pre-image) 转换成固定长度的输出
串 ( 叫做散列值 ) 的一种函数 。
利用单向散列函数生成消息的指纹可以分成两种情况 。 一
种是不带密钥的单向散列函数, 这种情况下, 任何人都能验
证消息的散列值; 另一种是带密钥的散列函数, 散列值是预
映射和密钥的函数, 这样只有拥有密钥的人才能验证散列值
。 单向散列函数的算法实现有很多种, 如 Snefru算法, N-Hash
算法, MD2算法, MD4算法, MD5算法, SHA-1算法等等 。
MD5算法描述
MD5以 512bit的分组来处理输入文本,每一分组又划
分为 16个 32bit的子分组。算法的输出由 4个 32bit分组
组成,将它们级联形成一个 128bit的散列值。首先填
充消息使用其长度恰好为一个比 512的倍数仅小 64bit
的数。填充方法是在消息后面附一个 1,然后填充上所
需要的位数的 0,然后在最后的 64位上附上填充前消息
的长度值。这样填充后,可使消息的长度恰好为 512的
整数倍,且保证不同消息在填充后不相同。
2.2.3 消息摘要算法 MD5
2.3 数字签名机制
数字签名机制需要实现以下几个目的,
l 可信,消息的接收者通过签名可以确
信消息确实来自于声明的发送者 。
l 不可伪造,签名应是独一无二的, 其
它人无法假冒和伪造 。
l 不可重用,签名是消息的一部分, 不
能被挪用到其它的文件上 。
l 不可抵赖,签名者事后不能否认自己
签过的文件 。
2.3.1 数字签名的基本原理
数字签名实际上是附加在数据单元上的一些数据或是
对数据单元所作的 密码变换, 这种数据或变换能使数
据单元的接收者确认数据单元的 来源和数据的完整性
,并保护数据, 防止被人 ( 如接收者 ) 伪造 。
签名机制的本质特征是该签名只有通过签名者的私有
信息才能产生, 也就是说, 一个签名者的 签名只能唯
一地由他自己产生 。 当收发双方发生争议时, 第三方
( 仲裁机构 ) 就能够根据消息上的数字签名来裁定这
条消息是否确实由发送方发出, 从而实现抗抵赖服务
。 另外, 数字签名应是所发送数据的函数, 即 签名与
消息相关, 从而防止数字签名的伪造和重用 。
2.3.2 数字签名的实现方法
1、使用对称加密和仲裁者实现数字签名
M
C
E
E
D
M S
C' D
M S
K
AC
K
BC
K
BC
K
AC
A方 仲裁第三方
B方
2,使用公开密钥体制进行数字签名
公开密钥体制的发明, 使数字签名变得更
简单, 它不再需要第三方去签名和验证 。 签
名的实现过程如下,
l A用他的私人密钥加密消息, 从而对文
件签名;
l A将签名的消息发送给 B;
l B用 A的公开密钥解消息, 从而验证签
名;
3,使用公开密钥体制与单向散列
函数进行数字签名 M
H E
| | M H
D
c o m p a r e
S
签名过程 签名的认证
4,加入时间标记的签名
5、多重签名
6、盲签名
2.4 复合型加密系统 PGP
2.4.1 PGP简介
2.4.2 PGP应用系统介绍