Почему экспортированные ключи ECDSA выглядят одинаково?

Я использую этот фрагмент для просмотра закрытых и открытых ключей, сгенерированных DSA:

        byte[] publicKey, hash, signedHash;
        string strToSign = "Hello, world!";
        SHA512Managed shaComputer = new SHA512Managed();

        using (ECDsaCng dsaSigner = new ECDsaCng())
        {
            publicKey = dsaSigner.Key.Export(CngKeyBlobFormat.GenericPublicBlob);

            Console.WriteLine($"DSA public key: {TransformHash(publicKey)}");
            Console.WriteLine();

            byte[] privateKey = dsaSigner.Key.Export(CngKeyBlobFormat.GenericPrivateBlob);

            Console.WriteLine($"DSA private key: {TransformHash(privateKey)}");
            Console.WriteLine();
        }

Но я вижу, что эти ключи выглядят очень похоже, потому что закрытый ключ начинается с открытого ключа:

введите описание изображения здесь

Это нормально?

1 ответ

"потому что закрытый ключ начинается с открытого ключа

Я считаю, что это так. Это задокументировано для GenericPrivateBlob:

https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.cngkeyblobformat.genericprivateblob?redirectedfrom=MSDN&view=netframework-4.7.2

Общий закрытый ключ BLOB может содержать закрытый ключ любого типа и не обязательно должен содержать соответствующий открытый ключ. Тип ключа, который содержит BLOB-объект, может быть определен только путем проверки BLOB-объекта.

Акцент мой, однако в этом случае это выглядит так, как будто открытый ключ добавлен перед закрытым ключом.

Другие вопросы по тегам