Page MenuHome GnuPG

gpgsm: support for importing x25519 and ed25519 private keys from .p12 files
Open, NormalPublic

Description

Steps to Reproduce:

$ gpgsm --version
gpgsm (GnuPG) 2.4.5
libgcrypt 1.10.3
libksba 1.6.6
$ openssl pkcs12 -info -nokeys -noout -in credential_private_encrypted_Ida_E.p12
Enter Import Password: (password)
MAC: sha1, Iteration 2048
MAC length: 20, salt length: 8
PKCS7 Encrypted data: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Certificate bag
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048

I am testing encryption for different types of keys and noticed that gpgsm/Kleopatra supports CMS encryption with X25519 keys. Certificate import works. However, when I want to import the private key (.p12), I get an error:

$ gpgsm --import -v --batch credential_private_encrypted_Ida_E.p12
gpgsm: enabled compatibility flags:
gpgsm: processing bag.encryptedData
gpgsm: 1656 bytes of 3DES encrypted text
gpgsm: processing certBag
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: brak działającego dirmngr - uruchamianie „C:\\Program Files (x86)\\Gpg4win\\..\\GnuPG\\bin\\dirmngr.exe”
gpgsm: oczekiwanie na uruchomienie procesu dirmngr... (5s)
gpgsm: ustanowiono połączenie z procesem dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: issuer certificate {BA8A10CFCE8D1426B2A0B52059C9A884D4770F022DEB1E785D17D482B3A63072} not found using authorityKeyIdentifier
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: issuer certificate (#/CN=TEST CMS/SMIME root CA) not found
gpgsm: certificate imported
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: issuer certificate {BA8A10CFCE8D1426B2A0B52059C9A884D4770F022DEB1E785D17D482B3A63072} not found using authorityKeyIdentifier
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: skipping bag.attribute_set
gpgsm: processing certBag
gpgsm: certificate imported
gpgsm: processing bag data
gpgsm: processing shrouded_key_bag
gpgsm: 56 bytes of 3DES encrypted text
gpgsm: DBG: key format OID: 2b656e
gpgsm: parse_shrouded_key_bag(shrouded_key_bag.decrypted-text): lvl=2 (tlv_expect_object_id): Sukces - Nie zaimplementowane
gpgsm: parse_bag_data(data.oid): lvl=12 (tlv_expect_octet_string): Sukces - Nie zaimplementowane
gpgsm: p12_parse(bag.data): @1896 lvl=12 tlv_expect_octet_string: Sukces - Nie zaimplementowane
gpgsm: error parsing or decrypting the PKCS#12 file
gpgsm: całkowita liczba przetworzonych: 2
gpgsm:          dołączono do zbioru: 2

Keys, certificates and dumps can be found in this repo.

I am mainly interested in x25519 and ed25519 that is such files:

private_key_material/private/credentials/
Ida x25519   :: credential_private_encrypted_Ida_E.p12
Ida ed25519  :: credential_private_encrypted_Ida_S.p12
Kilo x25519  :: credential_private_encrypted_Kilo_E.p12
Kilo ed25519 :: credential_private_encrypted_Kilo_S.p12

btw. do you plan to introduce support for X448 and ED448 keys in S/MIME?

The screenshot shows the private keys that I failed to import (thin font).

I also got an error when importing rsa4096 key encrypted with 3DES in a .p12 file. Danielle rsa4096. However, when I change encryption of the .p12 file to AES256, import works smoothly. This is the error:

$ gpgsm --import -v --batch credential_private_encrypted_Danielle.p12
gpgsm: enabled compatibility flags:
gpgsm: processing bag.encryptedData
gpgsm: 2176 bytes of 3DES encrypted text
gpgsm: processing certBag
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: brak działającego dirmngr - uruchamianie „C:\\Program Files (x86)\\Gpg4win\\..\\GnuPG\\bin\\dirmngr.exe”
gpgsm: oczekiwanie na uruchomienie procesu dirmngr... (5s)
gpgsm: ustanowiono połączenie z procesem dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: issuer certificate {BA8A10CFCE8D1426B2A0B52059C9A884D4770F022DEB1E785D17D482B3A63072} not found using authorityKeyIdentifier
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: issuer certificate (#/CN=TEST CMS/SMIME root CA) not found
gpgsm: certificate imported
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: issuer certificate {BA8A10CFCE8D1426B2A0B52059C9A884D4770F022DEB1E785D17D482B3A63072} not found using authorityKeyIdentifier
gpgsm: poszukiwanie wystawcy w pamięci podręcznej Dirmngr
gpgsm: liczba pasujących certyfikatów: 0
gpgsm: wyszukiwanie klucza tylko w pamięci podręcznej dirmngr nie powiodło się: Brak danych
gpgsm: skipping bag.attribute_set
gpgsm: processing certBag
gpgsm: certificate imported
gpgsm: processing bag data
gpgsm: processing shrouded_key_bag
gpgsm: 2376 bytes of 3DES encrypted text
gpgsm: decryption failed; trying charset 'ISO-8859-1'
gpgsm: decryption failed; trying charset 'ISO-8859-15'
gpgsm: decryption failed; trying charset 'ISO-8859-2'
gpgsm: decryption failed; trying charset 'ISO-8859-3'
gpgsm: decryption failed; trying charset 'ISO-8859-4'
gpgsm: decryption failed; trying charset 'ISO-8859-5'
gpgsm: decryption failed; trying charset 'ISO-8859-6'
gpgsm: decryption failed; trying charset 'ISO-8859-7'
gpgsm: decryption failed; trying charset 'ISO-8859-8'
gpgsm: decryption failed; trying charset 'ISO-8859-9'
gpgsm: decryption failed; trying charset 'KOI8-R'
gpgsm: decryption failed; trying charset 'IBM437'
gpgsm: decryption failed; trying charset 'IBM850'
gpgsm: decryption failed; trying charset 'BIG5'
gpgsm: parse_shrouded_key_bag(shrouded_key_bag.3desoraes-ciphertext): lvl=12 (tlv_expect_octet_string): Sukces - Odszyfrowywanie nie powiodło się
gpgsm: parse_bag_data(data.oid): lvl=12 (tlv_expect_octet_string): Sukces - Odszyfrowywanie nie powiodło się
gpgsm: p12_parse(bag.data): @4747 lvl=12 tlv_expect_octet_string: Sukces - Odszyfrowywanie nie powiodło się
gpgsm: error parsing or decrypting the PKCS#12 file
gpgsm: całkowita liczba przetworzonych: 2
gpgsm:          dołączono do zbioru: 2

similar:
https://dev.gnupg.org/T6940
https://dev.gnupg.org/T5464 (gpg)
https://dev.gnupg.org/T4896

Event Timeline

werner added a subscriber: werner.

Yes, I think we should support this. Also X448. Thanks for the report and the samples.

werner triaged this task as Normal priority.May 13 2024, 8:32 AM