在 ubuntu 中挂载加密的 HFS

pag*_*gid 38 encryption mount hfs ubuntu

我尝试在 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
Run Code Online (Sandbox Code Playgroud)

但是一旦我运行它,我就会收到以下错误:

  Error: Password must be at least 20 characters.
Run Code Online (Sandbox Code Playgroud)

所以我尝试输入两次,但结果是:

  ioctl: LOOP_SET_STATUS: Invalid argument, requested cipher or key (256 bits) not supported by kernel
Run Code Online (Sandbox Code Playgroud)

有什么建议?

jau*_*ume 61

不能使用mount's option挂载在 OS X 中加密的 HFS+ 分区encryption=aes。原因是加密的 HFS+ 分区和卷使用专有格式。

既不Cryptoloop也不环路-AES,它们是由所使用的底层解密方法mountencryption,理解的格式。

这是我发现的:

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  |
|           |                                                    |             |
|           |                                                    |             |
|           |                                                    |             |
+-----------+                                                    +-------------+
Run Code Online (Sandbox Code Playgroud)

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|                                                    |             |
+------------+                                                    |             |
|    ...     |                                                    |             |
+------------+                                                    +-------------+
Run Code Online (Sandbox Code Playgroud)

另一方面,加密的 HFS+ 分区:

Cryptoloop 的继任者dm-crypt也无法读取加密的 HFS+。

但在所有希望破灭之前:

至于你遇到的错误信息:

第一个错误:

Error: Password must be at least 20 characters.
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,虽然您可能无法控制要解密的分区,但它mount不仅为加密还为解密强制执行长密码。您只能通过下载和编辑源代码并重新编译来解决这个麻烦。(其他发行版,例如 SuSE Linux Enterprise Server (SLES),没有此限制。)

第二个错误:

ioctl: LOOP_SET_STATUS: Invalid argument, requested cipher or key (256 bits) not supported by kernel
Run Code Online (Sandbox Code Playgroud)

您需要加载 Cryptoloop 内核模块:

$ sudo modprobe cryptoloop
Run Code Online (Sandbox Code Playgroud)

因为虽然你安装的软件包loop-aes-utils没有使用循环-AES。

环-AES使用几个修改用户空间工具(mountumountlosetupswaponswapoff,由提供loop-aes-utils)和改性的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
Run Code Online (Sandbox Code Playgroud)

所以 Loop-AES 不能在 Ubuntu 上开箱即用。您需要按照此处的说明修补和重新编译内核:http : //loop-aes.sourceforge.net/loop-AES.README。这就是为什么mount仍然需要 Cryptoloop。

如果加载后仍然收到类似的错误消息,cryptoloop.ko则可能无法识别加密类型。例如,我的 Ubuntu 12.04 无法识别aes-128,但是aes. SLES 只识别aes-128.

  • 这是一个非常惊人的答案。非常翔实,详细,显然研究得非常好。感谢分享jaume,非常感谢。 (6认同)
  • 只是想指出,我刚刚在 OSX 10.10.3 上成功地尝试了这个。我还发现,当我对计算机进行大量操作时,解密驱动器的过程不会取得任何进展。然而,当笔记本电脑接通墙壁电源并插入驱动器时,我关闭了盖子(完全睡眠),并在它在 PowerNap 中睡觉时完成了解密。 (3认同)

Str*_*ped 19

实际上,有一个 Java 应用程序hfsexplorer能够打开加密.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
Run Code Online (Sandbox Code Playgroud)

从运行 Ubuntu 的虚拟机我能够打开图像:

$ ./hfsexplorer-0/bin/hfsexplorer.sh /tmp/vault.dmg
Run Code Online (Sandbox Code Playgroud)

它会提示输入密码,然后显示图像的内容。有一个选项(工具 -> 创建磁盘映像)可以创建一个解密的磁盘映像,然后可以使用来自 linux 的 hfs 工具进行挂载。

$ mount vault_decrypted.dmg /mnt/hfs/
Run Code Online (Sandbox Code Playgroud)

甚至 HFS+ 日志文件系统也能工作。唯一的限制是在 Linux 中默认禁用对 HFS+J 文件系统的写入支持。

这表明 的加密.dmg被命令理解hfsexplorer并可能在mount命令中实现。通过创建未加密.dmg的映像,最终可以在 Linux 中安装映像。

vfdecrypt 也不适合我。