关于secp256r1和x25519的使用

问题描述 投票:0回答:1

我正在使用一些第三方存储库(Private Join and Compute)实现一些协议,并且该存储库在创建 EC 组时仅支持 openssl 中 FIPS 模块(P-224、256、348 和 512)中的内置曲线:

StatusOr<ECGroup::ECGroupPtr> CreateGroup(int curve_id) {
  auto ec_group_ptr = EC_GROUP_new_by_curve_name(curve_id);
  // If this fails, this is usually due to an invalid curve id.
  if (ec_group_ptr == nullptr) {
    return InvalidArgumentError(
        absl::StrCat("ECGroup::CreateGroup() - Could not create group. ",
                     OpenSSLErrorString()));
  }
  return ECGroup::ECGroupPtr(ec_group_ptr);
}

EC_GROUP_new_by_curve_name
位于openssl/crypto/fips模块中)

我的问题:

  • 我可以修改代码以将我的协议的内置曲线替换为 X25519 吗?我的协议将其用于 ECDH。
  • 如果没有,除了 X25519 未经过 FIPS 验证之外,还有什么问题?
  • 或者,简单地说,在什么用例中我应该使用 secp256r1/k1,而 X25519 又应该使用什么?
c++ cryptography standards elliptic-curve
1个回答
6
投票

我可以修改代码以将我的协议的内置曲线替换为 X25519 吗?我的协议将其用于 ECDH。

当然可以。然而,这不仅仅是改变参数的问题。 X25519的计算和编码也不同。

如果没有,除了 X25519 未经过 FIPS 验证之外,还有什么问题?

FIPS 验证特定于实现,因此说算法未经“FIPS 认证”是没有意义的。当然,FIPS 实现只有使用 NIST 标准化算法才能得到验证,而 X25519 不是其中之一。 NIST 一直在寻找量子安全算法。有一些暗示表明 X25519 可能包含在 NIST SP800-56A 中,但这尚未实现。

或者,简单地说,在什么用例中我应该使用 secp256r1/k1,而 X25519 又应该使用什么?

两者都有大约 128 位的安全裕度,但创建 X25519 的安全实现更容易,例如关于公钥验证和侧信道攻击。 X25519的性能也比较好。 X25519 在我的系统上运行速度似乎快了 50%,不过 - 说实话 -

openssl speed ecdh
命令到处都是。

© www.soinside.com 2019 - 2024. All rights reserved.