web-dev-qa-db-ja.com

LUKSヘッダーには何が含まれていますか?

LUKSヘッダーには何が含まれていますか?ヘッダーのサイズは2MBです。また、cryptsetupは「デタッチされたヘッダー」をサポートしています。ヘッダーは別のファイルに保存できます。

したがって、たとえば、luksデバイスをフォーマットして、分離されたヘッダーを別のファイルで指定できます。

dd if=/dev/zero of=LUKS-HEADER bs=1M count=2
cryptsetup luksFormat /dev/sdb1 --header LUKS-HEADER --align-payload=0

IIUC、このフォーマット操作はヘッダーにのみ書き込みます。ディスクパーティションは変更されていません(md5sumで確認しました)。では、cryptsetyp luksFormatでデバイス(/ dev/sdb1)を指定する必要があるのはなぜですか?

複数のluksデバイスの1つのヘッダーを共有できますか?

[〜#〜]更新[〜#〜]

詳しい調査の結果、ヘッダーの最初の4096 Bにヘッダー情報が含まれているようです。ヘッダー情報はcryptsetup luksDump

2MBファイルの残りの部分に何が保存されているかは、私には謎です。ランダムなデータで上書きされているようです(最初はゼロで埋めたので、違いがわかります)。また、2MBファイルは完全に圧縮できません。ランダム/暗号化されたデータのさらなる表示。

2 MBのLUKSヘッダーに何が含まれているかを誰かが正式に説明してもらえますか?

21
Martin Vegter

アンチフォレンジックスプリッターのため、ヘッダーの結果は2MBになると思います。暗号化されたマスターキーは、拡散を強化し、ディスクから簡単に消去できるように、いくつかのブロックに分割されます。特に、1つのストライプを消去すると、暗号化されたmk全体を回復できなくなります。

https://web.archive.org/web/20160517044339/http://tomb.dyne.org/Luks_on_disk_format.pdf

ここにLUKS2仕様があります: https://gitlab.com/cryptsetup/LUKS2-docs/blob/master/luks2_doc_wip.pdf


暗号化されたマスターキーをどのように抽出できるのでしょうか...

11
refex

ちなみに、私はLUKS/cryptsetup/dmcryptの作者/寄稿者ではなく、ユーザーなので、「権威的に」答えることはできません。しかし、私の答えは以下の通りです、

LUKSヘッダーには何が含まれていますか?

ここ から、

LUKSヘッダーのレイアウトは、

    +------------------------+----+----+----+----+----+----+----+----+-----------+
    |  Luks Partition Header | K0 | K1 | K2 | K3 | K4 | K5 | K6 | K7 | BULK DATA |
    +------------------------+----+----+----+----+----+----+----+----+-----------+
                                   Figure - 1

どこ、

  1. Luksパーティションヘッダー(PHDR)は、次のようにluksデバイスを復号化/暗号化するために必要な情報で構成されています。
    -------------------------------+-----------------------------
    |   Partition Header Contents  |      Output by luksDump    |
    -------------------------------+-----------------------------
    |  Magic Byte                  | LUKS                       |
    -------------------------------+-----------------------------
    | Luks version                 | 1                          |
    -------------------------------+-----------------------------
    | Cipher Name                  | serpent                    |
    -------------------------------+-----------------------------
    | Cipher Mode                  | xts-plain64                |
    -------------------------------+-----------------------------
    | Hash Type                    | whirpool                   |
    -------------------------------+-----------------------------
    | Payload offset               | 4096                       |
    -------------------------------+-----------------------------
    | Master Key Bits              | 512                        |
    -------------------------------+-----------------------------
    | Master Key Digest            | 8a 90 77 7e ...            |
    -------------------------------+-----------------------------
    | Master Key Salt              | ca f3 40 fc ...            |
    -------------------------------+-----------------------------
    | Master Key Digest Iteration  | 23250                      |
    -------------------------------+-----------------------------
    | Partition UUID               | 46927c7d-7f17-4312-...     |
    -------------------------------+-----------------------------
                              Table - 1
  1. パーティションヘッダーの2番目の部分(PHDR)は、8つのキースロット記述子で構成されます。つまり、次のようなキースロットに関する情報です。
    ------------------------------+------------------------------
    | Key Descriptors             |      Output by luksDump     |
    +-----------------------------+------------------------------
    | Activation status           | Enabled                     |
    +-----------------------------+------------------------------
    | Iteration                   | 146285                      |
    +-----------------------------+------------------------------
    | Salt                        | 1e c1 94 24 36 4c 98..      |
    +-----------------------------+------------------------------
    | Key Material Offset         | 8                           |
    +-----------------------------+------------------------------
    | AF Stripes                  | 4000                        |
    ------------------------------+------------------------------
                             Table - 2

参考までに、上記のluksパーティションヘッダー情報は、luksDumpコマンドを実行して取得したもので、サイズは約4.0Kです。

  1. Figure-1の後のLuks Partition headerから、キースロットセクションが始まり、その後に8つのキースロットが続くことがわかります。各キースロットのサイズはおおよそ128kiBです。したがって、8つのキースロットの場合、1MiBまたは1048576バイトの8 * 128 = 1024 KiBを取得します。

これまでのところ、パーティションヘッダーから4096バイトを取得し、デフォルトのluks構成では合計1048576 + 4096 = 1052672 bytesであるキースロット用に131072バイトを取得しています。最も一般的な構成aes-xts-plainでは、約2MiBです。

したがって、ヘッダーのサイズは、マスターキーのサイズ、ハッシュサイズ、暗号化アルゴリズム、ハッシュアルゴリズムなどのさまざまな要素に依存すると言えます。ただし、2MiBをluksヘッダーと見なしても安全です。

  1. キースロットの後、バルクデータが始まります。 source から、

2MiBのデフォルトの配置により、cryptsetup 1.3以降のデータ領域の開始位置は2MiB、つまり0x200000です。古いバージョンの場合、0x101000、つまり1'052'672バイトです。

次の出力では、バルクデータ/暗号化データがオフセット00200000から始まることがわかります。

[root@arif tmp]# hexdump -C /dev/sda99 -s 0X1FFFa0 | head
001fffa0  31 62 33 33 66 30 30 20  72 20 5f 5f 6b 63 72 63  |1b33f00 r __kcrc|
001fffb0  74 61 62 5f 64 6d 61 6d  5f 61 6c 6c 6f 63 5f 63  |tab_dmam_alloc_c|
001fffc0  6f 68 65 72 65 6e 74 0a  66 66 66 66 66 66 66 66  |oherent.ffffffff|
001fffd0  38 31 62 33 33 66 30 38  20 72 20 5f 5f 6b 63 72  |81b33f08 r __kcr|
001fffe0  63 74 61 62 5f 64 6d 61  6d 5f 61 6c 6c 6f 63 5f  |ctab_dmam_alloc_|
001ffff0  6e 6f 6e 63 6f 68 65 72  65 6e 74 0a 66 66 66 66  |noncoherent.ffff|
00200000  89 8d 9f 65 56 c0 f9 07  65 d8 50 58 18 3a 67 31  |...eV...e.PX.:g1|
00200010  87 c7 7c 2e 4a 3e 40 78  08 10 2c e3 14 52 5f dc  |..|.J>@x..,..R_.|
00200020  c9 7e 1e d3 a1 4d 4f fd  4c 6c f8 fb f2 bd 46 48  |.~...MO.Ll....FH|
00200030  3f e9 f8 4b ef f7 1c 82  be 7e 91 e0 78 35 aa bb  |?..K.....~..x5..|

Cryptsetyp luksFormatでデバイス(/ dev/sdb1)を指定する必要があるのはなぜですか?

なぜなら、

  • cryptsetupは引数としてluksデバイスを指定する必要があります
  • 次のように6つあるので、いくつかのluksデバイス/パーティションがあるかもしれません、
[arif@arif ~]$ lsblk
NAME                                       MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                          8:0    0 931.5G  0 disk  
├─sda1                                       8:1    0   1.9G  0 part  /boot/efi
├─sda2                                       8:2    0   953M  0 part  /boot
├─sda3                                       8:3    0 614.7G  0 part  
│ └─luks-d84cd751-7f17-4312-ed89-4dfbc33dec61
                                           253:0    0 614.7G  0 crypt 
│   ├─vg1-root                             253:2    0 139.7G  0 lvm   /
│   ├─vg1-usr                              253:3    0 186.3G  0 lvm   
│   │ └─luks-03833316-8f82-4a78-0fc4-85ed66ffccd5
                                           253:4    0 186.3G  0 crypt /usr
│   ├─vg1-home                             253:5    0 186.3G  0 lvm   
│   │ └─luks-65f51991-7437-460b-9a0b-e3851b32fdb4
                                           253:8    0 186.3G  0 crypt /home
│   ├─vg1-var                              253:6    0  93.1G  0 lvm   
│   │ └─luks-d1b24b22-53eb-477f-8259-0a22846d3edc
                                           253:9    0  93.1G  0 crypt /var
│   └─vg1-tmp                              253:7    0   9.3G  0 lvm   
│     └─luks-b69a98b8-e257-5ca7-80a4-21725a721f00
                                           253:10   0   9.3G  0 crypt /tmp
├─sda4                                       8:4    0    14G  0 part  
│ └─luks-9bbcad99-3532-4583-a428-c02b559fdf3c
                                           253:1    0    14G  0 crypt [SWAP]
└─sda5                                       8:5    0 300.1G  0 part  
  └─storage

したがって、luksFormatを使用する場合は、標準パーティションまたは既存のluksデバイスについて言及する必要があります。

複数のluksデバイスの1つのヘッダーを共有できますか?

私の知る限り、構成(暗号タイプ、キーサイズなど)が異なる可能性があるため、別のluksデバイスでluksデバイスのheaderを使用することはできません(構成が同じ場合、私は強くそれがうまくいくとは思わないでください)。

8
Muhammad

私はあなたの質問に対する答えを見つけたと思います。ヘッダーは、ヘッダー自体とキースロット用のスペースで構成されています。ヘッダーの後ろのこのセクションが2MBになっている理由は、デフォルトです。ここで私は答えを見つけました: https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions

そのページのセクション2.4を見てください。そのセクションの最後に、以下の抜粋があります。

「セクター番号はヘッダーとキースロットの長さによってシフトされ、容量のサイズが失われます(デフォルトでは1MB + 4096B、最も一般的に使用されるデフォルト以外のXTSモードでは2MB)」

これがあなたの質問に答えてくれるといいのですが、上記のサイトには他にもたくさんの素晴らしい質問がありました。

7
Eddie Studer

https://www.lisenet.com/2013/luks-add-keys-backup-and-restore-volume-header/ から取得したように、cryptsetup luksDumpコマンドで内容を説明します。 1つのヘッダーは、任意の数のデバイスに対して使用できます。

# cryptsetup luksDump /dev/sdb2
LUKS header information for /dev/sdb2

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 4096
MK bits:        256
MK digest:      e5 88 07 f2 4b ce 79 21 85 34 f7 a6 e3 0b 6b b2 a7 b8 d5 a1
MK salt:        0c dd 95 3d 1e 30 1f 66 d4 5e 31 03 12 a0 61 29
                e5 ef 34 8e 13 5d 80 76 8b 4a 0a c3 55 02 22 d3
MK iterations:  5750
UUID:           e4971160-047b-49ce-8246-b63f1fb67db9

Key Slot 0: ENABLED
        Iterations:             23233
        Salt:                   ff bc fc 78 98 5d 35 50 97 76 37 b4 70 99 38 44
                                9f bd a1 b9 02 2d 4d 1d 18 b5 dc f6 4c a0 37 fc
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             23956
        Salt:                   3a a0 06 83 d3 e0 ba da b0 5c e2 56 cb ed 72 69
                                76 9a 8a b8 e1 eb e6 90 44 b3 71 7a 2f 96 80 39
        Key material offset:    264
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
6
Jeff Ferland

ここでの回答の多くはLUKS1( 2004年にリリース )に関する情報しか提供しなかったため、LUKS2( 2017年にリリース )への参照を追加すると思いました。

LUKSヘッダーには、暗号化されていないメタデータと、LUKSボリューム上のデータを復号化するために必要なマスターキーとソルトを含む対称的に暗号化された「キースロット」が必ず含まれています。

LUKS1では、このデータには以下のフィールドが含まれていました。

  1. マジック
  2. バージョン
  3. 暗号名
  4. 暗号モード
  5. ハッシュ仕様
  6. ペイロードオフセット
  7. キーバイト
  8. mk-ダイジェスト
  9. mk-digest-salt
  10. mk-digest-iter
  11. uUID
  12. キースロット0
  13. キースロット1
  14. キースロット2
  15. キースロット3
  16. キースロット4
  17. キースロット5
  18. キースロット6
  19. キースロット-7

上記のデータフィールドの正確なエンコーディングとサイズは、2005年1月にClemens Fruhwirthによって書かれたオリジナルの LUKS On-Disk Format Specification で概説されています。

LUKS2のヘッダーはLUKS1とは大きく異なります。サイズははるかに変化しやすく、メタデータはより拡張可能なJSON形式で保存され、キースロットの数は変化します。

LUKS2ヘッダーに格納されるデータとその方法の詳細については、2018年8月にMilan Brozによってリリースされた LUKS2 On-Disk Format Specification を参照してください。

0