当前位置: 首页 > 科技观察

手上只有一把钥匙,怎么能打开世界的锁?揭秘神奇的非对称加密

时间:2023-03-17 19:17:16 科技观察

关于非对称加密,小微已经讲过很多次了,这次我们继续深入探讨一下。在现代,密码学已经成为一门重要的学科,无论是军事还是生活,密码学无处不在。自从密码学诞生以来,一个难题就一直困扰着人们。为使接收信息的一方获得原始信息,必须提前将解密方法告知对方。但这样一来,就有泄露解密方法的风险。一旦泄露,加密信息将在阳光下裸奔。有没有办法让对方不用提前告诉对方解密方法就可以轻松获取加密信息呢?假设A写了一封密信,打算寄给B,A所在的地区只有一个邮递员,A已经知道邮递员是间谍,会千方百计寻找机会窃取密信。于是A把这封密信锁在了一个无法用暴力破坏的铁盒子里。打开箱子的唯一方法是拿到钥匙,把密信锁在铁箱子里,然后让邮递员把箱子交给B。问题是B没有钥匙,打不开铁箱子.先寄铁盒,再寄钥匙?这是不行的,邮递员可以轻而易举拿到钥匙打开铁箱。先让B邮寄一把锁,然后用B的锁锁铁箱?它仍然不起作用。只要锁或钥匙经过邮递员的手,机密信件就不安全。很久以前,人们只能通过“线下”的方式来解决这个问题。两个人线下见面商量一个“密钥”,然后在通信时用这个密钥加密。但是这样还是存在泄密的风险,心怀不轨的人总能找到漏洞窃密。后来聪明人想了个办法:A先把上了锁的箱子邮寄给B,B虽然打不开,但是可以在箱子上加一把锁,然后再邮寄给A。A用自己的钥匙后为了打开锁,他把它邮寄给了B。最后,B用自己的钥匙打开了箱子,得到了密信。这个方法好像行得通,邮递员全程不能碰钥匙开箱。但是,这种方法有一个很大的问题——效率。以前只走一趟,现在要走三趟。要知道,信息的及时性非常重要。李云龙攻打平安县城时说:“你不要这样!你我都知道,一分钟之内可以决定胜负!”如果传递信息的时间增加两倍,后果不堪设想。直到1977年发明了一种设计巧妙的方法时,才找到一种安全有效的方法。这就是著名的“非对称加密”。“非对称加密算法需要两把密钥进行加密和解密,一把公钥只能用于加密,一把私钥只能用于解密,公钥和密钥结合形成”密钥对。“公钥是公开的,任何人都可以用公钥加密数据,只有持有私钥对应的公钥的人才能解密,这样就不需要传递“密钥”了。只要因为我用我的公钥加密数据,我可以打开世界上所有的锁,而且只有我能做到!根据上面的例子,非对称加密大致是这样的过程:A将大量的密钥分发给所有的人全世界,并宣布任何人想和自己交流只需要把信息放在一个铁盒子里,用这些钥匙(公钥)锁起来。(假设锁必须有钥匙才能锁上)如果B想与A取得联系,只需要将机密信件放入一个铁盒中,用A的公钥锁好,然后邮寄给A,A就可以用自己的私钥解锁,拿到信件.整个过程中,A和B都不需要对方的key,postman只能拿到public密钥,只能加密不能解密,保证了信件的安全。接下来,让我们体验一下非对称加密的艺术。这个算法是除以质数的个数。现在给你两个质数13和17,让你计算它们的乘积,我们可以很容易地计算出221。如果你告诉你这个数221,让你计算这两个质数的乘积是数,就比较难了。你得翻查素数表才知道原来的数是13和17,这只是两位数素数的乘积。如果是几十位、几百位甚至几千位的乘积呢?逆向推理变得非常困难。举个五位数的例子,9936899831的乘积是哪两个素数?虽然很难,但还是可以通过电脑查到这两个号码是99679和99689。但是如果有几千位,就很难了。以现在计算机的计算能力,暴力破解一个2048位的数字可能需要数百年,也算是牢不可破。为了计算和理解的方便,我们还是用13和17这两个素数。如果A要发送“15”给B,为了数据传输的安全,B必须先生成一对密钥,即公钥和私钥。先13*17=221。然后我们将13和17分别减去1再相乘,即12X16=192。接下来我们要随机选择一个小于192且与192互质的数。两个数互质,这意味着除1外,它们没有例外的公约数。我们把192分解成因数乘法的形式:192=2*22222*3选择一个不能被2和3整除的数,我们选择5。(221,5)是公钥。这个公钥可以被任何人知道,完全没有关系,每个人都可以用这个公钥加密数据发送给你。还记得我们之前计算的192和我们随机选择的5吗?我们需要找到一个数是5的倍数除以192,模数为1。这个数很容易找到,就是385。然后385除以5等于77。所以我们得到了私钥:(221,77).私钥只能自己知道。一旦泄露,传输的数据无异于在阳光下裸奔。好了,有了密钥对,我们终于可以加密解密了。A首先用B的公钥加密他要发送的信息,即数字“15”。B的公钥是(221,5)。首先,A计算15的5次方,得到759375,然后用759375除以221,得到19的余数。最后,A将“19”发送给B,B得到“19”后,用私钥来解密它。私钥是(221,77)。首先,B会先计算19的77次方,然后把221得到的数除以求数的余数,最后的答案是“15!”非对称加密一般就是这样一个过程,非常强大。艺术感!那么,非对称加密有什么缺点吗?是的!这仍然是一个效率问题。如果A和B协商一个密钥,假设密钥是数字“5”,A要给B发送数字“15”,A会先用15*5得到75,再发送数字“75”给B,B得到数后,除以5得到数“15”。上面的方法就是对称加密。它的缺点是安全性很差。相同的密钥用于加密和解密。一旦密钥泄露,传输的数据就没有安全可言了。但它的优点是效率高。A和B传输的信息只需要乘以5再除以5,不像非对称加密那么复杂。于是,就有了一个聪明人,将非对称加密和对称加密结合起来,赋予其高效和安全的优势。具体怎么做呢?思路如下:首先,使用非对称加密来传输“密钥”。对方拿到密钥后,再用密钥传输数据。这样既保证了安全性,又保证了效率。还是上面的例子。数字“5”是密钥,A先用B的公钥(221,5)加密。5的5次方,除以221的余数为31,A将31发给B,B得到数后,用私钥(221,77)解密,计算出31的77次方除后的余数by221.是5.此时B已经知道密钥“5”。以后A和B将使用密钥“5”进行对称加密的数据传输。第二次通信,A想传“6”,只要5*6=30,把数字30传给B,B就可以用30/5得到6。第一次使用非对称加密传输密钥,第二次后采用对称加密方式进行通信加密,安全高效。熟悉的同学可能已经知道,没错,SSL证书就是干这个的!