EN JA
GELI(8)
GELI(8) FreeBSD System Manager's Manual GELI(8)

名称

geli暗号化 GEOM クラスのための制御ユーティリティ

書式

利用者のカーネルに GEOM_ELI をコンパイルするためには、次の行をカーネル設定ファイルに追加します:

device crypto
options GEOM_ELI

もう一つの方法として、ブート時に GEOM_ELI モジュールをロードするためには、次の行を loader.conf(5) に追加します:

geom_eli_load="YES"


geli ユーティリティの使用法:


geli init [ -bPv][ -a aalgo][ -B backupfile][ -e ealgo][ -i iterations][ -J newpassfile][ -K newkeyfile][ -l keylen][ -s sectorsize][ -V version] prov


geli label - an alias for init


geli attach [ -dprv][ -j passfile][ -k keyfile] prov


geli detach [ -fl] prov ...


geli stop - an alias for detach


geli onetime [ -d][ -a aalgo][ -e ealgo][ -l keylen][ -s sectorsize] prov


geli configure [ -bB] prov ...


geli setkey [ -pPv][ -i iterations][ -j passfile][ -J newpassfile][ -k keyfile][ -K newkeyfile][ -n keyno] prov


geli delkey [ -afv][ -n keyno] prov


geli kill [ -av][ prov ...]


geli backup [ -v] prov file


geli restore [ -fv] file prov


geli suspend [ -v] -a | prov ...


geli resume [ -pv][ -j passfile][ -k keyfile] prov


geli resize [ -v] -s oldsize prov


geli version [ prov ...]


geli clear [ -v] prov ...


geli dump [ -v] prov ...


geli list


geli status


geli load


geli unload

解説

geli ユーティリティは、GEOM プロバイダで暗号化を設定するために使用されます。

次は、最も重要な機能のリストです:

  • 利用可能な暗号ハードウェアがあるとき、 crypto(9) フレームワークを利用して、 geli は、自動的にそれを利用します。
  • 多くの暗号アルゴリズム (現在、 AES-XTS, AES-CBC, Blowfish-CBC, Camellia-CBC3DES-CBC) をサポートします。
  • 次のアルゴリズムの 1 つを利用して、オプションのデータ認証 (整合性の検証) を実行することができます: HMAC/MD5, HMAC/SHA1, HMAC/RIPEMD160, HMAC/SHA256, HMAC/SHA384 または HMAC/SHA512
  • 次の最大 2 つまでの区分的なコンポーネントのユーザキーを作成することができます: プロンプトによって入力されるか、または 1 以上のパスファイルから読み込まれるパスフレーズ。キーファイルは、1 つ以上のファイルから読み込まれます。
  • ルートパーティションの暗号化を許可します。ユーザは、ルートファイルシステムをマウントする前にパスフレーズを問い合わされます。
  • 次でユーザキーのパスフレーズのコンポーネントを強化します: B. Kaliski, PKCS #5: Password-Based Cryptography Specification, Version 2.0., RFC, 2898.
  • 2 つの独立したユーザキー (例えば、“ユーザキー”と“会社キー”) の使用を許可します。
  • それは、速いです - geli は、セクタからセクタ (sector-to-sector) への簡単な暗号化を実行します。
  • ユーザがすぐにキーの実体を破壊しなければならないなら、バックアップからキーを復旧することによってデータを元に戻すことができるように、暗号化されたマスタキーを、バックアップして復旧することができます。
  • プロバイダは、最後のクローズで自動的にデタッチするために設定することができます (それで、ユーザは、ファイルシステムをアンマウントした後に忘れずにプロバイダをデタッチする必要はありません)。
  • スワップパーティションと一時的なファイルシステムの役に立つ - ランダムな、一時マスタキーでプロバイダをアタッチすることを許可します。
  • データの整合性 (データ認証) の検証を可能にします。
  • 暗号化されたデバイスをサスペンド (suspend) して、レジューム (resume) することを許可します。

geli への最初の引数は、実行する動作を示します:

