「Clevis」の版間の差分
(部分訳出) |
Kusanaginoturugi (トーク | 投稿記録) (add en page link.) |
||
(他の1人の利用者による、間の39版が非表示) | |||
1行目: | 1行目: | ||
+ | [[en:Clevis]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|Booster}} |
{{Related|Booster}} |
||
22行目: | 23行目: | ||
* [https://github.com/anatol/clevis.go/blob/main/clevis-encrypt-yubikey 外部プラグイン] を使った YubiKey バインディング |
* [https://github.com/anatol/clevis.go/blob/main/clevis-encrypt-yubikey 外部プラグイン] を使った YubiKey バインディング |
||
+ | {{Warning|この方法をルートボリュームで使用すると、上記で述べたいくつかの条件を満たす限り、コンピュータは起動時に、暗号化パスワードを入力することなく '''自動的にアンロック''' されます。 |
||
− | {{Warning|If you use this method on your root volume, this means that, as long as the previously mentioned certain conditions are met, your computer will '''unlock automatically''' at boot without needing to enter an encryption password. |
||
+ | * これは、ハードウェアが盗まれた場合には、データへのアクセスが保護されないことを意味します。 |
||
− | * This means that access to data is not protected in case the hardware gets stolen. |
||
+ | * この方法は [[Wikipedia:Cold boot attack|コールドブートアタック]] に対してより脆弱になることに注意してください。なぜなら、コンピュータの電源が長い間切られて (メモリが完全にクリアされて) いたとしても、攻撃者は単に電源を入れて TPM が自動的にキーを読み込むのを待てばよいからです。これは価値の高い対象にとっては懸念事項となるでしょう。 |
||
− | * Be aware that this method makes you more vulnerable to [[Wikipedia:Cold boot attack|cold boot attacks]], because even if your computer has been powered off for a long time (ensuring the memory is completely cleared), an attacker could simply turn it on and wait for the TPM to load the key automatically. This may be a concern for high-value targets. |
||
}} |
}} |
||
− | == |
+ | == インストール == |
− | + | clevis を使うには {{pkg|clevis}} パッケージを [[インストール]] します。 |
|
+ | == データをバインドする == |
||
− | == Bind some data == |
||
+ | TPM2 のデータバインディングの例です。 |
||
− | Here is an example of data binding with TPM2: |
||
{{hc|$ clevis encrypt tpm2 '{}' <<< 'hello, world'| |
{{hc|$ clevis encrypt tpm2 '{}' <<< 'hello, world'| |
||
39行目: | 40行目: | ||
}} |
}} |
||
+ | この長い base64 でエンコードされたメッセージは、内部の TPM キーで暗号化されたテキストです。これは現在のコンピュータのみで復号できます。他のコンピュータから (あるいは他の TPM チップを用いて) 復号しようとするとエラーが返されます。 |
||
− | This long base64-encoded message is our text encrypted with an internal TPM key. It can be decrypted at the current computer only. Trying to decrypt it from another computer (or rather with another TPM chip) will return an error. |
||
{{hc|$ clevis decrypt tpm2 '{}' <<< 'eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA'| |
{{hc|$ clevis decrypt tpm2 '{}' <<< 'eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA'| |
||
45行目: | 46行目: | ||
}} |
}} |
||
− | == |
+ | == LUKS ボリュームをマウントする == |
{{Style}} |
{{Style}} |
||
+ | {{Warning|TPM による開錠に失敗したときのために、以下のコマンドで強いバックアップパスワードを設定しておいてください。 |
||
− | {{Warning|Set a strong backup password in case the TPM unsealing fails, using: |
||
# cryptsetup luksAddKey /dev/sd''X'' |
# cryptsetup luksAddKey /dev/sd''X'' |
||
55行目: | 56行目: | ||
}} |
}} |
||
+ | TPM に LUKS ボリュームをバインドするには、以下のコマンドを使用します。 |
||
− | To bind a LUKS volume to the TPM, use: |
||
# clevis luks bind -d /dev/sd''X'' tpm2 '{}' |
# clevis luks bind -d /dev/sd''X'' tpm2 '{}' |
||
+ | {{ic|'{}'|}} には設定が入ります。パラメータがなかったとしても、攻撃者がバックアップパスワードを入手しない限り、他のコンピュータからドライブを復号することはできません。 |
||
− | where {{ic|'{}'|}} contains the configuration: even with no parameters the drive cannot be decrypted from another computer, unless the attacker knows the backup password. |
||
+ | {{Note|UEFI 設定と [[Secure Boot]] ポリシーから LUKS キーを守るには、次の設定を使ってください。 |
||
− | {{Note|To seal the LUKS key against the UEFI settings and the [[Secure Boot]] policy, use: |
||
'{"pcr_ids":"1,7"}' |
'{"pcr_ids":"1,7"}' |
||
+ | UEFI や Secure Boot の設定が変更された場合、TPM は異なる PCR の値を出力して、復号に失敗します。これは [[Wikipedia:ja:悪意あるメイド攻撃|悪意あるメイド攻撃]] への防御となります。 |
||
− | If the UEFI or Secure Boot settings are modified, the TPM will compute different PCR values and decryption will fail. This gives protection against [[wikipedia:Evil maid attack|evil maid attacks]]. |
||
− | + | パラメータのリストは {{man|1|clevis-encrypt-tpm2|CONFIG}} を参照してください。 |
|
− | + | PCR の意味の全ての説明は、 [https://trustedcomputinggroup.org/wp-content/uploads/PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf TCG specification] (§ 2.3.4) を参照してください。 |
|
− | + | もしこれが {{ic|ERROR: pcr-input-file filesize does not match pcr set-list}} のエラーで失敗する場合には、別の PCR バンクを指定する必要があります。 |
|
'{"pcr_bank":"sha256","pcr_ids":"1,7"}' |
'{"pcr_bank":"sha256","pcr_ids":"1,7"}' |
||
+ | 2022年8月現在、Clevis は sha1 (デフォルト) と sha256 バンクのみをサポートしています。つまり、唯一異なるオプションは sha256 です。利用可能な、または使用中のバンクは {{ic|# tpm2_pcrread}} を使用して調べることができます。 |
||
− | As of August 2022 Clevis only supports sha1 (default) and sha256 banks, so naturally the only different option is sha256 - you can look up available and used banks using {{ic|# tpm2_pcrread}}. |
||
}} |
}} |
||
+ | PCR の値に変更が生じるシステム設定の変更を行った後 (例えば PCR 0 が使用されているときに UEFI の更新を行った場合) に新しい Clevis の pin を生成する場合には、以下のコマンドを実行してください。 |
||
− | To generate a new Clevis pin after changes in system configuration that result in different PCR values, for example updating the UEFI when PCR 0 is used, run |
||
{{hc|# cryptsetup luksDump /dev/sd''X''| |
{{hc|# cryptsetup luksDump /dev/sd''X''| |
||
86行目: | 87行目: | ||
}} |
}} |
||
+ | Clevis の pin に使用されているスロットを探すには、 |
||
− | to find the slot used for the Clevis pin, then |
||
# clevis luks regen -d /dev/sd''X'' -s ''keyslot'' |
# clevis luks regen -d /dev/sd''X'' -s ''keyslot'' |
||
+ | Clevis バインディングを削除するには、次のコマンドを実行します。 |
||
− | To remove the Clevis binding, run: |
||
# clevis luks unbind -d /dev/sd''X'' -s ''keyslot'' |
# clevis luks unbind -d /dev/sd''X'' -s ''keyslot'' |
||
+ | {{Warning|正しいスロットを選択していることを再確認してください。さもないと、ボリュームへのアクセスを失うことになります。}} |
||
− | {{Warning|Double check you have chosen the right slot, or you might lose access to your volume.}} |
||
+ | TPM にバインドされたボリュームは以下を使用してアンロックできます。 |
||
− | You can unlock a TPM-bound volume using: |
||
# clevis luks unlock -d /dev/sd''X'' |
# clevis luks unlock -d /dev/sd''X'' |
||
− | + | [[Dm-crypt/システム設定#crypttab|/etc/crypttab]] にあるボリュームの自動復号をするには、{{ic|clevis-luks-askpass.path}} を [[有効化]] してください。 |
|
+ | ルートボリュームの自動復号をするには、[[Initramfs]] ジェネレータに変更を加える必要があります。 |
||
− | For automated decryption of the root volume, we should make some changes to our [[Initramfs]] generators: |
||
− | === Mkinitcpio |
+ | === Mkinitcpio フック === |
− | + | {{AUR|mkinitcpio-clevis-hook}} パッケージをインストールしてください。その後、[[mkinitcpio.conf]] を編集して clevis フックを有効にしてください。 |
|
{{hc|/etc/mkinitcpio.conf|2= |
{{hc|/etc/mkinitcpio.conf|2= |
||
113行目: | 114行目: | ||
}} |
}} |
||
− | {{Note| |
+ | {{Note|plymouth を使用している場合は、{{ic|plymouth-encrypt}} フックを encrypt で置き換えてください。{{ic|plymouth-encrypt}} はデバイスが既にアンロックされているときに不具合を生じやすいと報告されています。[https://github.com/kishorv06/arch-mkinitcpio-clevis-hook/issues/1 詳しい情報。]}} |
+ | 最後に [[Initramfs を再生成する|Initramfs を再生成します]] 。 |
||
− | At the end [[regenerate the initramfs]]. |
||
=== Booster === |
=== Booster === |
||
+ | 幸いなことに、設定不要で [[Booster]] は自動的に LUKS ボリュームバインド を Clevis を使って復号することができます。 |
||
− | Luckily [[Booster]] automatically decrypts LUKS volumes bound using Clevis out of the box! |
||
+ | Booster は LUKS トークンを読むこと、clevis の情報をデコードすること、パスワードを再構築してパーティションを自動的にアンロックすることも可能です。 |
||
− | Booster is also able to read the LUKS tokens, decode clevis information, reconstruct the password and unlock the partition automatically. |
||
+ | ''Tang'' (ネットワークバインディング) の pin はネットワークが有効になっていることが必要です。 booster を使用している場合のネットワーク設定については [[Booster#設定]] セクションを参照してください。 |
||
− | ''Tang'' (network binding) pin requires network enabled. Please refer to [[Booster#Configuration]] section for more information on network configuration with booster. |
||
=== Dracut === |
=== Dracut === |
||
+ | [[Dracut]] は次の追加のパッケージを必要とします。 |
||
− | [[Dracut]] needs the following extra packages: |
||
* {{Pkg|libpwquality}} |
* {{Pkg|libpwquality}} |
||
133行目: | 134行目: | ||
* {{Pkg|nmap}} |
* {{Pkg|nmap}} |
||
+ | 次に、initramfs の再生成を実行してください。 |
||
− | Followed by an initramfs regeneration: |
||
# dracut -f |
# dracut -f |
||
+ | == ヒントとテクニック == |
||
− | == Tips and tricks == |
||
− | === YubiKey |
+ | === YubiKey バインド === |
+ | Clevis は YubiKey の チャレンジレスポンスモードを使用して LUKS パーティションをバインドすることができます。LUKS パーティションをバインドするには、次のコマンドを実行してください。 |
||
− | Clevis allows binding a LUKS partition using YubiKey's challenge-response mode. To bind a LUKS partition, run |
||
# clevis luks bind -d /dev/sd''X'' yubikey '{"slot":1}' |
# clevis luks bind -d /dev/sd''X'' yubikey '{"slot":1}' |
||
+ | {{Pkg|yubikey-personalization}} をインストールします。設定ファイルを編集して、次のオプションを追加してください。 |
||
− | Install {{Pkg|yubikey-personalization}}. Edit the configuration file and add following option: |
||
{{hc|/etc/booster.yaml| |
{{hc|/etc/booster.yaml| |
||
151行目: | 152行目: | ||
}} |
}} |
||
+ | [[Booster#ブースターイメージの再生成|ブースターイメージを再生成します]]。Booster はブート時にこの設定を検出して、認識されている YubiKey をドライブのアンロックに使用します。 |
||
− | [[Booster#Regenerate booster images|Regenerate the booster images]]. Booster will detect this configuration during boot and use the present YubiKey to unlock the drive. |
||
− | == |
+ | == 参照 == |
− | * [https://github.com/latchset/clevis/ |
+ | * [https://github.com/latchset/clevis/ プロジェクトホームページ] |
− | * [https://github.com/kishorv06/arch-mkinitcpio-clevis-hook mkinitcpio-clevis-hook |
+ | * [https://github.com/kishorv06/arch-mkinitcpio-clevis-hook mkinitcpio-clevis-hook のホームページ] |
2023年4月6日 (木) 13:14時点における最新版
clevis は TPM を使用してキーの作成と暗号化をすることにより、LUKS ボリュームのシステムへのバインディングを可能にします。そして、Clevis の pin を作成したときのシステムの状態を表現する PCR の値を使用してキーを閉じ込めます。
暗号化された LUKS パーティションの解錠に、ユーザーによるパスワードの入力を使うというのは伝統的で広く使われる方法ですが、デメリットも存在します:
- 手動で入力する必要があるため、自動的に起動したい場合には使えません (例: 巨大なサーバーファーム)。
- 普通の人間が覚えられるパスワードの長さには限界があり (エントロピーにして ~20-30 ビット)、近代的なブロック暗号に使う鍵としては弱すぎます (128/256 ビット)。
解決策としては強固な鍵を別のどこかに保持しておくという方法があります。例えば TPM チップや Yubikey、あるいは他のネットワークサービスなどが考えられます。Clevis はこのアイデアを実現するフレームワークです。抜き差し可能な pin を使ってデータを暗号化します (clevis の用語では bind)。現在 clevis には3つの pin が存在します:
- TPM2 データバインディング (コンピュータに Trusted Platform Module チップがある場合にのみ動作します)
- ネットワークサービス (別名 Tang) データバインディング
- シャミア秘密分散で他の pin を組み合わせる
- 外部プラグイン を使った YubiKey バインディング
目次
インストール
clevis を使うには clevis パッケージを インストール します。
データをバインドする
TPM2 のデータバインディングの例です。
$ clevis encrypt tpm2 '{}' <<< 'hello, world'
eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA
この長い base64 でエンコードされたメッセージは、内部の TPM キーで暗号化されたテキストです。これは現在のコンピュータのみで復号できます。他のコンピュータから (あるいは他の TPM チップを用いて) 復号しようとするとエラーが返されます。
$ clevis decrypt tpm2 '{}' <<< 'eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA'
hello, world
LUKS ボリュームをマウントする
TPM に LUKS ボリュームをバインドするには、以下のコマンドを使用します。
# clevis luks bind -d /dev/sdX tpm2 '{}'
'{}'
には設定が入ります。パラメータがなかったとしても、攻撃者がバックアップパスワードを入手しない限り、他のコンピュータからドライブを復号することはできません。
PCR の値に変更が生じるシステム設定の変更を行った後 (例えば PCR 0 が使用されているときに UEFI の更新を行った場合) に新しい Clevis の pin を生成する場合には、以下のコマンドを実行してください。
# cryptsetup luksDump /dev/sdX
Tokens: token slot: clevis Keyslot: keyslot
Clevis の pin に使用されているスロットを探すには、
# clevis luks regen -d /dev/sdX -s keyslot
Clevis バインディングを削除するには、次のコマンドを実行します。
# clevis luks unbind -d /dev/sdX -s keyslot
TPM にバインドされたボリュームは以下を使用してアンロックできます。
# clevis luks unlock -d /dev/sdX
/etc/crypttab にあるボリュームの自動復号をするには、clevis-luks-askpass.path
を 有効化 してください。
ルートボリュームの自動復号をするには、Initramfs ジェネレータに変更を加える必要があります。
Mkinitcpio フック
mkinitcpio-clevis-hookAUR パッケージをインストールしてください。その後、mkinitcpio.conf を編集して clevis フックを有効にしてください。
/etc/mkinitcpio.conf
# Edit the hooks and add clevis before the 'encrypt' hook. Eg: HOOKS=(.. clevis encrypt ..)
最後に Initramfs を再生成します 。
Booster
幸いなことに、設定不要で Booster は自動的に LUKS ボリュームバインド を Clevis を使って復号することができます。
Booster は LUKS トークンを読むこと、clevis の情報をデコードすること、パスワードを再構築してパーティションを自動的にアンロックすることも可能です。
Tang (ネットワークバインディング) の pin はネットワークが有効になっていることが必要です。 booster を使用している場合のネットワーク設定については Booster#設定 セクションを参照してください。
Dracut
Dracut は次の追加のパッケージを必要とします。
次に、initramfs の再生成を実行してください。
# dracut -f
ヒントとテクニック
YubiKey バインド
Clevis は YubiKey の チャレンジレスポンスモードを使用して LUKS パーティションをバインドすることができます。LUKS パーティションをバインドするには、次のコマンドを実行してください。
# clevis luks bind -d /dev/sdX yubikey '{"slot":1}'
yubikey-personalization をインストールします。設定ファイルを編集して、次のオプションを追加してください。
/etc/booster.yaml
extra_files: ykchalresp
ブースターイメージを再生成します。Booster はブート時にこの設定を検出して、認識されている YubiKey をドライブのアンロックに使用します。