主页 > imtoken钱包2.0版本下载 > RSA初探,谈谈如何破解HTTPS

RSA初探,谈谈如何破解HTTPS

imtoken钱包2.0版本下载 2023-05-11 05:46:36

公钥和私钥

https的公钥和私钥在面试中经常出现,各个方面也会给出答案:https有两个秘钥,公钥和私钥,网站拥有私钥,用户拥有公钥,而该网站持有私钥。数据用自己的私钥加密并发送给用户,用户用公钥解密数据。当用户想要发送消息时,用户用公钥加密数据,网站用私钥解密数据。这种使用不同密钥的加密和解密称为非对称加密。这个过程有点复杂。让我们用一个例子来说明。假设A网站开启了https,小明要去访问这个网站(下面的例子只是为了说明公私钥的使用,并不是https的真实过程。真实过程是后面的“HTTPS握手过程” . 部分):

网站A启用https,自然有一对秘钥,私钥和公钥。私钥是自己隐藏的。任何访问公钥的用户都可以让小明访问A网站,并获得A的公钥。向A网站发送消息时,使用公钥对信息进行加密,然后发送给A网站。A网站得到密文后,用自己的私钥解密,得到消息内容。 A网站想回复小明,用自己的私钥加密信息。送给小明。小明拿到密文后,用手中的公钥解密信息

通过以上过程,我们可以看到,由于公钥是公开的,所以网站私钥加密的信息实际上可以被所有用户解密。 **在这个阶段,保护实际上是用户发送给服务器的数据,因为用户的加密数据必须通过服务器的私钥解密。 **这里大家想到一个有趣的问题:既然所有用户都能拿到公钥,那是不是小明加密的信息,小红也能解密,因为小红也有公钥?如果小红也能解决,那么只要小红拦截小明的流量,他不知道内容吗?为了简化这个问题,公钥加密的信息可以用同一个公钥解密吗?答案是不! **要知道这个原因,你必须知道RSA算法,后面我们会一步一步讲。

数字证书

小明之前访问A网站的过程存在隐患,可以被攻击。假设小红是一个中间人黑客,现在想攻击小明,她偷偷摆弄小明的电脑,用自己的代替A网站的公钥:

小明访问A网站,A网站发给小明公钥,但是这一步被小红攻击了,小红劫持小明的流量,用自己的公钥替换A网站发来的公钥 小明得到了错误的公钥,使用这个公钥加密自己的信息,这个信息可能包含他的用户名、密码等敏感信息小明将加密信息发送到网站A,这个流量被小红拦截,因为密文是小红使用的 如果公钥是加密后,小红用对应的私钥解密得到小明的密码,攻击完成

可以看出,只有公钥和私钥仍然无法应对中间人的流量劫持,如果在传输过程中信息被截获,信息仍然会被破解。这次攻击成功的关键是小明得到了错误的公钥,所以需要一种机制来保证小明得到A网站的正确公钥。这个机制就是数字证书。数字证书的打开非常简单。其中最核心的就是A网站的公钥,A网站把自己的公钥放在数字证书里,发给小明。小明看到这个公钥是经过证书认证的,是可信的,所以就用了这个。即使小红替换了公钥,因为小红的公钥没有证书认证,小明也能识别出假的。

如何保证数字证书的安全性?小红再伪造一个数字证书还不够吗?这是关于CA(Certificate Authority),CA是颁发数字证书的组织,CA有自己的公钥和私钥。 CA 用自己的私钥,即网站 A 的公钥对消息进行加密,然后发送给用户。用户得到信息,用CA的公钥解密,就得到了A网站的正确公钥。因此,数字证书实际上就是CA私钥加密后的网站公钥。小红没有CA的私钥,无法伪造网站的数字证书,也无法替换小明得到的公钥。因此,数字证书实际上保证了网站公钥的正确性,而CA保证了数字证书的安全。

