混合公钥加密 (HPKE),使用 Tink 确定性生成密钥对

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

我想使用 Google Tink 进行公钥加密/私钥解密,主要是因为它足够高级并且可以使用多种编程语言(例如 Android 和 IOS)。

我选择了使用 X25519 椭圆曲线加密技术的

DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
类型的密钥,因为它们是:

我需要确定性地生成这些密钥,以进行灾难恢复。还有其他安全层,我主要担心的是数据丢失。

私钥生成受到控制(!)。我认为公钥是由 Tink 即时生成的,因为它是给定私钥的简单算术运算。但是,如果不提供公钥和私钥(并在 alpha 中使用 API),我无法在 java 中创建

HpkePrivateKey

我还尝试使用

JsonKeysetReader
导入手工制作的 JSON,但我收到了关于我的关键数据与预期的 ProtoBuf 格式不匹配的不那么详细的错误。如果我能让它发挥作用,我会去尝试(至少暂时),但说实话,我感觉更好的是实现一些感觉不太像黑客的东西。

我正在努力寻找解决方案来实现这一点。在给定原始 32 字节私钥的情况下,您知道如何导入/生成包含有效 HPKE 密钥对的

KeysetHandle
吗?

java public-key-encryption private-key deterministic tink
1个回答
0
投票

如果您可以确定性地生成私钥,那么您使用的任何东西就是密钥。您需要像保护私钥一样保护这些参数。您不需要确定性的额外复杂层。

因此,您需要做的是在发生灾难时“恢复随机私钥”。我将只存储私钥和公钥对,从而避免 Tink 带来的所有 JSON 麻烦。毕竟是公开的。但你要怎么做呢? 幸运的是,灾难很少见。解决方案将是

的混合

您的 RTO(恢复运营)要求
  • 您可以借鉴现有的秘密灾难流程
  • 例如,您可以让
系统生成自己的私钥并输出它

,并使用托管的公钥进行加密。您每年都会在灾难恢复测试中联系该托管机构,以便在真正的灾难发生时(如果有的话)做好准备。 在足够大的公司中,可能已经在多个位置设有防火保险箱,您可以使用它们来存储 USB 密钥、CD 以及加密私钥和纯文本公钥的打印输出。如果您没有这样的基础设施,您可以聘请公证人作为托管人。

另一种选择是使用

Shamir 秘密共享方案

生成密钥,该方案因 Hashicorp Vault 而流行。该方案可用于生成一个密钥来解密您的操作私钥。

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