【问题标题】:What does System.Security.Cryptography's DeriveKeyFromHash() actually do?System.Security.Cryptography DeriveKey From Hash() 实际上做了什么?
【发布时间】:2019-07-23 00:56:53
【问题描述】:

我正在 C# 应用程序和用 C 编程的嵌入式设备之间实现安全交换。System.Security.Cryptography 没有关于其任何加密算法“在幕后”做什么的文档。为了在 C 中实现相同的东西,我需要知道这一点,为此我有更多的基本库。具体来说,我想知道 ECDiffieHellman.DeriveKeyFromHash(HashAlgorithmName.SHA256) 做了什么。

我已尝试跟踪 API,但它以调用 ncrypt.h 中的非托管 NCryptDeriveKey 结束。

该方法似乎不是简单地执行共享密钥的 SHA256 哈希。我在 C 端做了这个,我得到了不同的值。我知道在 C# 端收到的公钥是有效的,否则之前的方法会引发异常。我猜数据是按照一些 NIST 文件的规定附加或附加的,但情况是这样吗?还是我还缺少其他东西?

编辑:原来我在 C 端做错了什么。对 C# 行为的额外确认有助于缩小搜索范围。

ECDiffieHellmanCng ecdh = new ECDiffieHellmanCng(myEccKeys);

//This would throw an exception if PeerRawPublicKey was invalid.
var PeerPublicKey = ECDiffieHellmanCngPublicKey.FromByteArray(PeerRawPublicKey.ToArray(), CngKeyBlobFormat.EccPublicBlob);

//How is keyMaterial generated?
byte[] keyMaterial = ecdh.DeriveKeyFromHash(PeerPublicKey, HashAlgorithmName.SHA256, null, null);

【问题讨论】:

    标签: c# .net cryptography system.security


    【解决方案1】:

    它只计算Hash(prepend || Z || append),其中 Z 是共享密钥的 X 坐标。

    对于 prepend 和 append 中的每一个,null 值都被视为空。

    The corefx non-Windows implementation

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 1970-01-01
      • 2013-06-02
      • 2020-11-21
      • 2015-02-26
      • 2017-06-29
      • 2013-06-13
      • 2021-10-25
      相关资源
      最近更新 更多