问题标签 [hkdf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - HKDF 是否在 Java 密码体系结构中实现?
在我正在编写的应用程序中,我需要执行 HKDF 以从一个密码中派生两个不同的密钥。在 Java 中搜索有关如何使用它的示例时,我发现了这两个:
- https://github.com/WhisperSystems/libsignal-protocol-java/blob/master/java/src/main/java/org/whispersystems/libsignal/kdf/HKDF.java
- https://www.javatips.net/api/keywhiz-master/hkdf/src/main/java/keywhiz/hkdf/Hkdf.java
在这两种情况下,HKDF 都是在 JCA 提供的 HMAC 之上实现的。我还没有详细阅读这些实现,但我想知道,这不是在 JCA 中的任何地方实现还是在它本身中实现?我必须实施自己的 HKDF 吗?
最让我担心的部分是在应用 info 参数时犯了一个错误。它看起来不平凡和关键。
hsm - 使用 HSM 和 HKDF 生成 AES 密钥
我们有安全网 HSM。我们的系统要求我们生成 AES-256 密钥。我应该采取哪种方法?
指示 HSM 生成 AES 密钥。
使用 HSM 创建输入密钥材料并使用 HKDF 派生密钥。
HSM 应该能够生成高质量的密钥。是否需要第二种方法?
android - HKDF Android 实现
我正在尝试与 HKDF 实现密钥交换以进行密钥派生。我已经看过HKDF 在 Java Cryptography Architecture 中实现了吗?提出问题 ,但是,我仍然没有得到我应该得到的东西。
在 python 中,我有以下(src):
这适用于 python 和 iOS(我也在那里实现了它)。但是,Android 在最后一步给我带来了麻烦。有人可以详细说明适用于 Android 的 HKDF 吗?
编辑:现有的 Kotlin 代码
谢谢!
c# - 如何将 HKDF 与 ECDiffieHellmanCng 一起使用
我正在尝试使用 ECDiffieHellmanCng 类在桌面和通过 BLE 连接的设备之间执行密钥交换操作。系统规范要求使用 HKDF 来派生密钥。对于 ECDiffieHellmanCng 类中的散列函数,这似乎不是一个选项。有没有办法做到这一点?然后我需要获取生成的密钥并将其传递给 AesCng 对象。
openssl - 如何使用 OpenSSL 1.1.1 实现 HDF-Extract?
我正在尝试实现部分 QUIC RFC,他们注意到:
我只是想知道,如何将其映射到此处:https ://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_CTX_set_hkdf_md.html
我明白了:
EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 在这种模式下调用 EVP_PKEY_derive(3) 将只执行提取操作。返回的值将是中间固定长度的伪随机密钥 K。
必须在派生密钥或发生错误之前设置摘要、密钥和盐值。
但我在这里很困惑。我可以看到如何设置模式、算法、盐,但我不知道在哪里设置client_dst_connection_id
.
java - 使用 javacardx.security.derivation 的 Javacard 密钥派生 (hmac)
我试图弄清楚 javacard 派生函数是如何工作的,我必须承认我对如何设置函数感到迷茫。
我认为 DerivationFunction 可用于派生密钥,并且使用 ALG_KDF_HKDF 我可以指定所需的基于 HMAC 的密钥派生。但是,我不明白我如何设置秘密和盐。KDFHmacSpec 接口仅指定 getter。它没有指定如何设置这些值。到目前为止,我无法弄清楚如何设置这些。
我想用它来生成 XOR 密钥(最好指定长度),基于一个秘密和一些随机的公共值。
这适用于 javacard 3+。
cryptography - 使用 HKDF 的目的是什么?
我看到了一个通过以下步骤生成 AES 密钥的代码片段:
生成一个 16 字节的随机值数组。
将 HKDF 应用于密钥以生成新的加密密钥。
我很困惑为什么我们需要两个步骤。SecureRandom 似乎为密钥提供了足够的熵,对吧?两个问题:
- 我们可以
key
直接使用 1) 进行 AES 加密吗? - 2)中的空盐有什么影响?我正在考虑可能额外的步骤 2)是为了保护被泄露的密钥(只是一个猜测)。如果是,空盐是否使目的无效?因为我们可以预先计算 HKDF 的输入密钥材料与其输出之间的联系。
HKDF 声称盐是可选的,尽管使用随机盐确实可以增强它。我很困惑什么时候需要 HKDF(尤其是没有盐)。如果我们已经有一个具有足够熵的密钥,为什么我们需要它?如果我们有一个没有足够熵的弱密钥,HKDF(没有盐)如何帮助这种情况?我想象攻击者可以预先计算出弱密钥与生成密钥之间的映射,对吧?
cryptography - 实现双棘轮算法
我正在尝试使用它作为我的指南从头开始实现双棘轮算法,但是我不是加密专家,因此有些事情还不清楚:
- 该指南引用了“根键”
RK
,并将 a 的输出DH
作为函数的参数KDF_RK(rk, dh_out)
,但我需要知道这个根键是什么以及第一次必须如何初始化它。 - 我看到了,
KDF_RK(rk, dh_out)
并且KDF_CK(ck)
基于 HKDF 加密函数:有人可以画图让我更好地理解这些函数是如何工作的吗?以伪代码方式模拟 Alice 和 Bob 之间的典型执行就足够了。
谢谢
c++ - 未声明 Openssl 'EVP_KDF'
在openssl
中,我想运行从 HKDF 提取文档中获得的以下代码示例:
但我不知道这些标头是否已更改或是否存在其他问题。当我编译为 g++ test.cpp -g -lssl -lcrypto
.
输出是,
它以这种方式遵守,并且在此编译单元中没有看到任何类型。
python - 使用 pycryptodome 计算 ecies hkdf 对称密钥
背景:我正在从google tink 库制作一个 python 版本的paymentmethodtoken来处理 gpay 消息。为此,我只使用 python 和 PyCryptodome。
话虽如此,我目前正在尝试实现与kem 功能等效的功能:
python中的等价物:
据我所知,google tink computeEciesHkdfSymmetricKey (代码) 根本不像PyCryptodome HKDF 那样工作。我的问题是,pycryptomde 或其他库中是否存在与 computeEciesHkdfSymmetricKey 等效的内容,如果没有,是否可以重现相同的行为?