首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.NET的ECDH (secp256r1) +NISTSP800-56A级联KDF在C#中真的不可能吗?

使用.NET的ECDH (secp256r1) +NISTSP800-56A级联KDF在C#中真的不可能吗?
EN

Stack Overflow用户
提问于 2019-10-10 03:30:23
回答 1查看 274关注 0票数 1

我知道这里有类似的问题,但我仍然没有找到明确的答案。有没有可能在不使用bouncy castle的情况下,使用给定的连接函数通过.NET库派生会话密钥?似乎有一些差异,因为我在两端都没有得到相同的会话密钥(第二部分:嵌入式实现)。

这就是我目前正在尝试的方式(TempPubKeySCC是我收到的原始未压缩格式的公钥,ECDHtempPublicKey将被发送给另一方):

代码语言:javascript
复制
        byte[] blobMagic = new byte[4] { 0x45, 0x43, 0x4B, 0x31 }; 
        byte[] eccBlob = new byte[8 + 64];
        byte[] lengthData = new byte[4] { 0x20, 0x0, 0x0, 0x0 };

        Buffer.BlockCopy(blobMagic, 0, eccBlob, 0, 4);
        Buffer.BlockCopy(lengthData, 0, eccBlob, 4, 4);
        Buffer.BlockCopy(TempPubKeySCC, 1, eccBlob, 8, 64);
        CngKey PubKeyBySCC = CngKey.Import(eccBlob, CngKeyBlobFormat.EccPublicBlob);

        byte[] SharedSecret;
        byte[] ECDHtempPublicKey = new byte[65];

        using (ECDiffieHellmanCng TempECDH = new ECDiffieHellmanCng(ECCurve.NamedCurves.nistP256)) 
        {
            byte[] secpre = new byte[4] { 0x00, 0x00, 0x00, 0x01 };
            byte[] secpost = new byte[3] { 0x01, 0x55, 0x56 };

            TempECDH.HashAlgorithm = CngAlgorithm.Sha256;
            TempECDH.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
            TempECDH.SecretPrepend = secpre;
            TempECDH.SecretAppend = secpost;

            ECDHtempPublicKey[0] = 0x04;
            Buffer.BlockCopy(TempECDH.PublicKey.ToByteArray(), 8, ECDHtempPublicKey, 1, 64);

            SharedSecret = TempECDH.DeriveKeyMaterial(PubKeyBySCC);
        }

所以我的问题是?是不是出了什么问题,或者我需要花点时间在bouncycastle上?需要使用secp256r1和连接的KDF (NISTSP800-56A)。

非常感谢=)

关于Matze

EN

回答 1

Stack Overflow用户

发布于 2019-10-12 20:58:22

顺便说一下:我的测试环境只有一个问题……代码正在做它应该做的事情,我用bouncycastle重新检查了一下。:)

对于那些也在寻找这样的东西的人来说..

关于Matze

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58311046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档