1月版 Linusのクリスマスプレゼントが引き起こした問題


上川純一
日本ヒューレット・パッカード株式会社
コンサルティング・インテグレーション統括本部
2008/1/31


/dev/randomと/dev/urandomのエントロピー

 Linuxカーネルには、環境ノイズをエントロピー源として利用し、乱数生成に活用する機能があります。具体的には人間の利用するキーボードなどの入力デバイスのタイミングの「ぶれ」などを活用します。

関連記事:
2005年4月版 カーネル2.6.11.yのメンテナは嫌なヤツ?
http://www.atmarkit.co.jp/flinux/rensai/watch2005/watch04b.html

 /dev/randomで提供されている乱数生成の仕組みは、この機能を活用していますが、サーバ運用の場合に問題が発生します。サーバは、人間が入力デバイスで直接操作しない場合が多いため、エントロピーが足りなくなり、十分にランダムな乱数が生成できなくなるのです。

 このように十分なエントロピーが得られない場合、/dev/urandomは妥協して疑似乱数を返しますが、/dev/randomはそうした場合、十分なエントロピーが得られるまで待ちます。そのため、/dev/randomを利用しているアプリケーションがそこで止まってしまい、パフォーマンスが異様に遅くなるのです。この問題に遭遇した人も多いのではないでしょうか?

 Marc Haberはメーリングリストで、/dev/urandomの現在の仕様について苦言を呈していました。現在、/dev/urandomにアクセスすると、エントロピーを消費してしまいます。この結果、/dev/randomを真に必要としているアプリケーションがブロックされるのが好ましくないというのです。おそらく、Exim4のGnuTLSインターフェイスのデバッグをしている際に、/dev/urandomの利用によってあまりにもエントロピーが消費されてしまうことに困ったのでしょう。

 この問題提起に対し、「とはいえ/dev/urandomを完全に疑似乱数にしてしまうのはまずいので、/dev/urandomを利用するアプリケーションは/dev/randomにエントロピーを返すべきだ」など、いろいろな意見が出ました。

 Mark Haberは、「数年前からネットワークデバイスはエントロピー源ではなくなったが、これを復活させ、ネットワークデバイスからエントロピーを取り出せばよいのではないか」と指摘しました。またEric Dumazetは、まだいくつかのネットワークドライバがエントロピーを提供していることを指摘し、「ネットワークドライバにパッチを適用してしまえば問題は解決するのではないか」と述べています。

 このように悩ましい/dev/urandomと/dev/randomの運用ですが、皆さんはどうしていますか?

参考:
マニュアルページ
random(4)
Linux Kernelのrandomキャラクタデバイスのソースコード
drivers/char/random.c

-stableの進ちょく

 -stableリリースの仕組みは、まだうまく回っているようです。

 12月には、1カ月分の累積パッチリリースとして、ほぼ同じ内容の2.6.22.15と2.6.23.10がリリースされました。またそれらとは別に、大きな問題やリグレッションへの対応として、2.6.23.11および2.6.23.12がリリースされました。

 Adrian Bunkが管理している2.6.16系列では、12月にはリリースがなかったようです。11月にリリースされ、次が1月となっているので、どうやら2カ月に1回のペースになっているようですね。

■2.6.22.y: Greg K-Hたちが管理しているツリー

  • 2.6.22.15(12月14日):Greg K-H
    ・hrtimers:相対的タイムアウトのオーバーフローを回避する(CVE-2007-5966)
    ・nkfsd:fsid_sourceが正しいことを確認する
    ほか、35パッチ

■2.6.23.y:Greg K-Hたちが管理しているツリー

  • 2.6.23.10(12月14日):Greg K-H
    ・hrtimers:相対的タイムアウトのオーバーフローを回避する(CVE-2007-5966)
    ・KVM:リアルモードに切り替わる場合にmmuコンテキストをリセットする、などのKVM関連のパッチ
    ほか、59パッチ
  • 2.6.23.11(12月14日):Greg K-H
    ・BRIDGE:コードのセクションの修正
    ・適用するとビルドできなくなったので「Freezer: Fix APM emulation breakage」パッチを外す
    以上、2パッチ

  • 2.6.23.12(12月18日):Greg K-H
    ・「PNP: increase the maximum number of resources」パッチが問題を起こしているので外す
    以上、1パッチ

(以上、敬称略)

2/2

Index
Linux Kernel Watch 1月版
 Linusのクリスマスプレゼントが引き起こした問題
  Page 1
 Linusにとって「クリスマス休暇」とは
 Andrew Mortonからのプレゼントにも「ワナ」が
 ramdiskへの再挑戦:rdドライバを書き直す
Page 2
 /dev/randomと/dev/urandomのエントロピー
 -stableの進ちょく

連載 Linux Kernel Watch


 Linux Squareフォーラム Linuxカーネル関連記事
連載:Linux Kernel Watch(連載中)
Linuxカーネル開発の現場ではさまざまな提案や議論が交わされています。その中からいくつかのトピックをピックアップしてお伝えします
連載:Linuxファイルシステム技術解説
ファイルシステムにはそれぞれ特性がある。本連載では、基礎技術から各ファイルシステムの特徴、パフォーマンスを検証する
特集:全貌を現したLinuxカーネル2.6[第1章]
エンタープライズ向けに刷新されたカーネル・コア
ついに全貌が明らかになったカーネル2.6。6月に正式リリースされる予定の次期安定版カーネルの改良点や新機能を詳しく解説する
特集:/procによるLinuxチューニング[前編]
/procで理解するOSの状態

Linuxの状態確認や挙動の変更で重要なのが/procファイルシステムである。/procの概念や/procを利用したOSの状態確認方法を解説する
特集:仮想OS「User Mode Linux」活用法
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
Linuxのカーネルメンテナは柔軟なシステム
カーネルメンテナが語るコミュニティとIA-64 Linux
IA-64 LinuxのカーネルメンテナであるBjorn Helgaas氏。同氏にLinuxカーネルの開発体制などについて伺った

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間