Count from April/13/2004 |
HTTP-FUSE-KNOPPIX/Xenoppix
【注意事項】KNOPPIX日本語版関連(VMKnoppix、HTTP-FUSEなど)のホームページは
http://www.rcis.aist.go.jp/project/knoppix/ に移動しました。
このホームページは更新しませんので、最新情は新しいホームページにご移動ください。
English
Special Topic
- リリース: HTTP-FUSE KNOPPIX for Trusted Computing Geeks 101
- 追加情報: ネットニュース掲載
- "Trusted HTTP-FUSE KNOPPIX501" をリリースしました。
- 9MBのCD-ROMで通用のKNOPPIXが利用できます。ネットワークからブロックデバイスのイメージを必要に応じて必要な部分だけダウンロードするKNOPPIXです。今回はブロックの読み出し時に改竄チェックを入れる仕組みとセキュアチップTPM(Trusted Platform Module)を活用したトラステッドブートを組み合わせました。これにより電源投入時からの計測が記録されるようになりました。
- 技術詳細:こちらで開発したトラステッドネットワークブロックデバイス"Trusted HTTP-FUSE CLOOP" をKNOPPIXに組込んでブロックデバイスを読み出す毎に計測する仕組みが入りました。また、ブートローダにTrusted GRUB を採用し、セキュアチップTPMを有効にした場合に電源投入時から接続デバイスの測定や利用するファイルの測定を行なう"Chain of Trust"が実現できるようになりました。その動作はLinuxから確認できます(利用法を参照)。
-
 |
 |
| Chain of Trustの概念図。デバイスやファイルはSHA1 Digestとして計測され TPM 内の PCR (Platform Configuration Register)に保存されます。 |
DTrusted GRUB の計測する手順と Trusted HTTP-FUSE CLOOPへの移行手順 |
- ISO file (only 9MB) httpfuse-trusted_20061101.iso (MD5: c98fcc4b77404b69dcc96b71de1d6a3d)
- 利用方法
- 利用要件:
- インターネット接続できること。
- PCがTPM 1.1 を有し、Trusted Boot対応になっていること。BIOSでEnableにしてください。現在確認できているのはThinkPAD
X30, T42 です。
- ISOファイルを焼いたCDで起動してください。Trusted GRUBでメニューが出ますので必要ならオプションを追加して下さい。ブート途中でブロックファイルのダウンロードサイトの選択メニューがでますので、近いと思われるサイトを選択してください。遠いサイトだと起動が遅いです。
(現在、ヨーロッパの3サイト、米国の3 サイト、日本の 13 サイトが利用可能です)
- 追加オプション:
- http_proxy=
- proxy URL.を指定してください
- 例: http_proxy=http://proxy.aist.go.jp:8080
- staticipaddress
- 静的IPアドレスを指定します。ブート途中に下記の設定項目がでますので指定してください。
- "IPaddress:", "Netmask:", "Default Gateway:",
"Name Server:"
- memcache
- ブロックファイルをRAM DISKキャッシュします。
- nocache
- fuse_uri=
- ブロックファイルのURIを直接指定します。
- 例: fuse_uri=http://ring.aist.go.jp/archives/linux/knoppix/knx501tpm/knoppix501en
- Trusted Bootの確認の仕方 (Atmel TPM 1.1が入っているThinkPAD T42 & X30 を例に説明します)
- 準備
- # modprobe atml_tpm
- # mount -t security none /sys/kernel/security
- Trusted Bootのログ確認
- # cat /sys/kernel/security/tpm0/ascii_bios_measurement
5 2907b0a74e2e025f863bda3dd55a9ada385dcf28 04 [Event Separator]
6 2907b0a74e2e025f863bda3dd55a9ada385dcf28 04 [Event Separator]
7 2907b0a74e2e025f863bda3dd55a9ada385dcf28 04 [Event Separator]
4 c1e25c3f6b0dc78d57296aa2870ca6f782ccf80f 05 [Calling INT 19h]
4 38f30a0a967fcf2bfee1e3b2971de540115048c8 05 [Returned INT 19h]
4 7ca42b22324927c400263bae94e1e7cc28655532 05 [Booting CD ROM]
4 5c3eb80066420002bc3dcc7ca4ab6efad7ed4ae5 01 [POST CODE]
5 3315669a981d24f825eff4f2cc6f1d35093dfe8b 01 [POST CODE]
8 27fb6f0e387394ff8a125e225ab0eed21496f773 01 [POST CODE] *** kernel "linux"
8 0e8daebdd20d97a3761803c473bc77ed82a5e996 01 [POST CODE] *** miniroot "minirt.gz"
- 計測された値の確認
# sha1 /mnt/cdrom/boot/isolinux/linux
27fb6f0e387394ff8a125e225ab0eed21496f773 /mnt/cdrom/boot/isolinux/linux
# sha1 /mnt/cdrom/boot/isolinux/minirt.gz
0e8daebdd20d97a3761803c473bc77ed82a5e996 /mnt/cdrom/boot/isolinux/minirt.gz
- TPMのPCRの確認
- # cat /sys/device/platform/tpm_atmel/pcrs
PCR-00: EC 44 13 64 3D 36 06 10 C0 26 D2 90 79 FD 95 A4 D6 FC B9 C1
PCR-01: C0 A9 46 A3 A4 24 B2 F0 61 2C BA B7 9D 81 E4 F8 1A 71 AC 67
PCR-02: EB B3 BA AE E7 57 4B B6 37 AA AB 67 0F 9A C1 BC EB 6F 80 F3
PCR-03: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10
PCR-04: 01 56 4F A7 09 AE 00 B1 90 84 28 D3 09 09 A1 F9 AD B5 53 29
PCR-05: 1A F1 39 04 08 69 63 DE 79 41 E4 2E 68 DE 2E B0 B7 85 BD 82
PCR-06: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10
PCR-07: 04 FD EC DD 50 1D AF 0F 62 4C 1F 99 60 12 CF 30 44 FF 46 10
PCR-08: AF 8F 70 C0 A6 92 7C 6F A6 FA 6B F1 D8 94 AC F0 F2 04 BC CA
PCR-09: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-11: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-12: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-13: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-14: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-15: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
- Trusted HTTP-FUSE CLOOPのログ確認
- # tail -f /var/log/fs_wrapper_PID.log
1150452051.109: #00000000(845b31ded38e15c1fa8febf97fe0781f23af98c3) :missed.
1150452051.112: #00000000(845b31ded38e15c1fa8febf97fe0781f23af98c3) :hits.
1150452051.112: #00000001(166cbaedbb1cc836e7c95d7d9943efde5a53829e) :missed.
1150452051.113: #00000002(29c4e363dbad648072751ca1f856e5780dd2981d) :missed.
1150452051.114: #00000003(fa8ad05b713a9cf8a701636ca6c353dc58fd6bfd) :missed.
1150452051.114: #00000004(1f82a543fa9310c44eff6a13618beca3cacffc12) :missed.
- 上記の状態でアプリケーションを起動すると読み出すブロックが計測されるのが確認でいます。カッコ内がブロックのSHA1の値であり、ブロックファイル名になっています。ブロックファイルは/tmp/blocks/blockfile/
にキャッシュされています。
- 関係発表リスト:
- Linux-Kongress 2006 (ニュルンブルク,ドイツ)の論文と発表資料を公開しました。
- Slide of "HTTP-FUSE Xenoppix" at Ottawa Linux Symposium 2006
- Ottawa Linux Symposium 2006 での"HTTP-FUSE Xenoppix"発表スライド資料
- Ottawa Linux Symposium 2006で発表
- "HTTP-FUSE Xenoppix" を発表します.
- OLSのCE Linux Forum DEMO BoothでHTTP-FUSE KNOPPIX/Xenoppix Box (SH4-Linux
Router with TFTP and HTTP Proxy) を展示します.
- HTTP-FUSE-KNOPPIX-4.0.2を公開しました。
- HTTP-FUSE Xenoppix をリリースしました。
- HTTP-FUSE Xenoppixのホームページは下記。
- HTTP-FUSE-KNOPPIX-4.0を公開しました
はじめに
HTTP-FUSE KNOPPIX は「積み上げ型」KNOPPIXです。通常のKNOPPIXでは700MB のisoファイルを最初にダウンロードしますが、HTTP-FUSE
KNOPPIXではルートファイルシステムの読み出し要求がある度に必要な部分(ピース)をHTTPからダウンロードします。ピースは手元のPCに「積み上げ」られます。HTTP-FUSE
で最初に必要なものはLinuxカーネルとminiroot を含むブートローダのみで、そのサイズは6MBです。
ルートファイルシステムを含むオリジナルのブロックデバイスは小さなピースに分割されます。小さなピースは圧縮されてファイルに保存されます。このファイルを「分割圧縮ブロックファイル」と呼びます。分割圧縮ブロックファイルは要求があるときにダウンロードされます。分割圧縮ブロックファイルはHTTP-FUSEを通して仮想的なブロックデバイスとして再構成されます。
.# HTTP-FUSEはユーザスペースファイルシステムFUSE をベースにしています。 http://fuse.sourceforge.net/.
HTTP-FUSE-KNOPPIX は起動時にルートファイルシステムを選ぶことができます。HTTP-FUSE
KNOPPIX ではカスタマイズ毎にCDを作成する必要がありません。カスタマイズしたルートファイルシステムをHTTPサーバにアップロードするだけです。
更にHTTP-FUSE KNOPPIXでは、カスタマイズされたKNOPPIXとオリジナルのKNOPPIXの差分の「分割圧縮ブロックファイル」をアップロードするだけです。この特徴はサーバの容量を少なくし、カスタマイズを簡単にします。
下の図で通常のKNOPPIXとHTTP-FUSE-KNOPPIXの違いを示します。
通常のKNOPPIX
ISOは700MBで全て(ブートローダ、カーネル、ミニルート、cloopファイル)を含む。
カスタマイズはCD丸ごと作り直し。
|
 |
HTTP-FUSE-KNOPPIX
最初に必要なものは 6MB(ブートローダ、カーネル、ミニルート)のみ。
ルートファイルシステムであるcloopファイルは「分割圧縮ブロックファイル」で構成され、HTTPよりHTTP-FUSEを通してオンデマンドで取得する。
「分割圧縮ブロックファイル」は、ローカルPCに保存され、再利用可能。
ルートファイルシステムは起動時に選択可能。カスタマイズのためにCD-ROMを作り直す必要なし。
カスタマイズを行った場合でも差分の「分割圧縮ブロックファイル」のアップロードのみ。オリジナルとの共通部分は共用される。 |
 |
如何に起動を早くするか
HTTP-FUSE-KNOPPIX の起動時間はネットワークレイテンシ(遅延)の大きく影響されます。
分割圧縮ブロックファイルの配信にはCDN(Contents Delivery Network) を使います。現在のCDNのターゲットとしては
RING プロジェクト ミラーサーバ群と"Corali化された" サーバ ("Coral" はP2P プロキシのサーバプロジェクト) を想定しています。. これらのCDNでは多くのサイトがあり、CDN内のDNSによりクライアントに近いサイトを割り当てる機能があります。Ringプロジェクトでは日本国内に多くのサイトがあり、日本のクライアントに対してブロードバンドのネットワークを提供してくれます。Coral
プロキシは PlanetLab で世界中にサイトをもちます。
さらにHTTP-FUSE-KNOPPIXでは "netselect"を使ってCDNで割り当てられたサイトのうち一番近いものを見つけます。この機能は世界中どこにいてもネットワークレイテンシの短いサイトを見つけます。
 |
