相关疑难解决方法(0)

为什么 LUKS 需要生成哈希值?

如果创建新的 LUKS 设备,则可以指定选项-hash-iter-time.

例如像这样:

 sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 --iter-time 2100 --hash sha512 /dev/loop0
Run Code Online (Sandbox Code Playgroud)

从 cryptsetup 的联机帮助页:

--hash, -h

对于创建操作指定用于密码散列的散列。

对于 luksFormat 操作,指定 LUKS 密钥设置方案和卷密钥摘要中使用的哈希。

由于第一句话,我天真地假设散列的使用方式与标准 linux 系统中的使用方式类似,其中散列值由指定的算法(例如sha512)创建。为了让拥有哈希值并想要尝试字典攻击的攻击者更难,对 has 进行了加盐,并且算法迭代了 n 次以延长计算时间。在这种情况下, has 值存储在/etc/shadow. 如果用户登录,则会计算哈希值并将其与/etc/shadows文件中的值进行比较。如果它们相等,则接受用户登录。以类似的方式,拥有文件的攻击者/etc/shadow(从那里他也知道盐值)可以从字典中的单词计算哈希值,并将其与/etc/shadow文件中的值进行比较,直到某些字符串匹配为止。

如果 LUKS 中的散列以类似的方式使用,我认为它必须存储在某个地方(例如在分区头中),并且如果攻击者由于某些原因可以访问分区头(或存储它的文件),他可以以与上述类似的方式继续找出密码。这让我想到了如何获取哈希的问题:如何提取 LUKS 设备的哈希值?

想想 LUKS 系统可能是如何工作的,我猜它不是这样使用的。相反,我认为,密码仅用于加密密钥(并且没有散列存储在任何地方),它以加密方式存储在标头中。但是在 LUKS 手册页中,我没有找到任何提示,即密钥加密使用哪种加密算法以及如何更改它。(选项--cipher aes-cbc-essiv:sha256 --key-size 256是指用于加密分区而不是密钥的实际算法)。这对我来说表明这种理解我也是不正确的。

那么,这一切是如何真正起作用的,上面描述的哈希的作用是什么?如果有人能澄清我上面的误解(也许有一些参考资料),那就太好了。

dm-crypt luks

5
推荐指数
1
解决办法
3743
查看次数

标签 统计

dm-crypt ×1

luks ×1