暗号表は何文字まで削れるのか?
まず、13日から14日の 07:19 PMの間にこちらのツールを使われた方に訂正とお詫びがあります。
ランダム性の試験のために一時的に使っていた関数に存在する「Math.random()」を、手違いでこの期間だけ本ツールにも反映してしまっていることに気づきました。この期間に暗号表を作られた方は暗号学的に安全ではない擬似乱数を使用した表を作ってしまった可能性があります。
Math.randomのシード値が漏れる可能性は限りなくゼロですが、世の中にはシード値を予測してしまうプログラムも存在します。念の為に、その時の表は破棄して、現在のツールで作り直すことをお勧めします。また、同じ合言葉×同じニーモニックで作る場合は特に厳密に処分して下さい。もし攻撃者のもとに2つが同時に手に入ると、どれが入力した単語であるのか判明してしまいます。(24単語の場合でも10^31オーダーまでセキュリティが落ちます)お手数おかけして申し訳ありません(日付は出力したPDFの上部に記載されているはずです)。
さて、このような場合にたとえば24単語のワードを48単語ダミーとともに表に入れ、疑似乱数が予測され72単語がどれであるのか判明したとします。
仮に24単語で作っていた場合、72^24=3.77*10^44 オーダーとなり10^38オーダーである12単語のエントロピーよりも大きな数になるため十分に強度は高いです。
しかし、12単語24ダミーで作ってしまった場合は4.73*10^18 となり、これは十分な強度とは言い難いでしょう。
さらに、表が見られてしまった場合、辞書攻撃によってさらにパターンは絞られます。少なくとも10^38オーダーである128bitエントロピーが必要であると考えると、最低でも暗号表に必要なワードリスト数は24ワードの場合で46単語はギリギリ必要だと言えそうです。
頻度の低いひらがなの組み合わせが削られることも考慮すると、4倍の200ワードくらいが安全圏にある数ではないかなと考えています。
200ワード以上の中に24ワードを隠す
チェックサムを削ると大まかに200^23=8*10^52のサイズになり、安全だと言えそうです。さて、このような表を作りたい場合、先に合言葉を作ってしまいそれに登場するひらがなだけで構成するという方法がまず思い浮かびます。
「わたしにはあなたをせっとくするじかんがありません」これから重複を削り、ばらばらにしてコンマ区切りで入力します。
く,せ,る,た,あ,は,ん,つ,す,な,ま,し,に,と,り,を,か,わ
だいぶ少なくなった気がします。この要領で残りの24文字も重複のないよう気をつけて作ってしまいましょう。大体32文字(1024単語)くらいに収まれば理想的にダイエットできるのではないかと思います。
この方法は推奨か?
あくまでこれは文字量をどうしても減らしたい人向けの記事であり、なるべく2048ワード全て使い切る方がそれは安全に決まっています。
ただ、表が膨大になるのは否めないため、どうしても削りたいのであれば、入力に気をつけて、カタカナやその他の文字を使って短くするのも不可能ではないかといったところです。
以上。