| "netselect" が CDNでもっと近いダウンロードサイト見つける |
利点のまとめ
- HTTP-FUSE-KNOPPIX では1枚のCD-ROMで多くのKNOPPIX派生物(カスタマイズバージョン)を使うことができます。
- ルートファイルシステムを起動時に選択して利用できるためです。
- ネットワークトラフィックを減らします。
- HTTP-FUSE-KNOPPIXで最初に必要なものは 6MBのブートローダ,だけです。通常のKNOPPIX
では700MBのフルセットです。
- 起動後、必要なブロックファイル(ルートファイルシステムの一部)はダウンロードされます。ダウンロードしたブロックファイルは保存され、再利用できます。
- カスタマイズされたKNOPPIXのためのHTTPサーバ容量を減らします。
- HTTP-FUSE-KNOPPIX は通常のKNOPPIXと同様に利用できます。
------------------------------------
SFS-KNOPPIX での苦い経験
HTTP-FUSE-KNOPPIXを開発する前に SFS-KNOPPIX を作りました。SFS-KNOPPIXもSFS(Self-certifying File System)を利用してインターネットから
起動するものです。ここで我々は苦い経験をしました。SFSのサーバが日本にあったため、海外からの利用では長いネットワーク遅延のため、起動に時間がかかりました。アメリカやヨーロッパからの利用ではネットワーク遅延が100mse以上あったため、SFS-KNOPPIXの起動に30分以上かかりました。
これはインターネット上でのサーバ・クライアントモデルに問題がありました。SFS-KNOPPIX
ではブートする度にSFSを通してルートファイルシステムをマウントしなければなりませんでした。ここではネットワーク遅延の問題から逃れられませんでした。この問題を解決するためにHTTP-FUSE
KNOPPIXを作成しました。この要点は下記に挙げるものです。
- 透過的なブロックデバイスを作って、ブロックデバイスの一部を積み重ねられるようにしました。
- この実装でリブートのときにレンテンシ問題を回避できます。なぜなら一度ダウンロードしたブロックデバイスは再利用できるからです。
- ブロックファイルをHTTPで配信すること。
- SFS サーバの拡張は簡単ではありません。なぜなら特別なソフトをインストールしなくてはいけませんし、ネットワークで特殊なポート(4番)を開く必要があります。
- HTTPはファイルを配信する標準的な方法です。 効率的な配信を行うために色々な方法が提案されています。たとえば、プロキシやミラーサーバなど。クライアントが近くのプロキシやミラーサーバを見つけられれば、ネットワーク遅延の影響を避けることができます。
ダウンロード
HTTP-FUSE-KNOPPIX(CD 版)
HTTP-FUSE-KNOPPIX(USB 版)
要求事項
- インターネット接続ができること。
- 256MB以上のメモリ。
- ブロックファイルをセーブするには 128MB 以上のフリースペースのある二次記憶装置。USBメモリがもっとも使いやすいです。
- 700MB あれば全ての分割圧縮ブロックファイルを保存できます。
準備
HTTP-FUSE-KNOPPIX(CD 版)
HTTP-FUSE-KNOPPIX(USB 版)
WindowsXP/2000 からのインストーラがあります。
- まず、USB メモリを接続して下さい。この場合にドライブ名を覚えておいて下さい。
(例: "D:").
- ダウンロードした HTTP-FUSE-KNOPPIX USB 版のZIPファイルを解凍してください。WindowsXPでは右クリックの「全て展開」で解凍できます。
- 展開したフォルダ FUSE_boot_usb_Installer に移って install ファイルをダブルクリックして下さい。
- メッセージにしたがってインストールしてください。
- USB メモリがブータブルになり、必要なファイルが転送されます。
- インストール終了。USBメモリで図のファイルが確認できます。"USB-HDD"としてリブートしてください。
分割圧縮ブロックファイルを保存する方法
- ドライブの先頭に"knxblock"ホルダを作ってください。
- "knxblock"を含むファイルシステムは読み書き可能である必要があります。たとえば
FAT, EXT2などのファイルシステムにしてください。また、容量は128MB以上用意してください。
- "knxblock"は起動時に自動的に見つけられ、圧縮分割ブロックファイルが保存されます。
起動
- CD 版: CD-ROMを入れて、CD-ROM起動してください。
- USB 版: USB メモリを挿し、USB-HDDから起動してください。
- 通常のKNOPPIX.として起動します。ブートオプションも有効です。
- CDN の選択メニューが出ます。一つ選択してください。 (注意: coral はたまに不安定です。)
- KNOPPIX選択メニューが出ます。一つ選んで下さい。
- 下図のような遅延の計算が行われます。.(注意: delay が1000の場合は起動に 30sec 程度かかります)
- HTTP-FUSE-KNOPPIXの起動画面。通常のKNOPPIXとして使えます。
特別なブートオプション
- http_proxy=
- プロキシを指定できます。
- 例 boot: knoppix26 http_proxy=http://proxy.aist.go.jp:8080
- staticipaddress
- 固定IPアドレスを指定できます。ブート時にメニューで下記の項目を聞いていきます。
- "IPaddress:", "Netmask:", "Default Gateway:",
"Name Server:"
- memcache
- ダウンロードしたファイルをRAM DISKに保存します。メモリ容量が必要です。
- fuse_uri=
- 分割圧縮ファイルのあるURIを直接指定できます。
- 例: boot: knoppix26 fuse_uri=unit.aist.go.jp/itri/knoppix/knxblock/knoppix37JP/
HTTP サーバ& 分割圧縮ブロックファイル
HTTP サーバリスト: http://unit.aist.go.jp/itri/knoppix/knxblock/deliver_menu
ブロックファイルリスト: http://unit.aist.go.jp/itri/knoppix/knxblock/contents_menu
"*.cue"はブロックファイルの詳細リスト.
実装の詳細
下図はcloopドライバの詳細を現しています。cloopファイルは通常のブロックデバイスファイルから構成されます。ブロックデバイスを64KB毎に切り出し、圧縮をかけています。それらは1つのcloopファイルに保存されます。cloopファイル内のヘッダは分割/圧縮したブロックの位置データです。cloopドライバはアクセスがあるときに該当ブロックを解凍して、ブロックデバイスを再構成します。