init
暗号化される必要があるプロバイダを初期化します。ここで、利用者は、使用する暗号アルゴリズム、データキーの長などをセットアップすることができます。最後のプロバイダのセクタは、メタデータを格納するために使用されます。また、 init サブコマンドは、自動的に /var/backups/<prov>.eli ファイルにメタデータを書き込みます。以下で説明される restore サブコマンドでメタデータを回復することができます。

追加オプションは、次を含みます:

-a aalgo
与えられたアルゴリズムを使用してデータの整合性の検証 (認証) を有効にします。これは、利用可能な記憶域のサイズを減少させ、また、速度も遅くなります。例えば、 4096 バイトのセクタで HMAC/SHA256 アルゴリズムを使用するとき、最初のプロバイダの記憶域の 89% が利用可能となります。現在サポートしているアルゴリズムは、次の通りです: HMAC/MD5, HMAC/SHA1, HMAC/RIPEMD160, HMAC/SHA256, HMAC/SHA384HMAC/SHA512。オプションが与えられないなら、認証されず、暗号化のみです。お勧めのアルゴリズムは、 HMAC/SHA256 です。
-b
ルートパーティションがマウントされる前にブート時にパスフレーズを問い合わせます。これで、暗号化されたルートパーティションを使用することが可能となります。ブートの後に取り除くことができる、CD-ROM ディスクまたは USB ペンドライブであるかもしれない、 /boot/ ディレクトリでブート可能な暗号化されていない記憶域をまだ必要とします。
-B backupfile
デフォルトの /var/backups/<prov>.eli の代わりにメタデータバックアップに使用するファイル名。バックアップを抑制するために、利用者は、 backupfile として none を使用することができます。
-e ealgo
使用する暗号化アルゴリズム。現在サポートされているアルゴリズムは、次の通りです: AES-XTS, AES-CBC, Blowfish-CBC, Camellia-CBC, 3DES-CBCNULL です。デフォルトの、そして、お勧めのアルゴリズムは、 AES-XTS です。 NULL は、暗号化されていません。
-i iterations
ユーザキーのパスフレーズのコンポーネントを処理するとき、 PKCS#5v2 と共に使用する繰り返しの数。このオプションが指定されないなら、 geli は、2 秒の暗号作業と等しい繰り返しの数を見つけます。 0 が与えられたなら、PKCS#5v2 は、使用されません。パスフレーズのコンポーネントのすべての部分が読み込まれた後に、 PKCS#5v2 処理は、一度実行されます。
-J newpassfile
ユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。 newpassfile が - として与えられるなら、標準入力が使用されます。 (改行文字を除いた) 最初の行だけが与えられたファイルから取られます。複数のファイルに渡って分割された単一のパスフレーズを再構築する効果があり、複数回、この引数を指定することができます。 -P オプションと組み合わせることはできません。
-K newkeyfile
ユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。 newkeyfile に - が与えられるなら、標準入力が使用されます。複数のファイルに渡って分割された単一のキーファイルを再構築する効果があり、複数回、この引数を指定することができます。
-l keylen
与えられた暗号アルゴリズムで使用するデータキーの長さ。長さが指定されないなら、選択されたアルゴリズムは、その デフォルト キーの長さを使用します。
AES-XTS
128, 256
AES-CBC, Camilla-CBC
128, 192, 256
Blowfish-CBC
128 + n * 32, for n=[0..10]
3DES-CBC
192
-P
ユーザキーのコンポーネントとしてパスフレーズを使用しません。 -J オプションと組み合わせることはできません。
-s sectorsize
復号化されたプロバイダのセクタサイズを変更します。初期化ベクタを要求する暗号化/復号化がセクタごとに行われるので、セクタサイズを増加させることによって、性能を向上させることができます。より少ない数のセクタは、より少ない計算の作業を意味します。
-V version
使用するメタデータのバージョン。このオプションは、より古い FreeBSD/GELI バージョンによって使用されるプロバイダを作るとき、役に立ちます。どのメタデータのバージョンがどの FreeBSD のバージョンによってサポートされるかを見つけるためには、 「歴史」 セクションを調べてください。より古いメタデータのバージョンを使用することは、利用可能な機能の数を制限することに注意してください。
attach
与えられたプロバイダをアタッチします。暗号化されたマスタキーは、メタデータからロードされ、与えられたパスフレーズ/キーファイルを使用して復号化され、新しい GEOM プロバイダは、“.eli”接尾辞がついた与えられたプロバイダの名前を使用して作成されます。

