- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我们有一个带有私钥和公钥的服务器,后者可供所有客户端使用,而我们有一个客户端没有自己的任何非对称 key 。我们希望在服务器和客户端之间建立安全通信,并且客户端必须确保服务器的真实性。这是一种很常见的情况。
现在,我的理解是私钥/公钥对通常在这种情况下仅用于确保真实性(我们的客户端可以使用服务器的公钥来验证服务器的真实性)。为确保服务器和客户端之间的双向通信,使用 Diffie–Hellman key 交换,然后通信基于共享 key 。
我一直想知道为什么在这种情况下会使用 Diffie-Hellman。据我了解,公钥密码术可用于确保真实性并在客户端和服务器之间共享 key 。服务器可以向客户端发送一条用其私钥编码的消息,客户端可以使用服务器的公钥对其进行解码以确认其身份。此外,客户端可以使用服务器的公钥向服务器发送一个新的随 secret 钥。只有服务器知道这个 key ,因为只有服务器知道他的私钥。我知道有些人建议不要使用公钥进行编码和解码,但没有人说出原因。
显然,如果客户端和服务器都有自己的公钥/私钥,他们甚至不需要共享任何 key ,但这不是典型情况。
所以……总结一下。为什么使用 Diffie-Hellman 而不是使用公钥加密的 key 分发?有什么优势吗?
最佳答案
I can't stop by wonder why Diffie-Hellman is used at all in suchsituations. From what I understand Public-Key Cryptography could beused to both ensure authenticity AND to share a secret key between theClient and the Server.
Diffie-Hellman 和 RSA key 交换(其中 RSA 用于加密)都可以与 SSL/TLS 一起使用。这取决于密码套件。
Server can send to Client a message encoded with its private key andClient can decode it using Server's public key to confirm itsidentity.
这确实是 DH key 交换与 RSA 或 DSS 身份验证所发生的情况:服务器使用其私钥签署其 DH 参数,客户端可以验证签名。
Furthermore Client could use the Server's public key to send a newrandom secret key to the Server. Only Server would know this secretkey as only Server knows his private key.
RSA key 交换或多或少会发生这种情况:客户端加密只有服务器才能解密的预主 key 。
您可以在 Authentication and Key Exchange section of the TLS specification 中阅读所有这些内容(撇开匿名 key 交换不谈)。 cipher suites的选择(参见附录 A.5 和 C),这取决于客户端和服务器的配置方式,将决定使用的 key 交换机制。
据我所知,固定 DH 交换相当少见。临时 DH(DHE 密码套件)更为常见。它可以提供“Perfect Forward Secrecy”:即使攻击者掌握了私钥,他们也无法破译现有流量,因为他们还需要 DH 参数,这些参数对于所有连接都不相同。然而,这在性能方面是有代价的。您可以在 this article 中找到有关此主题的更多信息.
关于ssl - 用于 secret key 分发的公钥密码学与 Diffie–Hellman,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14912406/
一些快速背景。我使用 rclone 将数据传输到 SFTP 服务器。 rclone 是用 Golang 编写的,并在底层使用 lib crypto。当我们尝试与 SFTP 服务器建立 ssh 连接时,
我将 FIPS 186-3 推荐的曲线用于 Diffie-Hellman 椭圆曲线。我正在尝试确定私钥的最大长度,根据 RFC 5915 应该是: 天花板 (log2(n)/8) ,其中 n 是曲线的
我正在做一个项目,Alice 和 Bob 使用 Diffie-Hellman key 交换相互发送消息。让我陷入困境的是如何将他们正在使用的证书合并到其中,以便我可以获得他们的 secret 消息。
也许在这里问这个问题不太合适......无论如何,我正在尝试使用 gmp 库来实现 DH,但我遇到的问题是: 有一次,当我进行测试以观察输出时,尽管选择了较大的素数和私钥值: p 的十进制长度大约超过
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我在 JavaCard 上遇到 DiffieHellman 问题。我有这门课: https://pastebin.com/2F2sQ2Pe (https://github.com/ASKGLab/DH
所以我正在尝试进行客户端-服务器 diffie hellman 加密。我使用这个:serverPublicKey = (int)Math.pow(generator,serverPrivateKey)
上下文 我在看这个视频DHE explained 它讲的是两个人如何在没有吸管的情况下交换 key 以了解更多信息。 根据视频实现 // INITIALIZERS (video's values)--
我有一个像这样的 Diffie–Hellman 安全类: public class AESSecurityCap { private PublicKey publicKey; KeyA
嗨,我正在尝试实现 Diffie–Hellman key 交换 public static Integer secret = 100000; public static BigInteger g =
我遇到了一个挑战,它与测试 friend 的加密过程有关。 这是一个Diffie-Hellman交换过程,这里是已知的变量/常量: P, G 我生成的私钥(可变) 我生成的公钥(变量) 收件人公钥(常
我有下面这行代码来生成私钥: int Xa = randomNo.nextInt(10000); int Ya = (int) Math.pow(G, Xa) % P; G 和 P 是静态数字。而 X
我正在编写 Pohlig-Hellman 算法,但我在根据算法定义理解算法中的步骤时遇到问题。 通过 algorithm 的 Wiki : 我知道第一部分 1) 是计算 p-1 的素数 - 这很好。
我正在尝试设计一种安全方案,用于加密 silverlight 客户端和我创建的 php web 服务之间的应用程序级数据。由于我正在处理一个公共(public)网站,因此我从服务中提取的信息是公开的,
所以我在阅读 this并对莱姆斯的回答感到惊讶。因为我认为情况正好相反。 所以,至于我的问题。为什么使用 diffie-hellman key 交换来确定共享 key 来加密/解密消息的程序(通常)不
是否有实现 diffie helman 的 Python 标准库? 我已经查看了 python pyopenssl 中的 openssl 包装器,但它没有涵盖它。 我也无法在 NaCl 或 crypt
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我正在尝试实现 Diffie-Hellman key 交换。我对生成后如何使用 key 有点困惑。 如输出所示,2 个 key 是在 key 交换中使用相同的质数和基数生成的,并在生成 key 时交换
我需要进行单元测试来检查 Diffie-Hellman key 协议(protocol)协议(protocol)的实现是否正常,所以我需要测试向量来验证。问题是我在互联网上的任何地方都找不到它们。 R
Elliptic 曲线 diffie hellman 计算看起来与此处定义的标准曲线有什么不同: /* * The basic Diffie-Hell
我是一名优秀的程序员,十分优秀!