言語を選択

疑似乱数生成器(PRNG)に基づく安全なパスワード生成器

本論文は、HMAC、CMAC、またはKMACベースのPRNGを用いた安全なパスワード生成器を提案し、NIST SP 800-90BのエントロピーおよびIIDテストにより検証する。
computationalcoin.com | PDF Size: 0.5 MB
評価: 4.5/5
あなたの評価
この文書は既に評価済みです
PDF文書カバー - 疑似乱数生成器(PRNG)に基づく安全なパスワード生成器

目次

1. 序論

ウェブサイトのアカウントやパスワードの漏洩が後を絶たない報告は、情報とパスワードのセキュリティの重要性を浮き彫りにしている。ウェブサイトの脆弱性も一因ではあるが、パスワード自体の本質的な安全性が最も重要である。一般的な安全でないパスワードの慣行には、キーワードベースのパスワード、一般的なフレーズの使用、個人情報の組み込み、パスワードの使い回しなどがある。AIや大規模言語モデルの台頭により、攻撃者がパスワードをより効果的に推測する能力がさらに高まっている。

本研究では、暗号学的に安全な疑似乱数生成器(PRNG)に基づく安全なパスワード生成器を提案する。鍵付きハッシュメッセージ認証コード(HMAC)、暗号ベースメッセージ認証コード(CMAC)、またはKECCAKメッセージ認証コード(KMAC)を用いてPRNGを構築し、安全な乱数を生成し、それを用いてパスワードを生成する。生成された数のランダム性は、NIST SP 800-90B規格に基づき、エントロピーおよび独立同分布(IID)テストにより検証される。

主な貢献:

2. 関連研究

2.1. 線形合同法に基づくPRNG

CやJavaなどの言語で一般的に使用される線形合同法(LCG)は、線形漸化式を用いて数列を生成する。シード$k$が与えられたとき、初期値$f_0(k)$は$f_0(k) \equiv a \oplus k \ (\text{mod} \ m)$として計算される。後続の数は$f_i(k) \equiv a \times f_{i-1}(k) + c \ (\text{mod} \ m)$によって生成される。しかし、LCGは安全ではない。なぜなら、状態は$f_{i-1}(k) \equiv (f_i(k) - c) \times a^{-1} \ (\text{mod} \ m)$を用いて逆算可能であり、シードと数列全体が暴露されるためである。

2.2. 安全な疑似乱数生成器

LCGの脆弱性に対処するため、暗号学的に安全なPRNGが不可欠である。本論文では、NISTが推奨する3つの構成に焦点を当てる。

2.2.1. HMACベースPRNG

その安全性は、ハッシュ関数(例:SHA2、SHA3)の一方向性に依存する。鍵$k$とメッセージ$M$に対して、HMACは$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$として計算される。ここで、$ipad$と$opad$は定数である。長いビットストリームを生成するために、カウンタモードが使用される:$M_i = i \ || \ KDF \ || \ 0x00 \ || \ M \ || \ L$。これにより出力$r_{hmac,i}$が生成される。

2.2.2. CMACベースPRNG

