CryptGenRandom

バッファを暗号論的に乱数なバイト列で満たす。

CryptGenRandom hProv, dwLen, pbBuffer

hProv : [int] CryptAcquireContext の呼び出しで作成された暗号化サービスプロバイダ (CSP) のハンドル。
dwLen : [int] 生成する乱数データのバイト数。
pbBuffer : [var] 返されるデータを受け取るバッファ。このバッファは少なくとも dwLen バイトの長さが必要である。

(プラグイン / モジュール : advapi32.dll)

解説

バッファを暗号論的に乱数なバイト列で満たす。

[戻り値]
関数が成功した場合、戻り値はゼロ以外 (TRUE) となる。失敗した場合、戻り値はゼロ (FALSE)
となる。拡張エラー情報を取得するには GetLastError を呼び出す。「NTE」で始まるエラーコードは使用中の特定の CSP
が生成する。次の表は、返される可能性のあるエラーコードの一部を示す。
(以下省略)

[備考]
この関数が生成するデータは暗号論的に乱数である。C
コンパイラに付属する典型的な乱数発生器が生成するデータよりもはるかにランダム性が高い。この関数は、ランダムな初期化ベクトルやソルト値の生成によく使用される。ソフトウェア乱数発生器は基本的に同じ方法で動作する。シードと呼ばれる乱数から始め、アルゴリズムを使用してその値に基づいた疑似乱数ビット列を生成する。この過程で最も難しいのは、真にランダムなシードを取得することである。これは通常、ユーザー入力の遅延や
1 つ以上のハードウェア コンポーネントのジッタに基づく。Microsoft の CSP では、CryptGenRandom
は他のセキュリティ
コンポーネントが使用する乱数発生器と同じものを使用する。これにより、多数のプロセスがシステム全体のシードに寄与できる。CryptoAPI
は中間の乱数シードをユーザーごとに格納する。乱数発生器のシードを形成するために、呼び出し元のアプリケーションは保持しているビット
(たとえばマウスやキーボードのタイミング入力) を提供し、それが格納されたシードや、プロセス ID、スレッド ID、システム
クロック、システム時間、システム カウンタ、メモリ状態、空きディスク クラスタ、ハッシュ化されたユーザー環境ブロックなどの各種システム
データおよびユーザー データと結合される。この結果は擬似乱数発生器 (PRNG) のシードに使用される。Windows Vista
Service Pack 1 (SP1) 以降では、NIST Special Publication 800-90 で規定された AES
カウンタモードベースの PRNG の実装が使用される。Windows Vista、Windows Storage Server
2003、Windows XP では、Federal Information Processing Standard (FIPS)
186-2 で規定された PRNG が使用される。アプリケーションが良好な乱数ソースにアクセスできる場合、CryptGenRandom
を呼び出す前に pbBuffer バッファにいくつかの乱数データを入れておくことができる。CSP
はこのデータを使用して内部シードをさらにランダム化する。CryptGenRandom を呼び出す前に pbBuffer
バッファを初期化する手順は省略してもよい。

情報

プラグイン / モジュールadvapi32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の advapi32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_advapi32_gen2.hs