なくした LUKS キーまたはパスフレーズを復元する
Environment
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
Issue
- LUKS キーをなくしました。データを復元するにはどうすれば良いですか?
- LUKS 暗号化を行ったドライブのパスフレーズを忘れました。どのように対処すれば良いですか?
- luks パスワードを忘れた場合にデータをどのように復元することができますか?
Resolution
(A) その他のパスフレーズまたはキーファイルは利用できますか?
LUKS は、ドライブごとにキー (パスフレーズまたはファイル) を最大 8 個設定できます。
-
blkid
コマンドを実行してデバイス名を確認します。
このコマンドは LUKS デバイスだけを表示します。blkid -t TYPE=crypto_LUKS -o device
例:
[root]# blkid -t TYPE=crypto_LUKS -o device /dev/vdb1
-
LUKS ヘッダーから、追加されているキースロットの数を確認します。
先ほど確認したデバイス名を使用します。cryptsetup luksDump /dev/<NAME> | grep Key.Slot
例:
[root]# cryptsetup luksDump /dev/vdb1 | grep Key.Slot Key Slot 0: ENABLED Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
-
1 つ以上のキースロットが有効になっている場合は、他の人が有効なキーを持っていませんか?
-
その場合、新しいキーを追加するには、別のパスフレーズまたはキーファイルを使用することができます。
How to add a passphrase, key, or keyfile to an existing LUKS device を参照してください。 -
他に誰もキーを持っていない場合は、(B) に進みます。
-
(B) そのデバイスは今も開いていますか?
システムが起動したままで、デバイスが現在開いて (アンロックされた) 場合は、root がマスターキーを使用して新しいキーを追加できます。
(RHEL 5 の場合の注意: root はマスターキーをファイルに抽出できますが、RHEL 5 の cryptsetup
は、マスターキーを読み込んで新しいキーを追加することをサポートしていません。代わりに、ディスクを閉じて、(マスターキーファイルと一緒に) RHEL 6 マシンまたは RHEL 7 マシンに移行する必要があります。)
-
開いている暗号化デバイスを確認します。
このコマンドは、LUKS で暗号化されたデバイスへの開いたマッピングだけを示します。dmsetup ls --target crypt
例:
[root]# dmsetup ls --target crypt vdc-decrypted (253, 2) luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c (253, 1)
最初の列は、
/dev/mapper/
接頭辞がないマップのファイル名 (<MAP>
) です。
出力が表示されない場合は (C) に進みます。 -
上の出力で探しているマップを見つけ、その名前 (
<MAP>
) を書き留めます。
システムには LUKS デバイスが 1 つだけしかない場合は、次の手順に進みます。
システムに複数の LUKS デバイスがある場合は、lsblk
、findmnt
、df
、mount
、/etc/fstab
を使用して、正しいデバイスを特定します。例:
[root]# mount | grep vdc /dev/mapper/vdc-decrypted on /opt type xfs (rw,relatime,seclabel,attr2,inode64,noquota) [root]# lsblk | grep -B1 luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c └─vdb1 252:17 0 1023M 0 part └─luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c 253:1 0 1021M 0 crypt /cryptstor [root]# lsblk /dev/vdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vdc 252:32 0 2G 0 disk └─vdc-decrypted 253:2 0 2G 0 crypt /opt [root]# findmnt /dev/mapper/luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c TARGET SOURCE FSTYPE OPTIONS /cryptstor /dev/mapper/luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c ext4 rw,relatime,seclabel,data=ordered
-
LUKS マスターキーを抽出し、新しいキーを追加するのに使用します。
マスターキーの扱いには注意してください。デバイスへのフルクセスが可能になります。dmsetup table <MAP> --showkeys
マスターキーは 5 列目の 16 進法の文字列です。ただし、これを
cryptsetup luksAddkey <DEVICE> --master-key-file
で使用するには、バイナリーに変換する必要があります。-
RHEL 6 および RHEL 7 の場合:
マスターキーを抽出し、バイナリーに変換し、以下のコマンドを実行してluksAddKey
に直接パイプを追加します。cryptsetup luksAddKey <DEVICE> --master-key-file <(dmsetup table --showkey /dev/mapper/<MAP> | awk '{print$5}' | xxd -r -p)
例:
[root]# lsblk | grep -B1 luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c └─vdb1 252:17 0 1023M 0 part └─luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c 253:1 0 1021M 0 crypt /cryptstor [root]# cryptsetup luksAddKey /dev/vdb1 --master-key-file <(dmsetup table --showkey /dev/mapper/luks-ec013cf7-ad72-4dcf-8a1e-0548016a3e2c | awk '{print$5}' | xxd -r -p) Enter new passphrase for key slot: Verify passphrase: [root]# cryptsetup luksDump /dev/vdb1 | grep ENABLED Key Slot 0: ENABLED Key Slot 1: ENABLED
-
RHEL 5:
最後の手順を行う RHEL 6 または RHEL 7 システムに移行するために、gpg で暗号化したファイルにキーを保存します。例:
[root@rhel5]# dmsetup table --showkey vdb-open | awk '{print $5}' 3c8e2d74f66d684547fdb0421cb3ced6 [root@rhel5]# dmsetup table --showkey vdb-open | awk '{print $5}' | gpg -aco masterkey.gpg --force-mdc --cipher-algo aes256 Enter passphrase: Repeat passphrase: [root@rhel5]# cat masterkey.gpg -----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.5 (GNU/Linux) jA0ECQMClT4LaE+j9PNg0lYBM0QAV1jOEPVIZuEhOnB2iStT+51BTzMxlg99uu9L FmynvHQZ71M/0JXoEpBmEvJUXS0NB1deTCFfNb7BDGuYQZDKSCunQo/F0o2m1l5x ZLq83BcDdg== =p7Zd -----END PGP MESSAGE----- Transfer masterkey.gpg to RHEL 6/7 system. Make sure masterkey.gpg can be decrypted on other system. [root@rhel6]# gpg -d masterkey.gpg gpg: AES256 encrypted data gpg: encrypted with 1 passphrase 3c8e2d74f66d684547fdb0421cb3ced6 Once certain masterkey is intact on other system, close the LUKS device on the RHEL 5 system and move/migrate the disk to the new system. [root@rhel5]# cryptsetup luksClose vdb-open After that, add a new key using the decrypted master key. [root@rhel6]# blkid -t TYPE=crypto_LUKS -o device /dev/vdb [root@rhel6]# cryptsetup luksAddKey /dev/vdb --master-key-file <(gpg -d masterkey.gpg | xxd -r -p)gpg: AES256 encrypted data gpg: encrypted with 1 passphrase Enter new passphrase for key slot: Verify passphrase: [root@rhel6]# cryptsetup luksDump /dev/vdb | grep ENABLED Key Slot 0: ENABLED Key Slot 1: ENABLED After adding new key, close the device and move it back to the RHEL 5 system, if desired.
-
(C) (A) も (B) も有効ではありません。
-
暗号化の本質はデータを保護することです。既知のキーがなく、デバイスがアンロックされない場合、データはなくなったのも同様です。
-
現在の LUKS または dm-crypt の実装における暗号化の短所を将来的に発見するか、高度な量子コンピューターがない場合に唯一可能なオプションは、辞書の単語を総当たりで攻撃する、つまりパスワードの推測です。
-
辞書攻撃の実現可能性は、完全に、キーを作成したユーザーに依存します。なぜなら、LUKS は、膨大な (RHEL 7 では 512 文字) 平文テキストのパスフレーズと、非常に大きな (RHEL 7 では 8 MiB) のキーファイルを許可しており、新しい行や任意のバイナリーデータを追加することもできるためです。
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments