真性乱数生成器 vs 疑似乱数生成器

疑似乱数生成器(PRNG)

ソフトウェアで生成された乱数のみが疑似乱数と呼ばれます。 コンピューターは分布に基づくアルゴリズムを使用しているという点で真にランダムではありません。また決定論的で予測可能なアルゴリズムに依存している点で、(後述の真性乱数の目的に直接使用するのは)安全でもありません。 生成された「乱数」を複製するようにシード番号を設定できるため、シードがわかっている場合は番号を予測できます。 PythonやExcelなどの日常的なツールでの疑似乱数生成は、メルセンヌツイスターアルゴリズムに基づいています。

PRNGの使用例の一つは、鍵ストリームの生成です。 Chachaなどのストリーム暗号は、疑似ランダム暗号数ストリーム(キーストリーム)を使用して平文メッセージを暗号化します。 AES CTR(カウンター)モードなどの一部のブロック暗号モードのキーストリームは、ストリーム暗号として機能し、疑似乱数生成と見なすこともできます。

真正乱数生成器(TRNG)

真性乱数を生成させる場合には、コンピューターは、アルゴリズムではなく、同位体の放射性崩壊や電波静的など、予測できない外部の物理変数を使用する必要があります。 量子レベルでは、亜原子粒子は完全にランダムな振る舞いをしており、予測不可能なシステムの理想的な変数になっています。 ほとんどのハイエンドマイクロコントローラーにはTRNGソースがあり、wolfSSLはこれを直接ランダムソースまたはPRNGのシードとして使用できます。 シリコンベースのTRNGであるIntelRDRANDは、wolfSSLでサポートされています。

wolfSSLは以下の様なTRNGを含むハードウエアをサポートしています:

wolfSSLがサポートしているハードウエアアクセラレータ/暗号化プラットフォームのリストはここを参照ください。

暗号化処理における真性乱数生成器

真のRNG自体はコスト効率が良くないことが多く、さらに時間の経過に伴ってランダム性が徐々に低下する可能性があります。したがって、エントロピーソースの品質に一貫性がないといえます。そこでランダム性をさらに向上させるために、後処理アルゴリズム(決定論的で脆弱ですが)に依然依存しています。 TRNGとPRNGの組み合わせにより、ランダム性低下による悪影響を制限できます。たとえば、NXP i.MX RT1060では、コアに存在するTRNGをエントロピーソースとして使用して、それ自体がPRNGである決定論的ランダムビットジェネレータ(DRBG)のシードを決定できます。このように組み合わせたTRNGは、時間の経過とともに弱くなることなく近似的に真性乱数とみなせる程のランダム性を提供します。

wolfSSLは、NISTのSP 800-90A(暗号化で使用するための暗号的に安全であるとされる3つの疑似乱数ジェネレーターの仕様)で説明されているSHA2-256(セキュアハッシュアルゴリズム)Hash_DRBGを使用します。さらに、ハードウェアエントロピーソースを含むwolfSSLのFIPSモジュールであるwolfRandは、NISTのSP 800-90B(ランダムビットジェネレーターで使用されるエントロピーソースの設計原則と要件、およびエントロピーソースの検証テスト)に準拠しています。

暗号化に使用する目的で、真性乱数により近い値を算出する為には、アルゴリズムの1つだけに依存するのではなく、複数のアルゴリズムの組み合わせを用います。 TLS1.1からTLS1.2への更新では、疑似ランダム関数(PRF)のMD5 / SHA-1の組み合わせが、暗号スイートで指定されたPRFに置き換えられました。これは、引き続きTLS1.3でSHA2-256およびSHA2-384で使用されます。

MD5 / SHA-1(メッセージダイジェスト/セキュアハッシュアルゴリズム)は、2つのメッセージ認証コード(MAC)アルゴリズムを組み合わせて、速度とセキュリティのバランスを実現しました。一方、暗号スイートは、Transport Layer Security(TLS)/ Secure Socket Layer(SSL)を介してネットワーク接続を保護するのに役立つ暗号化命令またはアルゴリズムのセットです。 Webサーバーとクライアント間のSSLハンドシェイク中に、両者は暗号スイートについて合意します。暗号スイートは、HTTPS接続を保護するために使用されます。一般的な暗号スイートには、1つの鍵交換、1つのバルク暗号化、1つの認証、および1つのMACアルゴリズムが含まれています。暗号スイートとその使用法の詳細については、“What is a Cipher Suite?”を参照ください。

最後に

真の乱数は、費用対効果が低く、時間の経過とともにランダム性が減少する可能性があるため、生成が困難です。ただし、TRNG / PRNGの組み合わせ、または暗号スイート内のアルゴリズムのいずれかと組み合わせて複数のランダムプロセスを使用することにより、乱数生成をより効果的にすることができます。

 

ご質問は、info@wolfssl.jpまでお問い合わせください。テクニカルサポートについては、support@wolfssl.comにお問い合わせください。
原文:https://www.wolfssl.com/true-random-vs-pseudorandom-number-generation/