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

AES algorithm (pass key length) - AES pass key + addtional PIN code

在我的业务场景中(基本上是一个云文件共享应用)我有以下案例:

  1. 用户上传文件到文件夹

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

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

    2) 如果是 PIN protected,使用数据库中存储的预定义密码 + PIN 值 + IV 密钥加密文件

问题是,当超过最大密钥大小(16、24、32 字节)时,具有有限密钥长度的 AES 会得到无效的密钥长度。我的主要问题是如何在保持安全性的同时实现类似的目标。

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

如有任何建议,我们将不胜感激。

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

我不太清楚你的情况,但总的来说,答案是使用你所拥有的 "secrets" 并散列它们以始终获得相同的 AES 密钥长度。假设您使用 SHA256 来散列秘密,无论您使用哪种数据生成密钥,您的应用程序都可以使用 AES-256。

同样,产生密钥的数据必须有足够的熵,必须保密。尤其是在使用密码时,您应该使用安全的密码密钥派生方案,如 PKCS#5,而不是自己构建一些东西...

密钥派生函数将创建一个长度受控的密钥,如果派生密钥比需要的长,则将其截断。

此外,加密 IV 不被认为是秘密的,通常只是放在加密数据的前面。许多密钥派生盐以及迭代计数也被添加到加密数据之前。为了获得良好的安全性,最好使用经过严格审查的方法。