GNU/Linux >> Belajar Linux >  >> Linux

Operasi Kurva Elips baris perintah

OpenSSL® menyediakan alat baris perintah berikut untuk bekerja dengan kunci yang cocok untuk algoritma Kriptografi Elliptic Curve (EC):

  • openssl ecparam
  • openssl ec

Saat ini, OpenSSL mendukung algoritme EC berikut:

  • Elliptic Curve Diffie Hellman (ECDH) untuk kesepakatan utama
  • Algoritma Tanda Tangan Digital Kurva Elliptik (ECDSA) untuk menandatangani dan memverifikasi

ecparams dan ec tidak mendukung x25519 , ed25519 , dan ed448 kurva. Lihat genpkey subperintah untuk informasi tentang kurva tersebut.

Format file kunci pribadi EC

OpenSSL menggunakan file Privacy Enhanced Mail (PEM) untuk menyimpan kunci pribadi EC secara default. File-file ini berisi data encode base-64 dan menggunakan .pem perpanjangan. Contoh berikut menunjukkan file kunci pribadi dalam format PEM.

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

Contoh berikut menunjukkan file kunci pribadi terenkripsi dalam format 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-----

Contoh berikut menunjukkan file kunci pribadi yang menggunakan PublicKey Cryptography Standard 8 (PKCS8) dalam format PEM.

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

Contoh berikut menunjukkan file kunci pribadi PKCS8 terenkripsi dalam format 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-----

File kunci pribadi PKCS8 mendukung jenis kunci pribadi yang berbeda, selain dari kunci EC. Anda dapat mengonversi file untuk menggunakan jenis kunci pribadi yang berbeda dan menyetelnya sebagai terenkripsi atau tidak terenkripsi .

Gunakan perintah berikut untuk mengonversi file PKCS8 ke file kunci EC terenkripsi tradisional:

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

Ganti argumen -aes-128-cbc dengan nama sandi OpenSSL lain yang valid. (Lihat dokumentasi OpenSSL untuk daftar nama sandi yang valid.)

Gunakan perintah berikut untuk mengonversi file PKCS8 menjadi file kunci EC tradisional yang tidak terenkripsi:

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

Gunakan perintah berikut untuk mengonversi file kunci EC ke format PKCS8 terenkripsi:

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

Gunakan perintah berikut untuk mengonversi file kunci EC ke format PKCS8 yang tidak terenkripsi:

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

Catatan :File kunci pribadi EC tidak dienkripsi secara default. Anda harus secara eksplisit mengatur file untuk dienkripsi dan menentukan algoritma cipher. File PKCS8 dienkripsi secara default. Gunakan -nocrypt opsi untuk menyetel file ke tidak terenkripsi.

File PEM adalah data DER yang dikodekan dengan menggunakan aturan pengkodean 64 dasar, dengan header dan footer. File PEM dapat dibaca manusia, sehingga lebih nyaman digunakan. Namun, Anda dapat menyimpan semua file yang ditampilkan di atas dalam format DER. Format DER adalah format biner, dan tidak seperti file PEM, file ini tidak dapat dibaca manusia.

Sebagian besar openssl perintah memiliki opsi -inform DER dan -outform DER .-inform DER menentukan bahwa file input adalah DER, dan -outform DER menetapkan bahwa file keluaran adalah DER.

Gunakan perintah berikut untuk mengonversi format PKCS8 ke kunci EC terenkripsi tradisional dalam format DER.

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

Anda tidak dapat mengenkripsi file kunci pribadi EC tradisional dalam format DER. Jika Anda mencoba melakukannya, perintah diam-diam mengabaikan argumen. Namun, Anda dapat mengenkripsi file PKS8 dalam format DER.

Gunakan perintah berikut untuk mengonversi file kunci EC tradisional ke PKCS8 terenkripsi dalam format DER:

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

Format file kunci publik EC

Format PEM mendukung beberapa jenis kunci publik di OpenSSL. File berikut menunjukkan kunci publik EC dalam format PEM.

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

Gunakan perintah berikut untuk membuat file kunci publik dari file kunci pribadi dalam format PEM. Perhatikan bahwa tidak mungkin membuat file kunci pribadi dari file kunci publik.

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

Gunakan perintah berikut untuk membuat file kunci publik dari file kunci pribadi dalam format DER:

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

Membuat kunci dan parameter EC

File parameter EC berisi semua informasi yang diperlukan untuk menentukan kurva anelips untuk operasi kriptografi. OpenSSL menggunakan algoritma ECDH dan ECDSA. Gunakan perintah berikut untuk mendapatkan daftar kurva bawaan:

openssl ecparam -list_curves

Gunakan perintah berikut untuk menghasilkan file parameter EC dari kurva secp256k1 :

openssl ecparam -name secp256k1 -out secp256k1.pem

Ganti secp256k1 dengan nama lain yang diperoleh dari openssl ecparam -list_curves perintah.

Anda dapat membuat kunci dengan menggunakan ecparam perintah, baik dengan menggunakan file parameter yang sudah ada sebelumnya atau dengan menggunakan nama kurva. Gunakan perintah berikut untuk menghasilkan pasangan kunci privat/publik dari file parameter:

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

Gunakan perintah berikut untuk menghasilkan pasangan kunci privat/publik dari nama kurva:

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

File kunci memiliki informasi parameter yang digunakan untuk menghasilkan keyembedded. OpenSSL menyimpan nama kurva dalam file parameter atau file kunci. Itu tidak secara eksplisit menyimpan set lengkap parameter yang terkait dengan nama secara default. Gunakan perintah berikut untuk mengkonfirmasi nama kurva dalam file parameter:

openssl ecparam -in secp256k1.pem -text -noout

Contoh keluaran:

ASN1 OID: secp256k1

Gunakan perintah berikut untuk membuat daftar detail parameter dari file parameter:

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

Gunakan perintah berikut untuk membuat daftar detail parameter dari nama kurva, dengan mengganti nama kurva yang sesuai:

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

Contoh keluaran:

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)

Anda dapat membuat file parameter dan file kunci yang secara eksplisit menyertakan set parameter lengkap, bukan hanya nama kurva. Ini penting ketika beberapa sistem target tidak tahu rincian kurva. OpenSSL version1.0.2 menambahkan kurva baru, seperti brainpool512t1 . Versi OpenSSL sebelumnya yang menggunakan file parameter atau file kunci yang dikonfigurasi dengan brainpool512t1 mengakibatkan kesalahan berikut:

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:

Gunakan parameter eksplisit untuk menghindari masalah ini, seperti yang ditunjukkan pada perintah berikut dengan OpenSSL 1.0.2:

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

Perintah menghasilkan file parameter yang lebih panjang dengan semua parameter.

-----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-----

Versi OpenSSL sebelumnya dapat memproses file parameter. Gunakan perintah berikut di OpenSSL versi 1.0.1:

openssl ecparam -in brainpoolP512t1.pem -text -noout

OpenSSL versi 1.0.1. menampilkan parameter meskipun tidak mengetahui kurvanya.

Gunakan perintah berikut untuk menghasilkan file kunci dengan parameter eksplisit:

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

Versi OpenSSL sebelumnya dapat memproses file kunci yang Anda peroleh.

Catatan :Setelah parameter berubah menjadi parameter eksplisit, jangan kembalikan perubahan. Tidak ada utilitas untuk menemukan parameter eksplisit mana yang sesuai dengan kurva.

Referensi

  • Kriptografi Kurva Elips
  • Kurva Elips Diffie Hellman
  • Utilitas Baris Perintah

Gunakan tab Umpan Balik untuk memberikan komentar atau mengajukan pertanyaan. Anda juga dapat memulai percakapan dengan kami.


Linux
  1. Kalkulator Baris Perintah Sederhana?

  2. Berbagi Kunci Pribadi di Seluruh Mesin?

  3. Linux – Memahami Operasi Perintah Sinkronisasi Di Linux?

  1. Dengarkan radio di terminal Linux

  2. Sejarah baris perintah di Linux

  3. Cara membuat VPN

  1. Melakukan Operasi Tulis Atom Dalam File Di Bash?

  2. Ubah Kunci Pribadi Openssh Menjadi Kunci Pribadi Ssh2?

  3. Hasil ganjil pada operasi base64