ECDH (secp256r1) + NIST SP 800-56A Конкатенация KDF с использованием .NET действительно невозможна в C #? - PullRequest
1 голос
/ 09 октября 2019

Я знаю, что здесь есть похожие вопросы, но все же я не нашел четкого ответа. Можно ли получить ключ сеанса с помощью библиотеки .NET с заданной функцией конкатенации без использования надувного замка? Кажется, что есть некоторые различия, поскольку я не получаю один и тот же ключ сеанса с обеих сторон (вторая часть: встроенная реализация).

Вот как я сейчас пытаюсь (TempPubKeySCC - это pubkey в необработанном несжатом формате, который я получаю, а ECDHtempPublicKey будет отправлен другой стороне):

        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);
        }

Итак, мой вопрос? Что-то не так, или мне нужно потратить некоторое время на бодрящий замок? secp256r1 и сцепленный KDF (NIST SP 800-56A) необходимо использовать.

Большое спасибо =)

С уважением, Matze

1 Ответ

0 голосов
/ 12 октября 2019

Кстати: у меня была проблема только с моей тестовой средой ... Код точно делает то, что должен, и я перепроверил с bouncycastle. :)

Для тех, кто тоже ищет что-то вроде этого ..

С уважением, Matze

...