scrypt 命令行实用程序(参见http://www.tarsnap.com/scrypt.html)实际上只是脚本密码散列算法的演示。
但是,对于文件的简单命令行加密,在我看来它可能是最安全的一种。所有对称加密实用程序(gpg、openssl、ccrypt)几乎完全依赖于密码的安全性,底层文件加密几乎无关紧要。
据我所知,scrypt 演示使用 ssl 进行实际加密,有人可以顺便确认一下吗?
因此,在我看来,scrypt 可能是一个易于使用的命令行文件加密工具的不错选择。我对吗?
scrypt 命令行实用程序(参见http://www.tarsnap.com/scrypt.html)实际上只是脚本密码散列算法的演示。
但是,对于文件的简单命令行加密,在我看来它可能是最安全的一种。所有对称加密实用程序(gpg、openssl、ccrypt)几乎完全依赖于密码的安全性,底层文件加密几乎无关紧要。
据我所知,scrypt 演示使用 ssl 进行实际加密,有人可以顺便确认一下吗?
因此,在我看来,scrypt 可能是一个易于使用的命令行文件加密工具的不错选择。我对吗?
背景: Tarsnap 的scrypt命令使用了自己的libcperciva实现的 AES 加密。scrypt算法用作密钥派生函数。
好处: scrypt 算法是我们所知道的最安全的密钥派生函数之一,如果不是的话。这意味着在密码暴力攻击期间,根据可能的密码计算密钥将非常昂贵。scrypt创建密钥时也使用 32 字节的盐。从scryptenc.c:
crypto_entropy_read(salt, 32)
这提供了对彩虹表的保护。
不寻常的是: scrypt AES 实现是通过他们自己的libcperciva实现的。这是一个自定义实现,由 Tarsnap 的创始人和scrypt 算法的作者Colin Percival 编写并命名。虽然本土加密实现通常被认为不太安全,但其作者(一位相当著名的作者)的 scrypt 实现可能是一个反例。所以你需要将作者为实现带来的优势与该库不常用的事实进行比较(即:它的Github 统计数据低,在OpenHUB中缺乏可见性,在 Google 中只有1K 次点击)。
总结:很明显,使用具有强盐的 scrypt 算法作为密钥推导函数是一种密码安全策略。使用本土的 AES 实现存在一些风险,尽管其作者的技能在一定程度上减轻了这种风险。剩下的三个选项似乎都是合理的选择:
如果您想要一个使用 scrypt 函数进行密钥派生的命令行 AES 加密工具,您可以考虑使用经过良好测试的 AES 实现来编写自己的。
您可以使用bcrypt密钥拉伸算法,通过增加您使用的随机密码的长度使其更加安全。这意味着您需要记住更多内容,但它提供了已知且可衡量的安全性(与 的未知数相比libcperciva)。
您可以信任 Colin Percival 的实现并按原样使用它。我不会梦想为大多数人建议这个,但我们不是在谈论大多数人。
注意:感谢@StephenTouset 指出 Colin Percival 的恶名。