【发布时间】:2009-04-30 21:16:51
【问题描述】:
编辑:现在是 http://messymatters.com/sealedbids 的主要运动博客帖子
rot13 的想法是隐藏文本,例如防止剧透。它并不是为了加密安全,而只是为了确保只有确定要阅读它的人才能阅读它。
对于涉及密封投标的应用程序,我想对数字做类似的事情。大致上,我想将我的号码发送给某人,并相信他们会选择自己的号码,不受我的影响,但是当他们准备好时,他们应该能够透露我的号码(纯粹是客户端)。他们不应要求我或任何第三方提供进一步的意见。
(补充:请注意接受者被信任不会作弊的假设。)
它不像 rot13 那样简单,因为某些数字(例如 1 和 2)会经常出现,以至于您可能会记得,例如,34.2 确实是 1。
这是我正在寻找的具体内容:
将实数映射到实数(或字符串)的函数 seal()。它应该不是确定性的—— seal(7) 不应该每次都映射到同一个东西。但是相应的函数 unseal() 应该是确定性的—— unseal(seal(x)) 应该等于所有 x 的 x。我不希望 seal 或 unseal 调用任何 web 服务甚至获取系统时间(因为我不想假设同步时钟)。 (补充:可以假设所有出价都低于某个最大值,每个人都知道,比如一百万。)
完整性检查:
> seal(7)
482.2382 # some random-seeming number or string.
> seal(7)
71.9217 # a completely different random-seeming number or string.
> unseal(seal(7))
7 # we always recover the original number by unsealing.
【问题讨论】:
-
您提到要将实数发送到实数,但随后您发布了一个使用 rot-13 的示例解决方案(因此使用 ASCII 字符串而不是实数)。您感兴趣的领域和范围具体是什么?这些应该有多少熵(例如,范围内有多少可能的值应该对应于域中的一个值)?
-
两位小数(多于)就足够了。在我基于 rot13 的解决方案中,您可以将 3.14 映射到“三点一四”。
-
出价是否限制为整数 >= 0?
-
好问题。令人惊讶的是,不,并非总是如此。否定出价在我们使用的机制中具有特殊意义。不过,如果您有一些在该约束下运行良好的东西,我有兴趣看到它。
-
为什么要显示数字——比如说,显示一堆“xxxxxx”,直到用户点击“显示你自己”。 (虽然,如果这是一个打印过程......那么这确实是有道理的)
标签: language-agnostic math encryption function