本文大部分内容取自:
LUKS磁盘格式_小写的毛毛的博客-CSDN博客_luks
如何破解LUKS加密
一、LUKS介绍
1. 什么是LUKS
LUKS是“Linux Unified Key Setup”的简写,是 Linux 硬盘加密的标准。LUKS通过提供标准的磁盘格式,不仅可以促进发行版之间的兼容性,还可以提供对多个用户密码的安全管理。LUKS加密广泛用于各种Linux发行版中,以保护磁盘并创建加密的容器。作为一个独立于平台的开源规范,LUKS可以看作是磁盘加密的典型实现。LUKS提供多种加密算法、多种加密模式和多种哈希函数可供选择,是最难破解的磁盘加密系统之一。目前QEMU的磁盘加密格式是luks格式。
LUKS磁盘格式如下图所示:
2. 磁盘加密基础知识
所有磁盘加密工具都依赖于对称加密方式来加密数据。尽管Microsoft BitLocker默认使用128位AES密钥,但主要的磁盘加密工具通常都依赖于具有256位密钥的硬件加速AES加密。一些磁盘加密工具提供了加密算法的选择,最受支持的是VeraCrypt,它提供了约15种对称加密选项。
通过使用密钥生成函数(KDF)从用户的密码(或其他数据)生成对称加密密钥。KDF使用用户输入的单向转换(哈希函数)来生成二进制加密密钥或解开用于解密实际对称加密密钥的中间密钥。使用不同的哈希函数以及大量的哈希迭代来降低潜在的暴力破解的速度。
破解加密容器时,你必须知道加密算法、哈希函数和哈希迭代次数的确切组合。错误的选择实际上会使你成功恢复的机会无效,即使你偶然发现了正确的密码也是如此。
3. LUKS磁盘加密
LUKS是最初为Linux OS开发的与平台无关的磁盘加密规范,LUKS是Linux中磁盘加密事实上的标准,可促进各种Linux发行版之间的兼容性,并提供对多个用户密码的安全管理。如今,LUKS被广泛应用于桌面和笔记本电脑上的几乎每个Linux发行版中。它也是网络附加存储(NAS)设备中流行的加密格式,特别是那些QNAP生产的设备。
除了全盘加密之外,LUKS还可以用于创建和运行加密容器,其方式类似于其他加密容器,例如VeraCrypt,加密的容器具有与LUKS全盘加密相同的保护级别。
LUKS为用户提供了各种加密算法、哈希函数和加密模式的选择,从而提供了大约45种可能的组合。
4. LUKS加密算法、加密模式和哈希函数
LUKS支持多种加密算法、加密模式和哈希函数的组合。
(1)加密算法
LUKS支持以下加密算法:
- 高级加密标准(AES)
- Serpent加密算法
- Twofish加密算法
- CAST-128加密算法
- CAST-256加密算法
AES是唯一的一种硬件加速加密算法,是迄今为止三种加密算法中最常见的算法,尤其是在企业环境和网络连接存储(NAS)设备中使用时。AES加密在具有AES加密加速函数的芯片组(例如Intel CPU中的AES-NI指令集)上使用时,可提供最高的流密码性能。Serpent和Twofish可以在创建加密卷时由用户手动指定。
(2)加密模式
LUKS支持以下加密模式:
- ECB (分组加密的模式之一)
- CBC-PLAIN64
- CBC-ESSIV:哈希
- XTS-PLAIN64
设置加密卷时,各种Linux发行版可能使用不同的默认设置。例如,Red Hat Linux使用cbc-essiv:sha256和256位AES密钥,这是许多流行的Linux发行版的默认组合。
(3)哈希函数
在磁盘加密中,哈希函数用作密钥生成函数(KDF)的一部分。KDF用于从用户提供的输入(通常是基于文本的密码短语)中导出二进制加密密钥。LUKS支持以下哈希函数:
- SHA-1
- SHA-256
- SHA-512
- RIPEMD160
- Whirlpool(基于分组密码的散列算法)
不过对Whirpool的支持不属于KDF规范的一部分。默认情况下,大多数Linux发行版都使用SHA-256作为哈希函数。
5. LUKS默认加密组合设置
虽然每个Linux发行版的维护人员和嵌入式Linux的硬件制造商都可以自由选择他们自己的默认加密设置,但是带256位对称加密密钥的aes-cbc-essiv:sha256是最常见的默认加密设置。如下所示:
- AES——加密算法为AES(默认情况下,使用256位密钥);
- CBC ——密码块链接加密模式;
- ESSIV ——加密的盐扇区初始化向量,此IV应该用于CBC模式下的密码;
- SHA-256——使用32位字计算的安全哈希算法,这是CBC模式下密码的默认哈希函数。