首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有多个公钥的私钥?

带有多个公钥的私钥?
EN

Cryptography用户
提问于 2018-11-28 19:31:56
回答 2查看 8.1K关注 0票数 2

我正在设计一个钱包,在那里可以分发任意数量的公钥。比如说,爱丽丝拿出公钥来接收信息。她不希望其他人能够将所有的公钥链接到同一个人。他们每个人看起来都是随机的,所以分发N个公钥会让旁观者相信有N个不同的人。

我知道,这可以通过拥有一个主私钥p_0来完成,并使用类似于p_{i+1} = \text{Hash}(p_i, p_0)的东西生成未来的私钥。然而,为了解密消息,Alice必须尝试每一个私钥。我是在浏览器中这样做的,使用ECC的JS测试似乎表明,一旦有了十几个键,UI的速度就会慢一些,但如果Alice可以等待一秒钟(虽然不是理想的),它是可行的。如果您试图一次解密数十条消息,那么使用太多的私钥,这很快就变得不可能了。至少在我的情况下,我必须尝试解密许多消息。

我真正想要的是,只需拥有一个私钥和任意数量的所需公钥。大多数密码系统都有特定的密钥对。虽然您可以简单地连接一个组的公钥以获得N个私钥:1公钥(解密需要每个人),但似乎没有众所周知的算法来获得1个私钥:n个公钥。

提到的这里示例没有帮助,因为如果解密需要ECC乘法,它们都太慢了。

==

QA格式:我希望在这个SE上找到一个解决方案,因为这个问题看起来并不复杂,但无法解决。无论如何,我在这里提出这个问题是为了帮助其他人/那些有兴趣的人,因为我觉得这个问题挺好的。

EN

回答 2

Cryptography用户

发布于 2018-11-30 23:33:23

以下是一个想法:

  • 艾丽斯的私钥是一个AES密钥k,爱丽丝随机挑选。是的,我们用AES密钥作为私钥;请稍候.
  • 为了生成一个新的公钥,Alice选择一个随机值r,并生成她发布的对(\text{AES}_k(r), rG),我将将其称为(b, H)。爱丽丝也可以选择性地忘记她选择的价值r。爱丽丝可以生成和发布她需要的多少公钥.
  • 要用此公钥m加密消息(b, H),Bob选择一个随机值s,计算点sG和AES密钥KDF(sH),并输出三重奏(b, sG, \text{AES}_{KDF(sH)}(m))
  • 要解密(b, sG, \text{AES}_{KDF(sH)}(m)),Alice首先解密\text{AES}_k^{-1}(b) = r (如果解密失败,则消息不是针对她的)。然后她计算r(sG) = s(rG) = sH,计算KDF(sH),然后解密\text{AES}_{KDF(sH)}(m)),给她消息m

来自Alice的两个不同的公钥是不可链接的,因为唯一的连接是,它们包含使用相同AES密钥的两个不同值的加密,这与随机无法区分。

而且,所有操作都需要时间,与Alice生成的公钥数无关.

(注意:您将使用AES的一些身份验证加密模式,例如AES-GCM.)

票数 5
EN

Cryptography用户

发布于 2018-11-28 19:31:56

HashToPoint(Number) -> Point定义为一个函数,该函数将整数映射到ECC点的均匀分布(这很容易通过散列来获得x坐标,并递增x直到到达x^3+ax+b为二次剩余的点,并给出一个具有所需顺序的点)。

让鲍勃生成一个主私钥a

要生成一个新的公钥,可以生成一个随机整数r (在我的例子中是64位),并计算A = a\text{HashToPoint}(r)。广播(A, r)

若要发送到Alice的公钥(A, r),请遵循标准DH。生成一个随机私钥t,并计算T = t\text{HashToPoint}(r)。将S = tA保存为共享秘密,并广播(T, \text{Hash}(S))

现在,Alice只能计算S = aT一次,并且具有共享的秘密。她根据广播散列检查哈希,以知道它是发送给她的(或者,她可以简单地注意到,试图解密会产生随机字节)。无论发送方使用什么(A_i, r_i),此公式都有效。

窃听者无法知道谁收到了消息,因此消息内容和接收者身份是安全的。

现在O(n)接收算法是O(1),发送仍然是O(1)

票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/64395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档