簡體   English   中英

如何在.net Framework 4.7.1中使用ECDSA和ECDiffieHellman實例簽署消息?

[英]How to sign a message using ECDSA with an ECDiffieHellman instance in .net framework 4.7.1?

假定ECDiffieHellman實例也可以用於簽名。

如果我有有效的ECDiffieHellman(ECDH)實例,如何使用.net框架中的ECDH實例使用ECDSA創建簽名?

我認為可以通過以下方式驗證簽名:

        ECDiffieHellman ecdh;   //Already have this instance
        var verifyKey = CngKey.Import(ecdh.PublicKey.ToByteArray(), CngKeyBlobFormat.EccPublicBlob);
        var ecDsa = new ECDsaCng(verifyKey);
        var dataBytes = ASCIIEncoding.ASCII.GetBytes("Hello!");
        var verifyResult = ecDsa.VerifyData(dataBytes, signatureBytesToCheck, HashAlgorithmName.SHA256);

我嘗試對CngKey(用於簽名)遵循類似的模型。 我在創建帶有私鑰字節的CngKey時遇到麻煩。

        ECDiffieHellman ecdh;   //Already have this instance
        var ecdhParams = ecdhCasd.ExportParameters(true);
        var ecdhPrivateKeyBytes = ecdhParams.D;
        var signingKey = CngKey.Import(ecdhPrivateKeyBytes, CngKeyBlobFormat.EccPrivateBlob);

我嘗試使用GenericPrivateBlob,EccFullPrivateBlob進行格式化。 仍然沒有任何效果。

我在正確的道路上嗎? 如果是這樣,我在做什么錯?

我比我想像的要近得多。 我終於發現我只需要使用Create方法而不是Import方法,如下所示:

    ECDiffieHellman ecdh;   //Already have this instance
    var ecdhParams = ecdhCasd.ExportParameters(true);
    var signer = ECDsa.Create(ecFullParams);
    var signedBytes = ecDsa.SignData(dataBytes, HashAlgorithmName.SHA256);

如果我只有公共密鑰可以驗證:

    ECDiffieHellmanPublicKey ecdhPk; //Compute this with public key bytes
    var ecPkParams = ecdhPk.ExportParameters();
    var verifier = ECDsa.Create(ecPkParams);
    var verifyResult = verifier.VerifyData(bytesToBeVerified, signatureBytesToCheck, HashAlgorithmName.SHA256);

除了導出密鑰屬性,您還應該能夠使用不可導出的密鑰:

ECDiffieHellmanCng ecdhChg = ecdh as ECDiffieHellmanCng;

// Export is required.
if (ecdhCng == null)
    return null;

return new ECDsa(ecdhCng.Key);

這是因為在Windows CNG上,僅允許使用ECDSA鍵進行ECDSA; 但是“ ECDH”鍵可以同時執行ECDSA和ECDH。 至少對於軟件私鑰是正確的。

.NET開始允許通過.NET 4.6.2中的ECDH密鑰創建ECDsaCng,因此,如果您有可用的ECC ExportParameters方法,則該方法已經可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM