如何将256位公钥编码为可变长度的字序列

时间:2013-01-28 12:56:29

标签: encryption cryptography steganography

[编辑] 我完全改写了这个问题,试图更简洁明了

我正在寻找一个1-1函数,encode,这样

  • encode( 32_bytes_of_data ) => {w_1, w_2, ..., w_n},其中:
    • w_1 ... w_n是真正的英文单词
    • n应该合理 - 我不希望256个字来编码256位

理想情况下:   - 对于所有输入值,n不应该相同,但这不是一个非常重要的要求。

目标 - 使公钥更具人性化和可识别性。

3 个答案:

答案 0 :(得分:2)

如果您不担心人工检查并且只是寻求防止明显的正则表达式,那么还有一些替代方案,其中包含越来越多的烦恼因素:

  • ROT13已经在usenet上无数次用于此类事情。它会击败base-64检测

  • 将256位用作整数,并在ASCII中使用其base-10表示。它看起来像这样:115792089237316195423570985008687907853269984665640564039457584007913129639936

  • 您可以将之前的号码编码为look-and-say sequence并拼写:两个一个,一个五个,一个七个......

  • Encode the 256 bits into a base-26,并使用字母表中编码的26个字母作为短语中每个单词的第一个字符。你需要大约55个单词。如果您感觉有创意,可以使用每个单词的第一个两个字符,并将其减少到27,但您可能必须使用非常奇怪的单词。如果您不关心外观,只需发布​​55个字符:ennjuuzflkeenzhszxamvlrnusvcpknavbgzllukzllrkvatszirbkq

  • 如果你想使用unicode,那就是110,000 different characters。假设其中只有一半是可打印的,那么每个字符的熵就超过15位,所以你需要17个字符来编码256位

  • 如果您和您的收件人可以预先共享任意数量的数据(您必须至少分享有关"隐写"方法的知识),您可以指定一个字典中每个单词的数值。关于1,000,000 words in the English language,所以每个都有大约20位的熵。你需要256/20 = 13个单词。用于生成密钥的加值点,该密钥编码以纠正语法和语法并重写Jabberwocky

答案 1 :(得分:0)

您可以将密钥编码为每个字一位,其中字长的奇偶校验表示该位:具有偶数字母的字是0位而具有奇数字的字是1位。我在my blog讨论了这个问题。

答案 2 :(得分:0)

一个包含一百万字的字典,可以为只有524k字的19位编码提供输入。由于你的32位输入/ 19 = 1.68所以你需要至少两个字来进行编码。这主要是因为可以保守地存储2 ^ 19个值,比如524,288个单词。

然后我注意到你说了32个字节,所以这是256/19或13.47 ...称它为14个字来编码你的数据。也许制作确定性钱包的人使用20位并用他们喜欢使用的12个单词短语覆盖它。

最大的好处必须是自我纠错12个单词短语种子:任何拼写错误实际上都是由我们正确拼写这些单词的能力所选择的。这很漂亮。