(57)【要約】【課題】真の乱数を提供するための命令を実現するコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。【解決手段】複数の機能を実行するように構成された命令が実行される。選択された値を含んでいる命令に関連付けられた機能コードに基づいて、命令の１つまたは複数の入力がチェックされて、複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定する。第１の値を含んでいる１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能が実行され、この生のエントロピーを提供することは、ある数の生の乱数を格納することを含む。さらに、第２の値を含んでいる１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する機能が提供され、この調整済みエントロピーを提供することは、ある数の調整済み乱数を格納することを含む。【選択図】図１４
2019537091.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
実行される命令を取得することであって、前記命令が複数の機能を実行するように構成されている、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
選択された値を含んでいる前記命令に関連付けられた機能コードに基づいて、前記命令の１つまたは複数の入力をチェックして、前記複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することと、
第１の値を含んでいる前記１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行することであって、前記生のエントロピーを提供することが、ある数の生の乱数を格納することを含んでいる、前記機能を実行することと、
第２の値を含んでいる前記１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行することであって、前記調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含んでいる、前記別の機能を実行することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
前記数の生の乱数が、プログラムによって指定された数の生の乱数を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記数の調整済み乱数が、プログラムによって指定された数の調整済み乱数を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記機能コードが、前記命令に関連付けられたレジスタ内で提供され、前記１つまたは複数の入力が、前記命令によって示された１つまたは複数のレジスタ内で提供される、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記１つまたは複数の入力が、少なくとも１つの長さの値を含んでいる、請求項１に記載のコンピュータ・プログラム製品。 
【請求項６】
前記１つまたは複数の入力が第１の長さの値および第２の長さの値を含んでおり、前記チェックすることが、前記第１の長さの値および前記第２の長さの値をチェックすることを含んでおり、前記第１の値を含んでいる前記第１の長さの値に基づいて、前記数の生の乱数を格納し、前記第２の値を含んでいる前記第２の長さの値に基づいて、前記数の調整済み乱数を格納する、請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記第１の値が０より大きい値であり、前記第２の値が０より大きい値である、請求項６に記載のコンピュータ・プログラム製品。
【請求項８】
別の選択された値を含んでいる前記機能コードに基づいて、生と調整済みの間の比率を提供する、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記生と調整済みの間の比率が、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
前記生と調整済みの間の比率を前記提供することが、前記バイト数の生のエントロピーのカウントをパラメータ・ブロックの１つの位置に格納すること、および前記バイト数の調整済みエントロピーのカウントを前記パラメータ・ブロックの別の位置に格納することを含む、請求項９に記載のコンピュータ・プログラム製品。
【請求項１１】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
実行される命令を取得することであって、前記命令が複数の機能を実行するように構成されている、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
選択された値を含んでいる前記命令に関連付けられた機能コードに基づいて、前記命令の１つまたは複数の入力をチェックして、前記複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することと、
第１の値を含んでいる前記１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行することであって、前記生のエントロピーを提供することが、ある数の生の乱数を格納することを含んでいる、前記機能を実行することと、
第２の値を含んでいる前記１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行することであって、前記調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含んでいる、前記別の機能を実行することと
を含んでいる、コンピュータ・システム。
【請求項１２】
前記数の生の乱数が、プログラムによって指定された数の生の乱数を含んでおり、前記数の調整済み乱数が、プログラムによって指定された数の調整済み乱数を含んでいる、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記機能コードが、前記命令に関連付けられたレジスタ内で提供され、前記１つまたは複数の入力が、前記命令によって示された１つまたは複数のレジスタ内で提供される、請求項１１に記載のコンピュータ・システム。
【請求項１４】
前記１つまたは複数の入力が第１の長さの値および第２の長さの値を含んでおり、前記チェックすることが、前記第１の長さの値および前記第２の長さの値をチェックすることを含んでおり、前記第１の値を含んでいる前記第１の長さの値に基づいて、前記数の生の乱数を格納し、前記第２の値を含んでいる前記第２の長さの値に基づいて、前記数の調整済み乱数を格納する、請求項１１に記載のコンピュータ・システム。
【請求項１５】
別の選択された値を含んでいる前記機能コードに基づいて、生と調整済みの間の比率を提供し、前記生と調整済みの間の比率が、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す、請求項１１に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
前記コンピューティング環境のプロセッサによって、実行される命令を取得することであって、前記命令が複数の機能を実行するように構成されている、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
選択された値を含んでいる前記命令に関連付けられた機能コードに基づいて、前記命令の１つまたは複数の入力をチェックして、前記複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することと、
第１の値を含んでいる前記１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行することであって、前記生のエントロピーを提供することが、ある数の生の乱数を格納することを含んでいる、前記機能を実行することと、
第２の値を含んでいる前記１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行することであって、前記調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含んでいる、前記別の機能を実行することと
を含んでいる、コンピュータ実装方法。
【請求項１７】
前記数の生の乱数が、プログラムによって指定された数の生の乱数を含んでおり、前記数の調整済み乱数が、プログラムによって指定された数の調整済み乱数を含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項１８】
前記機能コードが、前記命令に関連付けられたレジスタ内で提供され、前記１つまたは複数の入力が、前記命令によって示された１つまたは複数のレジスタ内で提供される、請求項１６に記載のコンピュータ実装方法。
【請求項１９】
前記１つまたは複数の入力が第１の長さの値および第２の長さの値を含んでおり、前記チェックすることが、前記第１の長さの値および前記第２の長さの値をチェックすることを含んでおり、前記第１の値を含んでいる前記第１の長さの値に基づいて、前記数の生の乱数を格納し、前記第２の値を含んでいる前記第２の長さの値に基づいて、前記数の調整済み乱数を格納する、請求項１６に記載のコンピュータ実装方法。
【請求項２０】
別の選択された値を含んでいる前記機能コードに基づいて、生と調整済みの間の比率を提供し、前記生と調整済みの間の比率が、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す、請求項１６に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内の処理に関し、特に、真の乱数を生成することに関連付けられた処理に関する。
【背景技術】
【０００２】
コンピュータ・アプリケーションは、データ暗号化キーの生成、複雑な現象のシミュレーション、大規模なデータ・セットからのサンプルの選択、ゲームなどを含むさまざまな機能に、乱数を使用する。乱数を生成するために、乱数発生器（ＲＮＧ：random number generator）が使用される。乱数発生器は、ランダムな偶然による予測よりも正しく合理的に予測できない一連の数値またはシンボルを生成するように設計された計算デバイスまたは物理デバイスである。乱数は、疑似乱数または真の乱数であることがある。
【０００３】
疑似乱数は、疑似乱数発生器（ＰＲＮＧ：pseudorandom number generator）（決定論的ランダム・ビット発生器（ＤＲＢＧ：deterministic random bit generator）とも呼ばれる）を使用して生成される。疑似乱数発生器は、一連の乱数の特性に近い特性を有する一連の数値を生成するためのアルゴリズムである。ＰＲＮＧによって生成されるシーケンスは、相対的に小さい初期値（ＰＲＮＧのシードと呼ばれ、真にランダムな値を含んでよい）のセットによって完全に決定されるため、真にランダムではない。
【０００４】
真の乱数は、ハードウェア乱数発生器（真の乱数発生器（ＴＲＮＧ：true random number generator）とも呼ばれる）を使用して生成される。真の乱数発生器は、コンピュータ・プログラムではなく物理的プロセスから乱数を生成するデバイスである。例として、真の乱数発生器は、放射性同位元素の崩壊の量子効果、大気電波雑音、リング発振器の干渉などに基づいてよい。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】The National Institute of Standards and Technology (NIST) DRAFT Special Publication 800-90B, Recommendation for the Entropy Sources Used for Random Bit Generation
【非特許文献２】“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015
【非特許文献３】“Power ISA (TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015
【非特許文献４】Recommendation for Random Number Generation Using Deterministic Random Bit Generators, National Institute of Standards and Technology (NIST), NIST Special Publication 800-90A, January 2012
【非特許文献５】Secure Hash Standard (SHS), Federal Information Processing Standards Publication, FIPS PUB 180-4, National Institute of Standards and Technology, Gaithersburg, MD, March 2012
【発明の概要】
【発明が解決しようとする課題】
【０００６】
真の乱数を提供するための命令を実現するコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。
【課題を解決するための手段】
【０００７】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するために処理回路によって実行される命令を格納しているストレージ媒体を備える。この方法は、例えば、実行される命令を取得することを含んでおり、この命令は複数の機能を実行するように構成される。この命令は実行され、この実行することが、選択された値を含んでいる命令に関連付けられた機能コードに基づいて、命令の１つまたは複数の入力をチェックして、複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することを含む。第１の値を含んでいる１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行し、この生のエントロピーを提供することは、ある数の生の乱数を格納することを含む。第２の値を含んでいる１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行し、この調整済みエントロピーを提供することは、ある数の調整済み乱数（conditioned random numbers）を格納することを含む。
【０００８】
生のエントロピーまたは調整済みエントロピーあるいはその両方を提供することができる１つの命令が使用される。命令を使用して真の乱数が生成され、それらの乱数は、高度にセキュリティで保護されたデータ暗号化処理またはその他の処理あるいはその両方などの、コンピューティング環境内の処理を容易にする。
【０００９】
例として、この数の生の乱数は、プログラムによって指定された数の生の乱数を含み、この数の調整済み乱数は、プログラムによって指定された数の調整済み乱数を含む。
【００１０】
一実施形態では、機能コードが、命令に関連付けられたレジスタ内で提供され、１つまたは複数の入力が、命令によって示された１つまたは複数のレジスタ内で提供される。
【００１１】
１つの例として、１つまたは複数の入力が少なくとも１つの長さの値を含む。例えば、１つまたは複数の入力が、第１の長さの値および第２の長さの値を含み、チェックすることが、第１の長さの値および第２の長さの値をチェックすることを含む。第１の値を含んでいる第１の長さの値に基づいて、この数の生の乱数が格納され、第２の値を含んでいる第２の長さの値に基づいて、この数の調整済み乱数が格納される。
【００１２】
例として、第１の値が０より大きい値であり、第２の値が０より大きい値である。
【００１３】
さらに別の実施形態では、別の選択された値を含んでいる機能コードに基づいて、生と調整済みの間の比率が提供される。生と調整済みの間の比率は、例えば、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す。この提供することは、例えば、このバイト数の生のエントロピーのカウントをパラメータ・ブロックの１つの位置に格納すること、およびこのバイト数の調整済みエントロピーのカウントをパラメータ・ブロックの別の位置に格納すること含む。
【００１４】
生のエントロピー、調整済みエントロピー、または生と調整済みの間の比率、あるいはその組み合わせを提供するために、１つの命令が使用されてよい。
【００１５】
１つまたは複数の態様に関連する方法およびシステムも本明細書に記載され、請求される。さらに、１つまたは複数の態様に関連するサービスも本明細書に記載されており、請求されてよい。
【００１６】
その他の特徴および長所が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【００１７】
以下の図面を単に例として参照し、本発明の実施形態について説明する。
【図面の簡単な説明】
【００１８】
【図１】本発明の１つまたは複数の実施形態を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【図２】本発明の実施形態による、図１のプロセッサをさらに詳細に示す図である。
【図３】本発明の１つまたは複数の実施形態を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図４】本発明の実施形態による、図３のメモリをさらに詳細に示す図である。
【図５】本発明の実施形態による、乱数動作実行命令の書式の一例を示す図である。
【図６】本発明の実施形態による、図５の乱数動作実行命令の１つまたは複数の実施形態によって使用される汎用レジスタ（汎用レジスタ０（ＧＲ０））の内容の一例を示す図である。
【図７】本発明の実施形態による、図５の乱数動作実行命令によって使用される別の汎用レジスタ（汎用レジスタ１（ＧＲ１））の内容の一例を示す図である。
【図８】本発明の実施形態による、図５の乱数動作実行命令によって１つまたは複数の実施形態において使用されるレジスタＲ１の内容の一例を示す図である。
【図９】本発明の実施形態による、図５の乱数動作実行命令によって１つまたは複数の実施形態において使用されるレジスタＲ１＋１の内容の一例を示す図である。
【図１０】本発明の実施形態による、図５の乱数動作実行命令によって１つまたは複数の実施形態において使用されるレジスタＲ２の内容の一例を示す図である。
【図１１】本発明の実施形態による、図５の乱数動作実行命令によって１つまたは複数の実施形態において使用されるレジスタＲ２＋１の内容の一例を示す図である。
【図１２】本発明の実施形態による、図５の乱数動作実行命令によって使用するためのパラメータ・ブロックの書式の一例を示す図である。
【図１３】本発明の実施形態による、乱数動作実行に関連付けられた処理の一例を示す図である。
【図１４】本発明の実施形態による、乱数動作実行命令の真の乱数発生器の機能に関連付けられた処理の一例を示す図である。
【図１５】本発明の実施形態による、乱数動作実行命令の真の乱数発生器の機能に関連付けられた処理の別の例を示す図である。
【図１６】本発明の実施形態による、複数の機能を実行するように構成された命令の実行に関連付けられた処理の一例を示す図である。
【図１７】本発明の実施形態による、複数の機能を実行するように構成された命令の実行に関連付けられた処理の一例を示す図である。
【発明を実施するための形態】
【００１９】
１つまたは複数の実施形態によれば、真の乱数が提供される。例えば、高度にセキュリティで保護されたデータ暗号化処理において、およびその他の処理において、真の乱数が使用されてよい。１つの例として、本発明の実施形態によれば、真の乱数を生成する命令（例えば、設計されたマシン命令）が提供される。この命令は、騒音源からの直接的な生のエントロピー、疑似乱数発生器によって処理された生のエントロピーである調整済みエントロピー、あるいはその両方を生成してよい。さらに、一実施形態では、この命令は、生の出力と調整済み出力の間の比率を示す生と調整済みの間の比率をさらに提供する。さらに、この命令は、１つまたは複数のその他の機能を提供してよい。多くの変形が存在する。
【００２０】
The National Institute of Standards and Technology (NIST) DRAFT Special Publication 800-90B, Recommendation for the Entropy Sources Used for Random Bit Generationには、ＴＲＮＧのエントロピー源モデルが記載されており、このモデルは、（ａ）騒音源（およびそのデジタル化）、（ｂ）オプションの条件、および（ｃ）正常性チェックを含んでいる。騒音源は、上で示されたメカニズムのいずれかを含んでよく、例としては、放射性同位元素の崩壊、大気電波雑音、リング発振器の干渉などが挙げられる。騒音源において生じる可能性があるバイアスを減らすため、またはエントロピーの比率を増やすために、調整が使用されてよい。正常性チェックは、騒音源およびエントロピー源が期待されるパラメータの範囲内で動作し続けることを保証する。
【００２１】
ＮＩＳＴの勧告の少なくとも１つの実施形態に従って、生のエントロピーまたは調整済みエントロピーあるいはその両方を生成し、生の出力と調整済み出力の間の比率を提供することができる命令（本明細書では、乱数動作実行命令と呼ばれる）が提供される。
【００２２】
本発明の１つまたは複数の実施形態を組み込んで使用するためのコンピューティング環境の一例が、図１を参照して説明される。１つの例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２３】
別の例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅに基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅの一実施形態は、“Power ISA (TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。ＰＯＷＥＲ  ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２４】
コンピューティング環境は、インテルｘ８６アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。
【００２５】
図１に示されているように、コンピューティング環境１００は、例えば、１つまたは複数のプロセッサまたはプロセッシング・ユニット１６、システム・メモリ２８、およびシステム・メモリ２８を含むさまざまなシステム・コンポーネントをプロセッサ１６に結合するバス１８を含んでよいが、これらに限定されない、コンピュータ・システム／サーバ１２を含んでいる。
【００２６】
バス１８は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、１つまたは複数の任意の種類のバス構造を表す。例として、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnect）バスを含むが、これらに限定されない。
【００２７】
コンピュータ・システム／サーバ１２は、通常、さまざまなコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム／サーバ１２によってアクセスできる任意の使用可能な媒体であってよく、揮発性および不揮発性媒体、取り外し可能および取り外し不可の媒体を含む。
【００２８】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）３０またはキャッシュ・メモリ３２あるいはその両方などの、揮発性メモリの形態でのコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ１２は、その他の取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含んでよい。単に例として、取り外し不可、不揮発性の磁気媒体（図示されておらず、通常は「ハード・ドライブ」と呼ばれる）に対する読み取りと書き込みを行うために、ストレージ・システム３４を提供することができる。図示されていないが、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブを提供することができる。そのような例では、それぞれを、１つまたは複数のデータ媒体インターフェイスによってバス１８に接続することができる。下でさらに示され、説明されるように、メモリ２８は、本発明の実施形態の機能を実行するように構成された一連の（例えば、少なくとも１つの）プログラム・モジュールを備える少なくとも１つのプログラム製品を含むことができる。
【００２９】
例えば、一連の（少なくとも１つの）プログラム・モジュール４２を含んでいるプログラム／ユーティリティ４０がメモリ２８に格納されてよいが、これに限定されず、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの何らかの組み合わせは、それぞれネットワーク環境の実装を含んでよい。プログラム・モジュール４２は、通常、本明細書に記載された本発明の実施形態の機能または方法あるいはその両方を実行する。
【００３０】
また、コンピュータ・システム／サーバ１２は、キーボード、ポインティング・デバイス、ディスプレイ２４などの１つまたは複数の外部デバイス１４、ユーザがコンピュータ・システム／サーバ１２と情報をやりとりできるようにする１つまたは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つまたは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはその組み合わせと通信することもできる。そのような通信は、入出力（Ｉ／Ｏ：Input/Output）インターフェイス２２を介して行うことができる。さらに、コンピュータ・システム／サーバ１２は、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと、ネットワーク・アダプタ２０を介して通信することができる。図示されているように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されていないが、その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム／サーバ１２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００３１】
プロセッサ１６は、命令を実行するために使用される複数の機能コンポーネントを含む。図２に示されているように、これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１２０と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット１２２と、デコードされた命令を実行するための命令実行コンポーネント１２４と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１２６と、実行された命令の結果を提供するための書き戻しコンポーネント１３０とを含む。これらのコンポーネントのうちの１つまたは複数は、本発明の実施形態によれば、下でさらに説明されているように、真の乱数またはそれらの乱数に関連付けられた情報１３６を提供してよい。
【００３２】
プロセッサ１６は、一実施形態では、機能コンポーネントのうちの１つまたは複数によって使用される１つまたは複数のレジスタ１４０も含む。
【００３３】
１つまたは複数の実施形態を組み込んで使用するためのコンピューティング環境の別の例が、図３を参照して説明される。この例では、コンピューティング環境２００は、例えば、１つまたは複数のバス２０８またはその他の接続あるいはその両方などを介して互いに結合された、ネイティブ中央処理装置（ＣＰＵ：central processing unit）２０２、メモリ２０４、および１つまたは複数の入出力デバイスまたはインターフェイス２０６あるいはその両方を含む。例として、コンピューティング環境２００は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣプロセッサまたはｐＳｅｒｉｅｓサーバ、ヒューレット・パッカード社（カリフォルニア州パロアルト市）によって提供されるインテルＩｔａｎｉｕｍ  ＩＩプロセッサ内蔵ＨＰ  Ｓｕｐｅｒｄｏｍｅ、あるいはＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ、ヒューレット・パッカード社、インテル社、Ｏｒａｃｌｅ社、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
【００３４】
ネイティブ中央処理装置２０２は、環境内で処理中に使用される１つまたは複数の汎用レジスタまたは１つまたは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【００３５】
さらに、ネイティブ中央処理装置２０２は、メモリ２０４に格納された命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ２０４に格納されたエミュレータ・コード２１２を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード２１２は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づくマシン（ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバなど）が、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【００３６】
エミュレータ・コード２１２に関連する詳細が、図４を参照してさらに説明される。メモリ２０４に格納されたゲスト命令２５０は、ネイティブＣＰＵ２０２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（例えば、マシン命令と相互関係がある）ソフトウェア命令を含む。例えば、ゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ１０２上で実行するように設計されてよいが、代わりに、例えばインテルＩｔａｎｉｕｍ  ＩＩプロセッサであってよい、ネイティブＣＰＵ２０２上でエミュレートされる。１つの例では、エミュレータ・コード２１２は、メモリ２０４から１つまたは複数のゲスト命令２５０を取得するため、および取得された命令のローカル・バッファリングを必要に応じて提供するための命令フェッチ・ルーチン２５２を含む。エミュレータ・コード２１２は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、１つまたは複数の対応するネイティブ命令２５６に変換するための命令変換ルーチン２５４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【００３７】
さらに、エミュレータ２１２は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令２５６の実行は、データをメモリ２０４からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【００３８】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置２０２によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０を使用して、またはメモリ２０４内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令２５０、ネイティブ命令２５６、およびエミュレータ・コード２１２は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【００３９】
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはその組み合わせを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【００４０】
１つの例では、取得され、変換されて実行されるゲスト命令２５０は、本明細書に記載された乱数動作実行命令である。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ、ｐＳｅｒｉｅｓ、インテルなど）のネイティブ命令２５６のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【００４１】
命令の明示的フィールドおよび暗黙的フィールドを含んでいる、乱数動作実行命令、ならびに（ネイティブ・システム内またはエミュレートされたシステム内の）プロセッサによる実行の一実施形態に関連する詳細が本明細書において説明される。本発明の実施形態によれば、乱数動作実行命令は、使用可能な機能の指示を提供するために使用される問い合わせ機能、疑似乱数機能（例えば、ＳＨＡ−５１２−ＤＲＮＧ機能）、生のエントロピー、調整済みエントロピー、またはその両方を生成する真の乱数機能（ＴＲＮＧ）、および生と調整済みの間の比率の問い合わせ機能を含むが、これらに限定されない、複数の機能を提供し、これらの各機能が下でさらに詳細に説明される。他の実施形態では、機能のうちの１つまたは複数がサポートも提供もされなくてよく、または１つまたは複数の他の機能が提供されてよく、あるいはその両方が行われてよい。多くの可能性が存在する。
【００４２】
乱数動作実行命令の一実施形態が、図５を参照して説明される。１つの例では、乱数動作実行命令３００は、乱数動作実行を示すためのオペレーション・コード（オペコード）を含んでいるオペコード・フィールド３０２（例えば、ビット０〜１５）、少なくとも１つの第１のレジスタ（Ｒ１）を指定するために使用される第１のレジスタ・フィールド３０４（例えば、ビット２４〜２７）、および少なくとも１つの第２のレジスタ（Ｒ２）を指定するために使用される第２のレジスタ・フィールド３０６（例えば、ビット２８〜３１）を含む。各フィールド３０４〜３０６は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド３０４〜３０６は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。
【００４３】
１つの例では、命令の書式は、拡張されたオペコード・フィールドを伴うレジスタ・アンド・レジスタ動作である。この書式では、Ｒ１フィールドによって指定された偶数と奇数のレジスタ対の内容は、第１のオペランドのアドレスおよび長さを含む。同様に、Ｒ２フィールドによって指定された偶数と奇数のレジスタ対の内容は、第２のオペランドのアドレスおよび長さを含む。
【００４４】
命令内でエンコードされるＲ１およびＲ２に加えて、命令の１つの実装は、例えば汎用レジスタ０（ＧＲ０）および汎用レジスタ１（ＧＲ１）を含む、１つまたは複数のインプライド・レジスタを使用する。各レジスタが、図６〜１１を参照して以下でさらに説明される。
【００４５】
最初に図６を参照して、汎用レジスタ０（３２０）の書式の一実施形態が説明される。１つの例では、汎用レジスタ０は、変更子（Ｍ：modifier）制御３２２（例えば、ビット５６）、および機能コード（ＦＣ：function code）フィールド３２４（例えば、ビット５７〜６３）を含む。機能コード・フィールドは、実行される機能を指定する機能コードを含む。機能の一部は、本明細書において示されているように、パラメータ・ブロックを使用してよい。１つの例では、割り当てられる機能コードは、１６のパラメータ・ブロック・サイズが割り当てられる問い合わせ機能のコード０と、２４０のパラメータ・ブロック・サイズが割り当てられるＳＨＡ−５１２−ＤＲＮＧ（決定論的乱数発生器）機能のコード３と、８のパラメータ・ブロック・サイズが割り当てられる乱数動作実行−ＴＲＮＧ−生と調整済みの間の比率問い合わせ機能（Perform Random Number Operation-TRNG-Query Raw-to-Conditioned Ratio function）のコード１１２と、パラメータ・ブロックを使用しない乱数動作実行−ＴＲＮＧのコード１１４とを含む。汎用レジスタ０のビット５７〜６３が、割り当てられていないか、またはインストールされていない機能コードを指定している場合、１つの実装では、指定例外が認識される。
【００４６】
機能に応じて、ストレージ内のパラメータ・ブロック、第１のオペランド、または第２のオペランド、あるいはその組み合わせが、命令によってアクセスされてよい。適用可能な場合、図７に示されているように、３３０で汎用レジスタ１は、ストレージ内のパラメータ・ブロックの左端のバイトのアドレス３３２を含む。さらに、適用可能な場合、汎用レジスタＲ１およびＲ２は、第１および第２のオペランドにそれぞれ対応する偶数と奇数の汎用レジスタ対を指定する。偶数番号が付けられたレジスタＲ１（図８の３４０）、Ｒ２（図１０の３６０）は、ストレージ内のオペランドのアドレス３４２、３６２を含み、奇数番号が付けられたレジスタＲ１＋１（図９の３５０）、Ｒ２＋１（図１１の３７０）は、各オペランドの長さ３５２、３７２を含む。対応するオペランドの長さがゼロ以外である場合に、オペランドに対応するストレージ位置がアクセスされる。
【００４７】
一実施形態では、アドレスを含んでいる汎用レジスタが、現在のアドレス指定モードの対象になる。例えば、２４ビット・アドレス指定モードでは、レジスタのビット位置４０〜６３の内容がストレージ位置のアドレスを構成し、ビット位置０〜３９の内容が無視される。３１ビット・アドレス指定モードでは、レジスタのビット位置３３〜６３の内容がストレージ位置のアドレスを構成し、ビット位置０〜３２の内容が無視される。６４ビット・アドレス指定モードでは、レジスタのビット位置０〜６３の内容がストレージ位置のアドレスを構成する。アクセス・レジスタ・モードでは、汎用レジスタ１、Ｒ１、およびＲ２が、パラメータ・ブロック、第１のオペランド、および第２のオペランドを含んでいるアドレス空間をそれぞれ指定する。
【００４８】
オペランドの長さを含んでいる奇数番号が付けられたレジスタも、現在のアドレス指定モードの対象になる。２４ビット・アドレス指定モードまたは３１ビット・アドレス指定モードのいずれかでは、レジスタのビット位置３２〜６３の内容が、ストレージ・オペランド内のバイト数を指定する３２ビット符号なし２進整数を形成し、ビット位置０〜３１が無視される。６４ビット・アドレス指定モードでは、レジスタのビット位置０〜６３の内容が、ストレージ・オペランド内のバイト数を指定する６４ビット符号なし２進整数を形成する。
【００４９】
他の機能の利用可能性を示すためのメカニズムを提供する問い合わせ機能（例えば、機能コード０）の場合、汎用レジスタＲ１、Ｒ１＋１、Ｒ２、およびＲ２＋１の内容が無視される。
【００５０】
ＳＨＡ−５１２−ＤＲＮＧ機能（例えば、機能コード３）の場合、変更子制御３２２が使用される。変更子制御が０である場合、生成動作が実行され、変更子制御が１である場合、シード動作が実行される。さらに、ＳＨＡ−５１２−ＤＲＮＧ機能の生成動作の場合、命令の完了時に、汎用レジスタＲ１＋１内の第１のオペランドの長さが更新される。汎用レジスタＲ１内の第１のオペランドのアドレスは更新されない。
【００５１】
ＴＲＮＧ生と調整済みの間の比率問い合わせ機能（例えば、機能コード１１２）の場合、汎用レジスタＲ１、Ｒ１＋１、Ｒ２、およびＲ２＋１の内容が無視される。
【００５２】
ＴＲＮＧ機能（例えば、機能コード１１４）の場合、命令の完了時に、汎用レジスタＲ１、Ｒ１＋１、Ｒ２、およびＲ２＋１内の第１のオペランドのアドレス、第１のオペランドの長さ、第２のオペランドのアドレス、および第２のオペランドの長さがそれぞれ更新されてよい。２４ビット・アドレス指定モードでは、偶数番号が付けられたレジスタのビット４０〜６３が、各オペランドの処理されたバイト数だけインクリメントされ、レジスタのビット０〜３１が変更されず、オペランドの長さに関わらず、レジスタのビット３２〜３９が０に設定されるか、または変更されなくてよい。３１ビット・アドレス指定モードでは、偶数番号が付けられたレジスタのビット３３〜６３が、各オペランドの処理されたバイト数だけインクリメントされ、レジスタのビット０〜３１が変更されず、オペランドの長さに関わらず、レジスタのビット３２が０に設定されるか、または変更されなくてよい。６４ビット・アドレス指定モードでは、偶数番号が付けられたレジスタのビット０〜６３が、各オペランドの処理されたバイト数だけインクリメントされる。２４ビット・アドレス指定モードまたは３１ビット・アドレス指定モードのいずれかでは、偶数番号が付けられたレジスタのビット３２〜６３が、各オペランドの処理されたバイト数だけデクリメントされ、レジスタのビット０〜３１が変更されない。６４ビット・アドレス指定モードでは、偶数番号が付けられたレジスタのビット０〜６３が、各オペランドによって処理されたバイト数だけデクリメントされる。
【００５３】
パラメータ・ブロックがストレージ・オペランドのいずれかの部分と重複する場合、結果は予測不可能になる。
【００５４】
他のＣＰＵ、およびＩ／Ｏサブシステムによって観察されるとき、パラメータ・ブロックおよびストレージ・オペランドへの参照は、多重アクセス参照であってよく、これらの位置へのアクセスは、必ずしもブロック・コンカレントではなく、これらのアクセスまたは参照のシーケンスは定義されない。
【００５５】
各機能が、以下でさらに説明される。
【００５６】
問い合わせ機能：
１つの例では、０の機能コードが問い合わせ機能を示す。問い合わせ機能を示すことに基づいて、状態ワード（例えば、１２８ビット）が、命令に関連付けられたパラメータ・ブロックに格納される。このフィールドのビット０〜１２７は、乱数動作実行命令の機能コード０〜１２７にそれぞれ対応する。ビットが１である場合、対応する機能がインストールされ、そうでない場合、その機能はインストールされない。例えば、ＳＨＡ−５１２−ＤＲＮＧ機能がインストールされる場合、ビット３（機能コード３に対応する）が１に設定される。同様に、ＴＲＮＧ−生と調整済みの間の比率問い合わせ機能がインストールされる場合、ビット１１２（機能コード１１２に対応する）が１に設定され、ＴＲＮＧ動作がインストールされる場合、ビット１１４（機能コード１１４に対応する）が１に設定される。
問い合わせ機能の実行が完了したときに、条件コード０が設定され、条件コード３（例えば、機能の部分的完了を指定する）は、問い合わせ機能には適用できない。
【００５７】
ＤＲＮＧ機能：
１つの実装では、３の機能コードが、実行される決定論的乱数発生器（ＤＲＮＧ：deterministic random number generator）機能を指定する。変更子制御３２２（例えば、汎用レジスタ０のビット５６）に応じて、ＤＲＮＧ機能は、決定論的疑似乱数生成動作または決定論的疑似乱数シード動作のいずれかを実行し、これらの各動作は、例えば５１２ビットのセキュア・ハッシュ・アルゴリズム（ＳＨＡ−５１２）を使用する。
決定論的疑似乱数生成（決定論的ランダム・ビット生成とも呼ばれる）は、例えば、Recommendation for Random Number Generation Using Deterministic Random Bit Generators, National Institute of Standards and Technology (NIST), NIST Special Publication 800-90A, January 2012において定義されている。さらに、セキュア・ハッシュ・アルゴリズムの説明が、例えば、Secure Hash Standard (SHS), Federal Information Processing Standards Publication, FIPS PUB 180-4, National Institute of Standards and Technology, Gaithersburg, MD, March 2012に見られる。
【００５８】
ＤＲＮＧ機能の場合、決定論的乱数発生器の内部状態を表すパラメータ・ブロックが使用される。１つの例では、ＤＲＮＧ機能のパラメータ・ブロックが次を含む。
予備：パラメータ・ブロックのバイト０〜３、１６、および１２８は予備である。
再シード・カウンタ：パラメータ・ブロックのバイト４〜７は、パラメータ・ブロックが最後にインスタンス化または再シードされてからの、命令が条件コード０を伴って完了した回数を示す３２ビット符号なし２進整数を含む。
【００５９】
再シード・カウンタが０を含んでいる場合、以下が適用される。
＊  シード動作の実行が、再シード・カウンタを１の値に設定することを含む、初期値を使用したパラメータ・ブロックのインスタンス化を引き起こす。
＊  生成動作の実行が、指定例外が認識されることを引き起こす。
【００６０】
再シード・カウンタがゼロ以外の値を含んでいる場合、パラメータ・ブロックがインスタンス化されていると見なされ、以下が適用される。
＊  シード動作の実行が、再シード・カウンタを１の値にリセットすることを含む、パラメータ・ブロックの再シードを引き起こす。
＊  条件コード０をもたらす生成動作の実行が、再シード・カウンタが１だけインクリメントされることを引き起こし、再シード・カウンタ・フィールドのビット位置０の繰り上げが無視される。
【００６１】
ストリーム・バイト：パラメータ・ブロックのバイト８〜１５は、６４ビット符号なし２進整数を含む。ストリーム・バイト・フィールドは、パラメータ・ブロックをインスタンス化するときに（すなわち、再シード・カウンタが０であるときに）、シード動作の実行によって０に設定され、パラメータ・ブロックがすでにインスタンス化されている場合、このフィールドは、シード動作の実行によって変更されない。
【００６２】
生成動作の部分的完了または完全な完了は、ストリーム・バイト・フィールドの内容が、第１のオペランドに格納されたバイトの数だけインクリメントされることを引き起こし、ストリーム・バイト・フィールドのビット位置０の繰り上げが無視される。
【００６３】
値（Ｖ）：パラメータ・ブロックのバイト１７〜１２７は、例えば、パラメータ・ブロックによって表された乱数発生器の内部状態を示す８８８のビット値を含む。Ｖは、パラメータ・ブロックをインスタンス化するときに、シード動作の実行によって初期化される。Ｖは、（ａ）再シード・カウンタがゼロ以外であるときのシード動作の実行、または（ｂ）条件コード０で終了する生成動作の実行のいずれかによって更新される。
【００６４】
定数（Ｃ）：パラメータ・ブロックのバイト１２９〜２３９は、例えば、ブロックによって表された乱数発生器の内部状態を示す８８８のビット値を含む。Ｃは、シード動作の実行によって初期化され、生成動作によって調査される。
【００６５】
同じパラメータ・ブロックの書式が、生成動作およびシード動作（インスタンス化および再シードを含む）の両方によって使用される。すべて０を含んでいるパラメータ・ブロックは、インスタンス化されていないと見なされる。プログラムは、シード動作を発行してパラメータ・ブロックをインスタンス化する前に、パラメータ・ブロックに０を設定するべきであり、その後、プログラムは、パラメータ・ブロックの内容を、０を設定することを除いて、変更するべきではなく、そうしない場合、予測不可能な結果が命令によって生成されることがある。
【００６６】
ＤＲＮＧ機能（本明細書では、ＳＨＡ−５１２−ＤＲＮＧ機能とも呼ばれる）のシード動作および生成動作に関する詳細が、下でさらに説明される。
【００６７】
ＳＨＡ−５１２−ＤＲＮＧシード動作が、例えば５１２ビットのセキュア・ハッシュ・アルゴリズムを使用して、決定論的疑似乱数生成パラメータ・ブロックをインスタンス化または再シードする。一実施形態では、動作がプロセッサによって実行されるが、他の実施形態では、動作が他のコンポーネントまたはコプロセッサによって実行される。
【００６８】
パラメータ・ブロックのバイト４〜７内の再シード・カウンタがゼロまたはゼロ以外のいずれであるかに応じて、インスタンス化動作または再シード動作がそれぞれ実行される。インスタンス化および再シードの詳細が、下でさらに説明される。
＊  インスタンス化動作の場合、ストレージ内の第２のオペランドが、エントロピー入力、ノンス、オプションのパーソナライゼーション文字列のうちの１つまたは複数を含み、これらはそれぞれ、下で説明される。この情報は、シードの材料を形成するために使用される。
【００６９】
一例として、エントロピー入力は、決定論的ランダム・ビット発生器（ＤＲＢＧ：Deterministic Random Bit Generator）メカニズムに関する予測不可能性の評価された最小量を提供する入力ビット文字列である。ＤＲＢＧメカニズムは、ランダム・ビット発生器（ＲＢＧ：random bit generator）の一部であり、ＲＢＧのインスタンス化およびアンインスタンス化、疑似ランダム・ビットの生成、オプションのＲＢＧの再シード、およびＤＲＢＧメカニズムの正常性のテストを実行するための機能を含んでいる。
【００７０】
ランダム・ビット発生器（ＲＢＧ）は、統計的に独立していて、バイアスされていないように見えるバイナリ・ビットのシーケンスを出力するデバイス、アルゴリズム、技術、またはメカニズムである。ＲＢＧの一例は、ＤＲＢＧである。例えば、ＤＲＢＧは、ＤＲＢＧメカニズムを含んでいて、（少なくとも最初に）エントロピー入力のソースにアクセスできるＲＢＧである。ＤＲＢＧは、ビットのシーケンスを、シードと呼ばれる秘密の初期値およびその他の可能性のある入力から生成する。
【００７１】
シードは、ＤＲＢＧメカニズムへの入力として使用されるビットの文字列である。シードは、ＤＲＢＧの内部状態の一部を決定し、そのエントロピーは、ＤＲＢＧのセキュリティ強度を支援するのに十分である。エントロピーは、閉鎖系における不規則性、ランダム性、または変動性の尺度である。最小エントロピーは、１つの実装で使用される尺度である。
【００７２】
ランダム変数Ｘの最小エントロピー（ビット単位）は、Ｘの各観測が少なくともｍビットの情報を提供するという特性を有する最大の値ｍである（すなわち、Ｘの最小エントロピーは、Ｘの可能性がある観測の情報の内容に関する最大の下限である）。ランダム変数の最小エントロピーは、そのエントロピーに対する下限である。最小エントロピーの定式化は、確率ｐ１，．．．，ｐｎを含んでいる離散分布の場合、−（ｌｏｇ２  ｍａｘ  ｐｉ）である。最小エントロピーは、多くの場合、ランダム変数の予測不可能性の最悪ケースの尺度として使用される。
【００７３】
ノンスは、多くても無視できる程度の反復の可能性がある時間的に変化する値であり、例えば、使用、タイムスタンプ、シーケンス番号、またはこれらの何らかの組み合わせごとに新たに生成されるランダムな値である。
【００７４】
パーソナライゼーション文字列は、秘密のエントロピー入力および（場合によっては）ノンスと結合されてシードを生成する、オプションのビットの文字列である。
＊  再シード動作の場合（再シードは、ＤＲＢＧメカニズムの内部状態に影響を与える追加ビットを取得する）、ストレージ内の第２のオペランドは、シードの材料を形成するために使用される、エントロピー入力およびオプションの追加の入力を含む。オプションの追加の入力は、ランダム性をさらに追加する、例えば時間値またはその他の任意の値などの、任意の望ましい情報であってよい。
【００７５】
インスタンス化動作を実行する場合、シードの材料は、第２のオペランドを使用して形成される。例えば、第２のオペランドの入力値が連結されて、シードの材料を形成する。しかし、再シード動作を実行する場合、シードの材料は、例えば、１６進数の値０１、パラメータ・ブロックのＶフィールドの内容、および第２のオペランドの内容の連結から形成される。
【００７６】
インスタンス化動作または再シード動作のいずれかの場合、１つまたは複数のシード値が初期化／更新される。１つの例では、そのような１つのシード値は、次のように形成されるＶｎｅｗである。１バイトのカウンタ、８８８の４バイト値、シードの材料（前述したように形成される）、および埋め込みが連結され、例えばＳＨＡ−５１２アルゴリズムへの入力として、初期ハッシュ値（初期チェイニング値とも呼ばれる）と共に使用される。一実施形態では、埋め込みは、１６進数の８０が、０〜１２７バイトの０と連結され、埋め込みを含んでいないＳＨＡ−５１２アルゴリズムへの入力のビット単位の長さ（すなわち、１バイトのカウンタ、８８８の４バイト値、およびシードの材料の長さ）を指定する１６バイトの２進整数と連結された値である。例えば、初期ハッシュ値は６４バイト値である。
【００７７】
ＳＨＡ−５１２アルゴリズムが２回呼び出されて、２つの６４ビットのハッシュされた結果を形成し、１バイトのカウンタが、ＳＨＡ−５１２アルゴリズムの１回目の呼び出しでは値１を含み、２回目の呼び出しでは値２を含む。また、この２回目の呼び出しは、８８８の４バイト値、シードの材料、および埋め込みを、初期ハッシュ値と共に、ＳＨＡ−５１２アルゴリズムへの入力として使用して、６４ビットのハッシュされた結果を形成する。
【００７８】
２つの６４バイトのハッシュされた結果が一緒に連結され、この例では、１２８バイトの連結の左端の１１１バイトが、パラメータ・ブロック内の新しい値フィールド（Ｖｎｅｗ）を形成する。
【００７９】
Ｖｎｅｗフィールドの形成と同様に、新しい定数フィールド（Ｃｎｅｗ）が、インスタンス化動作中または再シード動作中に形成される。Ｃｎｅｗは、パラメータ・ブロックに格納される別のシード値である。１バイトのカウンタ、８８８の４バイト値、０の１バイト値、Ｖｎｅｗフィールド、および埋め込みが連結され、例えばＳＨＡ−５１２アルゴリズムへの入力として、初期ハッシュ値と共に使用される。例えば、埋め込みは、１６進数の８０が、１２２バイトの０と連結され、埋め込みを含んでいないＳＨＡ−５１２アルゴリズムへの入力のビット単位の長さ（すなわち、１バイトのカウンタ、８８８の４バイト値、０の１バイト値、およびＶｎｅｗフィールドの長さ）を指定する１６バイトの２進整数と連結された値である。
【００８０】
ＳＨＡ−５１２アルゴリズムが２回呼び出されて、２つの６４ビットのハッシュされた結果を形成し、１バイトのカウンタが、ＳＨＡ−５１２アルゴリズムの１回目の呼び出しでは値１を含み、２回目の呼び出しでは値２を含む。また、この２回目の呼び出しは、８８８の４バイト値、０の１バイト値、Ｖｎｅｗフィールド、および埋め込みを、ＳＨＡ−５１２アルゴリズムへの入力として、初期ハッシュ値と共に使用する。
【００８１】
２つの６４バイトのハッシュされた結果が一緒に連結され、この例では、１２８バイトの連結の左端の１１１バイトが、新しい定数フィールド（Ｃｎｅｗ）を形成する。
【００８２】
インスタンス化動作または再シード動作のいずれかの場合、パラメータ・ブロック内の再シード・カウンタ・フィールドが１の値に設定される。インスタンス化動作の場合、パラメータ・ブロック内のストリーム・バイト・フィールドが０に設定され、ストリーム・バイト・フィールドは、再シード動作によって変更されない。
【００８３】
ＳＨＡ−５１２−ＤＲＮＧシード動作の実行が完了したときに、条件コード０が設定され、条件コード３は、このシード動作には適用できない。
【００８４】
ＳＨＡ−５１２−ＤＲＮＧ生成動作は、前述したように、インスタンス化または再シードされたパラメータ・ブロック、および例えば５１２ビットのセキュア・ハッシュ・アルゴリズムを使用して、疑似乱数を生成する。一実施形態では、動作がプロセッサによって実行されるが、他の実施形態では、動作が他のコンポーネントまたはコプロセッサによって実行される。
【００８５】
汎用レジスタＲ１は、例えば第１のオペランドの左端のバイトのアドレスを含む。汎用レジスタＲ１＋１内の第１のオペランドの長さがゼロ以外である場合、第１のオペランドは、右端のブロックが６４バイトより少ないバイトを含むことがあることを除き、６４バイト・ブロックの単位で右から左への順序で格納される。部分的な右端のブロックを含む、格納されるブロックの数は、汎用レジスタＲ１＋１内の第１のオペランドの長さを６４の倍数に切り上げ、その値を６４で割ることによって決定される。第１のオペランドのブロックは、左から右へ、０〜ｎ−１のように番号付けされ、ｎ−１は右端のブロックを表す。
【００８６】
第１のオペランドの位置のブロックごとに、右端（ｎ−１）のブロックから開始して左に進み、次の手順が実行される。
１．パラメータ・ブロックからの値（Ｖ）が、処理されているブロック番号に加算され、加算によって発生した桁あふれは無視される。
２．この加算の合計１１１バイトが、埋め込みの１７バイトと連結されて、例えばＳＨＡ−５１２アルゴリズムへの入力として使用され、６４バイトのハッシュ値が得られる。ＳＨＡ−５１２アルゴリズムに提供される１７バイトの埋め込みは、１６進数の８０の値の後に８８８（ビット単位のＶの長さ）の１６バイトの２進整数値が続いて構成される。
３．汎用レジスタＲ１＋１内の第１のオペランドの長さが６４の倍数である場合、得られた６４バイトのハッシュ値が、第１のオペランドの位置の各ブロックに格納され、汎用レジスタＲ１＋１内の長さが６４だけデクリメントされる。
第１のオペランドの長さが６４の倍数でない場合、得られた６４バイトのハッシュ値の左端のｍバイトが、第１のオペランドの右端の部分的なブロックに格納され、ｍは第１のオペランドの長さを６４で割った余りを表す。この場合、汎用レジスタＲ１＋１内の長さがｍだけデクリメントされる。
４．完全なブロックまたは部分的なブロックのいずれが格納されるかに関わらず、パラメータ・ブロックの例えばバイト８〜１５内のストリーム・バイト・フィールドが、第１のオペランドの位置に格納されたバイトの数だけインクリメントされる。
【００８７】
上のプロセスは、汎用レジスタＲ１＋１内の第１のオペランドの長さが０になるか（正常完了と呼ばれる）、またはＣＰＵによって決定されたブロック数が処理されるまで（部分的完了と呼ばれる）、繰り返される。ＣＰＵによって決定されたブロック数は、モデルによって決まり、命令が実行されるたびに異なる数であってよい。ＣＰＵによって決定されたブロック数は、通常、ゼロ以外である。特定の異常な状況では、この数は０であってよく、進行しないで、条件コード３が設定されてよい。ただし、ＣＰＵは、この進行しないケースの無限の再発を防ぐ。
【００８８】
汎用レジスタＲ１＋１内の第１のオペランドの長さが最初に０である場合、第１のオペランドの位置に格納せずに正常完了が発生するが、パラメータ・ブロックが、下で説明されているように更新される。
【００８９】
正常完了によって疑似乱数生成プロセスが終了した場合、パラメータ・ブロックが、下で説明されているように更新される。
１．１６進数の０３の１バイト値、パラメータ・ブロックからの１１１バイト値（Ｖ）、および埋め込みの１４４バイトが、例えばＳＨＡ−５１２アルゴリズムへの入力として使用され、６４バイトのハッシュ値が得られる。埋め込みは、１６進数の８０が、１２７バイトの０と連結され、埋め込みを含んでいないＳＨＡ−５１２アルゴリズムへの入力のビット単位の長さ（すなわち、１６進数の０３の１バイト値およびＶフィールドの長さ）を指定する１６バイトの２進整数と連結された値で構成される。パラメータ・ブロック内の４バイトの再シード・カウンタ・フィールドならびに１１１バイト値（Ｖ）および定数（Ｃ）フィールドの値と、（上の計算からの）６４バイトのハッシュ値とが加算される。この加算の目的で、各値が、符号なし２進整数として扱われ、必要に応じて０を使用して左に拡張される。加算によって発生した桁あふれは無視され、得られた合計１１１バイトが、パラメータ・ブロック内の値フィールド（Ｖｎｅｗ）を置き換える。
２．パラメータ・ブロック内の４バイトの再シード・カウンタ・フィールドが、１だけインクリメントされる。
３．条件コード０が設定される。
【００９０】
部分的完了によって疑似乱数生成プロセスが終了した場合、汎用レジスタＲ１＋１内の第１のオペランドの長さが６４のゼロ以外の倍数を含み、パラメータ・ブロック内の再シード・カウンタおよび値（Ｖ）フィールドが更新されず、条件コード３が設定される。
【００９１】
生成動作の場合、命令の１回の実行において処理される大きさよりも大きい第１のオペランドの部分に関して、アクセス例外が報告されることがある。ただし、第１のオペランドを包含していない位置に関してアクセス例外は認識されず、処理されている現在の位置から４Ｋバイトよりも大きく超える位置に関しても、アクセス例外は認識されない。
【００９２】
生成動作の場合、正常完了によって動作が終了したときに、条件コード０が設定され、汎用レジスタＲ１＋１内の得られた値が０になる。部分的完了によって動作が終了したときに、条件コード３が設定され、汎用レジスタＲ１＋１内の得られた値がゼロ以外になる。
【００９３】
ＴＲＮＧ生と調整済みの間の比率問い合わせ機能：
乱数動作実行命令の別の使用可能な機能は、ＴＲＮＧ生と調整済みの間の比率問い合わせ機能である。１つの実装では、乱数動作実行命令の機能コード３２４が１１２である場合、ＴＲＮＧ生と調整済みの間の比率問い合わせ機能が使用されて、ＴＲＮＧ機能によって両方の種類のエントロピーが要求されたときに生成される生のエントロピーと調整済みエントロピーの間の比率を決定してよい。
【００９４】
この機能の動作では、パラメータ・ブロックには、調整済みエントロピーのブロックを生成するために使用される生のエントロピーのブロック内のバイト数を示す、例えば２つの３２ビット符号なし２進整数が格納される。１つの例では、図１２を参照すると、パラメータ・ブロック３９０が、生のエントロピー・フィールド３９２および調整済みエントロピー・フィールド３９４を含んでいる。生のエントロピー・フィールド３９２は、生のエントロピーと調整済みエントロピーの間の比率を指定する分数の分子である、生のエントロピーの値を含む。この値は、メモリ内、レジスタ内、その他のハードウェア・デバイス内などの、格納された位置から取得され、生のエントロピー・フィールド３９２内に配置される。調整済みエントロピー・フィールド３９４は、生のエントロピーと調整済みエントロピーの間の比率を指定する分数の分母である、調整済みエントロピーの値を含む。やはり、この値も、メモリ内、レジスタ内、その他のハードウェア・デバイス内などの、格納された位置から取得され、調整済みエントロピー・フィールド３９４内に配置される。
【００９５】
生のエントロピーと調整済みエントロピーの間の比率は、調整済みエントロピーのブロックを生成するために使用される生のエントロピーのブロック内のバイト数を示す。
【００９６】
ＴＲＮＧ生と調整済みの間の比率問い合わせ機能の実行が完了したときに、条件コード０が設定され、条件コード３は、この機能には適用できない。
【００９７】
ＴＲＮＧ機能：
さらに、乱数動作実行命令の機能コードが１１４である場合、ＴＲＮＧ機能が実行される。例えば、一連のハードウェアによって生成された乱数が、第１のオペランドの位置および第２のオペランドの位置のいずれかまたは両方に格納される。一実施形態では、この機能の場合、パラメータ・ブロックは使用されず、汎用レジスタ１が無視される。
Ｒ１フィールドが、偶数と奇数の汎用レジスタ対を指定する。偶数番号が付けられたレジスタは、第１のオペランドの左端のバイトのアドレスを含み、奇数番号が付けられたレジスタは、第１のオペランドの長さを含む。第１のオペランドは、例えばハードウェア・ソース（例えば、騒音源）によって直接生成される、生のエントロピーの形態での乱数を含む。
Ｒ２フィールドが、偶数と奇数の汎用レジスタ対を指定する。偶数番号が付けられたレジスタは、第２のオペランドの左端のバイトのアドレスを含み、奇数番号が付けられたレジスタは、第２のオペランドの長さを含む。第２のオペランドは、生のエントロピー源から抽出された乱数を含み、その後、承認されたアルゴリズムによって調整される（例えば、ＳＨＡ−２５６アルゴリズムに基づいてＰＲＮＧによって処理される）。
【００９８】
調整済みエントロピーのビットを生成するために使用される生のエントロピーのビットの比率は、ＴＲＮＧ生と調整済みの間の比率問い合わせ機能によって決定されてよい。１つの例では、この比率は６：１であるが、これは単なる例である。第１のオペランドの長さがゼロ以外である場合、生のエントロピーが第１のオペランドの位置（図１３の４００を参照）に格納され、同様に、第２のオペランドの長さがゼロ以外である場合、調整済みエントロピーが第２のオペランドの位置（図１３の４０２）に格納される。第１および第２のオペランドの両方の長さがゼロ以外である場合、生のエントロピーおよび調整済みエントロピーが、生と調整済みの間の比率で、第１および第２のオペランドの位置にそれぞれ格納される。動作の１つの単位に格納されるバイトの数は、モデルに依存し、命令の実行ごとに変化してよい。
【００９９】
第１のオペランドの長さがゼロ以外であるが、第２のオペランドの長さがゼロである場合、プロセスは、生のエントロピーを第１のオペランドに格納することを続行する。同様に、第２のオペランドの長さがゼロ以外であるが、第１のオペランドの長さがゼロである場合、プロセスは、調整済みエントロピーを第２のオペランドに格納することを続行する。
【０１００】
命令の１回の実行において処理される大きさよりも大きい第１および第２のオペランドの部分に関して、アクセス例外が報告されることがある。ただし、第１または第２のオペランドを包含していない位置に関してアクセス例外は認識されず、処理されている現在の位置から４Ｋバイトよりも大きく超える位置に関しても、アクセス例外は認識されない。
【０１０１】
このプロセスは、両方のオペランドの長さが０になるか（正常完了と呼ばれる）、またはＣＰＵによって決定された数のバイトが格納されるか（部分的完了と呼ばれる）のいずれかが最初に発生するまで、続行する。正常完了によって動作が終了した場合、条件コード０が設定される。部分的完了によって動作が終了した場合、条件コード３が設定される。ＣＰＵによって決定されたバイト数は、モデルによって決まり、命令が実行されるたびに異なる数であってよい。ＣＰＵによって決定されたバイト数は、通常、ゼロ以外である。特定の異常な状況では、この数は０であってよく、進行しないで、条件コード３が設定されてよい。ただし、ＣＰＵは、この進行しないケースの無限の再発を防ぐ。
【０１０２】
動作が正常完了または部分的完了のいずれによって終了するかに関わらず、汎用レジスタＲ１およびＲ１＋１が、第１のオペランドに格納されたバイトの数だけそれぞれインクリメントおよびデクリメントされ、汎用レジスタＲ２およびＲ２＋１が、第２のオペランドに格納されたバイトの数だけそれぞれインクリメントおよびデクリメントされる。
【０１０３】
第１および第２のオペランドが重複する場合、結果は予測不可能である。例として、次の条件のいずれかが存在する場合に、指定例外が認識され、他の動作は実行されない：汎用レジスタ０のビット５７〜６３が、割り当てられていないか、またはインストールされていない機能コードを指定するか、あるいはＲ１フィールドまたはＲ２フィールドが、奇数番号が付けられたレジスタまたは汎用レジスタ０を指定する。ＳＨＡ−５１２−ＤＲＮＧ機能のシード動作で、汎用レジスタＲ２＋１内の長さが５１２より大きい場合、機能コードに関わらず、この例外が認識される。ＳＨＡ−５１２−ＤＲＮＧ機能の生成動作で、パラメータ・ブロック内の再シード・カウンタがゼロである場合、汎用オペランド・データ例外が認識される。
【０１０４】
１つまたは複数の実施形態によれば、ＴＲＮＧ機能は、ＴＲＮＧからの調整済みエントロピー源を使用して決定論的乱数発生器（ＳＨＡ−５１２−ＤＲＮＧ機能によって提供される決定論的乱数発生器など）を定期的に再シードする、ハイブリッド乱数発生器（hybrid random-number generator）を実装する場合に、役立つことがある。
【０１０５】
ＴＲＮＧ機能によって提供される調整済みエントロピーは、複数の独立してシードされる決定論的乱数発生器によって共有されてよい。独立性は、決定論的乱数発生器をシードするときに、一意のプログラムによって提供されるエントロピー、ノンス、またはパーソナライゼーション文字列によって実現されてよい。
【０１０６】
第１のオペランドによって提供される生のエントロピーは、１つの例では、機能によって提供されるエントロピーの品質をテストする診断プログラムによる使用が意図される。
【０１０７】
１つの例では、機能によって提供される生のエントロピーと調整済みエントロピーの間の比率は、同じ種類のモデルのすべてのプロセッサにわたって一定である。したがって、プログラムは、別の種類のモデルに再配置されない限り、比率を決定した後に、ＴＲＮＧ生と調整済みの間の比率問い合わせ機能を再実行する必要がない。
【０１０８】
エントロピーは、ＴＲＮＧ生と調整済みの間の比率問い合わせ機能によって報告された生と調整済みの間の比率で、ＴＲＮＧ機能によって生成されるが、プログラムは、この比率で生のエントロピーおよび調整済みエントロピーを要求することを全く義務付けられない。
【０１０９】
ＣＰＵ、他のＣＰＵ、およびＩ／Ｏサブシステムによって観察されるとき、一貫性のない結果が、特定の機能に関して格納されるように定義された位置に簡単に格納されてよい。
【０１１０】
上の例では、単一の命令を複数の機能に使用するために、機能コードが提供される。しかし、１つの機能のみが提供される場合、機能コードは使用されなくてよい。さらに、より多い機能、より少ない機能、または異なる機能を含むために、より多い機能コード、より少ない機能コード、または異なる機能コードが使用されてよい。多くの可能性が存在する。さらに、一実施形態では、複数の機能のうちの１つによって使用される変更子制御が提供される。しかし、１つまたは複数の他の実施形態では、サポートされる機能が変更子制御を使用しない場合、変更子制御が含められなくてよい。
【０１１１】
本明細書に記載されているように、複数の機能を含んでいる単一のＣＰＵ命令が提供される。命令の１つの機能コードは、（ａ）プログラムによって指定された数の生の乱数（つまり、ハードウェアＴＲＮＧソース（hardware TRNG source）から直接得られる乱数）、または（ｂ）生の乱数から生成される、プログラムによって指定された数の調整済み乱数のいずれか、あるいはその両方を生成するためにある。命令の別の機能は、比率（Ｘ／Ｙ）を格納することであり、Ｘは、Ｙ個の調整済み乱数を生成するために使用される真の乱数の数を示す。
【０１１２】
真の乱数発生器の機能の一実施形態に関する詳細が、図１４を参照してさらに説明される。最初に、命令が取得される（ステップ５００）。次に、（少なくとも１つのプロセッサ上での）命令の実行に進む（ステップ５０２）。命令を実行することに基づいて、機能コードが取得され（ステップ５０４）、真の乱数発生器の機能が要求されているかどうかに関する判定が行われる（照会５０６）。真の乱数発生器の機能が指定されていない場合、前述したように、機能コードに基づいて処理が実行される（ステップ５０８）。次に、条件コードが設定され（ステップ５１０）、処理が完了する。しかし、機能コードによって真の乱数発生器の機能が指定されている場合、第１の長さ（例えば、Ｒ１＋１内で指定される）が０より大きいかどうかに関する判定がさらに行われる（照会５２０）。第１の長さが０より大きい場合、生のエントロピーが提供される（ステップ５２２）。その後、または第１の長さが０より大きくない場合、処理が、第２の長さ（例えば、Ｒ２＋１内で指定される）が０より大きいかどうかの判定（照会５２４）に進む。第２の長さが０より大きい場合、調整済みエントロピーが提供される（ステップ５２６）。第２の長さが０より大きくない場合、または調整済みエントロピーを提供した後に、条件コードが設定される（ステップ５１０）。
【０１１３】
真の乱数発生器の機能の一実施形態に関する詳細が、図１５を参照してさらに説明される。この論理は、少なくとも１つのプロセッサ上で実行される。
【０１１４】
図１５を参照すると、最初に、ＴＲＮＧ機能の動作が開始される（ステップ５５０）。この例は、生と調整済みの間の比率問い合わせ機能によって生成された生のバイトと調整済みバイトの間の比率を参照する。ある数（ＣＢ）の調整済みバイトを生成するために使用される生のバイトの数（ＲＢ）が、５５２および５５４にそれぞれ示されている。
【０１１５】
機能が、格納される追加の真の乱数が存在するかどうかを判定する（照会５５６）。例えば、レジスタＲ１＋１およびＲ２＋１の両方の値が０である場合、機能が完了し、完了の指示が設定され（ステップ５５８）（例えば、条件コードが０に設定され）、命令が完了する。
【０１１６】
照会５５６での判定が、格納される追加バイトが存在することを示している場合、機能はＲＢバイトの生データをハードウェア・エントロピー源（hardware entropy source）から取得する（ステップ５６０）。
【０１１７】
機能は、生データが格納されることになっている（例えば、レジスタＲ１＋１内の値がゼロ以外である）かどうかを判定する（照会５６２）。格納されることになっている場合、機能は、格納されるバイトの数（Ｍ）を、ＲＢおよびレジスタＲ１＋１内の値の最小値として計算する（ステップ５６４）。機能は、Ｍバイトの生データを指定された位置（例えば、レジスタＲ１内のメモリ・アドレス）に格納する（ステップ５６６）。機能は、メモリ・アドレス（レジスタＲ１）をＭだけインクリメントし（ステップ５６８）、格納される残りのバイト数（レジスタＲ１＋１）をＭだけデクリメントし（ステップ５７０）、照会５７２を続行する。
【０１１８】
照会５７２で、機能は、調整済みデータが格納されることになっている（例えば、レジスタＲ２＋１内の値がゼロ以外である）かどうかを判定する。格納されることになっている場合、機能は、格納されるバイトの数（Ｎ）を、ＣＢおよびレジスタＲ２＋１内の値の最小値として計算する（ステップ５７４）。機能は、Ｎバイトの調整済みデータを生データから生成し、Ｎバイトの調整済みデータを指定された位置（例えば、レジスタＲ２内のメモリ・アドレス）に格納する（ステップ５７６）。機能は、メモリ・アドレス（レジスタＲ２）をＮだけインクリメントし（ステップ５７８）、格納される残りのバイト数（レジスタＲ２＋１）をＮだけデクリメントし（ステップ５８０）、照会５８２を続行する。
【０１１９】
照会５８２で、機能が、モデルに依存する処理量が発生したかどうかを判定する。モデルに依存するタイムアウトが発生しなかった場合、ステップ５５６で処理が続行する。モデルに依存するタイムアウトが発生した場合、ステップ５８４で部分的完了の指示が設定され（例えば、条件コードが３に設定され）、命令が完了する。
【０１２０】
１つまたは複数の実施形態によれば、生データまたは調整済みデータのいずれかあるいはその両方を生成することができるか、プログラムによって指定された長さの生データまたは調整済みデータあるいはその両方を要求することができるか、条件コードが、要求された結果のすべてが格納されているかどうかを示すか、または別個の機能が生データと調整済みデータの間の比率を示すか、あるいはこれらの組み合わせが実行される。
【０１２１】
複数の機能を実行するように構成された命令（例えば、設計されたマシン命令）を処理することに関連する詳細が、図１６〜１７を参照してさらに説明される。
【０１２２】
最初に図１６を参照すると、複数の機能を実行するように構成された命令がプロセッサによって取得される（ステップ６００）。次に、マシン命令の実行に進む（ステップ６０２）。この実行することは、例えば、選択された値を含んでいる命令に関連付けられた機能コードに基づいて、命令の１つまたは複数の入力をチェックして、複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することを含む（ステップ６０４）。さらに、第１の値を含んでいる１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行し、生のエントロピーを提供することが、ある数の生の乱数を格納することを含み（ステップ６０６）、第２の値を含んでいる１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行し、調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含む（ステップ６０８）。
【０１２３】
一実施形態では、この数の生の乱数は、プログラムによって指定された数の生の乱数を含み（６１０）、この数の調整済み乱数は、プログラムによって指定された数の調整済み乱数を含む（６１２）。
【０１２４】
さらに、１つの例では、機能コードが、命令に関連付けられたレジスタ内で提供され、１つまたは複数の入力が、命令によって示された１つまたは複数のレジスタ内で提供される（６１４）。さらに、１つまたは複数の入力が少なくとも１つの長さの値を含む（６１６）。
【０１２５】
１つの例では、１つまたは複数の入力が第１の長さの値および第２の長さの値を含み、チェックすることが、第１の長さの値および第２の長さの値をチェックすることを含み、第１の値を含んでいる第１の長さの値に基づいて、この数の生の乱数を格納し、第２の値を含んでいる第２の長さの値に基づいて、この数の調整済み乱数を格納する（図１７のステップ６２０）。例として、第１の値が０より大きい値であり、第２の値が０より大きい値である（６２２）。
【０１２６】
さらに別の実施形態では、別の選択された値を含んでいる機能コードに基づいて、生と調整済みの間の比率が提供される（ステップ６２４）。生と調整済みの間の比率は、例えば、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す（６２６）。
【０１２７】
一実施形態では、この提供することは、このバイト数の生のエントロピーのカウントをパラメータ・ブロックの１つの位置に格納すること、およびこのバイト数の調整済みエントロピーのカウントをパラメータ・ブロックの別の位置に格納することを含む（ステップ６２８）。
【０１２８】
本発明の実施形態は、データの暗号化などの、セキュリティに関連付けられた処理を含むが、これに限定されない、コンピューティング環境内の処理を改善するコンピュータ技術に密接に関係している。
【０１２９】
真の乱数の生成は、疑似乱数の生成よりもＣＰＵリソースを消費することがある。したがって、非常に長い命令の実行を避けるために、要求された結果の一部のみが生成されたことを示すことによって、命令が完了してよい。その場合、アドレスを含んでいるレジスタを、格納されたバイトの数だけインクリメントし、長さを含んでいるレジスタを同じ量だけデクリメントし、指示的な条件コード（例えば、ＣＣ３）を設定することによって、命令が完了する。すべての要求されたＴＲＮＧ出力が生成されたときに、進行を示すようにアドレスおよび長さのレジスタを更新し、別の指示的な条件コード（例えば、ＣＣ０）を設定することによって、命令が完了する。
【０１３０】
１つの使用法は、アプリケーション・プログラムが、ＴＲＮＧ機能を定期的に使用して調整済み出力を生成し、その後、その調整済みの結果を使用して、いくつかの反復回数のために疑似乱数発生を最初にシードすることである。したがって、この使用法の場合、調整済み出力が必要な唯一の結果である。しかし、ＴＲＮＧの結果の統計的検証の場合、生のエントロピーおよび調整済みエントロピーの両方が存在することは有益であり、したがって、命令は両方を提供する。命令のＴＲＮＧ機能は、生のエントロピーおよび調整済みエントロピーの両方を生成する。プログラムは、（もしあれば）生成される生のエントロピーのバイト数を指定し、プログラムは、（もしあれば）生成される調整済みエントロピーのバイト数を指定する。ＴＲＮＧ生と調整済みの間の比率問い合わせ機能は、Ｙバイトの調整済みエントロピーを生成するためにＸバイトの生のエントロピーが使用されることを示す比率を生成する。
【０１３１】
上の例では、機能コードまたはその他の入力あるいはその両方などの特定の情報がレジスタ内で提供されているとして示されたが、他の例では、それらの情報は、メモリ位置などのその他の位置で提供されてよい。さらに、生と調整済みの間の比率は、レジスタまたはその他のメモリ位置などの、パラメータ・ブロック以外の位置で返されてよい。多くのその他のそのような変形が可能である。
【０１３２】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０１３３】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されているコンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【０１３４】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０１３５】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０１３６】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０１３７】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０１３８】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【０１３９】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０１４０】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、１つまたは複数の態様が提供されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、１人または複数人の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【０１４１】
１つの態様では、１つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。１つの例として、アプリケーションのデプロイは、１つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１４２】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・システムでは、コンピューティング・システムと組み合わせたコードが、１つまたは複数の実施形態を実行できる。
【０１４３】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、１つまたは複数の実施形態を実行できる。
【０１４４】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令形式、命令フィールド、または命令値、あるいはその組み合わせが使用されてよい。多くの変形が可能である。
【０１４５】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも２つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【０１４６】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない）は、直接的に、または介在するＩ／Ｏコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【０１４７】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、１つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【０１４８】
添付の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて、機能を実行するための任意の構造、材料、または動作を含むことが意図されている。１つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
【図１】
2019537091.tif 000003
【図２】
2019537091.tif 000004
【図３】
2019537091.tif 000005
【図４】
2019537091.tif 000006
【図５】
2019537091.tif 000007
【図６】
2019537091.tif 000008
【図７】
2019537091.tif 000009
【図８】
2019537091.tif 000010
【図９】
2019537091.tif 000011
【図１０】
2019537091.tif 000012
【図１１】
2019537091.tif 000013
【図１２】
2019537091.tif 000014
【図１３】
2019537091.tif 000015
【図１４】
2019537091.tif 000016
【図１５】
2019537091.tif 000017
【図１６】
2019537091.tif 000018
【図１７】
2019537091.tif 000019
【手続補正書】
【提出日】令和1年5月21日(2019.5.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
実行される命令を取得することであって、前記命令が、生のエントロピーまたは調整済みエントロピーあるいはその両方を生成する真の乱数発生器の機能を含む複数の機能を実行するように構成された単一の設計されたマシン命令である、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
選択された値を含んでいる前記命令に関連付けられた機能コードに基づいて、前記命令の１つまたは複数の入力をチェックして、前記複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することと、
第１の値を含んでいる前記１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行することであって、前記生のエントロピーを提供することが、ある数の生の乱数を格納することを含んでいる、前記機能を実行することと、
第２の値を含んでいる前記１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行することであって、前記調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含んでいる、前記別の機能を実行することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
前記数の生の乱数が、プログラムによって指定された数の生の乱数を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記数の調整済み乱数が、プログラムによって指定された数の調整済み乱数を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記機能コードが、前記命令に関連付けられたレジスタ内で提供され、前記１つまたは複数の入力が、前記命令によって示された１つまたは複数のレジスタ内で提供される、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記１つまたは複数の入力が、少なくとも１つの長さの値を含んでいる、請求項１に記載のコンピュータ・プログラム製品。   
【請求項６】
前記１つまたは複数の入力が第１の長さの値および第２の長さの値を含んでおり、前記チェックすることが、前記第１の長さの値および前記第２の長さの値をチェックすることを含んでおり、前記第１の値を含んでいる前記第１の長さの値に基づいて、前記数の生の乱数を格納し、前記第２の値を含んでいる前記第２の長さの値に基づいて、前記数の調整済み乱数を格納する、請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記第１の値が０より大きい値であり、前記第２の値が０より大きい値である、請求項６に記載のコンピュータ・プログラム製品。
【請求項８】
別の選択された値を含んでいる前記機能コードに基づいて、生と調整済みの間の比率を提供する、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記生と調整済みの間の比率が、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
前記生と調整済みの間の比率を前記提供することが、前記バイト数の生のエントロピーのカウントをパラメータ・ブロックの１つの位置に格納すること、および前記バイト数の調整済みエントロピーのカウントを前記パラメータ・ブロックの別の位置に格納することを含む、請求項９に記載のコンピュータ・プログラム製品。
【請求項１１】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
実行される命令を取得することであって、前記命令が、生のエントロピーまたは調整済みエントロピーあるいはその両方を生成する真の乱数発生器の機能を含む複数の機能を実行するように構成された単一の設計されたマシン命令である、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
選択された値を含んでいる前記命令に関連付けられた機能コードに基づいて、前記命令の１つまたは複数の入力をチェックして、前記複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することと、
第１の値を含んでいる前記１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行することであって、前記生のエントロピーを提供することが、ある数の生の乱数を格納することを含んでいる、前記機能を実行することと、
第２の値を含んでいる前記１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行することであって、前記調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含んでいる、前記別の機能を実行することと
を含んでいる、コンピュータ・システム。
【請求項１２】
前記数の生の乱数が、プログラムによって指定された数の生の乱数を含んでおり、前記数の調整済み乱数が、プログラムによって指定された数の調整済み乱数を含んでいる、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記機能コードが、前記命令に関連付けられたレジスタ内で提供され、前記１つまたは複数の入力が、前記命令によって示された１つまたは複数のレジスタ内で提供される、請求項１１に記載のコンピュータ・システム。
【請求項１４】
前記１つまたは複数の入力が第１の長さの値および第２の長さの値を含んでおり、前記チェックすることが、前記第１の長さの値および前記第２の長さの値をチェックすることを含んでおり、前記第１の値を含んでいる前記第１の長さの値に基づいて、前記数の生の乱数を格納し、前記第２の値を含んでいる前記第２の長さの値に基づいて、前記数の調整済み乱数を格納する、請求項１１に記載のコンピュータ・システム。
【請求項１５】
別の選択された値を含んでいる前記機能コードに基づいて、生と調整済みの間の比率を提供し、前記生と調整済みの間の比率が、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す、請求項１１に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
実行される命令を取得することであって、前記命令が、生のエントロピーまたは調整済みエントロピーあるいはその両方を生成する真の乱数発生器の機能を含む複数の機能を実行するように構成された単一の設計されたマシン命令である、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
選択された値を含んでいる前記命令に関連付けられた機能コードに基づいて、前記命令の１つまたは複数の入力をチェックして、前記複数の機能のうちのどの１つまたは複数の機能が実行されるかを決定することと、
第１の値を含んでいる前記１つまたは複数の入力のうちの第１の入力に基づいて、生のエントロピーを提供する機能を実行することであって、前記生のエントロピーを提供することが、ある数の生の乱数を格納することを含んでいる、前記機能を実行することと、
第２の値を含んでいる前記１つまたは複数の入力のうちの第２の入力に基づいて、調整済みエントロピーを提供する別の機能を実行することであって、前記調整済みエントロピーを提供することが、ある数の調整済み乱数を格納することを含んでいる、前記別の機能を実行することと
を含んでいる、コンピュータ実装方法。
【請求項１７】
前記数の生の乱数が、プログラムによって指定された数の生の乱数を含んでおり、前記数の調整済み乱数が、プログラムによって指定された数の調整済み乱数を含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項１８】
前記機能コードが、前記命令に関連付けられたレジスタ内で提供され、前記１つまたは複数の入力が、前記命令によって示された１つまたは複数のレジスタ内で提供される、請求項１６に記載のコンピュータ実装方法。
【請求項１９】
前記１つまたは複数の入力が第１の長さの値および第２の長さの値を含んでおり、前記チェックすることが、前記第１の長さの値および前記第２の長さの値をチェックすることを含んでおり、前記第１の値を含んでいる前記第１の長さの値に基づいて、前記数の生の乱数を格納し、前記第２の値を含んでいる前記第２の長さの値に基づいて、前記数の調整済み乱数を格納する、請求項１６に記載のコンピュータ実装方法。
【請求項２０】
別の選択された値を含んでいる前記機能コードに基づいて、生と調整済みの間の比率を提供し、前記生と調整済みの間の比率が、あるバイト数の生のエントロピーが、対応するバイト数の調整済みエントロピーを生成するために使用されることを示す、請求項１６に記載のコンピュータ実装方法。
【国際調査報告】
2019537091.tif 000020
2019537091.tif 000021
2019537091.tif 000022