2

[編集]より簡潔で明確になるように、質問を完全に言い換えました

encodeというような1-1 関数を探しています。

  • encode( 32_bytes_of_data ) => {w_1, w_2, ..., w_n}、 どこ:
    • w_1 ... w_n は実際の英単語です
    • n は妥当なはずです - 256 ワードで 256 ビットをエンコードしたくありません

理想的には: - n はすべての入力値で同じであってはなりませんが、それは非常に重要な要件ではありません。

目標 - 公開鍵を人間がより読みやすく、認識しやすくすること。

4

3 に答える 3

3

手動検査を心配せず、明らかな正規表現から保護することのみを目的とする場合は、煩わしさの要因を増やして、いくつかの代替手段があります。

  • ROT13は、この種のことのために、usenet で数え切れないほど使用されてきました。base-64検出を無効にします

  • 256 ビットを整数として使用し、ASCII での base-10 表現を使用します。次のようになります。

  • 前の数字をルック アンド セイ シーケンスにエンコードして、2 つ 1 つ、1 つ 5 つ、1 つ 7... と綴ることができます。

  • 256 ビットを base-26にエンコードし、エンコードされた 26 文字のアルファベットを句の各単語の最初の文字として使用します。約55語必要です。クリエイティブな気分なら、各単語の最初の2文字を使用して、それを 27 に減らすことができますが、実際には非常に奇妙な単語を使用する必要がある場合があります。見た目を気にしない場合は、55 文字を投稿してください。ennjuuzflkeenzhszxamvlrnusvcpknavbgzllukzllrkvatszirbkq

  • Unicode を使用する場合、110,000 の異なる文字があります。それらの半分だけが印刷可能であると仮定すると、1文字あたり15ビットを少し超えるエントロピーであるため、256ビットをエンコードするには17文字が必要になります

  • あなたと受信者が任意の量のデータを事前に共有できる場合 (少なくとも「ステガノグラフィー」手法に関する知識を共有する必要があります)、辞書内の各単語に数値を割り当てることができます。英語には約 1,000,000 の単語があるため、各単語には約 20 ビットのエントロピーがあります。256/20=13 ワードが必要です。正しい構文と文法にエンコードするキーを生成し、Jabberwockyを書き換えるためのボーナス ポイント

于 2013-01-28T14:31:38.253 に答える
0

キーを単語ごとに 1 ビットとしてエンコードできます。ここで、単語の長さのパリティはビットを示します。文字数が偶数の単語は 0 ビットであり、文字数が奇数の単語は 1 ビットです。これについては私のブログで説明しています。

于 2013-01-28T14:24:51.730 に答える
0

100 万語の辞書は、わずか 524k 語で 19 ビット エンコーディングへの入力を提供できます。入力の 32 ビット / 19 = 1.68 なので、エンコードには少なくとも 2 ワードが必要です。これは主に、控えめに 2^19 の値、たとえば 524,288 ワードを格納できるためです。

次に、あなたが 32 バイトと言ったことに気付きました。つまり、これは 256 / 19 または 13.47 です...データをエンコードするには 14 ワードと呼びます。おそらく、確定的なウォレットを作成する人々は 20 ビットを使用し、それを使用したい 12 語のフレーズでカバーしています。

最大の利点は、12 単語のフレーズ シードが持つ自己エラー修正機能です。スペル ミスは、これらの単語を適切に綴る私たちの能力によって実際に検出されます。それはかなり気の利いたものです。

于 2018-03-21T11:59:52.743 に答える