その安全性は、Advanced Encryption Standard(AES)に基づく。鍵$k$を用いたCipher Block Chaining(CBC)モードを使用し、メッセージ$M$はブロック$M'_1, M'_2, ...$に分割される。暗号文は反復的に計算される:$c_{i+1} = AES(k, c_i \oplus M'_{i+1})$。ここで、$c_0 = Pad0(0)$である。最終出力$r_{cmac}$は最後のブロックから導出される。

2.2.3. KMACベースPRNG

SHA-3(KECCAK)ハッシュ関数に基づくKMACは、可変長出力を提供し、ポスト量子暗号の有力候補と見なされている。その構成は同様の認証付きハッシュの原理に従い、高いセキュリティ保証を提供する。

2.3. ランダム性検証手法

NIST SP 800-90B規格は、乱数生成器の品質を評価するための方法論を提供する。以下の2つの主要な側面が評価される:

3. 提案する安全なパスワード生成器

システムアーキテクチャは、以下の2つの主要な段階からなる:

  1. 安全な乱数生成: ユーザーはオプションで、ハッシュ化対象メッセージ(TBHM)を提供できる。これは、暗号鍵と共に、選択された安全なPRNG(HMAC/CMAC/KMACベース)によって処理され、暗号学的に強力なランダムビット列を生成する。
  2. パスワード生成: ランダムビットは、ユーザー定義またはシステム定義の文字セット(例:英数字+記号)に、指定された長さでマッピングされ、最終的なテキストベースのパスワードが生成される。セキュリティ強度は、文字セットのサイズとパスワード長が提供するエントロピーを考慮し、AES-128/256に対して分析される。

4. 実験と結果

4.1. 実験設定

PRNG出力のランダム性を検証するために実験が行われた。テストスイートは、3種類すべてのPRNGから生成された大量の乱数サンプルに対して、NIST SP 800-90Bのエントロピー推定およびIIDテストの評価手順を実装した。

4.2. ランダム性検証結果

結果概要: 提案されたHMAC、CMAC、KMACベースのPRNGはすべて、NIST SP 800-90BのエントロピーおよびIID検証テストを成功裏に通過した。生成された系列は、真のランダム性からの統計的に有意な逸脱を示さず、暗号学的パスワード生成への適合性が確認された。

チャート説明(想定): 3種類のPRNGの最小エントロピー推定値(ビット/ビット)をNIST合格閾値と比較する棒グラフ。3本の棒はすべて閾値ラインを大幅に上回り、KMACが最も高い値を示し、HMAC-SHA3とCMAC-AES256がそれに続く可能性がある。

4.3. 性能分析

計算効率(例:秒間生成数)の比較分析が行われた。CMACベースの生成器(AES-NIハードウェアアクセラレーションを使用)は通常、最高のスループットを示し、次にHMACベース(SHA2/SHA3)が続き、KMACは計算負荷が高いが、堅牢なポスト量子セキュリティ特性を提供する。

5. 結論と今後の課題

本研究は、暗号学的に安全なPRNG(HMAC、CMAC、KMAC)に基づいて構築された安全なパスワード生成器を設計・検証することに成功した。生成されるパスワードの安全性は、これらの基礎となる暗号プリミティブの実証された堅牢性と、PRNG出力の検証済みの高いランダム性に由来する。今後の課題としては、生成器をブラウザ拡張機能やパスワードマネージャーに統合すること、パスワード以外の暗号鍵生成への利用の探索、および完全なシステムに対するサイドチャネル攻撃耐性の分析が含まれる。

6. 独自分析と専門家コメント

核心的洞察: 本論文は、サイバーセキュリティにおける永続的な弱点、すなわち人間が選択するパスワードに対する、実用的でエンジニアリングに焦点を当てた対応である。その核心的価値は、新しい暗号技術にあるのではなく、特定の高インパクトなユースケースに対する、既存の実戦で鍛えられた構成(HMAC、CMAC、KMAC)の正しい適用と厳格な検証にある。パスワード生成をユーザーの脳から検証済みの暗号プロセスに移行することが、鍵交換における対称暗号から非対称暗号への移行に匹敵する、根本的なセキュリティ向上であることを正しく認識している。

論理的流れ: 論理は堅実であり、古典的な応用研究のパターンに従っている:問題定義(脆弱なパスワード)→一般的な解決策の批判(安全でないLCG)→堅牢な解決策の提案(CSPRNGベース生成器)→実証的検証(NISTテスト)。検証のベンチマークとしてNIST SP 800-90Bを選択したことは優れており、これは暗号文脈におけるランダム性評価の事実上の標準であり、結果に即座に信頼性を与える。

長所と欠点:
長所: 本論文の最大の長所は、その実用的な検証にある。多くの提案は設計段階で止まってしまう。出力をNISTの厳格なテストに晒すことで、著者らは採用にとって重要なセキュリティの具体的な証拠を提供している。SHA-3に基づくKMACを含めたことは、NISTの進行中のポスト量子暗号標準化プロセスで指摘されているように、ポスト量子に関する考慮について先見性を示している。
欠点・省略点: 分析はやや孤立している。重大な欠点は、シード管理に関する議論の欠如である。シードが予測可能または漏洩した場合、あらゆるPRNGのセキュリティは崩壊する。システムは、HMAC/CMAC/KMACのための初期暗号鍵をどのように生成、保存、保護するのか?これはアルゴリズム自体と同様に重要である。さらに、パスワード強度をAESと比較することは有用であるが、既存のパスワード生成器(KeePassや1Passwordなど)およびそれらの基礎となるPRNG(例:ChaCha20を使用)とのより直接的な比較は、その競争優位性に関するより良い文脈を提供するだろう。

実践的洞察: セキュリティ実務者にとって、本論文は設計図として機能する。アクション1: セキュリティ上重要なタスクに対して、LCGや類似の非暗号学的RNG(`rand()`など)の使用を直ちに廃止する。アクション2: パスワード生成器を構築または監査する際の主要なチェックリスト項目は次の通りである:1) CSPRNG(NIST SP 800-90AのHMAC_DRBG、CTR_DRBG、または本論文の構成)を使用する、2) NIST SP 800-90BやDieharderなどのスイートでその出力を検証する、3) 高エントロピー源(例:Linuxの`getrandom()`)からの堅牢なシード生成を実装する。本論文は項目2に成功裏に焦点を当てているが、項目1と3も完全な全体像の同様に重要な部分である。

