gpt4 book ai didi

cryptography - 使用HKDF的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 08:44:32 31 4
gpt4 key购买 nike

我看到了一个通过以下步骤生成 AES key 的代码片段:

  • 生成一个 16 字节的随机值数组。
    SecureRandom random = new SecureRandom();
    byte[] key = new byte[16];
    random.nextBytes(key);
  • 将 HKDF 应用于 key 以生成新的加密 key 。
  • encrypt_key = KeyDerivation.hkdfSha256(Key,
    /* inputSalt =*/ null,
    hkdfInfoString.getBytes("UTF-8"),
    16);
    我很困惑为什么我们需要两个步骤。 SecureRandom 似乎为 key 提供了足够的熵,对吗?
    两个问题:
  • 我们可以使用key吗?在 1) 直接用于 AES 加密?
  • 2) 中的空盐有什么影响?我正在考虑一个额外的步骤 2) 是为了保护被泄露的 key (只是一个猜测)。如果是,空盐是否会使目的无效?因为我们可以预先计算HKDF的输入 key Material 与其输出之间的联系。

  • HKDF 声称盐是可选的,尽管使用随机盐确实加强了它。我很困惑什么时候需要 HKDF(特别是没有盐)。如果我们已经有一个具有足够熵的 key ,为什么还需要它?如果我们有一个没有足够熵的弱 key ,HKDF(无盐)如何帮助这种情况?我想象攻击者可以预先计算弱 key 到生成 key 之间的映射,对吗?

    最佳答案

  • 我们可以将 1) 中的 key 直接用于 AES 加密吗?

  • 是的你可以。但是,您有很多原因想要经常更改 key ,例如算法/方案限制,不泄露(主) key ,扩展 key Material ,派生多个 key 和/或 IV 值等......以及任何你首先需要 KBKDF 的东西(HKDF 是一个散列基于 key 的 key 派生函数)。
    但是,如果只有一个 128 位 key 派生自另一个 128 位 key ,那么我看不到太多好处。唯一可能有用的是,如果您不信任 SecureRandom 的安全性。实现,因为当攻击者尝试猜测(显然是弱的)随机数生成器的状态时,KDF 会铺设另一层 HMAC 以突破。
    当然,正如您在问题中所指出的,攻击者仍然可以 随机生成器的状态,但至少攻击者无法通过例如反转计算或获取有关状态的统计信息。
  • 2) 中的空盐有什么影响?我正在考虑一个额外的步骤 2) 是为了保护被泄露的 key (只是一个猜测)。如果是,空盐是否会使目的无效?因为我们可以预先计算HKDF的输入 key Material 与其输出之间的联系。

  • 不,无论是否存在盐, key 推导函数都是单向的。盐用于HKDF的安全证明。然而,它并不是真正需要提供足够的安全性。如果您可以添加/存储/传输盐,那么它将有利于安全性,但是有很多 KBKDF 一开始就不允许(明确地)使用盐。另一方面:像 PBKDF2 这样的基于密码的 KDF 确实需要加盐来保证安全。

    关于cryptography - 使用HKDF的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64396936/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com