问题描述
我尝试在Ubuntu中挂载加密的HFS +分区。
older post很好地描述了如何执行此操作,但是缺少有关如何使用加密分区的信息。
到目前为止,我发现的是:
# 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
有什么建议么?
最佳办法
您无法使用mount
的选项encryption=aes
挂载在OS X中加密的HFS +分区。原因是加密的HFS +分区和卷使用专有格式。
mount
和encryption
使用的基础解密方法Cryptoloop和Loop-AES都不理解该格式。
这是我发现的:
Cryptoloop可以挂载作为单个AES块加密的分区或磁盘映像(这称为single-key模式,请参阅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可以挂载single-key(如上)和multi-key加密的分区或磁盘映像:
/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) -
使用AES-XTS:
$ 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磁盘映像(不适用于设备文件)。该工具看起来非常有前途,但不能与我在OS X 10.8.2 “Mountain Lion”上使用Disk Utility
创建的任何加密磁盘映像一起使用。其他人(http://bre.klaki.net/blog/2011/08/17/)似乎已成功处理了旧的加密图像。 -
其他专家正在研究项目
libfvde
(https://code.google.com/p/libfvde),该项目包括用于读取FileVault加密系统卷的命令fvdemount
。此处的限制因素为”system volume”。它不支持可移动媒体上的分区。如果您好奇,请在此处进行描述: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使用多个修改的用户空间工具(loop-aes-utils
提供的mount
,umount
,losetup
,swapon
和swapoff
)和一个修改的loop.ko
内核模块。最新的Ubuntu版本将未经修改的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
。
次佳办法
实际上,存在Java应用程序hfsexplorer,它可以打开加密的.dmg
文件并创建可以在Linux中挂载的解密的.dmg
映像。
我能够在OS X 10.9.5中创建加密的.dmg
文件,然后从运行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文件系统的写支持。
这表明hfsexplorer可以理解.dmg的加密,并且可以在mount命令中实现。通过创建未加密的.dmg,可以最终在Linux中挂载映像。
vfdecrypt
也不适合我。