それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

tpm デバイスでパスワード入力省略でcryptrootをブートさせられる。

tpmバイスLinuxでも使いたい。

TPM搭載されてるんだ。だからWindowsのbitlocker的な暗号化デバイスのパスワード入力レスの起動をやりたかった。

ずっとやりたかった。でもあまりに手間が多かったので見送っていた。

いま気づいたら、専用のツールが公開されていました。

https://github.com/anedward01/tpm2KeyUnlock

TPMを使ってdm-crypt を解除したい!

windows BitLocker のようにLinuxでもluks/dm-cryptの 暗号化ストレージを起動時にTPMでアンロックしたい。

パスワードなしでTPMでアンロックできれば、とても気軽に暗号化ストレージを使えるようになる。

TPMバイスでアンロックする。

tpm2KeyUnlockというレポジトリが出現していた。これを使えば、誰でも簡単にLUKSのdm-cryptデバイスを透過的に扱えるようになる。

簡単な概要

まず、Ubuntuをインストールします。ストレージ選択時に、dm-cryptをチェックします。暗号化ストレージのパスワードを決めておきます。

ここまで暗号化ストレージを作ってインストールができます。

しかし、OS起動時に/boot/efi が / にアクセスするために、起動にロック解除が必要です。

この起動時のロック解除に使う「キー(鍵)」をTPMバイスに入れて起動時に利用します。TPMから鍵を取得して、LUKSのルートのアンロックを行って通常通り起動が可能になります。またTPMバイスとOSはセキュアブートで保護し第三者のアクセスを排斥します。

使い方。

対応ファイルを github から取ってきます。

git clone https://github.com/anedward01/tpm2KeyUnlock
cd tpm2KeyUnlock

github のファイルには exec のパーミッションがないので付与します。

find -type f | xargs -I@ chmod 755 @

./setup をします。これで設定が始まります。

sudo ./setup

私の環境の場合、 sudo ./setup では動作しませんでした。

次のコマンドを入れて、hookをコピーしないとだめだった。tpm取得に失敗してた。

sudo cp tpm2Hook /etc/initramfs-tools/hooks/tpm2
sudo cp tpm2Hook /usr/share/initramfs-tools/hooks/tpm2

crypttab にアンロックコマンドを設定します。

crypttab の暗号化ストレージのUnlock設定で、tpm を使ったアンロックを指定しました。

takuya@ubuntu01:~$ sudo cat /etc/crypttab
dm_crypt-0 UUID=XXXXXX /usr/local/var/tpm-manager/secret.bin luks,discard,keyscript=/usr/local/bin/passphrase-from-tpm
takuya@ubuntu01:~$

これで再起動したら、TPMのキーを使ってパスワードを入れなくても暗号化ストレージがロック解除されてブートされました。感動。

万が一動かない場合。

efibootmgr でブート順を変更すればいい。

私の環境ではすでにインストールされていた EFI-manager が ubuntu の通常のブートローダーを使って起動するように設定されていたので、再起動してもブートローダーが有効にならなかった。なのでEFIの起動順序を変更sておいた。

takuya@ubuntu01:~$ sudo efibootmgr -a -b 0005
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0005,
Boot0000* ubuntu
Boot0005* TPM2 EFI Stub

## 整理統合し直して次のようにした。

takuya@ubuntu01:~$ sudo efibootmgr
BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0002,0000
Boot0000* ubuntu
Boot0002* TPM2 EFI Stub


ここで、TPM2を使う設定になっているので、ubuntu を使って起動すれば、cryptroot の unlock が聞かれるはずである。 また、dm-crypt デバイスパスフレーズやキーファイルは予備で作って厳重に保存しておく必要がありますね。

問題は、tpm のアンロックが、他のOSからできないようにしてあるかというところや耐タンパ性ですね。 まぁそこはtpm を信じるしかないですね。

必要であれば

EFIの設定よりBIOSで指定した順序が優先されることがあるので、BIOS画面に変更し、ブートを変更する必要がある。 SecureBootをONにして、UEFIの順序をTPM最優先する。

f:id:takuya_1st:20201221033537p:plain

参考資料

https://threat.tevora.com/secure-boot-tpm-2/

カーネルのバージョンアップが来ても対応できるんですよね。

2020-12-15カーネルのバージョンアップが来ても起動してました。マイナーバージョンアップなら対応できそうです。

まだ、1ヶ月くらいしか運用してないので、長期間に亘りアップデートなどに対応しながら継続的稼働が可能なのか、これは結論が出てません。