如何使用相同的密钥安全地加密许多相似的数据块?
How to securely encrypt many similiar chunks of data with the same key?
我正在编写一个需要以下安全功能的应用程序:启动 CLI 版本时,您应该向它传递一些密钥。将生成一些未定义数量的相同大小的数据块。它需要远程存储。这将是一个敏感数据。我希望它只能通过最初传递给它的那个密钥进行加密和访问。我的问题是,哪种算法适合我?我 read about AES 但它说
When you perform an encryption operation you initialize your Encryptor
with this key, then generate a new, unique Initialization Vector for
each record you’re going to encrypt.
这意味着我必须传递一个密钥和一个 IV,而不仅仅是密钥,而且这个 IV 对于每个生成的数据块来说应该是唯一的(而且会有很多这样的数据块)。
如果答案是AES,是哪种加密模式?
您可以使用任何现代对称算法。数据量和如何处理 IV 无关紧要,因为无论您选择哪种对称算法,它都适用。
AES-128 是一个不错的选择,因为它不受美国法律的限制,而且 128 位无法暴力破解。如果您不在美国,您可以根据需要使用 AES-256,但 Java 中的实施需要额外安装。
你说你要生成 n 多块数据(或检索,随便什么)。
您可以在 CBC 模式下一次对它们全部加密,该模式将 AES 保留为分组密码,并且您最终只会得到一个 IV。您需要一个 HMAC 来保护完整性。然而,这不是最现代的方式。
您应该在 GCM 模式下使用 AES 作为流密码。你仍然会有一个单一的 IV (nounce),但密文也将被验证。
IV 应随机生成并添加到密文中。然后您可以在需要解密时检索 IV。请记住:IV 不是秘密,它们只需要是随机的!
编辑:如下所述,应使用加密安全随机数生成器生成 IV。基于 CTR 的模式(如 GCM)的 IV 只需要是唯一的。
综上所述,你所担心的不应该担心。一键就好了不止一个 IV 也可以,但是有很多方法可以只用一个。无论哪种方式,您都将不得不担心 IV。不要使用 ECB 模式。
我正在编写一个需要以下安全功能的应用程序:启动 CLI 版本时,您应该向它传递一些密钥。将生成一些未定义数量的相同大小的数据块。它需要远程存储。这将是一个敏感数据。我希望它只能通过最初传递给它的那个密钥进行加密和访问。我的问题是,哪种算法适合我?我 read about AES 但它说
When you perform an encryption operation you initialize your Encryptor with this key, then generate a new, unique Initialization Vector for each record you’re going to encrypt.
这意味着我必须传递一个密钥和一个 IV,而不仅仅是密钥,而且这个 IV 对于每个生成的数据块来说应该是唯一的(而且会有很多这样的数据块)。
如果答案是AES,是哪种加密模式?
您可以使用任何现代对称算法。数据量和如何处理 IV 无关紧要,因为无论您选择哪种对称算法,它都适用。
AES-128 是一个不错的选择,因为它不受美国法律的限制,而且 128 位无法暴力破解。如果您不在美国,您可以根据需要使用 AES-256,但 Java 中的实施需要额外安装。
你说你要生成 n 多块数据(或检索,随便什么)。
您可以在 CBC 模式下一次对它们全部加密,该模式将 AES 保留为分组密码,并且您最终只会得到一个 IV。您需要一个 HMAC 来保护完整性。然而,这不是最现代的方式。
您应该在 GCM 模式下使用 AES 作为流密码。你仍然会有一个单一的 IV (nounce),但密文也将被验证。
IV 应随机生成并添加到密文中。然后您可以在需要解密时检索 IV。请记住:IV 不是秘密,它们只需要是随机的!
编辑:如下所述,应使用加密安全随机数生成器生成 IV。基于 CTR 的模式(如 GCM)的 IV 只需要是唯一的。
综上所述,你所担心的不应该担心。一键就好了不止一个 IV 也可以,但是有很多方法可以只用一个。无论哪种方式,您都将不得不担心 IV。不要使用 ECB 模式。