「多少なりともまともなセキュリティエンジニアの唱えるべき呪文とは:『セキュリティというのは製品ではなくプロセスなんだ』ということ。単に、強い暗号方式をシステムに組み込むだけじゃすまない。システム全体の設計にあたって、暗号方式を含むあらゆるセキュリティ手段がいっしょに働くよう設計するということだ」
-- Bruce Schneier, "Applied Cryptography"著者.
暗号の利用
Index
なぜ暗号つきで出荷するの?
OpenSSH.
疑似乱数発生装置 (PRNG): ARC4, ...
暗号化ハッシュ関数: MD5, SHA1, ...
暗号変換(Cryptographic Transforms): DES, Blowfish, ...
暗号化ハードウェアのサポート
国際暗号学者求む
追加読み物
なぜ暗号つきで出荷するの?
それは一言で:出荷できるから。
OpenBSD プロジェクトは、カナダが本拠地です。
カナダ輸出規制一覧は、暗号ソフトの輸出に
特に制限をつけていないし、自由に手に入る暗号ソフトの輸出が自由である
ことについては、もっとはっきり明記してあります。
暗号関連法規を
検討する研究は、Marc Plumb が行っています。
おかげで OpenBSD プロジェクトは、オペレーティングシステムの随所に
暗号を仕込んであります。われわれとしては、使う暗号はすべて
自由に入手できてライセンスも適切でなくては
ダメです。いぢわるな特許つきの暗号は、直接使えません。さらに
その暗号ソフトが、まともな輸出ライセンスを持った国からのもので
あることが必要です。どこの国の法律も破りたくないからです。いま
われわれが使っている暗号ソフトコンポーネントは、アルゼンチン、
オーストラリア、カナダ、ドイツ、ギリシャ、ノルウェー、スウェーデン
で書かれたものです。
OpenBSD のリリースやスナップショットをつくるときには、リリース用バイナリは
フリーな国でつくります。ユーザに提供されるソースやバイナリが、ケチの
つかないものであるのを確実にするためです。過去のリリース用バイナリは、
カナダ、スウェーデン、ドイツで作られています。
OpenBSD は Kerberos IV を含んでいます。われわれの使うコードベースは、
輸出規制のない KTH-ベースのリリースでスウェーデンからのものです。われわれの X11 ソースも、Kerberos IV を使うように拡張されています。Kerberos V サポートは
2000 年のどこかで採用されるでしょうが、現時点では、自由に輸出可能な
Kerberos V リリースは存在しません。
OpenBSD は、IPSEC スタックつきで出荷された初のオペレーティングシステムでした。IPSEC は、ごく初期の1997 年の OpenBSD 2.1 リリース以来含まれています。
われわれの、完全準拠のカーネル内 IPSEC スタックは、多数のカードに基づくハードウェアアクセラレーションつきだし、われわれ独自のフリーの ISAKMP デーモンと
いっしょに
VPNCの IPSEC 準拠試験のためのマシンの一つでも使われています。
今日、暗号はオペレーティングシステムのセキュリティを高める方法としてだいじです。OpenBSD で使われる暗号は、いくつかの側面に分類できます。以下に説明しましょう。
OpenSSH
OpenBSDをインストールして、みんながまっ先にやることはなんでしょうか。それは Secure Shell
(ssh)
を FTP サイトのports のツリーや packages からインストールすることです。少なくとも、いままでは。
2.6 リリースをもって、OpenBSD には
OpenSSH が含まれます。完全にフリーで特許のしがらみもないバージョンの ssh です。OpenBSD 2.6 リリースの日には、
OpenSSH は ssh
バージョン 1 と相互運用できて、さらにいろいろ追加機能を持っていました。
-
制限つき(つまり特許のこと、
sslを参照)のコンポーネントはすべて、ソースコードから直接取り除かれました。ライセンスや特許つきコンポーネントは、外部ライブラリを使います。
-
ssh プロトコル 1.5をサポートするようにアップグレード。
-
kerberos
認証とチケット引き渡し(ticket passing)の機能を追加。
-
使い捨て(one-time)パスワード認証を、
skeyによってサポート。
おおまかに言って、われわれは ssh のフリーライセンス版リリースをもってきて、それを OpenBSD化した、というわけです。アメリカ本拠の RSA 特許は、libcrypto とlibssl共有ライブラリを含む、RSA を使ったパッケージを自動的にダウンロードしてインストールする簡単な手法を提供することで切り抜けています。これらのパッケージは、OpenSSL に基づいています。アメリカ以外にすんでいる人たちは、自由に
RSA 特許のコードを使えますし、アメリカ国内の人たちは、非商業目的であれば、それを自由に使えます。どうやら、アメリカ国内の企業でも RSA ライブラリをフリーで使って間買わないようです。RSAそのものが、収益をあげる役割を果たしていなければいいようです。
でもこのやりかたで、ほとんどみんながOS に ssh を組み込めることになります。
速報! OpenSSH はプロトコル 2.0をサポート!
最近になって、われわれは OpenSSH を拡張して SSH 2 プロトコルも扱えるようにしました。主要なssh プロトコルを 3 つとも(1.3, 1.5, 2.0) すべてこなせる ssh デーモンがあるということで、柔軟性がきわめて高まります。プロトコル 2.0 は、公開キー暗号に RSA を使わず、 DHと DSA アルゴリズムを使っています。OpenBSD 2.7――これは新しい
OpenSSH つきで出荷されます――では、そのままですぐにプロトコル 2.0 のサポートが得られるわけです! もしプロトコル 1.3 と 1.5 のサポートもほしければ、単に
RSA パッケージをもってきて (やり方は、われわれの
ssl
man ページ参照)、デーモンを再起動するだけです。
疑似乱数発生ソフト
疑似乱数発生 (PRNG) ソフトは、アプリケーションに一連の数字をわたします。この数字は、システムのセキュリティ上、いくつか重要な特徴を持っています;
- 外部の存在には、それ以前の出力結果がわかっている場合でも、次の出力を予想することが不可能でなくてはならない。
- 発生された数字は、くり返しパターンを持っていてはならない。つまり PRNG は、きわめて長いサイクルを持っていなくてはならない。
PRNG はふつう、同じ初期値から始めれば同じ出力シーケンスが出てくるアルゴリズムにすぎない場合が多いのです。マルチユーザのオペレーティングシステムでは、PRNG
にランダムなデータでシードを与えるためのソースがたくさんあります。OpenBSD カーネルは、マウスのインタラプトタイミングやネットワークデータのインタラプト応答時間、キーボードの打鍵間隔や、ディスク IO
情報を使って、エントロピープールを見たそうとします。乱数は、カーネルルーチン用に提供されていて、デバイス経由でユーザ領域のプログラムに輸出されます。いまのところ、以下のようなところで乱数が使われています:
- bind(2) の動的 sin_port 割り当て
- プロセスのPID
- IP データグラムの ID
- RPC トランザクション ID (XID).
- NFS RPC トランザクション ID (XID).
- DNS クエリーID
- Iノード生成数、getfh(2) と fsirand(8)を参照
- traceroute(8)のタイミング摂動(Timing perturbance)
- mktemp(3) と mkstemp(3)について、もっと強力な一時名称
- スプーフィング攻撃からの防御のために、TCP ISS 値に乱数性を付加
- IPSEC esp_old パケットに、ランダムなパディング
- 各種パスワードアルゴリズムの、「お塩」生成用
- にせものの S/Key チャレンジ生成
- photurisd と
isakmpd
では、鍵の交換に liveness 証明を与えるために使用
暗号化ハッシュ関数
ハッシュ関数は、入力データを圧縮して、一定サイズのストリングにします。暗号化ハッシュ関数においては、次のようなものを見つけることは不可能か非常に困難となります:
- 二つの入力が同じ出力を生み出すこと (collision resistant),
- 同じ出力結果を持つ入力二つが異なっていること(2nd preimage resistant).
OpenBSD では、MD5, SHA1, RIPEMD-160 が暗号化ハッシュ関数として使われています。たとえば以下のような場面で
暗号変換
暗号変換は、データの暗号化と復号に使われます。これらは、データ暗号化用には暗号キーを使い、データ復号用には復号キーを使います。暗号変換のセキュリティーは、キーとなる材料にのみ依存するはずです。
OpenBSD は、DES, 3DES, Blowfish、Cast などの暗号変換方式を、カーネルやユーザ領域のプログラム用に提供しており、これはいろいろな場所で使われています。たとえば:
- libc では
Blowfish
パスワードの生成に。これについては、USENIX 論文も参照のこと。
- IPsec
では、ネットワーク層の機密性提供のため。
- Kerberos とかなりのケルベロス化されたアプリケーション、たとえば
telnet,
cvs,
rsh,
rcp,
rloginなどで利用
-
photurisd と
isakmpd
では、IPsec の鍵となるものが相談されるときのやりとりを保護するために利用
- AFS ではネットワークを通過するメッセージ保護に使われ、リモートファイルシステムへのアクセスの機密性を提供
- libssl では、アプリケーションがデファクト標準化している、暗号的に高セキュリティの SSL プロトコル上で通信できるようにするため
暗号化ハードウェアのサポート
OpenBSD は 2.7 より、アクセラレータや乱数発生装置など、一部の暗号化ハードウェアのサポートをはじめました。
- IPSEC crypto dequeue
われわれはIPSEC スタックに手を入れて、暗号関数が外部で処理されるようにしました。ほとんどの単純なソフトウェアによる IPSEC スタックは、各パケットの処理ごとに暗号処理を必要としました。これはパフォーマンスが同期化するということになります。ハードウェアをきちんと高速に使うためには、この二つのコンポーネントを分離しなければならないのです――われわれがやったように。実は、これをやることで、ソフトだけの場合にもちょっと速度が向上します。
- HiFn 7751
HiFn 7751
を使ったカードは、暗号アクセラレータとして使えます(たとえばPowerCrypt)。
トンネルの両側に Hifn 7751 を一つずつ使ったときの目下のパフォーマンスは、3DES/SHA1 ESPで 63Mbit/秒、P3/550 cpuを使った場合にくらべて 600% 近い性能向上です。いくつか問題を解決するために、さらに改良が加えられていますが、2000 年4 月 13 日時点では、コードは安定したと判断されます。このチップをサポートするために、われわれは(アメリカで書かれた)
powercrypt ドライバを使わずに、自前でドライバを開発しました。われわれのドライバはまた、IPSEC スタックにもきちんとリンクしています。7751 はいまや業界の標準では遅いと考えられていて、多くのベンダはもっと高速なチップを持っています(当の HiFn も、もっと高速だけれど高価なチップを出しています)。3DES SHA1 ESP のピーク性能は 63MBit/秒くらいです。
(余談ですが、HiFn は交渉しづらい会社でした。われわれがアメリカの外で、かれらの暗号アンロックアルゴリズムをリバースエンジニアリングしたことについて、訴えると脅しまでかけてきたんです)
- Broadcom BCM5805 (またはベータ段階のチップ Bluesteelnet 5501)
OpenBSD 2.7 リリース直後、これらベンダー提供による初期リリース部品の試験サポートの追加に成功しました。特に、テスト用チップの
5501です。
Bluesteelnet は Broadcom に買収されて、本物の部品づくりを開始しています。かれらの新しい BCM5805 は、似てはいますが、DSAやRSAなどのアルゴリズムを走らせるために、非対称エンジンを追加してあります。おおまかな性能は、最低でもHiFn の4倍程度高速となっていて、このチップがはやめに普及してくれることを願いたいものです。
Broadcom/Bluesteelnet の人たちは、実につきあいがいのある人たちでした。チップの完全なドキュメンテーションもくれたし、試験用のカードもいっぱいくれました。
- Pijnenburg PCC-ISES
PCC-ISES はオランダ発の新しいチップセットです。見本のハードウェアとドキュメンテーションをもらったので、これをサポートする作業がまもなく開始されます。
- IRE 2141
SafeNet チップセットを使った
IRE 暗号カードの見本とドキュメンテーションももらいました。これも近々サポート作業をはじめたいと思っています。
- その他のカード
これ以外にもサポートする方向で動いているカードはあります。たとえば:
インテル (そして多少ましながら 3com) は、いまだに自分たちの暗号カードのドキュメンテーションをわれわれにわたせば役にたつのだ、ということが理解できないようです。ですから、みなさんでそれぞれ接触して、奨めてあげてください。われわれはもう、この会社たちと交渉するのはあきらめました。もう時間の無駄でしかないようだからです。
もしドライバ書きを手伝いたい人がいたら、
是非手伝ってください。
- Intel 82802AB/82802AC Firmware Hub RNG
82802 FWH チップ (i810, i820, i840 マザーボード上にあります) は、乱数発生機 (RNG) を持っています。高性能 IPSEC はもっと高い乱数エントロピーを必要とします。2000 年 4 月 10 日をもって、われわれは RNG をサポートします。また暗号チップ上のほかの RNG サポートも追加していきます。
- OpenSSL
われわれは、RSA や DSA をこなせる暗号カードをサポートし、すうべての暗号カードの機能を OpenSSL にエクスポートすることで、ユーザ領域のプログラム(たとえばssh,
apache httpsなど)
の役にたつようにしようという壮大な計画を持っています。
国際暗号研究者募集
もちろん、われわれのプロジェクトは、こうしたシステムの作業をしてくれる人々を必要としています。もしアメリカ以外の暗号学者で、これまで挙げた制約条件を満たす人が OpenBSD 組み込み暗号の手助けをしてくれる気があるなら、ぜひ連絡ください。
追加の資料
OpenBSD チームメンバーは、OpenBSD のセキュリティ関連の変更について、いろいろ論文を書いています。これら文書の postscript 版が以下で手に入ります。
www@openbsd.org
$OpenBSD: crypto.html,v 1.67 2000/09/12 21:03:10 deraadt Exp $