【发布时间】:2015-06-20 07:41:38
【问题描述】:
我正在使用 Bouncy Castle 在智能卡相关软件中使用 ECDH 协议执行椭圆曲线密钥协议,如 BSI-TR-03111 规范第 3.4 节中所定义的
目的是在 PACE 协议中执行随机数的通用映射,如ICAO SAC 技术报告,§3.4.2.1.1 中所定义
(我使用的是 Java,但我猜该语言对我来说不是必需的)
KeyAgreement 类使它非常简单(例如here),但它只允许输出生成的ECPoint 的 X 坐标,即 ZAB(通常是,但并不总是需要的。)
有什么方法可以返回实际的ECPoint(即 SAB)而无需重新实现算法?即使公式本身很简单,也必须检查错误和异常并考虑变化(例如辅因子乘法)
【问题讨论】:
-
我猜简短的回答是否定的。作为一般规则,提供者实现“顶级”算法,而 ECKA-DH 更多的是构建块算法。如果您愿意直接使用轻量级(on-JCE)API,则通常可以访问构建块。最好提及您尝试实现的高级算法。在某些情况下,例如ECIES,提供者至少可以选择在协议输出中使用未压缩的点编码。或者,您可能想要使用尚未在提供程序中的方案;那我们来看看添加吧!
-
目的是在 PACE 协议中执行 nonce 的 Generic Mapping,如ICAO SAC Technical Report, §3.4.2.1.1 中所定义,它需要一个 nonce 和两个点,一个井已知并且双方同意。
-
好的,所以我会说你不能通过当前的提供者来做到这一点,但必须使用轻量级 API(即非 JCE 代码),因为你预测,重新实现一些算法(即使是轻量级协议类也不返回 ECPoint)。让我们知道github.com/bcgit/bc-java 是否有我们可以提供帮助的更改,或者如果您想为 BC 贡献任何与 PACE 相关的算法。
-
感谢 Peter,我将重新设计 PACE 包,以便将轻量级 API 封装在底层。
标签: cryptography bouncycastle smartcard public-key-encryption elliptic-curve