第 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应用系统介绍