openssl: шифрование ключей с использованием ключей publi c на основе libsodium - PullRequest
0 голосов
/ 17 апреля 2020

Если у меня есть ключ publi c на основе libsodium , как я могу использовать его с инструментом OpenSSL для шифрования текста и сделать так, чтобы другая конечная точка на основе натрия могла его дешифровать?

То есть, используйте в команде openssl (возможно, pkeyutl) те же шифры и параметры, что и в libsodium.

В качестве основы для этого у меня есть C# пример:

using System;

public class Program
{
    public static void Main()
    {
        var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret");
        var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU=");
        var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey);

        Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox));
    }
}

Должен работать. NET Core 3.1 с пакетом Sodium.Core . Я запустил его в режиме онлайн с this do tnet fiddle (поэтому никаких дополнительных инструментов для проверки этого кода вообще не требуется).

Теперь в bash shell , если я попробую что-то вроде этого:

secret="text to be encrypted"
pubkey="2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="

echo "-----BEGIN PUBLIC KEY-----
${pubkey}
-----END PUBLIC KEY-----" > pkey.tmp

echo "${secret}" | openssl pkeyutl -encrypt -pubin -inkey pkey.tmp | base64

OpenSSL завершится неудачно с этим:

25769803792:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:crypto/asn1/asn1_lib.c:91:
25769803792:error:0D068066:asn1 encoding routines:asn1_check_tlen:bad object header:crypto/asn1/tasn_dec.c:1118:
25769803792:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:crypto/asn1/tasn_dec.c:290:Type=X509_PUBKEY
25769803792:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:crypto/pem/pem_oth.c:33:

Если я удалю окружающие строки во временном файле ключа publi c, я получу затем:

pkeyutl: Error initializing context
25769803792:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: PUBLIC KEY

Для того, что я смог найти, OpenSSL поддерживает шифры и алгоритмы, используемые libsodium ; Я думаю, что просто не знаю, как эффективно сказать OpenSSL, что они ...

...