××××××××××××××××××××××××××××××××××××××××××××××
本文只是一个简单的入门介绍,写的比较简洁, 希望大家见谅!
本文需要读者有一定的数学能力
作者: 东 方
==================
www.hackbase.com
[C.G.I]
[E.S.T]
==================
转贴请注明出处,谢谢合作!
××××××××××××××××××××××××××××××××××××××××××××××
一、公钥体制的提出
在一般参考文献中,都认为公钥密码体制是迪菲和赫尔曼发明的,可鲜为人知的是,默克勒甚至在他俩之前的1975年就提出了类似的思想,尽管其文章是于1978年发表的间,但投稿比较早。因此,公钥密码体制的创始人应该是DHM三人,这种观点目前已得到了国际上的认同,尤其得到了赫尔曼教授本人的认定。当然,英国军用情报中心也曾宣称他们早在1970年就发明了公钥密码体制,但经仔细分析其资料并与中心有关人员讨论后发现,他们只是提及了公钥密码体制的某种特殊形式。更为重要的是,DHM的公钥密码体制还包含数字签名,而情报中心的资料则是只字未提。注意,美国国家安全局也有过类似的宣称,不过这都是不可信的(至少不可全信)。如要详细了解公钥密码体制的发展史,读者可参考笔者的一本由赫尔曼教授作序的英文专著。
(注:此段摘自 颜松远 《数论密码》一文)
二、公钥体制的意义
1、使用了数学函数工具,而以前用的是置换的方法。简单的就是a~z于F~E的映射加密。
2、产生了两个密钥、寓加密于密钥中
结决了两个问题:密钥分配和数字签字
三、原理
公钥加密体制一共有两个密钥,一个是公钥PK(Public Key),一个是钥SK(Secret Key).
公钥是公开的,你可以在对方的web上下载或直接询问获得,而私钥是保密的。且公钥和私钥是成对的,
一个用来加密,一个用来解密。就像一把钥匙对一把锁一样。
有个基本要求就是:在已知加密解密算法和公钥的情况下要想得出私钥是非常困难的,并且是几乎不可实现的,这得益于一些难解的数学难题。
不明白上面介绍的不要紧,下面我举例说明。
假设:发方A 收方B 窃取者hack
通信即截获破译过程:
1、B 产生一对密钥PKb和SKb
2、A 的明文消息是m ,A 用 B产生的公钥PK加密自己的明文m 得到 c,即 c=E(m,PKb)
3、B 受到加密的密文c ,B 用自己的私钥SKb解密,即m=D(c,SKb)
4、在A把密文传给B的时候,hack通过某种手段得到密文(例如通过嗅探数据)并且也知道公钥PKb。
hack现在的任务就是通过PKb和方程c=E(m,PKb)解出SKb,进而通过解密算法D(c,SKb)获得明文m.
前3步大家估计能看明白,我们关心的是hack的办法
这里再声明一下,世界上通用的加密解密算法都是公开的,他的加密性在与他的密钥。所以hack很容易从Internet得到这些.现在的关键是已知PK 和 加密解密算法得出私钥SK的容易性。这里我只所以用容易性而不用可行性,是因为理论上所有的密码都是可破译的。
这里在介绍个东西:单向函数和单向陷门函数。
单向函数: f:X->Y ,要求的y=f(x) 容易
而 已知 y=f(x),求x 不容易
单向陷门函数:是单向函数的一种 -_-! (这不是废话么?!)
如果有个参数(陷门),使得求解很容易
即 已知 y=f(x,.) ,和陷门k ,使得从y=f(x,k)中求x容易
那么“容易”用什么来衡量呢?如果算法的输入有n长,完成算法用n的a次方时间,则为容易
如用了2的n次方,则为不容易。
也许有人问不是还解决了个数字签名的问题么?
下面我来说说认证的过程
1、A 产生一对密钥 PKa 和 SKa
2、A 用自己的私钥加密m ,c=E(m,SKa)
3、B 得到后用A的公钥解密m=?=D(c,PKa) ,判断是否为m,是则认证成功
上面体现出来的问题是每个人都可以获得A的密文并解密,为了防止这种现象,可以再外面加一层加密体制,这样就实现了加密认证。具体我就不再细说。
四、RSA算法介绍
RSA算法是1978年由Rivest 、Shamir 和 Adleman三人提出的
1、密钥产生
a、选择两个大素数 p和 q
b、计算n=pq , T(n)=(p-1)(q-1)
c、选择一个整数e,满足1<e<T(n)
gcd[e,T(n)]=1 即互素
d、求d ,满足d*e=1 mod T(n)
e、{e,n}=PK, {d,n}=SK
2、加密
现对加密明文分组,使得每组对应的十进制数小于n,可以使每段长度小于log(n).设m为一个消息 分组。c等于m的e次方(mod n)
3、解密
m等于c的d次方(mod n)
4、证明过程我就不写了
由于我不会插入数学公式,所以上面好多用文字描述。