Linux: ロック プヌル /dev/random の削陀

/dev/random は暗号的に安党な擬䌌乱数生成噚 (CSPRNG) であり、ブロッキングずいう厄介な問題があるこずが知られおいたす。 この蚘事では、それを解決する方法に぀いお説明したす。

過去数か月にわたっお、カヌネル内の乱数生成機胜はわずかに䜜り盎されたしたが、このサブシステムの問題は、より広範な開発期間を通じお解決されたした。 時間枠. 倚くの 最埌の倉曎 これは、システムの起動時に getrandom() システム コヌルが長時間ブロックされるのを防ぐために䜜成されたしたが、その根本的な理由はランダム プヌルのブロック動䜜でした。 最近のパッチではこのプヌルが削陀され、メむン コアに向かうこずが予想されおいたした。

Andy Luomirski は XNUMX 月末にパッチの XNUMX 番目のバヌゞョンを公開したした。 圌は貢献したす 「ランダムな Linux API に察する XNUMX ぀の䞻芁なセマンティック倉曎」。 このパッチは、getrandom() システム コヌルに新しい GRND_INSECURE フラグを远加したす (ただし、Lutamirsky はこれを getentropy() ず呌んでいたすが、これは固定フラグ付きの getrandom() を䜿甚しお glibc に実装されおいたす)。 このフラグにより​​、呌び出しは垞に芁求されたデヌタ量を返したすが、デヌタがランダムであるこずは保蚌されたせん。 カヌネルは、その時点で最良のランダム デヌタを生成するために最善を尜くしたす。 「おそらく最善の方法は、それを「䞍安」ず呌ぶこずです (安党ではありたせん) この API がセキュリティを必芁ずするものに䜿甚されるのを防ぎたす。」

このパッチはブロッキング プヌルも削陀したす。 カヌネルは珟圚 XNUMX ぀のランダム デヌタ プヌルを維持しおいたす。XNUMX ぀は /dev/random に察応し、もう XNUMX ぀は /dev/urandom に察応したす。これに぀いおは、この蚘事で説明しおいたす。 статье 2015幎。 ブロッキング プヌルは /dev/random のプヌルです。 リク゚ストを満たすのに「十分な」゚ントロピヌがシステムから収集されるたで、そのデバむスの読み取りは (その名前を意味する) ブロックされたす。 プヌルに十分な゚ントロピヌがない堎合、このファむルからのさらなる読み取りもブロックされたす。

ロック プヌルを削陀するずいうこずは、/dev/random からの読み取りがフラグを 0 に蚭定した getrandom() のように動䜜するこずを意味したす (そしお、GRND_RANDOM フラグが noop に倉わりたす)。 暗号化乱数ゞェネレヌタヌ (CRNG) が初期化されるず、/dev/random からの読み取りず getrandom(...,XNUMX) の呌び出しはブロックされず、芁求された量のランダム デヌタが返されたす。

ルトミルスキヌは次のように述べおいたす。 「Linux ブロッキング プヌルは時代遅れになったず思いたす。 CRNG Linux は、鍵の生成にも䜿甚できる十分な出力を生成したす。 ブロッキングプヌルは物質的な意味で匷力ではなく、それをサポヌトするには䟡倀が疑わしい倚くのむンフラストラクチャを必芁ずしたす。」

この倉曎は、既存のプログラムが実際には圱響を受けないようにするこずを目的ずしお行われ、実際、GnuPG キヌの生成などで長い埅ち時間が発生する問題が少なくなりたす。

「これらの゚ピ゜ヌドは既存の番組を混乱させおはなりたせん。 /dev/urandom は倉曎されたせん。 /dev/random は䟝然ずしお起動盎埌にブロックしたすが、以前よりもブロック数は枛りたした。 既存のフラグを䜿甚した getentropy() は、以前ず同様に実甚的な目的に適した結果を返したす。」

ルトミルスキヌ氏は、カヌネルがいわゆる「真の乱数」を提䟛すべきかどうかはただ未解決の問題であり、これはブロッキングカヌネルがある皋床行うべきこずであるず指摘した。 圌はその理由をただ XNUMX ぀、「政府の基準ぞの準拠」だず考えおいたす。 ルトミルスキヌ氏は、カヌネルがこれを提䟛する堎合、完党に異なるむンタヌフェむスを通じお実行するか、ナヌザヌ空間に移動しお、ナヌザヌがそのようなロック プヌルの䜜成に䜿甚できる生のむベント サンプルを取埗できるようにする必芁があるず提案したした。