既然CA保证了数字证书的安全,那么谁来保证CA的安全呢?假设有东西 X 可以保证 CA 的安全,那么谁来保证 X 的安全呢?感觉这条信任链可以是无穷无尽的。 . 现实中,CA的安全级别非常高,他的安全不仅是技术手段,还有法律和物理措施。反过来,回到本文的主题,破解https,这里我们其实有了第一个想法:破解CA!您可以将其名下所有证书的公钥替换为您自己的,并解密所有使用他证书的网站。

评论区有朋友提到Charles可以解密https,这个原理和小红攻击小明是一样的。 Charles解密https的前提是你必须安装他的证书。安装他的证书后,您实际上是在信任 Charles 的假 CA。在攻击过程中,把前面的小红换成查尔斯。

会话密钥

公私钥加解密确实很安全,但是速度很慢。如果每条消息都这样操作,会影响整个通信效率,所以当我们与https建立连接时,通过公钥和私钥交换的信息实际上只有A:Session key。会话密钥不是非对称加密,而是对称加密。对称加密在一些影视作品中很常见:主角拿到了一张藏宝图,但是因为藏宝图是用密码写的,所以他看不懂。这本书足以解密藏宝图密码。那么这本书实际上就是一本密码本。二战中,很多信息都以密码本的方式进行了加密,通过拦截密码本获取对方军事情报的案例屡见不鲜。加解密都使用码本,其实使用的是同一个秘钥,就是对称加密。用计算机领域的话来说,这个密码不是一个散列函数,这个函数将一个字符映射到另一个字符。比如我们的加密hash函数就是把字符往后移三位,比如a -> d, b -> e,那么“hello”就变成了:

h -> k

e -> h

l -> o

l -> o

o -> r

“hello”变成“khoor”,那么攻击者只需要知道你的算法,然后计算回来,前移三位解密即可。所以对称加密是比较不安全的,但是如果我能保证他的密码本(也就是秘钥)是安全的,那么对称加密也可以是安全的。如何保证对称加密密钥的安全?使用公钥和私钥再次加密!因此,https连接后,公私钥之间交换的信息只有一个,那就是对称加密密钥,即会话密钥。对称加密的算法是散列函数私钥好破解吗,加解密速度相对较快。这种设计是从效率的角度考虑的。

数字签名

数字签名其实很简单,用来保证信息的完整性和正确性:

小明首先使用摘要算法生成明文信息的摘要。该算法类似于MD5、SHA-1、SHA-2,是一种不可逆转的散列函数。小明用公钥加密摘要。小明在签名上签名 附加到内容后发送到服务器。服务器收到签名后,用私钥解密摘要。服务器对内容执行相同的摘要算法,如果摘要服务器计算出的摘要与签名中的摘要相同,则内容完整。 , 未篡改 HTTPS 握手过程

前面的知识点其实已经涵盖了https的重点。我们总结一下https握手过程:

小明向A网站发起请求,A网站将CA数字证书返回给客户端。证书中包含A网站的公钥,小明通过自己电脑内置的CA公钥解密证书,得到A网站的公钥(CA公钥)。密钥内置在浏览器中)小明生成一个随机对称密钥,即会话密钥。会话密钥必须由客户端生成,因为如前所述,公钥和私钥只能保证客户端发送给网站的信息的安全性。用公钥加密的信息只能用私钥解密。私钥网站是隐藏的,所以其他人无法解开信息。但是如果网站生成一个会话密钥并用他的私钥加密,那么每个人都有公钥,每个人都可以解锁它。小明用A网站的公钥加密会话密钥并发送给A网站。接下来,A网站和小明使用会话密钥进行HTTP通信的RSA算法

前面我们提到,用公钥加密的信息不能用同一个公钥解密,只能用私钥解密。这实际上是非对称加密的核心秘密。下面说说这个秘籍是怎么做到的。是的,这实际上是 RSA 算法。 RSA算法的计算过程如下:

随机选取两个素数p和q计算n=pq计算φ(n)=(p-1)(q-1)找一个与它互质的小奇数e φ(n) ,互质表示两个数的公约数只有1对模φ(n),计算e的乘法逆d,即求a d,从而建立如下方程: (e* d) mod φ(n) = 1 得到公钥:(e, n),私钥:(d, n) 加密过程:c = (m^e) mod n,(c为加密密文,m是原文)解密过程:m = (c^d) mod n

