一个流行的零知识文件共享站点使用 128 位主密钥进行加密。
但是,他们声称使用的是 AES256。当被问到时,他们解释说使用 PBKDF2 和随机盐将主密钥扩大到 256 位。
这在技术上仍然可以称为 AES256 吗?这种从 128 位扩大到 256 位的方法是否可以接受?
编辑:我没有关于他们的过程的更详细信息。
一个流行的零知识文件共享站点使用 128 位主密钥进行加密。
但是,他们声称使用的是 AES256。当被问到时,他们解释说使用 PBKDF2 和随机盐将主密钥扩大到 256 位。
这在技术上仍然可以称为 AES256 吗?这种从 128 位扩大到 256 位的方法是否可以接受?
编辑:我没有关于他们的过程的更详细信息。
AES-256 是一种特定的算法,无论您每次使用密钥 3e9e98e31ba18d8d18283aceb3c6e17016b729e1363afc5bea8bf7df295b03e9,还是从某个密码中派生出带有 PBKDF2 的密钥,或者通过掷硬币 256 次来选择密钥,都是相同的算法。
所以这并不矛盾。但这并不意味着他们的系统没有充满危险信号!
了解 AES128 和 AES256 之间的区别很重要。这不仅仅是 AES 采用两倍大小的密钥。算法本身是不同的,尽管只是略有不同。AES 基本上由若干轮组成。每一轮都可以被认为是一个迷你密码。在明文经过足够多的轮次后,实际上不可能逆转计算。对于 AES,每一轮都有自己的 128 位密钥。AES128 使用 10 轮,而 AES256 使用 14 轮。密钥调度的工作是将单个密钥转换为多个不同的轮密钥. 这两个版本的 AES 使用不同的密钥调度来说明不同大小的密钥。除此之外,AES256 需要比 AES128 多生成 4 个轮密钥来为额外的轮提供密钥材料。
给定 128 位密钥的 AES256(无论是使用安全 KDF 扩展密钥、填充零还是简单地重复两次)与 AES128 不同,因为密钥调度作用于 256 位材料,并且因为它有 14 轮而不是 10。所以是的,它仍然可以称为 AES256,但密钥空间是 2 128而不是预期的 2 256。这仍然足以防止蛮力。
有趣的是,理论上,128 位密钥的 AES256 比 128 位密钥的 AES128 更安全,因为它使用了额外的轮数。这些回合根本不会增加密钥空间,但它们确实使针对密码的某些类型的数学攻击变得更加困难。值得庆幸的是,10 轮仍然是安全的。
如果遵循 AES-256 规范(轮数等),则为 AES-256。
即使他们采用 128 位密钥,通过 SHA-256 运行它以获得 256 位并将其用作 AES-256 密钥,它仍然是 AES-256。这样的东西不会提供 AES-256 的安全性,但它是 AES-256。
如果他们生成随机盐并使用 KDF 生成 256 位密钥,他们将获得与 128 位 + 盐大小(以位为单位)一样多的安全性,正如 Steffen Ullrich 在评论中所写的那样。
是的,它是一种被广泛接受的实现技术。pbkdf2 是一种密钥扩展算法(密钥派生函数),用于创建对传统暴力攻击更具弹性的密钥。它通过针对初始提供的密钥重复计算 MAC 或哈希函数来派生更长、更有弹性的密钥。它也是一种慢速设计算法,它增加了攻击者尝试暴力破解整个密钥空间所需的计算资源,从而限制了加密数据被盗的影响。
它需要一个长度较短的密钥,然后慢慢将其扩展为一个更大的密钥。这增加了攻击者破解密钥所需的持续时间。该密钥随后用于 AES 加密。所以是的,他们使用 AES-256 和 pbkdf2 进行密钥扩展,这很好。
我想补充的一件事是,从攻击者的角度来看,如果他们不知道 pbkdf2 正在使用中,他们恢复密钥数据的可能性就会大大降低。因为他们无法根据密钥密码尝试计算 pbkdf2,所以他们必须专门针对 256 位中的每一个。 如果他们知道 pbkdf2 正在使用中,他们就不能像他们那样启动一个单词表。
尽管我会更多地考虑他们关于零知识的主张以及证据在哪里。但这有助于回答您的问题吗?