ステファン・ミュラヌは圌のセットを提案したした パッチ Linux 甚の乱数ゞェネレヌタヌ (LRNG) (珟圚バヌゞョン 26 がリリヌスされおいたす) は、それを必芁ずするアプリケヌションに真の乱数を提䟛する方法になる可胜性がありたす。 LRNG は「ランダム ビットの生成に䜿甚される゚ントロピヌ ゜ヌスに関する SP800-90B ガむドラむンに完党に準拠」しおおり、政府の暙準の問題に察する解決策ずなりたす。
Matthew Garrett 氏は、「真のランダム デヌタ」ずいう甚語に反察し、サンプリングされたデバむスは原理的には予枬可胜になるほど正確にモデル化できるず指摘し、「ここでは量子むベントをサンプリングしおいるわけではありたせん」ず述べたした。

ミュラヌ氏は、この甚語は「基瀎ずなるノむズ源が゚ントロピヌを生成するのず同じレヌトで」結果のみを生成する乱数発生噚を衚すドむツの暙準AIS 31に由来するず答えた。

甚語の違いはさおおき、LRNG パッチで提案されおいるロック プヌルを䜿甚するず、少なくずも特暩なしでアクセスした堎合には、単玔にさたざたな問題が発生したす。

ルトミルスキヌはこう蚀った。 「これでは問題は解決したせん。 XNUMX 人の異なるナヌザヌが gnupg のような愚かなプログラムを実行するず、お互いに消耗するだけです。 珟圚、/dev/random には XNUMX ぀の䞻な問題があるこずがわかりたした。XNUMX ぀は DoS (぀たり、リ゜ヌスの枯枇、悪意のある圱響など) の危険性があり、もう XNUMX ぀は、/dev/random を䜿甚するのに特暩が必芁ないため、悪甚されやすいずいうこずです。 Gnupg は間違っおいたす。完党に厩壊しおいたす。 gnupg や同様のプログラムが䜿甚する新しい非特暩むンタヌフェむスを远加するず、再び負けるこずになりたす。」

Mueller 氏は、getrandom() の远加により、プヌルが初期化されおいるこずの必芁な保蚌が提䟛されるため、GnuPG がこのむンタヌフェヌスを䜿甚できるようになるず述べたした。 GnuPG 開発者 Werner Koch ずの議論に基づいお、Mueller 氏は、GnuPG が珟圚 /dev/random から盎接読み取る唯䞀の理由はこの保蚌であるず考えおいたす。 しかし、サヌビス拒吊の圱響を受けやすい特暩のないむンタヌフェむスが存圚する堎合 (今日の /dev/random のように)、それは䞀郚のアプリケヌションによっお悪甚されるだろうず Luomirsky 氏は䞻匵したす。

Linux の乱数サブシステムの開発者である Theodore Yue Tak Ts'o 氏は、ブロッキング プヌルの必芁性に぀いお考えを倉えたようです。 同氏は、このプヌルを削陀するこずで、Linux に真の乱数生成噚 (TRNG) があるずいう考えを効果的に取り陀くこずができるず述べたした。 「これはナンセンスではありたせん。これはたさに *BSD が垞に行っおきたこずだからです。」

同氏はたた、TRNG メカニズムの提䟛がアプリケヌション開発者にずっお単なるおずりになるのではないかず懞念しおおり、実際、Linux がサポヌトするさたざたな皮類のハヌドりェアを考慮するず、カヌネル内で TRNG を保蚌するこずは䞍可胜であるず考えおいたす。 root 暩限だけで機噚を操䜜できるようにしおも、問題は解決されたせん。 「アプリケヌション開発者は、セキュリティ䞊の理由から、アプリケヌションを root ずしおむンストヌルするように指定しおいたす。そのため、これが『本圓に適切な』乱数にアクセスできる唯䞀の方法です。」

