标题:
密码术走向公开
[打印本页]
作者:
黑色海岸线
时间:
2004-3-29 00:39
标题:
密码术走向公开
密码术走向公开
RSA 昂贵加密方案的专利失效 -- 开发者社区势必受益
Larry Loeb
2000 年 10 月
内容:
快速历史
RSA 算法
消息摘要散列
现在怎么办?
参考资料
关于作者
将公/私钥计算算法向公共领域发布为广大开发者提供了一个极好的机会。将增加的安全性特性放入可以使用它们的程序中只能使用户受益。
比计划提前两周,2000 年 9 月 20 日,业界领先的密码功能供应商 RSA Data Security 公司使它自己辛苦得来的公钥和私钥密码术专利失效了。公司宣布,从那个时侯开始,对于使用这些特定部分的 RSA 技术开发的产品不需要任何许可费用。
但有些人仍记得有关 Phil Zimmerman 的 PrettyGoodPrivacy 程序(使用和 RSA 加密方案类似的方案)完整法律冲突过程,这件事过去的时候,在主流新闻界中已经感到有些乏味了。他们可能没有意识到由于这种技术发布到非专有主流代码中而导致不可见屏障被打破。密码术最普遍数字实现的数学基础刚刚被解放。它不再只用于电子邮件。
但是,不要以为 RSA 的每样东西现在都可以让任何人免费使用。RSA 用 BSAFE 标签销售它的加密目标代码,而且这个产品仍然是由 RSA 特许的。即使一项基本专利实效,但 BSAFE 仍是属于 RSA 知识产权的一种特定代码实现。
快速历史
公钥密码术是由 Whitfield Diffie 和 Martin E. Hellman 在 1976 年首先标识的。这种方法的加密和解密涉及两种不同的密钥。该密码术的两种密钥称为 公钥和私钥。一个用户将他的公钥交给另一个用户,而保留私钥不为人知。用公钥加密的数据只能用相应的私钥解密。这种加密称为 非对称式,因为用于编码和译码的密钥是不同的。
Diffie-Hellman 加密可以保证大质数不可因子分解这个原则不受攻击。首先,一个用户可以公开给出一个密钥,然后当这个密钥用在解密时,可以验证消息是否是来自私钥的拥有者。这是一个重大进步,因为它比其它密码系统更易于使用,并且最早获得这种概念。
Ronald L. Rivest、Adi Shamir 和 Leonard M. Adleman(相应地为 R、S 和 A)在 1978 年 2 月号的 ACM 通信中发表了“获得数字签名和公钥加密系统的方法”一文。他们将 Diffie-Hellman 概念扩展到求幂模除,它是两个质数的乘积,而不是一个。通常认为破解 RSA 风格加密的困难与对某些整数进行因式分解的困难是等同的;那些整数是两个大小几乎相等的大质数的乘积。
公/私钥对可能要花费许多的计算能力来生成。不是不可能,但如果要为每条个别消息生成它们,总数就足以使消息传递的速度减慢了。它们也可以由某些已认可的机构(忽略整个“信任”问题,假设有一个已认可的机构是发送方和接收方都同意的)来生成,然后存储,供日后使用。有时它们以数据结构的形式存储(在 X.509 规范中称为证书)。这些证书可以存储在浏览器或其它通信程序中,以便加密的(因此是安全的)传输可以在非安全网络(例如因特网)上进行。或者就此而言,是公司内部网。
RSA 算法
RSA 算法可以分为几步。首先,选择两个大的(它们要足够大,在二进制记数法中占据 200,000 位)质数。将它们称作 p 和 q。可以使用几个算术测试来确定 p 和 q 是否是质数。
将质数相乘得出 n;即 (pq = n)。选择一个秘钥 s,以使 s 和 (p-1) 与 (q-1) 乘积的最大公约数为 1。公钥 k = 1/ s mod (p-1) (q-1)。 Euclid 的算法在求反时会很方便。
n 和 k 配对组成了公钥,而 n 和 s 配对组成了秘钥。
要进行加密,首先将消息转换成一个小于 n 的数,我们称它为 m。加密是以 m 长的块进行的,通过计算 m 的 k 次幂模除 n 来执行。要解密,计算表达式(m 的 k 次幂,模除 n)的 s 次幂模除 n。
如果强制通过将 m 与自己相乘 k 次来计算 m 的 k 次幂,就需要大量计算工作。有一个较简单的办法有助于数字计算:
从 m 和 k 开始。建立一个从 1 开始的计数器 j,然后从最低有效位开始对所有位进行计算。把一个应答变量 a 初始化为 1。重复随后的循环,直到 j 对 k 中的所有位都进行了计算。
k 中的位 j 等于 1 吗?如果相等,a = ( a x m) mod n。
将 m = m ^2 mod n。
增加 j 并转至循环顶部。
在增加结束时,a = m 的 k 次幂模除 n。
消息摘要和散列
在申请这种计算概念的专利,和使用它来开始销售具有这种功能并可以合并到计算机程序中去的目标代码时,Rivest、Shamir 和 Adleman 表现出真正的商业眼光。他们的公司,RSA Data Security 公司开发了其它密码产品,最著名的是用于进行消息摘要散列的 MD2 和 MD5 算法(在 RFC 1319 和 1321 中描述)。总的说来,散列函数是公开(因此接收方能够轻易获得)和单向的;就是说,假设有一个散列值,它不适合单独从散列结果中重新创建原始数据。
消息摘要散列是将变长消息转换到定长(大多数情况下,通常是 128 位)的结果。散列函数为每个不同消息给出不同的结果,因此对于消息散列也将产生唯一的值。大体上说, MD2 或 MD5 都可以是在计算机程序中直接(有时称作“流处理”)计算散列的代码引擎。如果一个程序使用私钥加密所产生的消息散列,结果就是 RSA 称为消息的数字签名。
数字签名是将某人的私钥通过加密与特定消息摘要散列绑定的结果,从而将人员(通过扩展名)与该特定消息绑定起来。使用 RSA 方法,要验证某人是否用他的私钥签署消息,使用假设发送方的公钥对编码的消息摘要(已和消息一起被发送)进行解码,以获得消息散列。如果该散列与接收方的散列相同,就对加密摘要所带的消息执行,接收方就能确定 (1) 发送方是使用他的私钥对摘要进行加密的,以及 (2) 消息在传输中没有更改。
重要的是要记住,数字签名的出现并不表明有关它所链接的消息的任何状态信息。签名将发送方与消息链接起来;它不认证消息本身。可以将消息保持纯文本形式,因此消息的任何接收方都可以认证它是否确实是由声称的发送方发送的。如果消息是以一些方式(例如,用秘钥)加密的,则只有处理该密钥的人才可以译码消息、对纯文本执行散列操作以获得摘要、将摘要与使用发送方公钥加密的摘要进行比较,这样就可以确定数字签名的有效性。
所有这些都是从使用公/私钥对生成方式开始的,现在任何人都可以将它用在商业领域中。
现在怎么办?
现在,有效的数字密码术可以免费使用了,我希望看到不可见地使用这种技术的结果 -- 使用内部加密来使任务更好完成的应用程序。即,程序使用的加密/解密信息应该变得普遍,即使用户没有意识到正在使用它。用户可以不需要知道这点;他们可以只满足于程序生成可接受的结果。如果没有经济上的抑制因素,RSA 算法不过就是几段有用的代码而已。
开发者在受他们自己设备支配的情况下,可以指出在项目中什么地方使用密码术可以增强性能(或者至少告诉营销人员能够介绍的功能)。很快就会出现公共领域开放源码加密库,有了它,代码中的实现也会很简单。
用户将从使用新安全保护的程序中受益。如果我不希望其他任何人查看电子表格,现在可以很方便地为电子表格程序生成一个密钥对,只用于这一个文档,用它来进行加密和解密。简单,并且看不到。
现在,对于可以掌握它的人来说有一个大好机会。
作者:
墓志铭
时间:
2004-4-1 11:03
标题:
密码术走向公开
作者:
wdzes2002
时间:
2004-4-2 15:49
标题:
密码术走向公开
你说的是真的吗?
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2