15.13. ディスクパーティションの暗号化

寄稿: Lucky Green.

FreeBSD は無許可のデータアクセスに対する優れたオンライン保護機能を提供します。 ファイルのパーミッションおよび強制的アクセスコントロール (MAC: Mandatory Access Control) (Mandatory Access Control (MAC) を参照) は、コンピュータが動作中で、OS が実行中であるときに、 無許可の第三者がデータにアクセスするのを防ぐことに役立ちます。 しかしながら、攻撃者がコンピュータに物理的にアクセスし、 機密データをコピーし分析するためにコンピュータのハードドライブを別のシステムに移動させることができれば、 OS によって強化された許可属性は意味をなさなくなります。

攻撃者が電源の落ちたコンピュータや ハードドライブを手にいれる手段にかかわらず、 GEOM ベースのディスク暗号化 (gbde: GEOM Based Disk Encryption) は、著しい資源を持ち本気で攻撃を仕掛けるつもりでやってきた攻撃者からさえもコンピュータのファイルシステム上にあるデータを保護することができます。 個々のファイルだけを暗号化する煩わしい方法と異なり、 gbde は全ファイルシステムを透過的に暗号化します。 平文テキストは決してハードドライブのプラッタに関係しません。

15.13.1. カーネルで gbde を有効にする

  1. root になる

    gbde の設定をするにはスーパユーザの権限が必要になります。 以下のコマンドを実行して、 root になってください。

    % su -
    Password:
    
  2. オペレーティングシステムのバージョンを確かめる

    gbde(4) が動作するには FreeBSD 5.0 以降が必要です。 以下のコマンドを実行して、 オペレーティングシステムのバージョンを確認してください。

    # uname -r
    5.0-RELEASE
    
  3. カーネルコンフィギュレーションファイルに gbde(4) 対応を追加する

    お好みのテキストエディタを使用して、 以下の行をカーネルコンフィギュレーションファイルに加えます。

    options GEOM_BDE

    FreeBSD カーネルを設定、再コンパイル、インストールします。 この手順は Chapter 8 で説明されています。

    新しいカーネルで再起動します。

15.13.2. 暗号化されたハードドライブの準備

以下の例では、システムに新しいハードディスクを追加しようとしています。このシステムは単一の暗号化されたパーティションを保持することになります。 このパーティションは /private としてマウントされます。gbde/home および /var/mail を暗号化するのにも使用できますが、 より複雑な指示を必要となるのでこの解説の範疇を越えています。

  1. 新しいハードドライブを追加する

    Section 15.3 で説明されている通りに新しいドライブをシステムに設置します。 この例では、新しいハードドライブは /dev/ad4s1c パーティションに 加えられたものとします。 /dev/ad0s1* デバイスは、この例のシステム上に存在する標準的な FreeBSD パーティションを表します。

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4
    
  2. gbde ロックファイルを保持するディレクトリを作成する

    # mkdir /etc/gbde
    

    gbde ロックファイルには、 暗号化されたパーティションにアクセスするのに必要となる情報が格納されています。 ロックファイルにアクセスしない場合、 gbde は 膨大な手動による介在なしには (ソフトウェアは対応していません)、暗号化されたパーティションに含まれるデータを解読することはできないでしょう。 それぞれの暗号化されたパーティションは別々のロックファイルを使用します。

  3. gbde パーティションを初期化する

    gbde パーティションは使用する前に初期化されなければなりません。 この初期化は一度だけ実行される必要があります。

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
    

    エディタが開くので、 テンプレートをもとにさまざまなオプションを設定してください。 UFS1 または UFS2 で使用するには、sector_size を 2048 に設定してください。

    $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
    #
    # Sector size is the smallest unit of data which can be read or written.
    # Making it too small decreases performance and decreases available space.
    # Making it too large may prevent filesystems from working.  512 is the
    # minimum and always safe.  For UFS, use the fragment size
    #
    sector_size     =       2048
    [...]
    

    gbde(8) はデータを保護するのに使用するパスフレーズを二度尋ます。 パスフレーズはそれぞれ同じでなければなりません。 データを保護する gbde の能力は、 あなたが選択したパスフレーズの品質に完全に依存します。 [1]

    gbde init コマンドは gbde パーティションに対するロックファイルを作成します。この例では /etc/gbde/ad4s1c に格納されます。

    Cautiongbde ロックファイルは、 すべての暗号化されたパーティションの内容とともにバックアップされなければ なりません。 ロックファイルだけを削除している間、 ロックファイルなしでは信念の固い攻撃者が gbde パーティションを解読することを防ぐことができない一方で、 正当な所有者は、gbde(8) およびこの設計者にまったく支持されない膨大な量の作業なしには、 暗号化されたパーティション上のデータにアクセスすることができないでしょう。

  4. カーネルに暗号化されたパーティションを接続する

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    暗号化されたパーティションを初期化する際に選択したパスフレーズを入力するように求められます。 新しい暗号化デバイスは /dev/dev/device_name.bde として現れます。

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde
    
  5. 暗号化デバイス上にファイルシステムを作成する

    カーネルに暗号化デバイスが接続されると、 デバイス上にファイルシステムを作成できます。 暗号化デバイス上にファイルシステムを作成するには newfs(8) を使用します。従来の UFS1 ファイルシステムで初期化するより、 新しい UFS2 ファイルシステムで初期化した方が高速なので、 -O2 オプションとともに newfs(8) を使用することが推奨されています。

    Note: FreeBSD 5.1-RELEASE 以降では、-O2 オプションはデフォルトです。

    # newfs -U -O2 /dev/ad4s1c.bde
    

    Note: newfs(8) は、デバイス名に *.bde 拡張子によって認識される、 接続された gbde パーティションに対して実行されなければなりません。

  6. 暗号化パーティションをマウントする

    暗号化ファイルシステムに対するマウントポイントを作成します。

    # mkdir /private
    

    暗号化ファイルシステムをマウントします。

    # mount /dev/ad4s1c.bde /private
    
  7. 暗号化ファイルシステムが利用可能か確かめる

    これで暗号化ファイルシステムは df(1) で見ることができ、 利用する準備ができました。

    % df -H
    Filesystem        Size   Used  Avail Capacity  Mounted on
    /dev/ad0s1a      1037M    72M   883M     8%    /
    /devfs            1.0K   1.0K     0B   100%    /dev
    /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
    /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
    /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
    /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private
    

15.13.3. 存在する暗号化ファイルシステムをマウントする

システムを起動する度に、すべての暗号化ファイルシステムは 使用前にカーネルに接続し、 エラーの有無をチェックし、マウントする必要があります。 必要なコマンドは root ユーザとして実行されなければなりません。

  1. カーネルに gbde パーティションを接続する

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    パーティションの暗号化を初期化する際に選択したパスフレーズを入力するように求められるでしょう。

  2. ファイルシステムのエラーをチェックする

    暗号化ファイルシステムを自動的にマウントするために /etc/fstab に設定を掲載することはまだできないため、 マウントする前に fsck(8) を実行して、 ファイルシステムのエラーをチェックしなければなりません。

    # fsck -p -t ffs /dev/ad4s1c.bde
    
  3. 暗号化ファイルをマウントする

    # mount /dev/ad4s1c.bde /private
    

    これで暗号化ファイルシステムが利用できるようになりました。

15.13.3.1. 暗号化パーティションを自動的にマウントする

スクリプトを作成して、暗号化パーティションを自動的に接続、 チェック、マウントすることは可能です。しかしながら、 安全上の理由によりスクリプトに gbde(8) パスワードを含めるべきではありません。その代わりに、コンソールまたは ssh(1) による接続からパスワードを入力するようなスクリプトが手動で実行されることが推奨されます。

15.13.4. gbde が採用した暗号の保護

gbde(8) は 128bit AES の CBC モードを使用してセクタペイロードを暗号化します。 ディスク上のそれぞれのセクタは異なる AES 鍵で暗号化されます。 セクタ鍵がユーザが入力したパスフレーズからどのように導き出されるかを含め、 gbde の暗号手法の設計についての詳細は、 gbde(4) を参照してください。

15.13.5. 互換性に関する問題

sysinstall(8)gbde 暗号化デバイスと互換性がありません。 sysinstall(8) を実行する前に *.bde デバイスはすべてカーネルから切断されなければなりません。 そうしないと、sysinstall(8) が初めにデバイスを走査する際にクラッシュしてしまうでしょう。 暗号化デバイスを切断するには、以下のコマンドを使用します。

# gbde detach /dev/ad4s1c

vinum(4)geom(4) サブシステムを使用しないので、 vinum ボリュームと gbde を併用できないことにも注意してください。

Notes

[1]

記憶するのが簡単で、 安全なパスフレーズを選択する方法については、 Diceware Passphrase ウェブサイトを参照してください。