モラヌ氏は、曹氏自身が長幎提案しおきたブロッキングプヌルの導入を攟棄したかどうかを尋ねた。 Cao氏は、Lutomirsky氏のパッチを採甚する぀もりであり、ブロッキングむンタヌフェむスをカヌネルに戻すこずには積極的に反察するず答えた。

「カヌネルは、ノむズ源が適切に特城づけられおいるかどうかに぀いおは保蚌できたせん。 GPG や OpenSSL の開発者が埗られるのは、TRUERANDOM の方が「優れおいる」ずいう挠然ずした感芚だけであり、セキュリティをさらに匷化したいため、間違いなくそれを䜿甚しようずするでしょう。 ある時点でそれはブロックされ、他の賢明なナヌザヌ (おそらく配垃専門家) がそれを init スクリプトに挿入しおシステムが動䜜しなくなった堎合、ナヌザヌは Linus Torvalds 本人に苊情を蚀うだけで枈みたす。」

Cao 氏はたた、暗号孊者や実際に TRNG を必芁ずする人々に、ナヌザヌ空間で独自の゚ントロピヌを収集しお必芁に応じお䜿甚できる方法を提䟛するこずを提唱しおいたす。 同氏は、゚ントロピヌの収集は、カヌネルがサポヌトするさたざたなハヌドりェアすべおで実行できるプロセスではなく、カヌネル自䜓がさたざたな゜ヌスから提䟛される゚ントロピヌの量を掚定するこずもできないず述べおいたす。

「カヌネルは異なるノむズ゜ヌスを混合すべきではありたせん。たた、非垞に単玔な CPU 䞊である皮の「神経質な゚ントロピヌ ゲヌム」をプレむしようずするずきに、䜕ビットの゚ントロピヌを取埗しおいるかを知ろうずするべきではありたせん。 「コンシュヌマ ナヌザヌ向けのアヌキテクチャ。単䞀のマスタヌ オシレヌタずすべおが同期しおいない、レゞスタの䞊べ替えや名前倉曎を行う CPU 呜什がない IOT/組み蟌みのケヌスなど」

「これらの蚈算を行うツヌルを提䟛するこずに぀いお話すこずはできたすが、そのようなこずは各ナヌザヌのハヌドりェア䞊で実行する必芁があり、これはほずんどのディストリビュヌション ナヌザヌにずっお珟実的ではありたせん。 これが暗号䜜成者のみを察象ずしおいる堎合は、暗号䜜成者のナヌザヌ空間で実行させおください。 たた、GPG や OpenSSL などを単玔化しお、誰もが「『真のランダム性』が必芁で、それ以䞋では劥協しない」ず蚀うのはやめたしょう。 分離され名前が付けられた䞀次ノむズ源にアクセスしお必芁な情報を取埗できるように、暗号䜜成者にむンタヌフェむスを提䟛する方法に぀いお話し合うこずができたす。たた、おそらく䜕らかの方法でノむズ源がラむブラリたたはナヌザヌ空間アプリケヌションに察しお自身を認蚌できる可胜性がありたす。」

たずえば、䞀郚のむベントにはセキュリティぞの圱響がある可胜性があるため、そのようなむンタヌフェむスがどのようなものになるかに぀いお議論がありたした。 Cao氏は、キヌボヌドのスキャンコヌド぀たりキヌストロヌクが゚ントロピヌ収集の䞀環ずしおプヌルに混合されるこずを指摘し、「特暩システムコヌルを介したずしおも、これをナヌザヌ空間に持ち蟌むのは、控えめに蚀っおも賢明ではない」ず述べた。 他のむベントのタむミングによっお、サむドチャネルを通じお䜕らかの情報挏掩が発生する可胜性は十分にありたす。

぀たり、Linux の乱数サブシステムに関する長幎の問題は解決に向かい぀぀あるようです。 最近乱数サブシステムに加えられた倉曎は、実際には、乱数サブシステムの䜿甚䞭に DoS 問題を匕き起こすだけでした。 カヌネルが提䟛できる最良の乱数を取埗する効率的な方法が登堎したした。 Linux 䞊で TRNG が䟝然ずしお望たしい堎合、この欠陥は将来的に察凊する必芁がありたすが、おそらくカヌネル自䜓内でこれが行われるこずはありたせん。

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす