GNU/Linux >> Znalost Linux >  >> Linux

Operace Elliptic Curve z příkazového řádku

OpenSSL® poskytuje následující nástroje příkazového řádku pro práci s klávesami vhodnými pro kryptografické algoritmy Elliptic Curve (EC):

  • openssl ecparam
  • openssl ec

V současné době OpenSSL podporuje následující EC algoritmy:

  • Elliptic Curve Diffie Hellman (ECDH) pro klíčovou dohodu
  • Elliptic Curve Digital Signature Algorithm (ECDSA) pro podepisování a ověřování

ecparams a ec nepodporují x25519 , ed25519 a ed448 křivky. Podívejte se na genpkey dílčí příkaz pro informace o těchto křivkách.

Formáty souborů soukromého klíče EC

OpenSSL ve výchozím nastavení používá k ukládání soukromých klíčů EC soubory Privacy Enhanced Mail (PEM). Tyto soubory obsahují data kódovaná base-64 a používají .pem rozšíření. Následující příklad ukazuje soubor soukromého klíče ve formátu PEM.

-----BEGIN EC PRIVATE KEY-----
MIIBIAIBAQQYd8yhaE899FaH3sw8aD4F/vtpMVBLfVqmoIHKMIHHAgEBMCQGByqG
SM49AQECGQD////////////////////+//////////8wSwQY////////////////
/////v/////////8BBgiEj3COVoFyqdCPa7MyUdgp9RiJWvVaRYDFQDEaWhENd6z
eMS2XKlZHipXYwWaLgQxBH0pd4EAxlodoXg3FliNziuLSu6OIo8YljipDyJjczcz
S0nctmptyPmXisp2SKlDsAIZAP///////////////3pi0DHIP0KU9kDsEwIBAaE0
AzIABBsl8ZSGJqcUpVoP8zekF92DGqDBMERcHhCXmgPXchP+ljybXbzYKINgxbp5
0g9/pw==
-----END EC PRIVATE KEY-----

Následující příklad ukazuje zašifrovaný soubor soukromého klíče ve formátu PEM.

-----BEGIN EC PRIVATE KEY-----<br/>
Proc-Type: 4,ENCRYPTED<br/>
DEK-Info: DES-EDE3-CBC,258248872DB25390<br/>

JIzhns0nRb+pj6RONAijJli8Rhu2bIrw8D+ruHEWL1IEH6Q5tvzqAI2PDYXbSzCn
24JPWx9khmTu6ijerANNYYk0p2Pjxr12MAYpqgtXbRrXLF4AIomzYWq16BH7Y63o
zvqWMBJO6tQ5RHPLM2FmweyPB/XSL7KvLTe+g6pz/W9wf52CyQ/VeK+yBXqEi7QF
0f9EKRlePRLAUcQPD4nkckcywX6Nz+TW/SOKt38YytM9MyQsAfcxu7u0nl/dLylk
n57qUm3nk0z0moYJbfLx59eP0/go8VjeP2fRKkgz1DOM7VkmtPrC7vnyRpKsnP2S
6n6uacerkNXTmUcz7mTCGGfrsBeACJeX1gwinDZVwkzDxNKhLXOlFFAMWE+SeiFp
kDny2v3D8sU=
-----END EC PRIVATE KEY-----

Následující příklad ukazuje soubor soukromého klíče, který používá PublicKey Cryptography Standard 8 (PKCS8) ve formátu PEM.

-----BEGIN PRIVATE KEY-----
MIIBMAIBADCB0wYHKoZIzj0CATCBxwIBATAkBgcqhkjOPQEBAhkA////////////
/////////v//////////MEsEGP////////////////////7//////////AQYIhI9
wjlaBcqnQj2uzMlHYKfUYiVr1WkWAxUAxGloRDXes3jEtlypWR4qV2MFmi4EMQR9
KXeBAMZaHaF4NxZYjc4ri0rujiKPGJY4qQ8iY3M3M0tJ3LZqbcj5l4rKdkipQ7AC
GQD///////////////96YtAxyD9ClPZA7BMCAQEEVTBTAgEBBBiKtwssqrxHY/gu
KDD4QgmyLDKaqBv2wEWhNAMyAAT5j6o+ojeB6jaFAfx4rtGf5hYbT1N6NnlAWiP1
+bEWtTJiEVqnpeZN0m0SLybIGZY=``
-----END PRIVATE KEY-----

