【问题标题】:Elliptic Curve Cryptography on PHP and AndroidPHP 和 Android 上的椭圆曲线密码学
【发布时间】:2017-05-03 16:43:01
【问题描述】:

我在理解 php 和 android 上的椭圆曲线密码学方面需要帮助。我已经阅读了关于 Spongy Castle 和 Bouncy Castle 的内容......到目前为止我所了解的是每一方都需要生成一对密钥(公钥和私钥)以及他们将用于加密和解密的共享密钥..我是对的吗?还是还有另一个键...我有点困惑..我也找不到任何用于 php 的东西...感谢您的帮助...

我也知道 ECDSA 仅用于生成签名,而 ECDH 用于对消息进行加密/解密,这正是我所需要的......

【问题讨论】:

  • ECDH 用于密钥交换。您可能指的是 ECIES 或类似的东西,它们可以与 RSA 类似地使用。无论如何,为什么 HTTPS 或 TLS 对您来说还不够?
  • 我们正在实现一个需要使用非对称加密的安全协议……我们使用了 RSA,但我们想使用椭圆曲线来提高性能……有没有关于如何使用 ECIES 的教程?另外,通过密钥交换..您是指秘密共享密钥吗? ..所以这个密钥是使用 ECDH 生成的,并将在 ECIES 中用于加密?还是有别的钥匙...
  • 好的,我发现这个代码示例真的很有帮助.. 所以我们得到了双方的共享密钥,我们需要测试它是否相同,然后使用秘密共享密钥完成加密和解密.. gist.github.com/zcdziura/7652286 .. bcprov-jdk15 是必需的,还需要下载 UnlimitedJCEPolicy 来修复非法密钥大小异常
  • @HayaRaed 如果您在实践中尝试使用该 github 代码,则存在安全问题。只有当您确定您收到的公钥属于您正在与之通信的一方时,ECDH 密钥交换才能安全地进行。否则,可能会发生中间人攻击:攻击者将通过网络的公钥替换为自己的公钥,以便窃听通信。证书通常用于防止此类攻击。顺便说一句,您可以在 TLS 中使用 ECC,所以我认为您确实需要重新考虑 Artjom B. 的问题。

标签: java php android public-key-encryption elliptic-curve


【解决方案1】:

目前我的理解是每一方都需要生成一对 密钥(公钥和私钥)和他们将使用的共享密钥 对于加密和解密..我是对的吗?

是的。每一方都生成密钥对并将其公钥发送给对方。私钥必须妥善保管,不得泄露。

秘密密钥是从接收者私钥和发送者公钥生成的,反之亦然。

Elliptic Curve Digital Signature Algorithm (ECDSA)用于用私钥对数据进行签名,并用对应的公钥进行验证。

Elliptic curve Diffie–Hellman (ECDH)

是一种匿名密钥协商协议,允许两方,每方 有一个椭圆曲线的公私钥对,建立一个 通过不安全的渠道共享秘密。

所以如果你想加密和解密数据,你需要ECDH。

【讨论】:

  • 重要的一点是,接收者需要验证他们从对方那里获得了正确的公钥:否则可能发生中间人攻击。这通常通过证书完成。
猜你喜欢
  • 2021-05-07
  • 2015-05-09
  • 1970-01-01
  • 2015-07-05
  • 2011-12-06
  • 2022-10-25
  • 2010-10-15
  • 1970-01-01
相关资源
最近更新 更多