Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在非对称RSA加密上固定公钥和私钥的值是否不安全?_Security_Encryption_Rsa_Encryption Asymmetric - Fatal编程技术网

Security 在非对称RSA加密上固定公钥和私钥的值是否不安全?

Security 在非对称RSA加密上固定公钥和私钥的值是否不安全?,security,encryption,rsa,encryption-asymmetric,Security,Encryption,Rsa,Encryption Asymmetric,我有一个客户机-服务器结构,为了避免发送公钥,我考虑使用固定密钥。这个怎么样 加密时,我正在填充并使用随机SHA-256。因此,在公共修复的情况下,攻击者不能使用蛮力进行解密 我有一个客户端(Xamarin应用程序)和一个Web Api服务器。我已经在使用SSL了,我知道这已经足够了!但是想象一下,我不能使用SSL,我必须使用异步加密。我必须:客户端-请求公钥->服务器-生成公钥和私钥->客户端-获取公钥和脚本,发送脚本数据->服务器-获取脚本数据并解密。这取决于您是否同时控制客户端和服务器,以

我有一个客户机-服务器结构,为了避免发送公钥,我考虑使用固定密钥。这个怎么样

加密时,我正在填充并使用随机SHA-256。因此,在公共修复的情况下,攻击者不能使用蛮力进行解密


我有一个客户端(Xamarin应用程序)和一个Web Api服务器。我已经在使用SSL了,我知道这已经足够了!但是想象一下,我不能使用SSL,我必须使用异步加密。我必须:客户端-请求公钥->服务器-生成公钥和私钥->客户端-获取公钥和脚本,发送脚本数据->服务器-获取脚本数据并解密。

这取决于您是否同时控制客户端和服务器,以及如何存储/修复密钥,以及将替换部署到客户机/服务器代码有多困难。如果重新部署对您来说不是那么困难,并且您知道客户端的所有实例都将被及时更新,我想如果您需要旋转密钥,您可以重新部署

但是,如果重新部署对您来说不是那么容易,并且/或者您不能保证所有代码都会及时更新,那么这可能是一个问题,因为如果您当前的密钥被泄露,您可能无法使用旋转密钥的方法

另一个问题是,您不希望所有客户端都使用相同的私钥,特别是如果您有很多客户端。这增加了私钥最终被泄露的风险,并使服务器更难验证单个客户端的真实性。此外,这将导致单点故障,因为如果私钥被泄露,它将泄露所有客户端的通信。如果每个客户机都有自己的私钥/公钥,如果其私钥被泄露,则不会对其他客户机造成影响,因此损害将得到更大程度的控制

使用每客户端密钥,泄露私钥只能泄露自上次密钥轮换以来发生的单个客户端的通信;例如,如果您每3个月旋转一次密钥,则密钥对单个客户端的通信影响永远不会超过3个月。(平均而言,这将影响该特定客户1.5个月的沟通)


顺便说一句,也许我误读了你的问题,但对于公钥密码术来说,公钥保持秘密并不重要,只是你有办法保护私钥。NET Framework确实具有安全存储私钥的功能。

在客户端应用程序中嵌入公钥应该是安全的


这假定在应用程序创建时创建一次公钥/私钥对,公钥嵌入到应用程序中,私钥保存在服务器上。

如果可以保护客户端的完整性,使用固定公钥比从零开始神奇地引导安全连接更安全

仔细阅读问题和评论,听起来你想阻止中间人解密从客户端到服务器的消息。为了做到这一点,客户机必须确保使用服务器的公钥,而不会被骗使用中间人生成的公钥

如果客户机中嵌入了公钥,并且您有某种机制来确保密钥的真实性,那么您是安全的


在基于PKI的应用程序中,这是通过使用知名CA颁发的证书并在使用前对其进行验证来实现的。在自制方案中,您可以计算客户端应用程序的哈希值,将其安全地传输到客户端(在通过HTTPS提供的下载页面上、通过电话或由受信任方编写的下载页面上),等等,并在运行之前验证下载的应用程序的散列是否与真实散列匹配。

@zaph我的意思是,如果客户端使用相同的私钥,我可能误读了他的问题,但我假设他将对服务器和客户端的公钥/私钥进行硬编码。@zaph我很可能误读了OP在这里所做的工作,我的假设是客户端和服务器都有单独的公钥/私钥对,并且它们都是硬编码的(即,每个客户端都使用相同的硬编码公钥/私钥对),如果这是错误的,请纠正我。如果我的理解是正确的,那肯定会有安全风险。@zaph我同意,有很多客户机这一事实本质上不会损害服务器的私钥-但是,如果所有客户机都有相同的私钥,这将是一个问题,因为这将使t更难他使用服务器对客户端进行身份验证,增加密钥被泄露的可能性,并增加密钥被泄露的影响。@zaph所以…我有一个客户端(Xamarin应用程序)还有一个Web Api服务器。我已经在使用SSL了,我知道这已经足够了!但是想象一下,我不能使用SSL,我必须使用异步加密。我必须:客户端-请求公钥->服务器-生成公钥和私钥->客户端-获取公钥和脚本,发送脚本数据->服务器-获取脚本数据并解密。我必须同意@zaph在这里,这绝对是一个重要的澄清。你能澄清一下你正在考虑什么机制来存储私钥吗如果有必要,可以旋转它/它们?有趣的是,我在网上没有发现任何关于这一点的内容。你有什么文章或网站在谈论这一点吗?通常的方法是使用HTTPS。使用HTTPS,公钥以证书的形式发送给客户端。这允许客户端在不需要使用公钥的情况下与任何服务器联系预共享。在您的情况下,您只是预共享公钥。如果客户端中嵌入的公钥不真实,则解密将失败,希望pos