Následující příklad ukazuje zašifrovaný soubor soukromého klíče PKCS8 ve formátu PEM:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIBWTAbBgkqhkiG9w0BBQMwDgQIGIcvnv17Q8oCAggABIIBOK+i1pk7em94F0Bn
+yKxU5p7e2+cnnW/8b2mjvga0Uj8JVxRHi5eR2/u+3fjHQItq0df+qzyVC0TTCPz
YZVrgHO9hPilgbGQKQQSpy9bpbGGiZ7I+aFpriEaJzugHUi8XTXY6XtnxgHAqTOX
nma2HHoGRic2wNgIGKQ+B1pULy2kFDMvQ/AwvYS13uH2Trfja9M9wRqYjM2MS0Ky
ii03OsNhJjZQcPmy2ALciR+umG4IQ7qszfrCA7L95F3qVXa7DgAPDZyUSdF3ucSh
IlrEvaP7FeLfJ1/ilUaXK6XC9EDYPDWMErUQJZJAywczQMqjY4/pdhb8Y+TpbN/r
q1I5j+JbRwfvvJV7CAHv1EEjvWiWvjHamlb7iqh3gneOYPbvSfjuaOyVd5YhwQ7P
nGOah+eEf9uyDSZabg==``
-----END ENCRYPTED PRIVATE KEY-----

Soubory soukromých klíčů PKCS8 podporují různé typy soukromých klíčů, kromě klíčů EC. Soubory můžete převést tak, aby používaly různé typy soukromých klíčů, a nastavit je jako šifrované nebo nešifrované .

Chcete-li převést soubor PKCS8 na tradiční šifrovaný soubor klíče EC, použijte následující příkaz:

openssl ec -aes-128-cbc -in p8file.pem -out tradfile.pem

Nahraďte argument -aes-128-cbc s jakýmkoli jiným platným názvem šifry OpenSSL. (Seznam platných názvů šifer naleznete v dokumentaci OpenSSL.)

Pomocí následujícího příkazu převeďte soubor PKCS8 na tradiční nezašifrovaný soubor klíče EC:

openssl ec -in p8file.pem -out tradfile.pem

Pomocí následujícího příkazu převeďte soubor klíče EC do zašifrovaného formátu PKCS8:

openssl pkcs8 -topk8 -in tradfile.pem -out p8file.pem

Pomocí následujícího příkazu převeďte soubor klíče EC do nezašifrovaného formátu PKCS8:

openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem

Poznámka :Soubory soukromého klíče EC nejsou ve výchozím nastavení šifrovány. Musíte explicitně nastavit soubor jako šifrovaný a zadat šifrovací algoritmus. Soubory PKCS8 jsou ve výchozím nastavení šifrovány. Použijte -nocrypt možnost nastavit soubor na nešifrovaný.

Soubor PEM jsou data DER kódovaná pomocí základních 64 pravidel kódování se záhlavím a zápatím. Soubory PEM jsou čitelné pro člověka, takže jejich použití je pohodlnější. Všechny výše uvedené soubory však můžete uložit ve formátu DER. Formát DER je binární formát a na rozdíl od souboru PEM není čitelný pro člověka.

Většina openssl příkazy mají volby -inform DER a -outform DER .-inform DER určuje, že vstupní soubor je DER a -outform DER určuje, že výstupní soubor je DER.

Pomocí následujícího příkazu převeďte formát PKCS8 na tradiční šifrovaný klíč EC ve formátu DER.

openssl ec -in p8file.pem -outform DER -out tradfile.der

Tradiční soubor soukromého klíče EC nelze zašifrovat ve formátu DER. Pokud se o to pokusíte, příkaz tiše ignoruje argument. Soubory PKS8 však můžete šifrovat ve formátu DER.

