9.14. 高可用性 NBDE システムをデプロイする
Tang は、Network-bound Disc Encryption (NBDE) の高可用性デプロイメントを構築するための 2 つの方法、すなわちクライアントの冗長性と鍵の共有を提供します。
- クライアントの冗長性 (推奨)
-
クライアントは、複数の Tang サーバーにバインドする機能を使用して設定する必要があります。この設定では、各 Tang サーバーに独自の鍵があり、クライアントは、このサーバーのサブセットに接続することで復号できます。このワークフローは、Clevis の
sssプラグインによってすでにサポートされています。セキュアな高可用性デプロイメントにはこの方法を使用してください。 - 鍵の共有
-
冗長性を確保するために、Tang のインスタンスは複数デプロイできます。2 つ目以降のインスタンスを設定するには、
tangパッケージをインストールし、SSH経由でrsyncを使用して鍵のディレクトリーを新しいホストにコピーします。この鍵共有方法では、鍵が侵害されるリスクが高まるほか、追加の自動化インフラストラクチャーが必要になります。 - シャミアの秘密分散法を用いた高可用性 NBDE
Shamir’s Secret Sharing (SSS) は、1 つの秘密情報を複数の固有の断片に分割する暗号化スキームです。秘密情報を再構築するには、複数の断片が必要です。この数値はしきい値と呼ばれ、SSS はしきい値スキームとも呼ばれます。
Clevis は、SSS の実装を提供します。鍵を作成し、それを複数の断片に分割します。各断片は、別のピンを使用して暗号化されます。このピンには SSS を再帰的に含めることもあります。また、しきい値
tも定義します。NBDE デプロイメントで少なくともtの部分を復号すると、暗号化鍵が復元され、復号プロセスが成功します。Clevis がしきい値で指定されている数よりも小さい部分を検出すると、エラーメッセージが出力されます。
例9.1 2 台の Tang サーバーを使用した冗長性
次のコマンドは、2 台の Tang サーバーのうち少なくとも 1 台が使用可能な場合に、LUKS で暗号化されたデバイスを復号します。
# clevis luks bind -d /dev/sda1 sss '{"t":1,"pins":{"tang":[{"url":"http://tang1.srv"},{"url":"http://tang2.srv"}]}}'
上記のコマンドでは、以下の設定スキームを使用していました。
{
"t":1,
"pins":{
"tang":[
{
"url":"http://tang1.srv"
},
{
"url":"http://tang2.srv"
}
]
}
}
この設定では、リストに記載されている 2 台の tang サーバーのうち少なくとも 1 つが利用可能であれば、SSS しきい値 t が 1 に設定され、clevis luks bind コマンドが秘密を正常に再構築します。
例9.2 Tang サーバーと TPM デバイスで共有している秘密
次のコマンドは、tang サーバーと tpm2 デバイスの両方が利用可能な場合に、LUKS で暗号化したデバイスを正常に復号します。
# clevis luks bind -d /dev/sda1 sss '{"t":2,"pins":{"tang":[{"url":"http://tang1.srv"}], "tpm2": {"pcr_ids":"0,7"}}}'
SSS しきい値 't' が '2' に設定されている設定スキームは以下のようになります。
{
"t":2,
"pins":{
"tang":[
{
"url":"http://tang1.srv"
}
],
"tpm2":{
"pcr_ids":"0,7"
}
}
}
詳細とその他の例については、システム上の tang(8) man ページの High Availability セクション、clevis(1) man ページの Shamir’s Secret Sharing セクション、および clevis-encrypt-sss(1) man ページを参照してください。