【问题标题】:Looking for an one-way function with small input and long output寻找小输入长输出的单向函数
【发布时间】:2013-03-31 12:54:17
【问题描述】:

我正在寻找一种算法,它是一种单向函数,例如哈希函数。该算法接受一个小的输入(几个位,小于 512 位),并将其映射到一个长输出(1K 字节或更多)。你知道这样的算法或函数吗?

【问题讨论】:

  • 你复制每一位 10 次... ;-) 不,老实说我看不出有任何理由这样做

标签: algorithm hash cryptography entropy


【解决方案1】:

从Shannon theorem 开始,除非任何输入的密钥(或创建密文的过程)不同,否则您不会通过拥有比纯文本更大的密文来获得任何安全性。即使在这种情况下,您也只需为每个输入分配一个键(或机制)x,否则您违反了函数的定义。因此,如果您应用加密机制 f:X(输入集)-> Y(输出集),则|Y| <= |X|。

所有这一切都表明,如果您的输入小于512 位,则生成1KB 输出将一无所获。现在,我建议您使用one-way function wiki page 中列出的功能之一

【讨论】:

  • 感谢您的回答。如果我有一个文件(例如,1M 位),并且我使用一个或多个单向函数和一个 512 位输入来生成一个 1M 位长度的数据,那么 1M 位文件与 1M 位数据进行异或,我可以将 XOR 结果视为密文?
【解决方案2】:

Keccak 具有可变长度输出,(尽管未在 SHA-3 中评估),它是“安全声明与输出长度分离。有一个最小输出长度......”和Skein 哈希函数有可变输出高达16 exabytes

【讨论】:

    【解决方案3】:

    无论您的原因是什么,您都可以使用不同的算法计算相同小数据的哈希值,然后将这些哈希值连接起来。如果输出不够大,计算散列的散列并附加它们。

    正如其他答案所指出的,从安全角度来看,这没有多大意义。

    【讨论】:

    • 感谢您的回答。如果我有一个文件(例如,1M 位),并且我使用一个或多个单向函数和一个 512 位输入来生成一个 1M 位长度的数据,那么 1M 位文件与 1M 位数据进行异或,我可以将 XOR 结果视为密文?
    • @perfectpei 听起来像是在重新发明 RC4 算法,这与您的想法非常相似。此外,听起来我从您的描述中看到的算法可以很容易地反转。如果你想在你试图发明的算法上使用 cmets,crypto.stackexchange.com 会是一个更好的地方问。
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2021-10-27
    • 2015-05-30
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多