Pomocí následujícího příkazu převeďte soubor tradičního klíče EC na šifrovaný PKCS8 ve formátu DER:

openssl pkcs8 -topk8 -in tradfile.pem -outform DER -out p8file.der

Formáty souborů veřejného klíče EC

Formát PEM podporuje několik typů veřejných klíčů v OpenSSL. Následující soubor ukazuje veřejné klíče EC ve formátu PEM.

-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQMDMgAE+Y+qPqI3geo2hQH8eK7Rn+YWG09T
ejZ5QFoj9fmxFrUyYhFap6XmTdJtEi8myBmW
-----END PUBLIC KEY-----

Pomocí následujícího příkazu vytvořte soubor veřejného klíče ze souboru soukromého klíče ve formátu PEM. Všimněte si, že není možné vytvořit soubor soukromého klíče ze souboru veřejného klíče.

openssl ec -in ecprivkey.pem -pubout -out ecpubkey.pem

Pomocí následujícího příkazu vytvořte soubor veřejného klíče ze souboru soukromého klíče ve formátu DER:

openssl ec -in ecprivkey.pem -pubout -outform DER -out ecpubkey.der

Generování klíčů a parametrů EC

Soubor EC parametrů obsahuje všechny informace potřebné k definování anelliptické křivky pro kryptografické operace. OpenSSL používá ECDH a ECDSAalgoritmy. Pomocí následujícího příkazu získáte seznam vestavěných křivek:

openssl ecparam -list_curves

Pomocí následujícího příkazu vygenerujte soubor EC parametrů křivky secp256k1 :

openssl ecparam -name secp256k1 -out secp256k1.pem

Nahraďte secp256k1 s jakýmkoli jiným názvem získaným z openssl ecparam -list_curves příkaz.

Klíče můžete vygenerovat pomocí ecparam buď pomocí již existujícího souboru parametrů nebo pomocí názvu křivky. Pomocí následujícího příkazu vygenerujte pár soukromých/veřejných klíčů ze souboru parametrů:

openssl ecparam -in secp256k1.pem -genkey -noout -out secp256k1-key.pem

Pomocí následujícího příkazu vygenerujte pár soukromých/veřejných klíčů z názvu křivky:

openssl ecparam -name secp256k1 -genkey -noout -out secp256k1-key.pem

Soubor klíčů obsahuje informace o parametrech použitých ke generování vloženého klíče. OpenSSL ukládá název křivky do souboru parametrů nebo souboru klíče. Ve výchozím nastavení explicitně neukládá úplnou sadu parametrů spojených s názvem. Pomocí následujícího příkazu potvrďte název křivky v souboru parametrů:

openssl ecparam -in secp256k1.pem -text -noout

Příklad výstupu:

ASN1 OID: secp256k1

Pomocí následujícího příkazu vypíšete podrobnosti o parametrech ze souboru parametrů:

openssl ecparam -in secp256k1.pem -text -param_enc explicit -noout

Pomocí následujícího příkazu vypíšete podrobnosti o parametrech z názvu křivky a odpovídajícím způsobem dosadíte název křivky:

openssl ecparam -name secp256k1 -text -param_enc explicit -noout

Příklad výstupu:

Field Type: prime-field
Prime:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:fe:ff:
    ff:fc:2f
A:    0
B:    7 (0x7)
Generator (uncompressed):
    04:79:be:66:7e:f9:dc:bb:ac:55:a0:62:95:ce:87:
    0b:07:02:9b:fc:db:2d:ce:28:d9:59:f2:81:5b:16:
    f8:17:98:48:3a:da:77:26:a3:c4:65:5d:a4:fb:fc:
    0e:11:08:a8:fd:17:b4:48:a6:85:54:19:9c:47:d0:
    8f:fb:10:d4:b8
Order:
    00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:fe:ba:ae:dc:e6:af:48:a0:3b:bf:d2:5e:8c:d0:
    36:41:41
Cofactor:  1 (0x1)

