gpt4 book ai didi

cryptography - 对如何使用 AES 和 HMAC 感到困惑

转载 作者:行者123 更新时间:2023-12-04 00:58:57 24 4
gpt4 key购买 nike

在将加密消息从服务器传输到客户端时,我有点困惑如何以正确的方式使用 AES 和 HMAC(基于 SHA-256),反之亦然

如果以下方法有误,请指正:

  • 从 key 文件中获取安全 key (例如我们建议使用 AES-256 并且我们已经有一个有效的 256 位长度的 key )
  • 为 AES-256 生成随机 IV,以确保相同的纯文本将具有不同的加密输出。
  • 使用纯文本和安全 key 计算 HMAC-SHA-256。 (第一个问题:我应该使用 IV 进行 HMAC 计算吗?例如附加到安全 key ?)
  • 使用 AES-256 加密纯文本。
  • 为客户端编写消息如下:HMAC + IV+ ENCRYPTED_MESSAGE

  • 最大的问题是:是否有可能以某种方式不将 IV 发送给客户端,而是以相同的方式生成它并且仍然是加密安全的?或者也可以发送IV?

    我最终得到了随机 IV 生成,因为需要相同的纯文本以不同的加密结果结束。

    最佳答案

    不要发送 hmac(message),aes(message)。如果您发送相同的消息两次,任何人都可以知道。此外,您需要对密文进行mac 以防止诸如padding oracle attack 之类的攻击。 .

    四:通常,处理 iv 的简单方法是将它添加到密文中,因为它是固定长度的。然后您可以在解密之前读取这些字节。 IV 可以是公开的,但它们必须是随机的。

    HMAC:最简单的方法,如果你的库支持它,就是在 GCM 模式下使用 AES(或者,最好是 EAX)。这实际上不是 HMAC,但它提供了同样好的经过身份验证的加密。如果不支持这些:

    您确实需要计算 iv 和密文的 hmac。如果||是串联(如果处理字节数组,你可以说数组复制)然后你想要

    CipherText = iv|| aes(key1,iv,message)  
    tag = hmac(key2,ciphertext)

    然后发送 (tag,CipherText)。在另一端,您运行相同的 hmac 调用来重新生成标签,并将接收到的标签与计算出的标签进行比较。比较标签的 sha1 或 sha256 哈希而不是直接比较,这样就不会在比较失败的地方泄漏。

    您应该为 hmac 使用不同的 key 。实际上,添加加密 key 的 sha1 总和就足够了。

    关于cryptography - 对如何使用 AES 和 HMAC 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10279403/

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