是否有一种简单的方法来确定实际使用的加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(无论是CCM还是GCM),但我看不出有任何方法来问这个问题?
encryption = off | on | aes-128-ccm | aes-192-ccm | aes-256-ccm | aes-128-gcm | aes-192-gcm | aes-256-gcm控制此数据集使用的加密密码套件(分组密码、密钥长度和模式)。要求在池上启用加密特性。要求在数据集创建时设置键格式。在创建数据集时选择encryption = on表示将选择默认的加密套件,目前为aes-256-gcm。为了提供一致的数据保护,必须在创建数据集时指定加密,之后不能更改加密。有关加密的详细信息和注意事项,请参阅加密部分。
写得很好;我假设性能在任何实现AES-NI(或等价)的CPU上都是优秀的,但你知道在像J1800这样的东西上有多大的性能打击吗?我知道它们很旧,但仍然有很多它们在嵌入式/工业/无风扇的底盘上运行。
在ZFS和它的磁盘之间放置“任何东西”的想法,无论多么轻量级,都让我感到恐惧。写得很好;我假设性能在任何实现AES-NI(或等价)的CPU上都是优秀的,但你知道在像J1800这样的东西上有多大的性能打击吗?我知道它们很旧,但仍然有很多它们在嵌入式/工业/无风扇的底盘上运行。
根据我的经验,你确实需要不想在没有AESNI的计算机上运行ZFS加密。他们对软件模式做了一些改进,但仍然非常缓慢。使用AESNI,它基本上以磁盘速度运行。没有的话,就是一团糟。
我最初是在一台老式i7-920上尝试加密的,这台i7-920很古老,但性能仍然相当好。那台硬件上的ZFS加密非常糟糕。在沉重的写负载下,系统实际上无法使用。换到4790K马上就修好了。
自从我的实验以来,软件改进已经被添加了,但我们最近在Ars论坛上有一个帖子试图使用没有使用硬件加速的ARM二进制文件,这对他们来说也是一场灾难。
编辑:如果你没有太多的卷,就像文章说的,你可以使用LUKS加密,它在任何硬件上都非常快。但是您可能需要编写脚本来解锁过程,除非您想在每个磁盘上输入一个密码。类似地,我还编写了加载和挂载ZFS键的脚本,因此您可能不会丢失任何东西。
它可能不太可靠,但AFAIK LUKS是一个非常薄的层,所以它的反应可能与直接将ZFS体积放在金属上相同。
是否有一种简单的方法来确定实际使用的加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(无论是CCM还是GCM),但我看不出有任何方法来问这个问题?
zpool get feature@encryption(卷)NAME PROPERTY VALUE SOURCE(卷)feature@encryption active local
zfs get encryption (volume)/(fileset) NAME PROPERTY VALUE SOURCE (volume)/(fileset) encryption aes-256-gcm -
实际的问题是,我试图读取池上的加密,而不是根文件系统:
代码:zpool get feature@encryption(卷)NAME PROPERTY VALUE SOURCE(卷)feature@encryption active local
...这不是我想要的
然后我做了大量的工作,试图找到要查询的正确字符串,假设它必须在feature@ wall后面的某个地方。什么都没找到。我在网上搜了一堆,没找到任何明确的信息。然后我问这里,然后
代码:zfs get encryption (volume)/(fileset) NAME PROPERTY VALUE SOURCE (volume)/(fileset) encryption aes-256-gcm -
瞧,这正是我要找的。我找错了地方,用了错误的语法。feature@encryption是zpools的一个东西,但显然它只是文件集的直接“加密”。
编辑:注意,我可能已经直接设置了算法,而不是使用'on'。我花了几天时间研究ZFS并预先构建文件系统创建行。
很高兴我能帮上忙!实际的问题是,我试图读取池上的加密,而不是根文件系统:
代码:zpool get feature@encryption(卷)NAME PROPERTY VALUE SOURCE(卷)feature@encryption active local
...这不是我想要的
然后我做了大量的工作,试图找到要查询的正确字符串,假设它必须在feature@ wall后面的某个地方。什么都没找到。我在网上搜了一堆,没找到任何明确的信息。然后我问这里,然后
代码:zfs get encryption (volume)/(fileset) NAME PROPERTY VALUE SOURCE (volume)/(fileset) encryption aes-256-gcm -
瞧,这正是我要找的。我找错了地方,用了错误的语法。feature@encryption是zpools的一个东西,但显然它只是文件集的直接“加密”。
在Linux上,可以编写pam模块来处理这个问题。嗯…有没有办法同步/使用登录密码/密码短语自动挂载/加载它作为密钥?比如,如果我使用用户加密的主目录,它是用用户密码加密的,它能在用户第一次登录时自动挂载/卸载吗,然后在用户最后一次注销时?虽然像屏幕这样的东西让它变得更复杂,但系统需要确保在卸载密钥之前没有任何用户进程接触加密的数据集。人力资源管理。听起来这是一件很难做好的事情。
我猜一个用户(我想更多的个人笔记本电脑与Linux/*BSD与ZFS)可以有基本的主目录是不加密的,但所有的子目录都是加密数据集的一部分,然后,在第一次登录UI时,它提示密码来加载密钥。
我希望ZFS能够开发可否认加密。在许多国家,例如英国,拥有加密数据,但在要求政府时无法解密是一种违法行为可判处二年或五年监禁的罪行.这是完全合理的假设,例如,在共享的ZFS服务器上,某人可能没有给定zvol的加密密钥,但ZFS元数据的存在足以证明它的存在。
我意识到在LUKS上运行ZFS可以绕过这个问题(使用一些骗人的花招),但ZFS本身没有命令行选项来隐藏元数据,这似乎很奇怪。
我知道你的目标可能是让事情变得简单,但我实际上在自动化中使用提示符(没有人工参与)而不是关键文件,因为我发现它更方便,例如,在macOS上你可以这样做:使用提示符,每次都需要人工手动解锁加密的卷。
Security find-generic-password -a "${dataset}" -w | ZFS load-key "${dataset}"
有人知道zfs是使用它自己的AES实现,还是使用内核现有的AES实现吗?因为
遵从性。