一个可交换的密码?

cam*_*amh 5 cryptography

我正在寻找一个可交换的密码 - 就是这样

E(K?,E(K?,P)) = E(K?,E(K?,P))
Run Code Online (Sandbox Code Playgroud)

但不是联想 - 也就是说

E(K,P) ? E(P,K)
Run Code Online (Sandbox Code Playgroud)

这排除了XOR,否则本来可以.

对称密码是优选的,但非对称密码也可以工作.

我想要实现的基本协议是:

  1. Alice有一个令牌列表(32位整数),她使用相同的密钥(K0)加密每个令牌
  2. Alice将加密令牌列表发送给Bob
  3. Bob随机化列表,使用单独的密钥(K1-Kn)加密每个令牌,标记每个令牌并将列表返回给Alice.
  4. Alice用K0解密每个令牌,留下一个令牌列表,每个令牌用一个单独的密钥加密(K1-Kn)
  5. 一段时间后,Bob向Alice发送了一个特定标签的密钥(Kx)
  6. Alice用Kx解密令牌,给她标记为x的令牌的明文
  7. 鲍勃可能会看到明文,所以鉴于他之前给出的信息,他必须无法从中获取K0.

有人可以建议我可以使用的密码并指出我对该密码的实现吗?

我对加密协议和应用程序有所了解,但我并没有真正了解大多数密码的数学.虽然分步数学指南也可以.

我计划在Clojure中实现它,所以任何Java库也都很好.但是,任何代码都很好,因为我理解代码.

caf*_*caf 5

听起来您好像正在尝试实施“ Mental Poker”(或者,如果没有,您应该对它进行研究,因为它与您的问题无关)。

SRA算法具有您所需的属性。这是一个有点难以找到的信息,但它本质上是不同的,只是RSA 两者ed指数都秘而不宣。琐碎地:

(P e1e2 ==(P e2e1