我尝试在 Ubuntu 中挂载加密的 HFS+ 分区。
一个旧帖描述了如何操作相当好,但缺少如何使用加密分区的信息。
我目前发现的是:
# install required packages
sudo apt-get install hfsprogs hfsutils hfsplus loop-aes-utils
# try to mount it
mount -t hfsplus -o encryption=aes-256 /dev/xyz /mount/xyz
但是一旦我运行这个,我就会收到以下错误:
Error: Password must be at least 20 characters.
因此我尝试输入两次,但结果如下:
ioctl: LOOP_SET_STATUS: Invalid argument, requested cipher or key (256 bits) not supported by kernel
有什么建议么?
答案1
你无法挂载mount
在 OS X 中使用选项加密的 HFS+ 分区encryption=aes
。原因是加密的 HFS+ 分区和卷使用所有权格式。
两者都不加密循环也不环路AESmount
,它们是和使用的底层解密方法encryption
,了解该格式。
以下是我的发现:
Cryptoloop 可以挂载作为单个 AES 块加密的分区或磁盘映像(这称为单密钥模式,请参阅http://www.tldp.org/HOWTO/html_single/Cryptoloop-HOWTO/#cryptoloop-introduction):
/dev/sdXX
disk image /dev/loopX
+-----------+ +-------------+
| | | |
| | | |
| | | unencrypted |
| AES block | -AES passwd->AES key->decrypt I/O to loop device-> | partition |
| | | |
| | | |
| | | |
+-----------+ +-------------+
AES-Loop 可以挂载单密钥(如上)和多密钥加密分区或磁盘映像:
/dev/sdXX
disk image /dev/loopX
+------------+ +-------------+
|AES block #1| | |
+------------+ | |
|AES block #2| | unencrypted |
+------------+ -AES passwd->AES key(s)->decrypt I/O to loop dev-> | partition |
|AES block #3| | |
+------------+ | |
| ... | | |
+------------+ +-------------+
另一方面,加密的 HFS+ 分区:
- 包括一个标题(你可以用 来转储它
xxd
) - 用途一些密钥以未记录的方式(参见http://events.ccc.de/congress/2006/Fahrplan/attachments/1244-23C3VileFault.pdf)
- 从 OS X 10.7 “Lion” 开始,它被包装在 CoreStorage 逻辑卷组中(参见
man diskutil
或https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man8/diskutil.8.html) 用途电化学测试:
$ diskutil coreStorage list (...) +-> Logical Volume Family D1C4665F-EAC8-4DAB-B392-634842A59559 ---------------------------------------------------------- Encryption Status: Unlocked Encryption Type: AES-XTS (...)
Cryptoloop 和 Loop-AES 似乎都不支持它。
Cryptoloop 的后继者dm-crypt
也无法读取加密的 HFS+。
但在所有希望消失之前:
一组密码专家创建了
vfdecrypt
(包含在 Ubuntu 包中dmg2img
,tar.gz 在这里: http://code.google.com/p/iphone-elite/downloads/list),它可以解密加密的 FileVault 磁盘映像(它不适用于设备文件)。此工具看起来非常有前途,但无法与我
Disk Utility
在 OS X 10.8.2“Mountain Lion”上创建的几个加密磁盘映像一起使用。其他人(http://bre.klaki.net/blog/2011/08/17/) 似乎已经成功破解了旧的加密图像。其他专家致力于项目
libfvde
(https://code.google.com/p/libfvde),其中包括fvdemount
用于读取 FileVault 加密系统卷的命令。这里的限制因素是“系统卷”。它不支持可移动媒体上的分区。如果您好奇,描述如下: https://code.google.com/p/libfvde/wiki/Mounting#Mouting_the_system_volume。源代码可以在这里下载: https://code.google.com/p/libfvde/downloads/list。
至于您遇到的错误消息:
第一个错误:
Error: Password must be at least 20 characters.
令人惊讶的是,mount
不仅加密时强制使用长密码,而且解密,尽管您可能无法控制要解密的分区。您只能通过下载和编辑源代码并重新编译来解决此问题。(其他发行版,如 SuSE Linux Enterprise Server (SLES),没有此限制。)
第二个错误:
ioctl: LOOP_SET_STATUS: Invalid argument, requested cipher or key (256 bits) not supported by kernel
您需要加载 Cryptoloop 内核模块:
$ sudo modprobe cryptoloop
因为尽管你安装了loop-aes-utils
包不是使用Loop-AES。
Loop-AES 使用几个经过修改的用户空间工具(由 提供的mount
、umount
、losetup
和swapon
)和一个经过修改的内核模块。最近的 Ubuntu 版本将未修改的模块编译到内核中:swapoff
loop-aes-utils
loop.ko
loop
$ cd /usr/src/linux-source-3.2.0/linux-source-3.2.0/drivers/block/
$ diff -q /tmp/loop.c-3.x.patched loop.c
Files /tmp/loop.c-3.x.patched and loop.c differ
因此 Loop-AES 不能在 Ubuntu 上开箱即用。您需要按照此处的说明修补并重新编译内核:http://loop-aes.sourceforge.net/loop-AES.README。这就是为什么mount
仍然需要 Cryptoloop。
如果加载后仍然出现类似的错误信息,则cryptoloop.ko
可能是无法识别加密类型。例如,我的 Ubuntu 12.04 无法识别aes-128
,但aes
SLES 仅识别aes-128
。
答案2
实际上,有 Java 应用程序高速文件系统它能够打开加密.dmg
文件并创建.dmg
可以在 Linux 中安装的解密图像。
我能够.dmg
在 OS X 10.9.5 中创建加密文件,然后从运行 Ubuntu 14.04.2 LTS 的虚拟机中浏览映像。AES-128 和 AES-256 加密在我的测试用例中均有效。
这是我创建.dmg
图像的方式:
$ hdiutil create -size 10m -layout NONE -fs HFS+ -encryption AES-256 -volname "Vault" vault.dmg
从运行 Ubuntu 的虚拟机中我能够打开图像:
$ ./hfsexplorer-0/bin/hfsexplorer.sh /tmp/vault.dmg
它会提示输入密码,然后显示映像的内容。有一个选项(工具 -> 创建磁盘映像)可以创建解密的磁盘映像,然后可以使用 Linux 中的 hfs 工具安装该映像。
$ mount vault_decrypted.dmg /mnt/hfs/
甚至 HFS+ 日志文件系统也能正常工作。唯一的限制是 Linux 默认禁用对 HFS+J 文件系统的写入支持。
.dmg
这表明命令可以理解加密,hfsexplorer
并且可能实现加密mount
。通过创建未加密的,.dmg
最终可以在 Linux 中安装映像。
vfdecrypt
对我来说也不起作用。