下図はHTTP-FUSEとcloopドライバの関係を表しています。ここでは、64KB毎に切り出されたブロックデバイスデータは圧縮され、それぞファイルとして保存されます。このファイルを「分割圧縮ブロックファイル」と呼びます。HTTP-FUSE では分割圧縮ブロックファイルからcloopファイルを再構成しています。

下図はHTTP-FUSEドライバが分割圧縮ブロックファイルをHTTPサーバから取得している例を示しています。

カスタマイズしたKNOPPIX用の分割圧縮ブロックファイルは減らすことができます。なぜなら、ほとんどの分割圧縮ブロックファイルは共通で共用可能です。下の図は差分の分割圧縮ブロックファイルの利用の仕方を現しています。

問題点と対処
- HTTP-FUSE-KNOPPIX は DNSやDHCPとの時間差のために停止することがあります。
- "Running Linux Kernel 2.6.9"メッセージのあとにブートが停止することがあります。
- この場合、DHCPをキャンセルしてタイムゾーンを指定してください。
- boot: knoppix26 utc nodhcp
- boot: knoppix26 nodhcp TZ=Asia/Tokyo
- 分割圧縮ブロックファイルが二次記憶に保存されていないとシャットダウンに時間がかかります。
- この場合、下記のメッセージが現れます。しばらく待ってください。
- could not umount /KNOPPIX -trying /dev/cloop instead
- USBメモリかの起動はBIOSに依存します。
- 起動確認したPCは下記です。
- IBM ThinkPAD T42: F12 を起動時に押して、HDDリスト内の USB-HDD iを選択してください。
- IBM ThinkPAD X30 & T23: F1 キーを起動時に押して、BIOSセットアップに入ります。. "Startup"
-> "Boot" -> "Hard Drive"に移ってください。 "USB-HDD"
をHDDリストの先頭の持ってきてください。 "F10"キーで "Save
and Exit"を実行してください。リブート後、. F12 キーで "Hard Drive"を選択してください。
Reference
Related work
謝辞
本研究の一部は独立行政法人 情報処理推進機構「未踏ソフトウェア創造事業 どこからともなくブートするOS」鵜飼文敏プロジェクトマネージャの成果です。共同開発者の岡島純氏との議論/発案により推進/実装されました。深謝します。