追加オプションは、次を含みます:

-d
指定されるなら、復号化されたプロバイダは、最後のクローズで自動的にデタッチされます。これは、不足するメモリに役に立つので、ユーザは、ファイルシステムをアンマウントした後に忘れずにプロバイダをデタッチする必要はありません。それは、プロバイダが書き込みを待ってオープンされているときだけ働くので、プロバイダのファイルシステムが読み込み専用でマウントされているなら、うまくいかないでしょう。たぶん、より良い選択は、 detach サブコマンドのための -l オプションです。
-j passfile
ユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。詳しい情報について、 init サブコマンドのための -J オプションの説明を参照してください。
-k keyfile
ユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。詳細については、 init サブコマンドのための -K オプションの説明を参照してください。
-p
ユーザキーのコンポーネントとしてパスフレーズを使用しません。 -j オプションと組み合わせることはできません。
-r
読み込み専用のプロバイダをアタッチします。それは、書き込みのためにオープンされません。
detach
devfs エントリを削除して、メモリのマスタキーとデータキーをクリアすることを意味する、与えられたプロバイダをデタッチします。

追加オプションは、次を含みます:

-f
強制的にデタッチします - たとえプロバイダがオープンされていてもデタッチします。
-l
最後にクローズでデタッチされたプロバイダをマークします。このオプションが指定されるなら、プロバイダは、それがオープンされている間にデタッチされませんが、たとえ読み込みのためだけにオープンされていても、それが最後にクローズされるとき、自動的にデタッチされます。
onetime
ランダムな、一時 (短命の) マスタキーで与えられたプロバイダをアタッチします。コマンドは、暗号化されたスワップパーティションか、または一時的なファイルシステムを使用することができます。

追加オプションは、次を含みます:

-a aalgo
データの整合性の検証 (認証) を有効にします。詳細については、 init サブコマンドの説明を参照してください。
-e ealgo
使用する暗号化アルゴリズム。詳細については、 init サブコマンドの説明を参照してください。
-d
最後のクローズでデタッチします。注意: このオプションは、プロバイダがファイルシステムをそれに作成した後にデタッチするとき、一時的なファイルシステムには、使用可能ではありません。それは、まだスワップパーティションに使用することができます (そして、使用されるべきです)。詳細については、 attach サブコマンドの説明を参照してください。
-l keylen
与えられた暗号アルゴリズムで使用するデータキーの長さ。詳細については、 init サブコマンドの説明を参照してください。
-s sectorsize
復号化されたプロバイダのセクタサイズを変更します。詳細については、 init サブコマンドの説明を参照してください。
configure
与えられたプロバイダの設定を変更します。

追加のオプションは、次の通りです:

-b
与えられたプロバイダで BOOT フラグを設定します。詳細については、 init サブコマンドの説明を参照してください。
-B
与えられたプロバイダから BOOT フラグを削除します。
setkey
新しいユーザキーで暗号化され、選択されたスロットにマスタキーのコピーをインストールします。選択されたスロットが存在するなら、既存のコピーを置き換えます。プロバイダには、それぞれ独立したユーザキーで暗号化された 1 つまたは両方のスロットに格納することができる、1 つのマスタキーがあります。 init サブコマンドで、キー番号 0 だけが初期化されます。いつでもユーザキーを変更することができます: アタッチされたプロバイダのため、デタッチされたプロバイダ、またはバックアップファイルに関してです。プロバイダがアタッチされているとき、ユーザは、存在するパスフレーズ/キーファイルを提供する必要はありません。

追加オプションは、次を含みます:

