RDRAND(「read random」の略)は、オンチップエントロピーソースによってシードされたインテルのオンチップハードウェア乱数ジェネレーターから乱数を返す命令です。 [ 1 ]インテルセキュアキーテクノロジー[ 2 ]、コードネームBull Mountain [ 3 ]としても知られています。インテルは2012年頃にこの機能を導入し、AMDは2015年6月にこの命令のサポートを追加しました。Ivy Bridgeプロセッサー[ a ]で利用可能であり、インテル64およびIA-32命令セットアーキテクチャーの一部です。[ 5 ]RDRAND
この乱数生成器は、NIST SP 800-90A、[ 6 ] FIPS 140-2、ANSI X9.82などのセキュリティおよび暗号化標準に準拠しています。[ 1 ]インテルからの要請を受けて、Cryptography Research Inc.は、IntelのIvy Bridgeデジタル乱数生成器の分析という論文でRDRANDに関する研究を発表しました。[ 7 ]
RDSEEDRDRANDはエントロピー生成ハードウェアに類似しており、低レベルのアクセスを提供します。RDSEEDジェネレータとプロセッサ命令は、Intel Broadwell CPU [ 8 ]とAMD Zen CPU [ 9 ]rdseedで利用可能です。
概要
このCPUID命令は、AMDとIntelの両方のCPUで、命令がサポートされているかどうかを確認するために使用できますRDRAND。サポートされている場合、CPUID標準関数を呼び出した後、ECXレジスタのビット30がセットされます01H。[ 10 ] AMDプロセッサでは、同じテストを使用してこの機能がチェックされます。[ 11 ]RDSEED Intel CPUでも同様の方法で可用性を確認できます。RDSEEDサポートされている場合、CPUID標準関数を呼び出した後、EBXレジスタのビット18がセットされます07H。[ 12 ]
のオペコードはRDRAND、0x0F 0xC7宛先レジスタを指定するModRMバイトが続き、64ビットモードではオプションでREXプレフィックスと組み合わせられます。[ 13 ]
Intel Secure Keyは、命令と、その基盤となる乱数生成器(RNG)ハードウェア実装の両方に対するIntelの名称です。 [ 1 ]開発中のコードネームは「Bull Mountain」でした。[ 14 ] Intelは自社のRNGを「デジタル乱数生成器」またはDRNGと呼んでいます。この生成器は、ハードウェアエントロピーソースによって生成された256ビットの生のエントロピーサンプルのペアを受け取り、それらをAdvanced Encryption Standard(AES)(CBC-MACモード)コンディショナーに適用し、単一の256ビットの調整済みエントロピーサンプルに縮小します。NIST SP 800-90Aで定義されているCTR DRBGと呼ばれる決定論的乱数ビット生成器は、コンディショナーの出力によってシードされ、命令を介して乱数を要求するアプリケーションに暗号的に安全な乱数を提供します。[ 1 ] [ 14 ]ハードウェアは、シード値を変更する前に最大511個の128ビットサンプルを発行します。この操作を使用すると、AES-CBC-MAC からの調整された 256 ビットのサンプルにアクセスできるようになります。 RDRANDRDRANDRDSEED
この命令は、 Broadwell CPUで利用可能な別の疑似乱数生成器[ 15 ]RDSEEDをシードするために Intel Secure Key に追加されました。この命令のエントロピーソースは、セルフタイミング回路上で非同期に実行され、シリコン内の熱雑音を使用して 3 GHz の速度でランダムビットストリームを出力します。[ 16 ]これは、で得られる実効 6.4 Gbit/s よりも遅いです(両方の速度はすべてのコアとスレッドで共有されます)。[ 17 ]この命令は、任意の幅のソフトウェア PRNGをシードするためのものですが、 は単に高品質の乱数を必要とするアプリケーションを対象としています。暗号セキュリティが不要な場合は、通常、 Xorshiftなどのソフトウェア PRNG の方が高速です。[ 18 ]RDSEEDRDRANDRDSEEDRDRAND
パフォーマンス
Intel Core i7-7700K、4500MHz(45 × 100MHz)プロセッサ(Kaby Lake-Sマイクロアーキテクチャ)では、オペランドサイズ(16/32/64ビット)に関わらず、 1つの命令RDRANDまたは命令の実行に110ナノ秒(463クロックサイクル)かかります。このクロックサイクル数は、 SkylakeまたはKaby Lakeマイクロアーキテクチャを搭載したすべてのプロセッサに適用されます。Silvermontマイクロアーキテクチャプロセッサでは、オペランドサイズに関わらず、各命令の実行に約1472クロックサイクルかかります。Ivy Bridgeプロセッサでは最大117クロックサイクルかかります。[ 19 ]RDSEEDRDRAND
AMD Ryzen CPUでは、各命令は16ビットまたは32ビットのオペランドの場合は約1200クロックサイクル、64ビットのオペランドの場合は約2500クロックサイクルかかります。[ 19 ]
天体物理学モンテカルロシミュレータは、クアッドコアIntel i7-3740 QMプロセッサ上で10の7乗個の64ビット乱数を生成するのにかかる時間を検証しました。その結果、C言語による実装では、C言語のデフォルトの乱数生成器よりも約2倍、メルセンヌツイスターよりも約20倍遅いことがわかりました。Pythonモジュールも作成されていますが、Pythonのデフォルトの乱数生成器よりも20倍遅いことがわかりました[ 20 ]。ただし、 PRNGとCSPRNGの性能比較はできません。 RDRANDRDRANDRDRAND
インテルが2020年6月にリリースしたマイクロコードアップデートは、クロストーク脆弱性(下記のセキュリティ問題のセクションを参照)を軽減するように設計されていますが、追加のセキュリティ制御により、およびのパフォーマンスにRDRAND悪影響を及ぼします。緩和策が適用されたプロセッサでは、影響を受ける各命令に追加のレイテンシが発生し、コア間の同時実行は事実上シリアル化されます。インテルはこれらのセキュリティチェックを緩和するメカニズムを導入し、ほとんどのシナリオでパフォーマンスへの影響を軽減していますが、インテルプロセッサはこのセキュリティ緩和をデフォルトで適用していません。[ 21 ]RDSEEDRDRANDRDSEED
コンパイラ
RDRANDVisual C++ 2015は、関数と関数の組み込みラッパーサポートを提供していますRDSEED。[ 22 ] GCC 4.6以降とClang 3.2以降は、フラグで指定された場合に組み込み関数を提供しています。 [ 23 ]また、条件付きコンパイルを許可する設定も提供しています。新しいバージョンでは、これらの組み込み関数をIntel Cコンパイラのバージョン12.1以降と互換性のある関数にラップする機能も提供しています。これらの関数は、パラメータで指定された場所にランダムデータを書き込み、成功した場合は1を返します。[ 24 ]RDRAND-mrdrnd__RDRND__immintrin.h
アプリケーション
OpenSSLのとを使用しRDRANDて暗号的に安全な乱数を生成するオプションがあり、安全な通信に役立ちます RDSEED
モンテカルロRDRANDシミュレータにおけるの科学的応用は、他の乱数生成器と比較して、性能と再現性に焦点を当てて評価されました。その結果、メルセンヌツイスターと比較して、メルセンヌツイスターを使用した場合、結果は変わらないものの、性能と再現性は劣るという結論に至りました。 [ 25 ] [ 20 ]RDRAND
受付
2013年9月、NSAによる暗号化の弱体化への取り組みを暴露したニューヨーク・タイムズの記事[ 26 ]を受けて、セオドア・ツォはLinuxカーネルにおけるforの使用に関して次のように公に投稿しました。[ 27 ]RDRAND/dev/random
インテルのエンジニアから命令
/dev/randomだけに頼るようにという圧力に抵抗して本当に良かったと思っていますRDRAND。[ニューヨーク・タイムズの記事[ 26 ] ]から引用すると、「今年までに、Sigint Enabling Projectは、チップメーカーと協力してバックドアを仕掛けるなど、企業や政府機関のために情報を暗号化する暗号チップの一部に内部構造を発見した…」。チップ内に封印され、監査不可能な実装を使用しているハードウェア乱数ジェネレータだけに頼るのは、絶対にダメな考えです。
Linus Torvalds 氏RDRANDは、Linux カーネルでのの使用に関する懸念を否定し、 は のエントロピーの唯一のソースとして使用されている/dev/randomのではなく、 から受け取った値RDRANDと他の乱数ソースを組み合わせることでエントロピーを向上させるために使用されていると指摘しました。[ 28 ] [ 29 ]しかし、Defuse Security の Taylor Hornby 氏は、Linux の乱数ジェネレーターが、RDRANDそれを使用しているコードを明確にターゲットとするバックドアが命令に導入された場合、安全でなくなる可能性があることを実証しました。Hornby 氏の概念実証実装は、バージョン 3.13 より前の変更されていない Linux カーネルで動作します。[ 30 ] [ 31 ] [ 32 ]この問題は 2013 年に Linux カーネルで軽減されました。[ 33 ]
開発者はFreeBSDカーネルをVIA PadLockと直接使用しないよう変更しRDRAND、「FreeBSD 10では、Padlockバックエンドをバックトラックして削除し、それらの出力を/dev/randomに直接渡すのではなく、 Yarrowに渡す予定です。ハードウェア乱数ジェネレータ、つまり、Padlockなどに、インラインアセンブリまたはユーザーランドからOpenSSLを使用して直接アクセスすることは引き続き可能ですが、もはや信頼できません。」と述べています。 [ 28 ] [ 34 ] FreeBSD /dev/randomはFreeBSD 11からFortunaとRDRANDを使用しています。 [ 35 ]RDRANDRDRAND
セキュリティ問題
2020年6月9日、アムステルダム自由大学の研究者らは、多数のIntelプロセッサーに影響を与えるCrossTalk(CVE-2020-0543 )というサイドチャネル攻撃を公開した。 [ 36 ]彼らは、ハードウェアデジタル乱数ジェネレーター(DRNG)からの出力が、すべてのコアで共有されるステージングバッファーに格納されていることを発見した。この脆弱性により、影響を受けるプロセッサーで実行されている悪意のあるコードが、同じプロセッサーの別のコアで実行されている被害者のアプリケーション(Intel SGXエンクレーブ内で実行されているアプリケーションを含む)から読み取りや命令結果を取得できるようになった。[36] 研究者らは、1回の署名操作だけで別のCPUコアで実行されているSGXエンクレーブから完全なECDSAキーを抽出できる概念実証エクスプロイトを開発した[37]。 [ 36 ]RDRANDRDRANDRDSEED
インテルでは、クロストーク脆弱性を Special Register Buffer Data Sampling (SRBDS) と呼んでいます。この調査を受けて、インテルでは問題を軽減するためのマイクロコード更新をリリースしました。更新されたマイクロコードは、機密操作 (具体的にはRDRAND、RDSEED、およびEGETKEY命令) が完了し、ステージング バッファーが上書きされるまで、オフコア アクセスが遅延されることを保証します。[ 21 ] SRBDS攻撃はMSR を読み取る命令など他の命令にも影響しますが、インテルではパフォーマンス上の懸念とそれらの命令の結果の機密性の必要性が低いため、それらには追加のセキュリティ保護を適用しませんでした。[ 21 ]デスクトップ、モバイル、サーバー プロセッサーなど、2012 年から 2019 年の間にリリースされた幅広いインテル プロセッサーが影響を受けました。 [38] [39インテルは、各論理プロセッサ上のMSRを介して構成可能なオプトアウトオプションを導入しました。これは、SGXエンクレーブの外で実行される命令に対する追加のセキュリティチェックを無効にすることでパフォーマンスを向上させます。[ 21 ]IA32_MCU_OPT_CTRL
2025年10月、 Meta PlatformsのGregory Price氏によって、AMD Zen 5プロセッサのRDSEEDに関する問題が発見されました。この問題により、RDSEED命令は、誤って成功を通知する際に、乱数ではなく0を返す可能性がありました。この問題は、16ビットおよび32ビット形式の命令にのみ影響し、64ビット形式には影響しません。[ 40 ] [ 41 ]
参照
注記
参考文献
- ^ a b c d「インテル デジタル乱数ジェネレーター(DRNG):ソフトウェア実装ガイド、リビジョン1.1」(PDF)。インテルコーポレーション。2012年8月7日。2012年11月25日閲覧
- ^ 「インテル® セキュア・キー・テクノロジーとは?」インテル. 2020年9月23日閲覧。
- ^ Hofemeier, Gael (2011-06-22). 「Intel の新しい RDRAND 命令について知る」 Intel Developer Zone ブログ. 2013年12月30日閲覧。
- ^デスクトップ向け第3世代Intel Coreプロセッサー・ファミリー、仕様アップデート(PDF)。Intel Corporation。2013年1月。
- ^ 「AMD64アーキテクチャプログラマーズマニュアル 第3巻:汎用命令とシステム命令」(PDF) . AMD開発者ガイド、マニュアル、ISAドキュメント. 2015年6月. 2015年10月16日閲覧。
- ^ Barker, Elaine; Kelsey, John (2012年1月). 「決定論的乱数ビット生成器を用いた乱数生成に関する勧告」(PDF) .米国国立標準技術研究所. doi : 10.6028/NIST.SP.800-90A . 2013年9月16日閲覧.
- ^ Hamburg, Mike; Kocher, Paul; Marson, Mark (2012-03-12). 「IntelのIvy Bridgeデジタル乱数ジェネレータの分析」(PDF) . Cryptography Research, Inc. 2014年12月30日時点のオリジナル(PDF)からアーカイブ。 2015年8月21日閲覧。
- ^ Hofemeier, Gael (2012年7月26日). 「Intel AES-NIおよびIntel SecureKey命令の紹介」 . Intel Developer Zone . Intel . 2015年10月24日閲覧。
- ^ 「AMD、次世代「Zen」アーキテクチャ上でLinuxの有効化を開始 - Phoronix」www.phoronix.com。2015年10月25日閲覧。
- ^ 「第1巻、セクション7.3.17、「乱数生成器の命令」(PDF).インテル® 64 および IA-32 アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル 統合巻:1、2A、2B、2C、3A、3B、3C . インテルコーポレーション 2013年6月 p. 177 . 2013年6月24日閲覧.
RDRAND命令をサポートするすべてのインテルプロセッサーは、CPUID.01H:ECX.RDRAND[ビット30] = 1 を報告して、RDRAND命令が使用可能であることを示します。
- ^ 「AMD64アーキテクチャ・プログラマーズ・マニュアル 第3巻:汎用命令とシステム命令」(PDF) AMD、2015年6月、p. 278。2015年10月15日閲覧。RDRAND
命令のサポートはオプションです。この命令をサポートするプロセッサでは、CPUID Fn0000_0001_ECX[RDRAND] = 1となります。
- ^ 「第1巻、セクション7.3.17、「乱数生成器の命令」(PDF).インテル® 64 および IA-32 アーキテクチャー・ソフトウェア開発マニュアル 統合巻:1、2A、2B、2C、3A、3B、3C . インテルコーポレーション 2013年6月 p. 177 . 2015年10月25日閲覧.
RDSEED命令をサポートするすべてのインテルプロセッサーは、CPUIDを報告することでRDSEED命令が利用可能であることを示します。(EAX=07H、ECX=0H):EBX.RDSEED[ビット18] = 1
- ^ 「Intel® Digital Random Number Generator (DRNG) ソフトウェア実装ガイド」 . Software.intel.com . 2014年1月30日閲覧。
- ^ a b Taylor, Greg; Cox, George (2011年9月). 「Intelの新しい乱数ジェネレーターの裏側」 IEEE Spectrum . 2011年9月6日時点のオリジナルよりアーカイブ。
- ^ John Mechalas (2012年11月). 「RDRANDとRDSEEDの違い」 . software.intel.com . Intel Corporation . 2014年1月1日閲覧。
- ^ Mechalas, John. 「Intel デジタル乱数ジェネレーター(DRNG)ソフトウェア実装ガイド、セクション3.2.1 エントロピーソース(ES)」 . Intel ソフトウェア. Intel . 2015年2月18日閲覧。
- ^ https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guideには 800 メガバイトと記載されており、これは 6.4 ギガビット/秒に相当します。
- ^ Xorshiftの最も単純な64ビット実装は、 3つのXORと3つのシフトで構成されます。これらを4つのコアで2GHzのタイトループで実行すると、スループットは80 Gb/sになります。実際には、ロード/ストアのオーバーヘッドなどによりこの値より低くなりますが、それでも の6.4 Gb/sを超える可能性があります。一方、の数値の品質は、XorshiftのようなソフトウェアPRNGよりも高いはずです。
RDRANDRDRAND - ^ a b「命令表 - IntelおよびAMD CPUの命令レイテンシ、スループット、マイクロオペレーションの内訳一覧」(PDF) 。2006年8月8日時点のオリジナル(PDF)からアーカイブ。
- ^ a b Route, Matthew (2017年8月10日). 「電波フレアによる超低温矮星集団の合成」 . The Astrophysical Journal . 845 (1): 66. arXiv : 1707.02212 . Bibcode : 2017ApJ...845...66R . doi : 10.3847/1538-4357/aa7ede . S2CID 118895524 .
- ^ a b c d「Special Register Buffer Data Sampling」 . Intel . 2020年12月26日閲覧。
- ^ "x86 組み込み関数一覧" . docs.microsoft.com . 2020年2月28日. 2020年5月7日閲覧。
- ^ 「X86 組み込み関数 - GNU コンパイラ コレクション (GCC) の使用」。
- ^ 「インテル® C++ コンパイラー 19.1 デベロッパー・ガイドおよびリファレンス」。2019年12月23日。
- ^ Route, Matthew (2019). 「Intel Secure Key-Powered Radio-flaring Ultracool Dwarf Population Synthesis」 .アメリカ天文学会会議抄録 #234 . 234.アメリカ天文学会会議 #234, id. 207.01. アメリカ天文学会報、第51巻、第4号。書誌コード:2019AAS...23420701R .
- ^ a bニコール・パールロス、ジェフ・ラーソン、スコット・シェーン(2013年9月5日)。「NSAはウェブ上のプライバシー保護の基本を阻止できる」ニューヨーク・タイムズ。 2017年11月15日閲覧。
- ^ Ts'o, Theodore (2013年9月6日). 「Intelのエンジニアからの/dev/random依存の圧力に抵抗して本当に良かった…」 2018年6月11日時点のオリジナルよりアーカイブ。
- ^ a b Richard Chirgwin (2013年12月9日). 「FreeBSD、ハードウェアのランダム性を放棄」 The Register .
- ^ Gavin Clarke (2013年9月10日). 「Torvalds、Linuxの暗号に潜む「バックドア」Intel RDRANDの排除を求める声を否定」 theregister.co.uk . 2014年3月12日閲覧。
- ^ Taylor Hornby (2013年12月6日). 「RDRANDバックドア概念実証は機能している!ストックカーネル(3.8.13)、RDRAND命令のみ変更」 . 2015年4月9日閲覧。
- ^ Taylor Hornby [@DefuseSec] (2013年9月10日). 「LinuxにおけるRDRANDの使用がなぜ問題となるのかを説明する短い対談を書きました。 http://pastebin.com/A07q3nL3 /cc @kaepora @voodooKobra」 (ツイート) . 2016年1月11日閲覧– Twitter経由。
- ^ Daniel J. Bernstein、Tanja Lange (2014年5月16日). 「ランダムネス生成」(PDF) . 2015年4月9日閲覧。
- ^ Ts'o, Theodore (2013年10月10日). 「random: extract_buf() の早い段階でアーキテクチャ上のランダム性を混ぜる」 . GitHub . 2021年7月30日閲覧。
- ^ 「FreeBSD 四半期ステータスレポート」 . Freebsd.org . 2014年1月30日閲覧。
- ^ "random(4)" . www.freebsd.org . 2020年9月25日閲覧。
- ^ a b cラガブ、ハニー;ミルバーン、アリッサ。ラザヴィ、カヴェ。ボス、ハーバート。ジュフリーダ、クリスティアーノ。「CrossTalk: コア間での投機的なデータ漏洩は現実である」(PDF)。アムステルダム自由大学 (VUSec) システムおよびネットワーク セキュリティ グループ。2020 年12 月 26 日に取得。
- ^ 「VUSec RIDL cpuid_leak PoC、rdrand出力をリークするように修正」 GitHub 。2020年12月26日閲覧。
- ^ 「影響を受けるプロセッサー:特殊レジスターバッファーのデータサンプリング」。Intel Developer Zone。Intel。 2021年3月4日時点のオリジナルよりアーカイブ。 2020年12月26日閲覧。
- ^ 「影響を受けるプロセッサ:特殊レジスタバッファのデータサンプリング」 Intel . 2025年5月18日時点のオリジナルよりアーカイブ。 2025年5月18日閲覧。
- ^ Jones, Conner (2025年11月5日). 「AMD、暗号セキュリティを損なう乱数バグで赤面」The Register . 2025年11月8日閲覧。
{{cite web}}: CS1 maint: url-status (リンク) - ^ 「AMD Zen 5プロセッサーにおけるRDSEEDの不具合」 Lenovo Support IT 2025年10月24日2025年11月8日閲覧。
{{cite web}}: CS1 maint: url-status (リンク)