AES 算法(传递密钥长度) - AES 密钥 + 附加 PIN 码

本文关键字:AES 密钥 附加 PIN 算法 密钥长度 | 更新日期: 2023-09-27 18:36:05

在我的业务场景中(基本上是一个云文件共享应用程序),我有以下情况:

  1. 用户将文件上载到文件夹

  2. 正在检查文件夹是否受 PIN 保护

  3. 1) 如果它不受 PIN 保护,请使用存储在应用程序中的预定义密码 + 存储在 数据库。

    2) 如果文件受 PIN 保护,请使用存储在数据库中的预定义密码 + PIN 值 + IV 密钥加密文件

问题是,当超过最大密钥大小(16、24、32 字节)时,具有有限传递密钥长度的 AES 会获得无效的密钥长度。我的主要问题是如何在保持安全性的同时实现这样的事情。

目前文件夹 PIN 长度不受限制,但似乎我应该将其限制为至少 AES 密钥传递的最大长度。 使用 RijndaelManaged 可能会略有改进,我在传递密钥长度方面有更多的灵活性。

任何建议将不胜感激。

注意:我不认为代码会为问题增加任何价值,但如果有人不同意,请告诉我,我会添加它。

AES 算法(传递密钥长度) - AES 密钥 + 附加 PIN 码

密钥派生函数将创建一个具有受控长度的密钥,如果派生密钥的长度超过所需长度,只需将其截断即可。

此外,加密

IV 不被视为机密,通常只是附加到加密数据的前面。许多密钥派生盐以及迭代计数也附加到加密数据前面。为了良好的安全性,最好使用经过良好审查的方法。

您的情况对我来说并不完全清楚,但总的来说,答案是使用您拥有的"机密"并对这些进行哈希处理,以始终获得相同的 AES 密钥长度。假设您使用 SHA256 对机密进行哈希处理,无论您使用哪些数据生成密钥,您的应用程序都可以使用 AES-256。

同样,生成密钥的数据必须具有足够的熵,并且必须保密。特别是当使用密码时,您应该使用安全密码来密钥派生方案,例如 PKCS#5,而不是自己构建一些东西......