-i iterations
PKCS#5v2 で使用される繰り返しの数。 0 が与えられたなら、PKCS#5v2 は、使用されません。 setkey サブコマンドでこのオプションを使用できるようにするためには、 1 つのキーだけが定義されなければならなくて、そしてこのキーが変更されなければなりません。
-j passfile
現在のユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。
-J newpassfile
新しいユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。
-k keyfile
現在のユーザキーのキーファイルのコンポーネント (またはその部分) を含むファイルを指定します。
-K newkeyfile
新しいユーザキーのキーファイルのコンポーネント (またはその部分) を含むファイルを指定します。
-n keyno
変更する (0 か 1 であるかもしれない) マスタキーのコピーのインデックス数を指定します。プロバイダがアタッチされ、キー番号が与えられないなら、プロバイダをアタッチするために使用されるキーは、変更されます。プロバイダがデタッチされ、(または、バックアップファイルで操作され)、キー番号が与えられないなら、提供されたユーザキーのパスフレーズ/キーファイルで成功して復号化された最初のマスタキーのコピーは、変更されます。
-p
現在のユーザキーのコンポーネントとしてパスフレーズを使用しません。 -j オプションと組み合わせることはできません。
-P
新しいユーザキーのコンポーネントとしてパスフレーズを使用しません。 -J オプションと組み合わせることはできません。
delkey
選択されたマスタキーのコピーを (ランダムデータで上書きして) 破壊します。アタッチされたプロバイダのために破壊されたキーがあるなら、たとえすべてのマスタキーのコピーが破壊されても、プロバイダは、デタッチされません。マスタキーがまだメモリにあるので、 setkey サブコマンドでも救うことができます。

追加のオプションは、次の通りです:

-a
( -f オプションを必要としな) すべてのマスタキーのコピーを破壊します。
-f
強制的にキーを破壊します。このオプションは、最後のマスタキーのコピーを破壊するために必要とされます。
-n keyno
マスタキーのコピーのインデックス数を指定します。プロバイダがアタッチされ、キー番号が与えられないなら、プロバイダをアタッチするために使用されるキーは、破壊されます。プロバイダがデタッチされている (るか、または、バックアップファイルで操作されている) ならキー番号が与えられなければなりません。
kill
このコマンドは、緊急事態でのみ使用されるべきです。与えられたプロバイダですべてのマスタキーのコピーを破壊して、強制的にそれを (それがアタッチされているなら) デタッチします。これは、間違いなく一方向コマンドです - 利用者にメタデータのバックアップがないなら、利用者のデータは、永遠に失われます。プロバイダが -r フラグでアタッチされている場合、キーは、破壊されずに、プロバイダだけがデタッチされます。

追加のオプションは、次の通りです:

-a
指定されるなら、すべての現在のアタッチしているプロバイダは、kill されます。
backup
与えられたプロバイダから与えられたファイルにメタデータをバックアップします。
restore
与えられたファイルから与えられたプロバイダにメタデータを復旧します。

追加のオプションは、次の通りです:

-f
メタデータは、正しいパーティションまたはスライスかがアタッチされていることを保証するプロバイダのサイズを含んでいます。異なったサイズがあるプロバイダにメタデータを復旧する試みを行うなら、 geli は、 -f スイッチが使用されていないなら、データを復旧することを拒否します。パーティションまたはスライスが成長されているなら、 backuprestore を通してメタデータを移動する試みではなく、 resize サブコマンドが、使用されるべきです。
suspend
終了するためにすべての inflight (飛行中) 要求を待つことによって、デバイスをサスペンドし、カーネルメモリから (マスタキーとデータキーのような) すべての機密事項の情報をクリアして、 resume サブコマンドが実行されるまで、さらなるすべての I/O 要求をブロックします。この機能は、ラップトップのために役に立ちます: ラップトップをサスペンドしたい、アタッチされた暗号化されたデバイスをそのままにしたくないときです。暗号化されたデバイスに置かれたファイルシステムからオープンされた、すべてのファイルとディレクトリをクローズする代わりにファイルシステムをアンマウントし、デバイスをデタッチし、 suspend サブコマンドを使用することできます。暗号化されたデバイスへのあらゆるアクセスは、マスタキーが resume サブコマンドを通して再びロードされるまで、ブロックされます。その結果、何かをクローズしたりアンマウントすることも必要はありません。 suspend サブコマンドは、デバイスが onetime サブコマンドで作成されている状態で、動作しません。機密事項のデータは、ファイルシステムキャッシュなどのために、暗号化されたデバイスをサスペンドした後でも、メモリにまだ存在しているかもしれないことに注意してください。

