暗号化とは機密保護のためにデータをエンコードするプロセスで、エンコードされたデータにデータ所有者がアクセスするには鍵が必要になります。ZFS 暗号化を使用する利点は次のとおりです。
ZFS 暗号化は ZFS コマンドセットと統合されています。ほかの ZFS 操作と同様に、鍵の変更や再入力などの暗号化操作は、オンラインで実行されます。
既存のストレージプールがアップグレードされていれば、それを使用できます。特定のファイルシステムの暗号化には柔軟性があります。
データは、CCM および GCM 操作モードで、鍵の長さが 128、192、および 256 の AES (Advanced Encryption Standard) を使用して暗号化されます。
ZFS 暗号化は、Oracle Solaris 暗号化フレームワークを使用します。このため自動的に、暗号化アルゴリズムのすべての使用可能なハードウェアアクセラレーションまたは最適化されたソフトウェア実装にアクセスできます。
現時点では、単独のファイルシステムであっても、ZFS ルートファイルシステムまたはその他の OS コンポーネント (/var ディレクトリなど) を暗号化することはできません。
ZFS 暗号化は子孫のファイルシステムに継承できます。
一般ユーザーは、create、mount、keysource、checksum、encryption アクセス権が割り当てられている場合に、暗号化されたファイルを作成して鍵の操作を管理できます。
ZFS ファイルシステムが作成されるときに暗号化ポリシーを設定できますが、ポリシーを変更することはできません。たとえば、tank/home/darren ファイルシステムは、暗号化プロパティーを有効にして作成されています。デフォルトの暗号化ポリシーでは、最低 8 文字の長さが必要なパスフレーズの入力が求められます。
# zfs create -o encryption=on tank/home/darren Enter passphrase for 'tank/home/darren': xxxxxxx Enter again: xxxxxxxx
ファイルシステムの暗号化が有効になっていることを確認します。例:
# zfs get encryption tank/home/darren NAME PROPERTY VALUE SOURCE tank/home/darren encryption on local
ファイルシステムの暗号化の値が on になっている場合、デフォルトの暗号化アルゴリズムは aes-128-ccm です。
ラッピング鍵は、実際のデータ暗号化鍵を暗号化するために使用されます。ラッピング鍵は、上記の例のように、暗号化したファイルシステムの作成時に、zfs コマンドからカーネルに渡されます。ラッピング鍵は、ファイルにあるか (生または 16 進数形式)、パスフレーズから派生します。
ラッピング鍵の形式と場所は、keysource プロパティーで次のように指定されます。
keysource=format,location
形式は次のいずれかになります。
raw – 生の鍵バイト
hex – 16 進数の鍵文字列
passphrase – 鍵を生成する文字列
場所は次のいずれかになります。
prompt – ファイルシステムの作成またはマウント時に鍵またはパスフレーズの入力が要求される
file:///filename – ファイルシステム内の鍵またはパスフレーズファイルの場所
pkcs11 – PKCS#11 トークンでの鍵またはパスフレーズの場所を記述した URI
https://location – セキュアなサーバー上の鍵またはパスフレーズファイルの場所。この方法を使用して鍵情報を平文で転送することは推奨されていません。URL に GET を付けると、keysource プロパティーの形式部分でリクエストされた内容に従って、鍵の値またはパスフレーズのみが返されます。
keysource で https:// ロケータを使用する場合は、サーバーが提示する証明書が libcurl および OpenSSL で信頼されているものである必要があります。独自のトラストアンカーまたは自己署名付き証明書を、/etc/openssl/certs にある証明書ストアに追加します。PEM 形式の証明書を /etc/certs/CA ディレクトリに配置し、次のコマンドを実行します。
# svcadm refresh ca-certificates
keysource 形式が passphrase の場合、ラッピング鍵はパスフレーズから派生します。それ以外の場合、keysource プロパティー値は、生のバイトまたは 16 進数形式で、実際のラッピング鍵を示します。パスフレーズがファイルに格納されているか、入力が要求される生のバイトストリームに格納されているか (これはおそらくスクリプト処理にのみ適しています) を指定できます。
ファイルシステムの keysource プロパティー値が passphrase を指定している場合、ラッピング鍵は、PKCS#5 PBKD2 と、ファイルシステムごとにランダムに生成されたソルトを使用して、パスフレーズから派生します。したがって、子孫のファイルシステムで使用された場合、同じパスフレーズでも異なるラッピング鍵が生成されます。
ファイルシステムの暗号化ポリシーは、子孫のファイルシステムによって継承され、削除することはできません。例:
# zfs snapshot tank/home/darren@now # zfs clone tank/home/darren@now tank/home/darren-new Enter passphrase for 'tank/home/darren-new': xxxxxxx Enter again: xxxxxxxx # zfs set encryption=off tank/home/darren-new cannot set property for 'tank/home/darren-new': 'encryption' is readonly
暗号化された、または暗号化されていない ZFS ファイルシステムをコピーまたは移行する必要がある場合、次の点を考慮してください。
現在、暗号化されていないデータセットストリームを送信することはできず、受信側のプールのデータセットで暗号化を有効にしている場合でも、これを暗号化されたストリームとして受信することもできません。
次のコマンドを使用して、暗号化されていないデータを、暗号化を有効にしているプール/ファイルシステムに移行できます。
cp –r
find | cpio
tar
rsync
複製された暗号化ファイルシステムストリームは、暗号化されたファイルシステムで受信でき、データは暗号化されたままです。詳細は、Example 5–4 を参照してください。