7. 技術詳細と数学的定式化

提案する生成器の安全性は、基礎となる暗号関数に依存する。主要な数学的操作は以下の通り:

8. 分析フレームワークと事例

事例:Webアプリケーションのパスワードリセット機能の監査
シナリオ: Webアプリが「パスワードを忘れた場合」をクリックしたユーザーに一時パスワードを生成する。
フレームワークの適用:

  1. RNGの特定: サーバーサイドコードを調査する。`Math.random()`(JavaScript)やPHPでの単純なLCGが見つかれば、重大な不備である。
  2. エントロピー源の評価: PRNGはどのようにシードされているか?システムエントロピー(`/dev/urandom`、`CryptGenRandom`)を使用しているか?
  3. 提案ソリューションへのマッピング: 欠陥のあるRNGを、本論文の設計を実装したモジュール(例:`os.urandom(32)`からのシードを用いたSHA256による`hmac.new`を使用するPython関数)に置き換えることを推奨する。
  4. 出力の検証(実装後): 1,000,000個の一時パスワードのサンプルを生成し、ビットストリームに変換し、NIST STSスイート(関連するテストスイート)を実行してランダム性を保証する。
このフレームワークは、本論文の理論を具体的な監査と是正チェックリストに変換する。

9. 将来の応用と方向性

中核技術は、ユーザーパスワード生成以外にも応用可能である:

10. 参考文献

  1. M. Bishop, "Computer Security: Art and Science," Addison-Wesley, 2003.
  2. NIST, "Special Publication 800-63B: Digital Identity Guidelines," 2017.
  3. NIST, "Special Publication 800-90A: Recommendation for Random Number Generation Using Deterministic Random Bit Generators," 2015.
  4. NIST, "Special Publication 800-90B: Recommendation for the Entropy Sources Used for Random Bit Generation," 2018.
  5. J. Kelsey, B. Schneier, D. Wagner, "Secure Applications of Low-Entropy Keys," ISW '97.
  6. D. D. Hwang, B. B. Gupta, "A Study of Password Security and Its Implications," JIS, 2019.
  7. NIST, "FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions," 2015.
  8. NIST, "SP 800-185: SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHash," 2016.
  9. M. S. Turan, E. Barker, J. Kelsey, "Recommendation for Random Bit Generator (RBG) Constructions," NIST SP 800-90C, 2016.
  10. P. G. Neumann, "Illustrative Risks to the Public in the Use of Computer Systems and Related Technology," ACM SIGSOFT, 1995.