追加のオプションは、次の通りです:

-a
すべての geli デバイスをサスペンドします。
resume
以前にサスペンドされたデバイスをレジュームします。呼び出し側は、このサブコマンドの実行で、デバイスをデッドロックに導く、サスペンドされたデバイスをアクセスしないことを保証しなければなりません。例えば、 geli ユーティリティで格納されたファイルシステムを含むデバイスをサスペンドすることは、悪い考えです。

追加のオプションは、次の通りです:

-j passfile
ユーザキーのパスフレーズのコンポーネント (またはその部分) を含むファイルを指定します。詳しい情報については、 init サブコマンドのための -J オプションの説明を参照してください。
-k keyfile
ユーザキーのキーファイルのコンポーネント (またはその部分) を含むファイルを指定します。詳しい情報については、 init サブコマンドのための -K オプションの説明を参照してください。
-p
ユーザキーのコンポーネントとしてパスフレーズを使用しません。 -j オプションと組み合わせることはできません。
resize
プロバイダがリサイズされたことを geli に通知します。古いメタデータブロックは、プロバイダの終わりの正しい位置に移動され、プロバイダのサイズは、更新されます。

追加のオプションは、次の通りです:

-s oldsize
それの前にプロバイダのサイズは、リサイズされました。
version
引数が与えられなければ、 version サブコマンドは、 ELI GEOM クラスのバージョンと同様に geli ユーザランドユーティリティのバージョンを印刷 (表示) します。

GEOM プロバイダが指定されれば、 version サブコマンドは、それらの各々によって使用されるメタデータのバージョンを印刷 (表示) します。

clear
与えられたプロバイダのメタデータをクリアします。 警告: これは、メタデータに格納された暗号化されたマスタキーのコピーを 0 で削除します。
dump
与えられたプロバイダで保存されたメタデータをダンプします。
list
geom(8) 参照。
status
geom(8) 参照。
load
geom(8) 参照。
unload
geom(8) 参照。

追加オプションは、次を含みます:

-v
より冗長にします。

キーの要約

マスタキー

init に関して、 geli ユーティリティは、プロバイダのためのランダムなマスタキーを生成します。マスタキーは、プロバイダの存続期間の間に決して変化しません。プロバイダのメタデータの各コピー、アクティブまたはファイルへのバックアップは、最大 2 まで、マスタキーの独立して暗号化されたコピーを格納することができます。

ユーザキー

マスタキーの格納されたそれぞれのコピーは、パスフレーズおよび/またはキーファイルから geli ユーティリティによって生成される、ユーザキーで暗号化されます。 geli ユーティリティは、最初にコマンド行で指定された順序でキーファイルのすべての部分を読み込み、次に、コマンド行で指定された順序で格納されたパスフレーズのすべての部分を読み込みます。パスフレーズの部分が指定されないなら、システムは、パスフレーズを入力するようにユーザにプロンプトを出します。パスフレーズは、オプションで、PKCS#5v2 によって強化されます。ユーザキーは、連結されたキーファイルとパスフレーズで計算された要約です。

データキー

操作中に、1 つ以上のデータキーは、確定的にマスタキーからカーネルによって派生され、メモリにキャッシュされます。与えられたプロバイダによって使用されるデータキーの数と方法は、 GELI バージョンに依存して、プロバイダがデータ認証を使用するように設定されたかどうかで、派生されます。

SYSCTL 変数

