在一般的正式文献中,公私钥体系的解说都会涉及到大量的数学符号和公式推导。很多人看到这儿都会打退堂鼓。其最终的结果就是,很多同学,包括很多安全行业的专业人士都只知道公私钥这样一个概念,至于其具体工作流程是怎么样的,心里其实没有底。说实话,笔者在这一块上也走过弯路,看了N多的number theory的东西,最终才有所感悟。当然,本文也会涉及一些数学的东西,但这些东西是初中数学里面的内容,不会很复杂。
一、基本概念
基和幂:
以a为底,x为幂的指数可表示为a^x。它的意思就是x个a连乘。
譬如
2^3 = 8, 它表示3个2连乘 2 X 2 X 2 = 8
4^2 = 14, 它表示2个4连乘 4 X 4 = 16
在这儿,a, 2, 4称为基, x, 3, 2称为幂。这是本文的第一个概念。
模/取余运算:
本文的第二个概念就是模运算或者取余运算。一般正式文献中,都用模运算(module operation)这个叫法。模运算就是一个数被另一个数整除之后剩余的部分。我们用%表示模运算。譬如:
3 % 2 = 1, 它表示3被2整除以后余1,因为 3 = 2 X 1 + 1
5 % 2 = 1, 它表示5被2整除以后余1, 因为 5 = 2 X 2 + 1
8 % 3 = 2, 它表示8被3整除以后余2,因为 8 = 3 * 2 + 2
我们称 m % k = r中的k称为模数,r称为余数。
以上就是看懂本文所需要的数学知识。
二、迷你公钥流程
现在A和B双方要通信,但又不想让C知道。假设A,B,C三人都处于同一个房间里,房间里有四个小隔间,A,B,C都有自己的私人小隔间;除此之外,还有一个公共的小隔间。A,B,C都不能进入别人的私人小隔间,但是他们都能访问公共小隔间。现在假设A选择了私钥9, B选择了私钥17。这两个私钥都是保密的,A,B不知道对方的私钥,C也不知道A,B的私钥。然后,A和B选定一个公钥,譬如说是11。这个公钥放在公共小隔间里,A,B,C都能看到。这个场景就是Internet的一个缩影。那么,A和B如何通信呢?
第一步:A以2为基,私钥9为幂,公钥11为模数,计算出一个结果
A1 = (2**9)%11 = 6
B以2是基,私钥17为幂,公钥11为模数,计算出一个结果
B1 = (2**17)%11 = 7
下图是Python的计算结果
A,B双方将计算结果放在公共隔间里面
A1 = 6
B1 = 7
第二步:现在A拿到了B的计算结果B1,B也拿到了A的计算结果A1
A以B1为基,私钥9为幂,公钥11为模数,再计算出一个结果
B以A1为基,私钥17为幂,公钥11为模数,再计算出一个结果
这两个结果应该相等(快划重点)
A2 = B1^9%11 = (7**9)%11 = 8
B2 = A1^17%11 = 6**^17%11 = 8
这个相等的值就可以作为某个对称加密算法的密钥;这样也就实现了密钥的交换过程。当然,在实际的算法中,公钥,私钥的选择,相关计算会很复杂,计算的结果也不会这么小。但基本原理差不多。公钥也建议选择质数。上面这个算法,读者可以选择任意质数进行检验。当然,A和B双方选的私钥不能一样,因为在实际通信过程中,这个数一般会很大,而且有随机性。所以,可以避免双方的私钥一样。为什么这样的一个计算流程会得到一样的结果呢?这背后是一些数论上的东西,有兴趣可以去弄一本Number Theory看看。在上述过程中,旁观者C能一直看到公钥和第一次计算结果,但因为没有私钥,就是把这个计算过程告诉C,C也没有办法计算出结果来。这就从机制上保证了安全性。
声 明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。