密
钥
密
码
系
统
介
绍
这
篇文章向大家
阐
述了
Netscape
公司是如何使用
RSA
的公用密
钥
密
码
系
统
来
实现
因特网安全的。
Netscape
的安全套接
层
的
实现
就利用了
这
篇文章中所
讨论
的技
术
。
RSA
的公用密
钥
密
码
系
统
广泛地
应
用于
计
算机工
业
的
认证
和加密方面。
Netscape
得到
RSA
数据安全公司的
许
可可以使用公用密
钥
密
码
系
统
以及其它
产
品,尤其是
认证
方面的
产
品。
公用密
钥
加密技
术
使用不
对
称的密
钥
来加密和解密,
每对
密
钥
包含一个公
钥
和一个私
钥
,公
钥
是公
开
,而且广泛分布的,而私
钥
从来不公
开
,只
有自己知道。
用公
钥
加密的数据只有私
钥
才能解密,相反的,用私
钥
加密的数据只有公
钥
才能解密,正是
这种
不
对
称性才使得公用密
钥
密
码
系
统
那
么
有用。
使用公用密
钥
密
码
系
统进
行
认证
认证
是一个
验证
身份的
过
程,目的是使一个
实
体能
够
确信
对
方是他所声称的
实
体。下面的例子包括
Alice
和
Bob
,并且向我
们
演示了如何使用公用密
钥
密
码
系
统
来
轻
易的
验证
身份。下面的
key
表示
something
已
经
用密
钥
key
加密或解密。
假
设
Alice
要
认证
Bob
,
Bob
有一个密
钥对
,即一个公
钥
和一个私
钥
,
Bob
透露
给
Alice
他的公
钥
(至于他是怎
么
做的将在以后
讨论
)。然后
Alice
产
生一段随机的消息,然后把它
发给
Bob
。
A-->B random--message
Bob
用自己的私
钥
来加密
这
段消息,然后把加密后的消息返回
给
Alice
。
B-->A bobs--private--key
Alice
接到了
这
段消息,然后用
Bob
以前
发过
来的公
钥
来解密。
她把解密后的消息和原始的消息做比
较
,如果匹配的
话
,她就知道自己正在和
Bob
通信。一个入侵者
应该
不知道
Bob
的私
钥
,因此就不能正确的加密那段
Alice
要
检查
的随机消息。
但是,等一下,
还
有
......
除非你确切的知道你在加密什
么
,否
则
用你的私
钥
加密一些
东
西,然后
发给别
人永
远
不是一件好事。
这
是因
为
加密后的数据可能会背叛你(
记
住,只有你能加密,因
为
只有你才有密
钥
)。
所以,我
们
不加密
Alice
发
送的原始消息,取而代之的是,由
Bob
构造一个消息摘要,然后加密它。消息摘要是从随机消息中以某
种
方式提取出来的,并且具有以下特点:
摘要很
难
逆
转
,任何假冒
Bob
的人不能从摘要得到原始消息
假冒者无法找到具有相同摘要的不同消息
通
过
使用摘要,
Bob
能
够
保
护
自己。他首先
计
算出
Alice
发给
他的随机消息的摘要并加密,然后把加密后的摘要返回
给
Alice
,
Alice
可以
计
算出相同的摘要,通
过
解密
Bob
的消息然后
对
比一下就可以
认证
Bob
的身份。
近一点
......
刚
才描述的技
术
称
为
数字
签
名。
Bob
为
Alice
产
生的消息
签
名,
这样
做其
实
和加密
Alice
产
生的随机消息一
样
危
险
。因此我
们
的
认证协议
需要一次以上的
变
形。部分(或者全部)的数据需要由
Bob
产
生。
A-->B hello,are you bob?
B-->A Alice,This Is bob{digest[Alice,This Is Bob]}bobs-private-key
当
Bob
使用
这
个
协议
的
时
候,他知道自己
发给
Alice
的是什
么
消息,并且不介意
签
名。他首先
发
送没有加密的消息
“Alice,This Is Bob
。
”
然后
发
送加密的摘要。
Alice
能
够轻
易的判断
Bob
是
Bob
,并且
Bob
没有
签
任何他不愿意
签
的
东
西。
分
发
公
钥
Bob
如何以一
种
可信
赖
的方式分
发
他的公
钥
呢?我
们
假
设认证协议
是
这
个
样
子的:
A-->B hello
B-->A Hi, I’m Bob, bobs-public-key
A-->B prove it
B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
如果使用
这
个
协议
的
话
,任何人都可以是
Bob
。
你需要的只是一个公
钥
和私
钥
,你跟
Alice
慌称你是
Bob
,接着你用自己的公
钥
代替
Bob
的公
钥
,然后你通
过
用你的私
钥
加密的
东
西来
证
明,
这样
Alice
就不能分辨出你不是
Bob
。
为
了解决
这
个
问题
,
标
准化
组织发
明了一个叫做
证书
的
东
西,一个
证书
包括下面的一些内容:
证书发
行者的名字
证书发
送
给
的
团
体
主
题
的公
钥
一些
时间
戳
证书
是由
证书发
行者的私
钥签
名的,
每
个人都知道
证书发
行者的公
钥
(即
证书发
行者有一个
证书
,等等)。
证书
是一
种
把公
钥绑
定到名字的
标
准方式。
通
过
使用
证书这种
技
术
,
每
个人都可以通
过检查
Bob
的
证书
来判断
Bob
是不是
伪
造的。假
设
Bob
严
格的控制着他的私
钥
,并且的确是
Bob
得到了他的
证书
,那
么
一切都好。下面是
补偿协议
:
A-->B hello
B-->A Hi, I’m Bob, bobs-certificate
A-->B prove it
B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
当
Alice
收到
Bob
的第一条消息,她可以
检查证书
,核
实签
名(如上,使用摘要和公
钥
加密),然后,核
实
主
题
(
Bob
的名字)来判断那是不是真的
Bob
。
这样
她就相信公
钥
是
Bob
的公
钥
,然后要求
Bob
证
明他的身份。
Bob
则
重新
进
行一次上面的相同
过
程,
计
算消息的摘要,
签
名之后
发给
Alice
,
Alice
可以用从
证书
得到的公
钥检查
Bob
的消息摘要,从而判断
Bob
的身份。
一个坏家伙
-
我
们
不妨叫他
Mallet -
可以做下面的事情:
A-->M hello
M-->A Hi, I’m Bob, bobs-certificate
A-->M prove it
M-->A ????
但是
Mallet
在最后的消息中不能
满
足
Alice
。
Mallet
没有
Bob
的私
钥
,所以他无法构造一条使
Alice
相信来自
Bob
的消息。
交
换
秘密
一旦
Alice
认证
了
Bob
,她就可以做另外一件事
-
她能
发给
一条只有
Bob
才能解
码
的消息:
A-->B bobs-public-key
发现这
个秘密的唯一方法就是用
Bob
的私
钥
来解密上面的消息,交
换
秘密是公用密
钥
密
码
系
统
的另一
种强
大的用法。即使
Alice
和
Bob
之
间
的通信被
监视
,除了
Bob
,也没有人能
够
得到秘密。
这项
技
术
加
强
了因特网的安全性,它把
这
个密
码
当作另一个密
钥
,但是
这时
它是
对
称性密
码
系
统
算法的密
钥
(如
DES
,
RC4
,
IDEA
)。
Alice
知道
这
个秘密,因
为这
是自己在
发
送
给
Bob
之前
产
生的。
Bob
知道
这
个秘密,因
为
Bob
有私
钥
,能
够
解密
Alice
的消息。因
为
他
们
都知道
这
个秘密,所以他
们
就可以初始化一个
对
称的密
码
算法然后
开
始
传输
用它加密的消息。下面是
订
正的
协议
:
A-->B hello
B-->A Hi, I’m Bob, bobs-certificate
A-->B prove it
B-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
A-->B ok bob, here is a secret bobs-public-key
B-->A {some message}secret-key
secret-key
的
计
算取决于
协议
的定
义
,但是它可以
简
化成一个
secret
的副本。
你
说
什
么
?
Mallet
的袋子里有很多
诡计
。
虽
然
Mallet
不能
发现
Alice
和
Bob
交
换
的秘密,但是他可以干
预
并且破坏他
们
的
对话
。
举
例来
说
,如果
Mallet
位于
Alice
和
Bob
,他可以
选择让
大多数的消息返回以及向前
继续传输
没有改
变
,但是破坏了特定位的消息(
这对
他来
说
很容易,因
为
他知道
Alice
和
Bob
之
间
通信的
协议
)。
A-->M hello
M-->B hello
B-->M Hi, I’m Bob, bobs-certificate
M-->A Hi, I’m Bob, bobs-certificate
A-->M prove it
M-->B prove it
B-->M Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
M-->A Alice, This Is bob{ digest[Alice, This Is Bob] } bobs-private-key
A-->M ok bob, here is a secret bobs-public-key
M-->B ok bob, here is a secret bobs-public-key
B-->M {some message}secret-key
M-->A Garble[ {some message}secret-key ]
Mallet
一直
让
数据没有改
变
的通
过
,直到
Alice
和
Bob
分享一个秘密。
然后
Mallet
通
过
改
变
Bob
发
送
给
Alice
的消息来
进
入
这
个方式中。
这时
候
Alice
是相信
Bob
的,因此她就可能相信
这
个改
变
的消息,然后按照它来做。注意
Mallet
并不知道
这
个秘密
-
他能做的所有事就是破坏用
这
个秘密的密
钥
加密的数据。他可能不能利用
这
个
协议
制造出一条有效的消息,但是下一次,他可能幸运一点。
为
了防止
这种
破坏,
Alice
和
Bob
在他
们
的
协议
中引入了一
种
消息
认证码
(
MAC
)。
MAC
是根据秘密的密
钥
和
传输
的数据
计
算出来的,上面描述的摘要算法的属性正好可以用于构造抵抗
Mallet
的
MAC
功能。
MAC := Digest[ some message, secret ]
因
为
Mallet
不知道
这
个秘密的密
钥
,所以他无法
计
算出
这
个摘要的正确数
值
。即使
Mallet
随机的改
变
消息,如果摘要数据很大的
话
,他成功的可能性也很小。
举
例来
说
,通
过
使用
MD5
(
RSA
公司
发
明的一
种
很好的密
码
摘要算法),
Alice
和
Bob
能和他
们
的消息一起
发
送
128
位的
MAC
值
。
Mallet
猜中
这
个正确的
MAC
值
的几率是
18,446,744,073,709,551,616
分之
1-
也就是从来也不会猜出来。
下面是
样
本
协议
,又
订
正了一次:
A-->B hello
B-->A Hi, I’m Bob, bobs-certificate
A-->B prove it
B-->A {digest[Alice, This Is Bob] } bobs-private-key
ok bob, here is a secret bobs-public-key
{some message,MAC}secret-key
Mallet
现
在有麻
烦
了,
Mallet
可以改
变
任何的消息,但是
MAC
的
计
算将
揭
露他的欺
诈
行
为
。
Alice
和
Bob
能
发现伪
造的
MAC
值
并停止会
话
,
Mallet
就不能
伪
造
Bob
的消息了。
转载于:https://www.cnblogs.com/longb/archive/2006/04/24/383683.html