Můžete generovat soubory parametrů a soubory klíčů, které explicitně obsahují celou sadu parametrů namísto pouhého názvu křivky. To je důležité, když to některé cílové systémy nevědí detaily křivky. OpenSSL verze 1.0.2 přidala nové křivky, jako je brainpool512t1 . Starší verze OpenSSL, které používají soubor parametrů nebo klíčový soubor nakonfigurovaný pomocí brainpool512t1 výsledkem je následující chyba:

bash$ openssl ecparam -in brainpoolP512t1.pem -text -noout
unable to load elliptic curve parameters
140138321110720:error:1009E077:elliptic curve routines:EC_ASN1_PKPARAMETERS2GROUP:ec group new by name failure:ec_asn1.c:1035:
140138321110720:error:1009107F:elliptic curve routines:d2i_ECPKParameters:pkparameters2group failure:ec_asn1.c:1080:
140138321110720:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:

Chcete-li se tomuto problému vyhnout, použijte explicitní parametry, jak ukazuje následující příkaz s OpenSSL 1.0.2:

openssl ecparam -name brainpoolP512t1 -out brainpoolP512t1.pem -param_enc explicit

Příkaz poskytne delší soubor parametrů se všemi parametry.

-----BEGIN EC PARAMETERS-----
MIIBogIBATBMBgcqhkjOPQEBAkEAqt2duNvpxIs/1OauM8n8B8swjbOzydIO1mOc
ynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2CxoUoqmBWWDpI8zCBhARAqt2duNvp
xIs/1OauM8n8B8swjbOzydIO1mOcynAzCHF9TZsAm8ZoQq7NoSrmo4DmKIH/Ly2C
xoUoqmBWWDpI8ARAfLu8+UQc+rduGJDkaITq4yH3DAvLSYFSeJdQS+w+NqYrzfoj
BJdlQPZFAIXy2uFFwiVTtGV2NokYDqJXGGdCPgSBgQRkDs5cEniHF7nBugbLwqb+
uoWEJFjFbd6dsXWNOcAxPYK6UXNc2z6kmap3p9aUOmT3o/Jf4m8GtRuqJpb6kDXa
W1NL1ZX1rw+iyJI3bISs4btOMBm3FjTAETEVnK4DzunZkyGEvu8ha9cd8trfhqYn
MG7P+W27i6zhmLYeAPizMgJBAKrdnbjb6cSLP9TmrjPJ/AfLMI2zs8nSDtZjnMpw
MwhwVT5cQUypJhlBhmEZf6wQRx2x04EIXdrdtYeWgpypAGkCAQE=
-----END EC PARAMETERS-----

Starší verze OpenSSL umí zpracovat soubor parametrů. Použijte následující příkaz v OpenSSL verze 1.0.1:

openssl ecparam -in brainpoolP512t1.pem -text -noout

OpenSSL verze 1.0.1. zobrazí parametry, i když křivku nezná.

Pomocí následujícího příkazu vygenerujte soubor klíče s explicitními parametry:

openssl ecparam -name brainpoolP512t1 -genkey -noout -out brainpoolP512t1-key.pem -param_enc explicit

Starší verze OpenSSL mohou zpracovat soubor klíče, který získáte.

Poznámka :Po změně parametrů na explicitní parametry nevracejte změny. Neexistuje žádný nástroj, který by zjistil, které explicitní parametry odpovídají křivce.

Odkazy

  • Eliptická křivková kryptografie
  • Eliptická křivka Diffie Hellman
  • Nástroje příkazového řádku

Pomocí karty Zpětná vazba můžete přidat komentáře nebo položit otázky. Můžete s námi také zahájit konverzaci.


Linux
  1. Jednoduchá kalkulačka příkazového řádku?

  2. Převést soukromý klíč Openssh na soukromý klíč Ssh2?

  3. Linux – Jak rozumíte operacím synchronizačních příkazů v Linuxu?

  1. Historie příkazového řádku v Linuxu

  2. Jak vytvořit VPN

  3. Textové editory příkazového řádku v Linuxu

  1. Poslouchejte rádio na linuxovém terminálu

  2. Provádění operací atomového zápisu v souboru v Bash?

  3. Liché výsledky operací base64