次の sysctl(8) 変数は、 ELI GEOM のクラスの振る舞いを制御するために使用することができます。デフォルト値は、各変数の横に示されています。また、 /boot/loader.conf でいくつかの変数を設定することができます。
kern.geom.eli.version
ELI GEOM クラスのバージョン番号。
kern.geom.eli.debug: 0
ELI GEOM のクラスのデバッグレベル。これは、0 から 3 (0 と 3 を含んで) の間の数に設定することができます。 0 に設定されるなら、最小量のデバッグ情報が印刷 (表示) されます。 3 に設定されるなら、最大量のデバッグ情報が印刷 (表示) されます。
kern.geom.eli.tries: 3
ユーザがパスフレーズを問い合わせれる回数。これは、(ルートファイルシステムがマウントされる前に) ブート時にアタッチされるべきであるプロバイダに使用されるだけです。 0 に設定されるなら、ブート時にアタッチされるプロバイダは、無効にされます。この変数は、 /boot/loader.conf に設定されるべきです。
kern.geom.eli.overwrites: 5
破壊されるかとき、マスタキーがランダムな値で何回上書きされるかを指定します。この操作の後で、それは、0 で満たされます。
kern.geom.eli.visible_passphrase: 0
1 に設定されるなら、(ルートファイルシステムがマウントされる前に) ブート時に入力パスフレーズは、目に見えるようになります。この代わりとして、入力されたパスフレーズがログに記録され、 dmesg(8) を通して人目にさらされるので慎重に使用されるべきです。この変数は、 /boot/loader.conf に設定されるべきです。
kern.geom.eli.threads: 0
いくつのカーネルスレッドがソフトウェア暗号をするために使用されるべきであるかを指定します。目的は、SMP システムに関する性能を増強することです。 0 に設定されるなら、CPU にバインドされたスレッドは、アクティブな CPU ごとに開始されます。
kern.geom.eli.batch: 0
1 に設定されるなら、バッチング (batching) を使用することによって、暗号操作を高速化することができます。バッチングは、1 つの割り込みのための暗号要求のグループで応答による割り込みの数を減少します。暗号カードとドライバは、この機能をサポートしなければなりません。
kern.geom.eli.key_cache_limit: 8192
どのくらいのデータキーをキャッシュするかを指定します。デフォルトの制限 (8192 のキー) によって、512 バイトのセクタがある 4TB のプロバイダのためのすべてのキーをキャッシュすることができ、1MB のメモリを持ち回ります。
kern.geom.eli.key_cache_hits
データキーを何回検索したかと、それが既にキャッシュにあるかを報告します。この sysctl は、 kern.geom.eli.key_cache_limit. で指定された制限より少数のデータキーを必要とするプロバイダに対して更新されません。
kern.geom.eli.key_cache_misses
データキーを何回検索したかと、それがキャッシュにないかを報告します。この sysctl は、 kern.geom.eli.key_cache_limit で指定された制限より少数のデータキーを必要とするプロバイダに対して更新されません。

終了ステータス

終了ステータスは、成功すれば 0 で、コマンドが失敗するなら 1 です。

使用例

ユーザのペンドライブでファイルからのパスフレーズとランダムデータで暗号化されるプロバイダを初期化します。 4kB セクタサイズを使用します。プロバイダをアタッチし、ファイルシステムを作成して、それをマウントします。作業を行います。プロバイダをアンマウントして、それをデタッチします:

# dd if=/dev/random of=/mnt/pendrive/da2.key bs=64 count=1 
# geli init -s 4096 -K /mnt/pendrive/da2.key /dev/da2 
Enter new passphrase: 
Reenter new passphrase: 
# geli attach -k /mnt/pendrive/da2.key /dev/da2 
Enter passphrase: 
# dd if=/dev/random of=/dev/da2.eli bs=1m 
# newfs /dev/da2.eli 
# mount /dev/da2.eli /mnt/secret 
... 
# umount /mnt/secret 
# geli detach da2.eli

暗号化されたプロバイダを作成しますが、2 つのユーザキーを使用します: 1 つは、利用者の従業員のためと、1 つは、(従業員が“偶然に”彼のパスフレーズを忘れても、悲劇がないように) 会社のセキュリティ担当責任者として利用者のためです:

# geli init /dev/da2 
Enter new passphrase: (利用者のパスフレーズを入力) 
Enter new passphrase: (セキュリティ担当責任者のパスフレーズを入力) 
Reenter new passphrase: 
# geli setkey -n 1 /dev/da2 
Enter passphrase: (セキュリティ担当責任者のパスフレーズを入力) 
Enter new passphrase: (利用者の従業員が彼のパスフレーズを入力 ...) 
Reenter new passphrase: (... 二度目)

利用者は、利用者の会社でのセキュリティ担当責任者です。ユーザによって使用される暗号化されたプロバイダを作成しますが、ユーザが彼らのパスフレーズを忘れることがあるので、利用者自身のランダムキーとともにマスタキーをバックアップします:

# dd if=/dev/random of=/mnt/pendrive/keys/`hostname` bs=64 count=1 
# geli init -P -K /mnt/pendrive/keys/`hostname` /dev/ada0s1e 
# geli backup /dev/ada0s1e /mnt/pendrive/backups/`hostname` 
(暗号化されたマスタキーは、これによって再暗号化されるので、 
キー番号 0 を使用します) 
# geli setkey -n 0 -k /mnt/pendrive/keys/`hostname` /dev/ada0s1e 
(ユーザは、彼のパスフレーズを入力することができます); 
Enter new passphrase: 
Reenter new passphrase:

暗号化されたスワップパーティションのセットアップ:

# dd if=/dev/random of=/dev/ada0s1b bs=1m 
# geli onetime -d -e 3des ada0s1b 
# swapon /dev/ada0s1b.eli

下記の例は、どのようにブート時に (ルートファイルシステムがマウントされる前に) アタッチされる 2 つのプロバイダを設定するかを示します。それらのひとつは、パスフレーズと 3 つのキーファイルの部分を使用して、もうひとつは、1 つの部分のキーファイルだけを使用しています:

# dd if=/dev/random of=/dev/da0 bs=1m 
# dd if=/dev/random of=/boot/keys/da0.key0 bs=32k count=1 
# dd if=/dev/random of=/boot/keys/da0.key1 bs=32k count=1 
# dd if=/dev/random of=/boot/keys/da0.key2 bs=32k count=1 
# geli init -b -K /boot/keys/da0.key0 -K /boot/keys/da0.key1 -K /boot/keys/da0.key2 da0 
Enter new passphrase: 
Reenter new passphrase: 
# dd if=/dev/random of=/dev/da1s3a bs=1m 
# dd if=/dev/random of=/boot/keys/da1s3a.key bs=128k count=1 
# geli init -b -P -K /boot/keys/da1s3a.key da1s3a

プロバイダは、初期化され、今、 /boot/loader.conf に、これらの行を加えなければなりません:

geli_da0_keyfile0_load="YES" 
geli_da0_keyfile0_type="da0:geli_keyfile0" 
geli_da0_keyfile0_name="/boot/keys/da0.key0" 
geli_da0_keyfile1_load="YES" 
geli_da0_keyfile1_type="da0:geli_keyfile1" 
geli_da0_keyfile1_name="/boot/keys/da0.key1" 
geli_da0_keyfile2_load="YES" 
geli_da0_keyfile2_type="da0:geli_keyfile2" 
geli_da0_keyfile2_name="/boot/keys/da0.key2" 
 
geli_da1s3a_keyfile0_load="YES" 
geli_da1s3a_keyfile0_type="da1s3a:geli_keyfile0" 
geli_da1s3a_keyfile0_name="/boot/keys/da1s3a.key"

暗号化だけではなく、 HMAC/SHA256 を使用してデータの整合性の検証も設定します。

# geli init -a hmac/sha256 -s 4096 /dev/da0 
Enter new passphrase: 
Reenter new passphrase: 
# geli attach /dev/da0 
Enter passphrase: 
# dd if=/dev/random of=/dev/da0.eli bs=1m 
# newfs /dev/da0.eli 
# mount /dev/da0.eli /mnt/secret

