非对称加密(公共密钥加密)我需要澄清

时间:2019-01-12 10:41:24

标签: encryption encryption-asymmetric

我已经搜索了HOURS,以了解其工作原理,但我仍然无法理解其工作原理。唯一给出的定义是公用密钥加密的消息只能用私钥解密。对我来说,这只是胡说八道,我会解释。

您的浏览器需要下载一个网站,这也意味着任何捕获您网站的人都可以访问Javascript脚本和所有其他内容。这也意味着,此人现在知道您如何使用公钥计算东西,从而无需私钥即可对其进行解密。

我只是想弄清楚它是如何工作的,对我来说,当您访问从加密方进行的所有计算时,您无法从公共密钥解密加密的文本。

>

我的意思是,例如,当您发送密码时,首先,在您的一端,即浏览器的一端,它将对服务器要接收的数据进行加密。通过从浏览器端对数据进行加密,任何查看您的源代码的人都可以知道您如何加密数据,现在可以将其用于解密。我正在为我们的网站创建一个新的加密系统,其中服务器随机创建一个会话密钥,该会话密钥只能由具有相应会话的用户使用。因此,只有两台计算机可以使用相同的密钥相互通信,因此,如果您在另一台计算机上使用相同的密钥,则该密钥将无法工作,因为将为每个会话存储每个密钥,并且该密钥在设置的时间后会死掉。根据我的阅读,此接缝被称为对称密钥系统。我想尝试对自己的不对称密钥系统进行编程,但是在我阅读的所有情况下,我只能弄清楚,无论客户端进行加密时发生什么情况,如果恶意人员在发送信息之前进行了拦截,可以访问加密的工作原理,因此不需要服务器端的私钥,因为他只需要知道客户端的加密过程就可以逆转该过程。

我开始这样认为自己是愚蠢的。

我将添加更多信息,因为我认为我们不太理解我的意思。发送密码时,说出我的名字“ David”,然后命名我们的用户WebUser。我们将命名我们的恶意用户BadGuy。因此,BadGuy希望在WebUser和他的浏览器之间进行集成。 BadGuy还可以接收网页中的所有JavaScript,从而使他能够在发送计算之前查看其工作原理。 WebUser输入其密码“ David”,该密码已提交到javascript加密系统。马上,BadGuy不需要解密任何东西,因为他已经捕获了密码。但是,当网站做出响应时,BadGuy会进行所有计算,并且可以使用接收到的加密数据,并使用他在接收到的网页代码中可以看到的解密计算来对其解密。

所以我唯一能理解的是,Assymetric密钥用于加密,从技术上讲可以使用公开的已知数字解密。但是在RSA的cas中,这两个数字是如此之大,以至于要弄清楚已知的解密器将花费数年的时间。我还可以理解的是,从私有号码创建两个号码要容易得多。但是无论如何,加密过程通常以两方之间共享的临时私密密钥结束,以便进行更快的通信,而且没有人能阻止用户和浏览器之间的BagGuy,但是利用当今的技术,真正的威胁是更多的MiTM攻击,一个会嗅探网络。在所有情况下,都没有确定的方式以不可解密的方式传达100%的数据,因为至少有50%是来自一侧的可解密i / e数据或去往另一侧的数据。

2 个答案:

答案 0 :(得分:2)

正如您正确描述的那样,非对称加密有两个密钥,即公共密钥和私有密钥,因此不要感到愚蠢。这两个密钥都可以用于加密和解密,但是,如果用公钥加密的数据只能用私钥解密,而用私钥加密的数据只能用公钥解密。

因此,为了成功参与使用非对称加密的通信,您将需要同时具有公共密钥和私有密钥。

您与他人共享公用密钥,也就是说,无论您收到什么数据,都将使用公用密钥对其进行加密。随后,您将可以使用私钥将其解密,这是您的秘密。当您将数据发送到通信的另一端时,您可以使用私钥对其进行加密,而拥有公共密钥的另一端则可以对其进行解密。

考虑版本控制的示例。您与一些团队成员一起参与了一个项目。当您拉别人的提交时,它会用您的公钥加密,因此一旦下载完,您就可以通过私钥对其解密。在工作和提交时,您会将更改推送到存储库中,并使用私钥进行加密。通信的另一端已经具有您的公共密钥,并且可以对其进行解密。重要的是,不要与任何人共享私钥,这样,您的队友就无法冒充您,以您的名义提交恶意代码,从而冒充您。您可以与任何人共享您的公共密钥,但是建议仅与可信任的人(例如您的队友)共享它,这样,其他任何人都将无法解密由您的私有密钥加密的任何内容。

从本质上讲,您的公钥是一个非常大的数字,这是通过将两个素数(私钥)相乘而得出的。通过素数分解可以找到两个素数,但是由于公钥的数量非常大,因此进行素数分解将花费很长的时间,因此没人会坐等时间(几个世纪)正在执行并找到结果。

会话ID是标识会话的值。如果只有一个这样的值,则它不是非对称加密,因为不涉及公钥和私钥,并且一旦有人窃取了会话ID(如您正确指出的那样),恶意的第三方/系统就可以冒充实际用户做讨厌的事因此,您确定的问题确实存在,但这不是一个新问题,因此已实施了解决方案。您正在寻找的解决方案是HTTPS。一旦您的站点获得了适当的证书,您就可以安全,可靠地使用不对称加密。在后台,服务器将拥有用户会话的公钥,而用户将使用私钥进行加密/解密,如果中间人拦截了会话的公钥(不是会话ID),则恶意第三人称不能模拟实际用户。在此处阅读更多信息:

https://en.wikipedia.org/wiki/Transport_Layer_Security

答案 1 :(得分:2)

扩展上一个答案

  

我只是在徘徊在位于用户和他的浏览器之间的攻击者如何以明文开头或结尾的情况下无法拦截连接详细信息。

这里的魔法称为 DH密钥交换

对称加密密钥是使用Diffie–Hellman key exchange派生的,在其中交换公共加密密钥。

任何“监听”方(您的BadGuy)都无法获得会话密钥,即使通过嗅探整个通信也是如此。服务器将使用其证书和私钥来确保客户端与合法目标进行通信。这样可以防止活跃的“中间人”冒充错误的服务器。

  

当您有权访问从其加密的一面进行的所有计算时,这并不意味着您无法从公共密钥解密已加密的文本。

非对称密码术基于所谓的“活板门”功能。这意味着以一种方式(例如加密数据)来计算函数很容易,但是在没有一些秘密值(私钥)的情况下以相反的方式进行计算非常困难(不可行)。确实有时候很难理解它,并且在非对称加密下确实存在很多约束是真正安全的。这就是为什么您总是要自己使用一些受信任的库的原因。

  

通过从浏览器端对数据进行加密,任何查看您的源代码的人都可以知道您如何加密它,现在可以将其用于解密。

并非没有随机密钥,该密钥是在密钥交换期间客户端和服务器之间派生的(请参见第一段)。

  

我正在为我们的网站创建一个新的加密系统,其中服务器随机创建一个会话密钥,该密钥只​​能由具有相应会话的用户使用。

这是密码学领域的规则之一-不要设计自己的密码!

通常这是一个坏主意。请注意,当前使用的安全通道(基于RSAECC的SSL,TLS,..)是由许多聪明的人设计,审查和使用的,他们知道自己在做什么,如何缓解不同的攻击媒介。恕我直言,它仍然不是完美的,但这是我们拥有的最好的。