日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
GELI(8) FreeBSD システム管理者マニュアル GELI(8) 名称 geli -- 暗号化 GEOM クラスのための制御ユーティリティ 書式 利用者のカーネルに GEOM_ELI をコンパイルするためには、次の行をカーネル設 定ファイルに追加します: device crypto options GEOM_ELI もう一つの方法として、ブート時に GEOM_ELI モジュールをロードするために は、次の行を loader.conf(5) に追加します: geom_eli_load="YES" geli ユーティリティの使用法: geli init [-bdgPRTv] [-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 [-Cdprv] [-n keyno] [-j passfile] [-k keyfile] prov ... geli detach [-fl] prov ... geli stop - an alias for detach geli onetime [-dRT] [-a aalgo] [-e ealgo] [-l keylen] [-s sectorsize] prov geli configure [-bBdDgGrRtT] 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 と Camellia-CBC) をサポートします。 • 次のアルゴリズムの 1 つを利用して、オプションのデータ認証 (整合 性の検証) を実行することができます: 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/SHA1, HMAC/RIPEMD160, HMAC/SHA256, HMAC/SHA384 と HMAC/SHA512。オプ ションが与えられないなら、認証されず、暗号化の みです。お勧めのアルゴリズムは、HMAC/SHA256 で す。 -b ルートパーティションがマウントされる前に、ブー トの間に、このパーティションを暗号解読しようと 試みます。これで、暗号化されたルートパーティ ションを使用することが可能となります。ブートの 後に取り除くことができる、CD-ROM ディスクまた は USB ペンドライブであるかもしれない、/boot/ ディレクトリでブート可能な暗号化されていない記 憶域をまだ必要とします。 -B backupfile デフォルトの /var/backups/<prov>.eli の代わり にメタデータバックアップに使用するファイル名。 バックアップを抑制するために、利用者は、 backupfile として none を使用することができま す。複数のプロバイダが 1 つのコマンドで初期化 されたなら、利用者は、ファイル名の PROV (すべ て大文字) を使用することができ、それは、プロバ イダ名と置き換えられます。PROV がファイル名に 見つけられず、複数のプロバイダが 1 つのコマン ドで初期化されたなら、-<prov> は、指定された ファイル名の終わりに付け加えられます。 -d この暗号化されたルートファイルシステムからブー トするためのパスフレーズを入力するとき、`*' 文 字をエコーします。これは、パスフレーズの長さを 見えるようにします。 -e ealgo 使用する暗号化アルゴリズム。現在サポートされて いるアルゴリズムは、次の通りです: AES-XTS, AES-CBC, Camellia-CBC と NULL です。デフォルト の、そして、お勧めのアルゴリズムは、AES-XTS で す。NULL は、暗号化されていません。 -g この暗号化されたルートのファイルシステムからの ブートを有効にします。ブートローダは、暗号化さ れたパーティションからパスフレーズと loader(8) をロードためにプロンプトを出します。 -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, Camellia-CBC 128, 192, 256 -P ユーザキーのコンポーネントとしてパスフレーズを 使用しません。-J オプションと組み合わせること はできません。 -s sectorsize 復号化されたプロバイダのセクタサイズを変更しま す。初期化ベクタを要求する暗号化/復号化がセク タごとに行われるので、セクタサイズを増加させる ことによって、性能を向上させることができます。 より少ない数のセクタは、より少ない計算の作業を 意味します。 -R 自動的な展開をオフに切り替えます。デフォルト で、基本的なプロバイダが成長するなら、暗号化さ れたプロバイダは、また、自動的に成長します。メ タデータは、新しい位置に移動させられます。自動 的な展開がオフに切り替えられ、基本的なプロバイ ダが、サイズを変更するなら、暗号化されたプロバ イダをアタッチすることは、メタデータがもはや最 後のセクタに置かれないので、もはや可能性があり ません。この場合に、GELI は、基本的なプロバイ ダの以前のサイズのみをログ記録するので、リサイ ズが誤って行なわれるなら、メタデータをより容易 に見つけることができます。 -T BIO_DELETE 呼び出しを通して渡しません (すなわ ち、TRIM/UNMAP)。これは、どのくらいの空間を利 用者が実際に使用していて、どのセクタがライブの データを含んでいるかを知っていることから攻撃者 を阻止することができますが、また、その性能と寿 命を低下する利用者が再要求している空間から (SSD など) 裏打ちされている格納を阻止します。 基本的なプロバイダは、TRIM が有効にされると き、削除されたセクタを実際に取り除くかどうか分 からないので、それは、少しのセキュリティを追加 すると見なされるべきではありません。 -V version 使用するメタデータのバージョン。このオプション は、より古い FreeBSD/GELI バージョンによって使 用されるプロバイダを作るとき、役に立ちます。ど のメタデータのバージョンがどの FreeBSD のバー ジョンによってサポートされるかを見つけるために は、「歴史」セクションを調べてください。メタ データのより古いバージョンを使用することは、利 用可能な機能の数を制限することに注意してくださ い。 attach 与えられたプロバイダをアタッチします。暗号化されたマスタキー は、メタデータからロードされ、与えられたパスフレーズ/キーファ イルを使用して復号化され、新しい GEOM プロバイダは、与えられた プロバイダの名前を使用して作成されます。".eli" 接尾辞は、ユー ザの指定されたプロバイダに追加されます。複数のプロバイダは、そ れらすべてが同じパスフレーズとキーファイル (keyfile) があるな ら、単一の attach コマンドでのみアタッチすることができます。 追加オプションは、次を含みます: -C 暗号解読のドライラン (dry-run) を行ないます。これ は、デバイスを暗号解読せずにパスフレーズと key file を検証するために役に立ちます。 -d 指定されるなら、復号化されたプロバイダは、最後の クローズで自動的にデタッチされるので、ユーザは、 ファイルシステムをアンマウントした後に忘れずにプ ロバイダをデタッチする必要はありません。これは、 プロバイダが書き込みのためにオープンされていると きだけ動作します、プロバイダのファイルシステムが 読み込み専用でマウントされているなら、動作しませ ん。たぶん、より良い選択は、detach サブコマンドの ための -l オプションです。 -n keyno 使用するマスタキー (Master Key) のコピーのイン デックス番号を指定します (0 または 1 であるかもし れません)。インデックス番号が提供されないなら、す べてのキーが、テストされます。 -j passfile ユーザキーのパスフレーズのコンポーネント (または その部分) を含むファイルを指定します。詳しい情報 について、init サブコマンドのための -J オプション の説明を参照してください。同じパスファイル (pass file) は、すべてのリストされたプロバイダのために 使用されます。 -k keyfile ユーザキーのパスフレーズのコンポーネント (または その部分) を含むファイルを指定します。詳細につい ては、init サブコマンドのための -K オプションの説 明を参照してください。同じキーファイル (keyfile) は、すべてのリストされたプロバイダのために使用さ れます。 -p ユーザキーのコンポーネントとしてパスフレーズを使 用しません。-j オプションと組み合わせることはでき ません。 -r 読み込み専用のプロバイダをアタッチします。それら は、書き込みのためにオープンされません。 detach devfs エントリを削除して、メモリのマスタキーとデータキーをクリ アすることを意味する、与えられたプロバイダをデタッチします。 追加オプションは、次を含みます: -f 強制的にデタッチします - たとえプロバイダがオープンされて いてもデタッチします。 -l 最後のファイルシステムが、アンマウントされた後に、最後にク ローズでデタッチされたプロバイダをマークします。このオプ ションが指定されるなら、プロバイダは、それがオープンされて いる間にデタッチされませんが、たとえ読み込みのためだけに オープンされていても、それが最後にクローズされるとき、自動 的にデタッチされます。 onetime ランダムな、一時 (短命の) マスタキーで与えられたプロバイダをア タッチします。コマンドは、暗号化されたスワップパーティション か、または一時的なファイルシステムを使用することができます。 追加オプションは、次を含みます: -a aalgo データの整合性の検証 (認証) を有効にします。詳 細については、init サブコマンドの説明を参照して ください。 -e ealgo 使用する暗号化アルゴリズム。詳細については、 init サブコマンドの説明を参照してください。 -d 最後のファイルシステムが、アンマウントされた後 に、最後のクローズでデタッチします。注意: この オプションは、ファイルシステムが作成された後 に、プロバイダがデタッチされるように、一時的な ファイルシステムに対して使用可能ではありませ ん。それは、まだスワップパーティションに使用す ることができます、そして、使用されるべきです。 詳細については、attach サブコマンドの説明を参照 してください。 -l keylen 与えられた暗号アルゴリズムで使用するデータキー の長さ。詳細については、init サブコマンドの説明 を参照してください。 -s sectorsize 復号化されたプロバイダのセクタサイズを変更しま す。詳細については、init サブコマンドの説明を参 照してください。 -R 自動的な展開をオフに切り替えます。詳細について は、init サブコマンドの説明を参照してください。 -T TRIM/UNMAP passthru を無効にします。詳細につい ては、init サブコマンドの説明を参照してくださ い。 configure 与えられたプロバイダの設定を変更します。 追加のオプションは、次の通りです: -b 与えられたプロバイダで BOOT フラグを設定します。詳細につい ては、init サブコマンドの説明を参照してください。 -B 与えられたプロバイダから BOOT フラグを削除します。 -d この暗号化されたルートファイルシステムからブートするための パスフレーズを入力するとき、`*' 文字をエコーします。これ は、パスフレーズの長さを見えるようにします。 -D パスフレーズが、この暗号化されたルートファイルシステムから ブートするために入力されるとき、あらゆる文字のエコーを無効 にします。これは、パスフレーズの長さを隠します。 -g この暗号化されたルートのファイルシステムからのブートを有効 にします。ブートローダは、暗号化されたパーティションからパ スフレーズと loader(8) をロードためにプロンプトを出しま す。 -G この暗号化されたルートパーティションからのブートを非活性化 します。 -r 自動的な展開をオフに切り替えます。詳細については、init サ ブコマンドの説明を参照してください。 -R 自動的な展開をオフに切り替えます。 -t TRIM/UNMAP passthru を有効にします。詳細については、init サブコマンドの説明を参照してください。 -T TRIM/UNMAP passthru を無効にします。 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 スイッチが使用されていないなら、 データを復旧することを拒否します。パーティションまたはスラ イスが成長されているなら、backup と restore を通してメタ データを移動する試みではなく、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 で指定された制 限より少数のデータキーを必要とするプロバイダに対して更新されませ ん。現在 64 ビットプラットフォームでのみ実装されている、マップさ れていない I/O バッファのサポートを有効にします。これは、I/O 処理 のオーバヘッドを削減する最適化です。この変数は、デバッグを目的と しており、/boot/loader.conf で設定されなければなりません。 終了ステータス 終了ステータスは、成功すれば 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 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" 1 つの keyfile だけがあるなら、インデックスは、省略されます: geli_da1s3a_keyfile_load="YES" geli_da1s3a_keyfile_type="da1s3a:geli_keyfile" geli_da1s3a_keyfile_name="/boot/keys/da1s3a.key" 慣例によって、これらのローダ変数は、geli_<device>_load と呼ばれます。しか しながら、_load, _type または _name の前の実際の名前の接頭辞は、重要では ありません。ブート時に、geli モジュールは、``<device>:geli_keyfile'' の値 があるすべての <prefix>_type-のような変数を通して検索します。次に、key files へのパスは、<prefix>_name 変数から取り出されます。上記の例で、 prefix (接頭辞) は、``geli_da1s3a_keyfile'' です。 暗号化だけではなく、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 暗号化ファイルシステムを 作成するためには。最初に、private0 と名前が付けられたファイルは、/usr で 作成され、例えば、/dev/md0 のようなメモリディスクとしてアタッチされます。 # dd if=/dev/zero of=/usr/private0 bs=1m count=256 # chmod 0600 /usr/private0 # mdconfig -t vnode -f /usr/private0 それは、ブートの間にメモリディスクを自動的に作成させるために、rc.conf(5) に次の行を置くように推奨されます。 mdconfig_md0="-t vnode -f /usr/private0" /dev/md0 が作成された後に、ランダムなキーは、例えば、/root のように、安全 な位置で生成され、格納されなければなりません。このキーは、geli init が呼 び出されるとき、要求される、パスフレーズによって保護されるべきです。 # dd if=/dev/random of=/root/private0.key bs=64 count=1 # geli init -K /root/private0.key -s 4096 /dev/md0 Enter new passphrase: Reenter new passphrase: # geli attach -k /root/private0.key /dev/md0 Enter passphrase: # dd if=/dev/random of=/dev/md0.eli bs=1m いったん、/dev/md0.eli デバイスの初期化が用意されると、UFS ファイルシステ ムを作成し、例えば、/private にマウントします。 # newfs /dev/md0.eli # mount /dev/md0.eli /private システムのリブートの後に、geli デバイスを次のコマンドで再びマウントするこ とができます。geli のアタッチの呼び出しは、パスフレーズを問い合わします。 それは、そうでなければ、ブートプロセスがパスフレーズの入力を待っているの で、ブートの後に、この手続きを行なうことが推奨されます。 # geli attach -k /root/private0.key /dev/md0 Enter passphrase: # mount /dev/md0.eli /private 暗号化モード geli は、2 つの暗号化モードをサポートします: 予測できない IV と共に IEEE P1619 と CBC として標準化された XTS。geli によって使用される CBC モード は、モード ESSIV とよく似ています。 データ認証 geli は、認証アルゴリズムが指定されるとき、データの整合性を検証することが できます。データの改変/変更が検出されるとき、geli は、少しもデータも返し ませんが、代わりに、エラー (EINVAL) を返します。改変されたデータのオフ セットとサイズは、コンソールに印刷 (表示) されます。利用者のデータの保護 を提供する geli が、どの攻撃に対抗するか知ることは、重要です。データがそ の場で変更されるか、または変更なしでディスク上の 1 つの場所から別の場所ま でコピーされるなら、geli は、そのような変更を検出することができはずです。 攻撃者が暗号化されたデータを思い出すことができるなら、将来、彼は、予告な しで所有しているデータで変更を上書きすることができます。言い換えれば、 geli は、反復攻撃に対して利用者のデータを保護しません。 すべてのセクタとそれらの対応するチェックサムが適切に一貫した状態に初期化 されることを確実にするために、最初の使用の前にすべてのプロバイダに書き込 むことをお勧めします。はじめてプロバイダがアタッチされる直前で、このよう に初期化される前に生じる、データ認証エラーを安全に無視することができま す。 関連項目 crypto(4), gbde(4), geom(4), loader.conf(5), gbde(8), geom(8), crypto(9) 歴史 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 10.0 7 作者 Pawel Jakub Dawidek <pjd@FreeBSD.org> FreeBSD 13.2 April 18, 2022 FreeBSD 13.2