geli は、デフォルトで、メタデータを /var/backups/<prov>.eli ファイルに書き込みます。メタデータが、何らかの方法で (例えば、偶然の上書きで) 失われるなら、それを回復することができます。次の状況を考えてます:

# geli init /dev/da0 
Enter new passphrase: 
Reenter new passphrase: 
 
/var/backups/da0.eli で、メタデータのバックアップを見つける 
ことができ、次のコマンドで回復することができます: 
 
 # geli restore /var/backups/da0.eli /dev/da0 
 
# geli clear /dev/da0 
# geli attach /dev/da0 
geli: Cannot read metadata from /dev/da0: Invalid argument. 
# geli restore /var/backups/da0.eli /dev/da0 
# geli attach /dev/da0 
Enter passphrase:

暗号化されたファイルシステムが拡張されるなら、メタデータを移動して、更新する必要があります:

# gpart create -s GPT ada0 
# gpart add -s 1g -t freebsd-ufs -i 1 ada0 
# geli init -K keyfile -P ada0p1 
# gpart resize -s 2g -i 1 ada0 
# geli resize -s 1g ada0p1 
# geli attach -k keyfile -p ada0p1

2 つのファイルに分けられたパスフレーズでプロバイダを初期化します。それらの 2 つのファイルを使用するか、または geli のプロンプトでパスフレーズとして“foobar”を入力することによって、プロバイダにアタッチすることができます:

# echo foo > da0.pass0 
# echo bar > da0.pass1 
# geli init -J da0.pass0 -J da0.pass1 da0 
# geli attach -j da0.pass0 -j da0.pass1 da0 
# geli detach da0 
# geli attach da0 
Enter passphrase: foobar

ラップトップですべての geli デバイスをサスペンドし、ラップトップをサスペンドし、次に、ラップトップをレジュームした後に、デバイスを 1 つずつレジュームします:

# geli suspend -a 
# zzz 
<利用者のラップトップをレジュームする> 
# geli resume -p -k keyfile gpt/secret 
# geli resume gpt/private 
Enter passphrase:

暗号化モード

geli は、2 つの暗号化モードをサポートします: 予測できない IV と共に IEEE P1619CBC として標準化された XTSgeli によって使用される CBC モードは、モード ESSIV とよく似ています。

データ認証

geli は、認証アルゴリズムが指定されるとき、データの整合性を検証することができます。データの改変/変更が検出されるとき、 geli は、少しもデータも返しませんが、代わりに、エラー ( EINVAL) を返します。改変されたデータのオフセットとサイズは、コンソールに印刷 (表示) されます。利用者のデータの保護を提供する geli が、どの攻撃に対抗するか知ることは、重要です。データがその場で変更されるか、または変更なしでディスク上の 1 つの場所から別の場所までコピーされるなら、 geli は、そのような変更を検出することができはずです。攻撃者が暗号化されたデータを思い出すことができるなら、将来、彼は、予告なしで所有しているデータで変更を上書きすることができます。言い換えれば、 geli は、反復攻撃に対して利用者のデータを保護しません。

すべてのセクタとそれらの対応するチェックサムが適切に一貫した状態に初期化されることを確実にするために、最初の使用の前にすべてのプロバイダに書き込むことをお勧めします。はじめてプロバイダがアタッチされる直前で、このように初期化される前に生じる、データ認証エラーを安全に無視することができます。

歴史

geli ユーティリティは、 FreeBSD 6.0 で登場しました。 Camellia ブロック暗号のサポートは、 FreeBSD 7.0 で Yoshisato Yanagisawa によって実装されました。

与えられた FreeBSD バージョンによってサポートされる最も大きい GELI メタデータのバージョンは、次の通りです:

FreeBSD GELI
version version

6.0 0
6.1 0
6.2 3
6.3 3
6.4 3

7.0 3
7.1 3
7.2 3
7.3 3
7.4 3

8.0 3
8.1 3
8.2 5

9.0 6

作者

Pawel Jakub Dawidek <pjd@FreeBSD.org>
October 1, 2013 FreeBSD