Как реализовать Diffie Hellman в .netcore / Linux - PullRequest
2 голосов
/ 01 ноября 2019

ECDiffieHellmanCng -> Платформа не поддерживается

ECDiffieHellmanOpenSsl -> PublicKey.ToByteArray() -> Платформа не поддерживается

Здесь в основном тот же (без ответа) вопрос от кого-то другого, 7 месяцевназад Как мне сериализовать и десериализовать открытый ключ для ECDiffieHellmanOpenSsl в Linux?

Я бы хотел избежать использования сторонних программ, если есть способ приручить предоставленные классы.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

ECDiffieHellmanCng не поддерживается в Linux.

Linux использует ECDiffieHellmanOpenSsl, но обратите внимание

Используемые типы не переводятся между платформами

См. https://github.com/dotnet/corefx/blob/1841042b99062de13dc80098cede9413be569238/Documentation/architecture/cross-platform-cryptography.md

Вы можете найти несколько примеров того, как это используется в наборе тестов, например

[Fact]
public void VerifyDuplicateKey_ValidHandle()
{
    using (var first = new ECDiffieHellmanOpenSsl())
    using (SafeEvpPKeyHandle firstHandle = first.DuplicateKeyHandle())
    using (ECDiffieHellman second = new ECDiffieHellmanOpenSsl(firstHandle))
    using (ECDiffieHellmanPublicKey firstPublic = first.PublicKey)
    using (ECDiffieHellmanPublicKey secondPublic = second.PublicKey)
    {
        byte[] firstSecond = first.DeriveKeyFromHash(secondPublic, HashAlgorithmName.SHA256);
        byte[] secondFirst = second.DeriveKeyFromHash(firstPublic, HashAlgorithmName.SHA256);
        byte[] firstFirst = first.DeriveKeyFromHash(firstPublic, HashAlgorithmName.SHA256);

        Assert.Equal(firstSecond, secondFirst);
        Assert.Equal(firstFirst, firstSecond);
    }
}

https://github.com/dotnet/corefx/blob/a10890f4ffe0fadf090c922578ba0e606ebdd16c/src/System.Security.Cryptography.OpenSsl/tests/EcDiffieHellmanOpenSslTests.cs

0 голосов
/ 04 ноября 2019

С .NET Core 3.0 вы можете сериализовать значение с помощью key.ExportSubjectPublickeyInfo() (и повторно сгенерировать его с помощью key.ImportSubjectPublicKeyInfo(bytes, out _).

. Если вы остаетесь на 2.1 (LTS), вы можете использовать ExportParameters / ImportParameters с пользовательскимлогика сериализации.

...