首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LUKS头包含什么?

LUKS头包含什么?
EN

Security用户
提问于 2015-12-29 14:39:30
回答 5查看 28.4K关注 0票数 30

什么是包含在卢克斯的头部?我知道,标题的大小是2MB。此外,密码设置支持“分离头”,其中标头可以存储在一个单独的文件中。

因此,例如,我可以格式化luks设备并在单独的文件中指定分离的标头:

代码语言:javascript
复制
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 1)?

我可以为多个luks设备共享一个标头吗?

更新

经过进一步的调查,在我看来,头的第一个4096B包含了头信息,这些信息是用cryptsetup luksDump打印的。

对我来说,2MB文件的其余部分中存储着什么是个谜。它似乎被随机数据覆盖(最初我用零填充它,这样我就可以看到区别)。另外,2MB文件是绝对不可压缩的。随机/加密数据的进一步指示。

,谁能权威地解释一下2MB的LUKS标头中包含了什么?

EN

回答 5

Security用户

发布于 2016-01-07 01:06:43

我相信头部的结果是2MB大,因为反法医分离器:加密的主密钥是分裂在几个块,以加强扩散,并确保它可以很容易地从磁盘擦除。特别是,擦除一个单一的条纹使整个加密的mk无法恢复。

https://web.archive.org/web/20160517044339/http://tomb.dyne.org/Luks_在……上面_盘片_format.pdf

以下是LUKS2规范:https://gitlab.com/cryptsetup/LUKS2-docs/blob/master/luks2_文档_wip.pdf

我想知道怎么才能提取加密的主密钥..。

票数 17
EN

Security用户

发布于 2019-02-16 06:42:29

请注意,我不能回答“权威”,因为我不是LUKS/cryptsetup/dmcrypt的作者/贡献者,而是一个用户。但我的答案如下,

LUKS头包含什么?

根据密码设置常见问题,LUKS报头的布局如下:

代码语言:javascript
复制
    +------------------------+----+----+----+----+----+----+----+----+-----------+
    |  Luks Partition Header | K0 | K1 | K2 | K3 | K4 | K5 | K6 | K7 | BULK DATA |
    +------------------------+----+----+----+----+----+----+----+----+-----------+
                                   Figure - 1

哪里,

  1. Luks分区标头(PHDR)由解密/加密luks设备的必要信息组成,如下所示,
代码语言:javascript
复制
    -------------------------------+-----------------------------
    |   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. 分区标头(PHDR)的第二部分由8个密钥槽描述符组成,即有关密钥槽的信息如下:
代码语言:javascript
复制
    ------------------------------+------------------------------
    | 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个关键插槽,我们得到的8 * 128 = 1024 KiB是1 1MiB或1048576字节。

到目前为止,我们从分区头中得到了4096字节,对于键槽,我们得到了131072字节,对于默认的luks配置,这个值总计为1048576 + 4096 = 1052672 bytes。对于最常见的配置aes-xts-plain,它大约是2MiB。

因此,可以说头部的大小取决于各种元素,如主密钥大小、哈希大小、加密算法、哈希算法等。但是,将2MiB视为luks报头是安全的。

  1. 在关键插槽之后,大容量数据开始。从密码设置常见问题

由于2MiB默认对齐,密码设置1.3及更高版本的数据区域的启动时间是2MiB,即0x200000。对于旧版本,为0x101000,即1'052'672字节。

在下面的输出中可以看到,批量数据/加密数据从偏移量00200000开始

代码语言:javascript
复制
[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 1)?

因为,

  • cryptsetup需要指定luks设备作为参数
  • 可能有几个luks设备/分区,因为我有6个设备/分区,如下所示,
代码语言:javascript
复制
[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设备共享一个标头吗?

据我所知,不可以在不同的luks设备上使用luks设备的header,因为配置(密码类型、密钥大小等)。可能是不同的(如果配置是相同的,我非常不相信它会起作用)。

票数 13
EN

Security用户

发布于 2015-12-29 16:09:38

https://www.lisenet.com/2013/luks-add-keys-backup-and-restore-volume-header/中可以看到,cryptsetup luksDump命令将解释内容。一个标头应该能够针对任意数量的设备使用。

代码语言:javascript
复制
# 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
票数 8
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/109223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档