繁体   English   中英

System.Security.Cryptography的DeriveKeyFromHash()实际做什么?

[英]What does System.Security.Cryptography's DeriveKeyFromHash() actually do?

我正在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);

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

对于每个前置和追加,空值都被视为空。

corefx非Windows实现

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM