コードは適切な (疑似) 乱数から生成されると想定します。それらを大量に生成する場合は、それらを生成するコンピューターの乱数ジェネレーターに十分なエントロピーを提供してください。
あなたが話しているようなコードは、ランダムな印刷可能な文字列として作成されることがよくあります。たとえば、これを行う 1 つの方法は、144 ビットの乱数を生成し、base64 でエンコードすることです。これにより、24 文字の文字列で 144 ビットの情報が得られます。文字列は URL にコピー&ペーストされているか埋め込まれているため、通常は文字列がゴミとして読み取られることを気にしません。この文字列は、それぞれが 64 文字のアルファベットから生成された 24 個のシンボルのシーケンス、またはそれぞれが 2 ビットのアルファベットから生成された 144 個のシンボルのシーケンスと考えることができます。それは同じになります。
CHARACTERS (または BIT) のリストの代わりに WORDS のリストを生成することも同様です。2 ビットまたは 64 文字のアルファベットの代わりに、4000 ~ 6000 語のアルファベットを使用しています。これははるかに大きなアルファベット (より多くの情報) ですが、フレーズ内でより少ないまたはそれらを使用することを期待しています (より少ない情報)。
単語を使用n
すると、log₂((4000 から 6000)ⁿ) ビットが得られます。簡単にするために、4096 語のアルファベットを選択するとします。144 ビット トークンと同じ量の情報を含めるには、フレーズにそれぞれ 12 語を含める必要があります。
「多数のコード、100 万個のコードが必要です」という要件は不明です。コードスペースが 100 万フレーズでなければならないということですか、それとも、はるかに大きなコードスペースの各部分である 100 万の異なるフレーズを生成するつもりなのですか。
コードスペースを 100 万にする必要がある場合、それはわずか log₂(1000000) = 20 ビットです。2語のフレーズで十分です。それはおそらく小さなコードスペースだと思います...しかし、敵が正しいフレーズを推測できる可能性がどれだけあるか、そしてどれだけ速く推測できるかによって異なります. また、攻撃者が正しいコードを推測することがどれほどの損害を与えるかにもよります。あなたの要件を知らなくても、どのくらいのコードスペースが必要かを推測することしかできません。おそらく2倍のビット数(1兆コード)ですか?
質問 2:フレーズを生成するコンピューターがランダム性の優れたソースを持っている限り、どこでフレーズを生成しても実際には違いはありません。疑わしい場合は、デスクトップを使用してください。次に、RPC、リモート データベース アクセス、またはサーバーへのファイルのコピーなど、それらをデータベースにどのようにロードするかは問題ではありません。
多数のフレーズを生成する場合、それらをプレーンな文字列としてデータベースに保存するとコストがかかることに注意してください。参照単語リストのインデックスである一連の整数としてそれらをエンコードすることで、多くのスペースを節約できます。
余分な : 各フレーズで 2 つまたは 3 つ以上の単語を使用すると、ランダムな文字列と同じようにフレーズを覚えたり入力したりするのが難しくなることに注意してください。これは、それらが実際の単語で構成されていても、文法的に隣り合わせにできない単語を含め、ほとんどが意味のないフレーズになるためです。
これを軽減したい場合は、特定の単語がテキストのコーパス (たとえば、文献のコレクション) で隣り合って出現する頻度の統計モデルを使用して、単語のシーケンスを自然に見えるようにすることができます。人間。隣接する単語の隣接部分、トリプル、または 4 タプルのモデル化は、それぞれ 2 番目、3 番目、または n レベルのマルコフ連鎖と呼ばれます。
明らかに、このようなフレーズを生成すると、フレーズの情報量が (情報理論的な意味で) 減少するため、フレーズを長くすることで補わなければなりません。特定の統計モデルを使用した結果の正確な情報削減量は、計算するための演習として残されています:-)