第七步,m的e次方,m是我们发送的原始文本,可以是文本,json,图片,虽然有各种形式,但是在电脑里是二进制01,所以可以将其转换为数字以找到时间平方。让我们用两个数字试试这个算法:

随机选择两个素数23和61计算n = 23 * 61 = 1403计算φ(n) = (23-1) * (61-1) = 22 * ​​​60 = 1320 求一个对于与φ(n)互质的小奇数e,我们选择7来计算乘法逆元d,我这里计算d = 943,对乘法逆元感兴趣的朋友可以网上搜一下怎么计算,因为不是本文的主题,就不展开了。获取公钥(7, 1403),私钥(943, 1403)让我们尝试用公钥加密一个随机的 5,加密 c = (m^e) mod n = (5^7) % 1403 = 78125 % 1403 = 960 私钥解密:m = (c^d) mod n = (960^943) % 1403 = 5, (960^ 943)这个数字太大了,一般的计算器都计算不出来,更别说JS计算了。我用过这个网站来计算吧:defuse.ca/big-number-... 然后试试私钥加密:c = ( m^d) mod n = (5^943) % 1403 = 283 public key de加密:m = (c^e) mod n = (283 ^ 7) % 1403 = 5

知道了算法,我们就可以回答上一个问题了。为什么公钥加密的数据不能自己解决?注意加密算法 (m^e) mod n 是模运算,模运算不能取反。比如5到4取模,5%4=1,但是反过来,知道x%4=1,求x。这个 x 可以是无限的,5, 9, 13, 17.. 所以即使你有公钥(e,n)和密文c,你也不知道(m^e)取哪个值,也无法通过求逆来解决。这是非对称加密的核心秘密。私钥加密同理,如果你自己加密,你也解决不了。

RSA破解思路

所谓破解RSA,其实就是通过公开信息推断出他隐藏的信息。具体来说,就是知道公钥(e,n)找到私钥(d,n),也就是找到d。对d的要求实际上是逆解(e*d) mod φ(n) = 1。要逆解这个公式,我们必须知道φ(n),因为φ(n) = (p-1) (q-1),所以p和q一定是已知的。我们知道n=pq,n是已知的,所以还是有可能知道p和q的。所以破解RSA其实就是一句话:n是已知的对,就是把n拆分成两个素数的乘积。说起来容易,做起来却很难!因为在实际使用中,n很大,现在很多地方都用2048位甚至4096位的n。这个数字转换成Decimal也有几百或几千位长,对比一下,JS整数最多支持53位……所以现实中破解RSA的方法有两种:

找到一种算法,可以有效地将大数 n 拆分为两个素数。不幸的是,这个算法还没有在数学界被发现。如果没有好办法,就用笨办法,穷举,从2遍历p,q,直到他们的乘积为n。据说有人用了5个月才算出一个512位的n,然后他们早就换了key私钥好破解吗,RSA升级到了1024位……总结一下,HTTPS其实就是HTTP+RSA+数字证书+Session key RSA 实现了非对称加密,允许任意分发公钥。即使私钥丢失,也可以快速更换一对公私钥。解决了对称加密密码本中的漏洞。数字证书保证分发的公钥不能被篡改。 CA 保证数字证书的安全性。谁保证CA的安全性是玄学会话密钥是对称加密,目的是为了加快加解密速度 RSA算法的本质:加密采用模运算,不可能取反n取超大数,即超过数学和计算机的理论极限破解HTTPS的方法有3种:破解CA,将其名下证书的公钥替换成你的,不管用什么方法。 . 被数学之神附身,找到了高效的大数分解算法,分分钟计算出p、q图灵拥有,研发出超高速量子计算机,秒算出p、q。如果你的网站打不开https,回去再打开,记得找靠谱的CA买证书。

在文章的最后,感谢您抽出宝贵的时间阅读本文。如果这篇文章能给你一点帮助或启发,请不要吝啬你的点赞和GitHub的star。您的支持是作者继续创作的动力。