OpenPGP Implementation Progress¶
OpenPGP RFCs¶
PGPy is focused on eventually reaching complete OpenPGP implementation, adhering to the base OpenPGP message format specification, and its extension RFCs.
RFC 4880¶
PGPy is currently focused on achieving RFC 4880 compliance for OpenPGP, which is the latest complete OpenPGP Message Format specification. It supersedes RFC 1991 and RFC 2440.
Progress | |
---|---|
Versioned Packets, v1 | |
✓ | Tag 18 Symmetrically Encrypted and Integrity Protected Data Packet |
Versioned Packets, v3 | |
✓ | Tag 1 Public-Key Encrypted Session Key Packets |
Tag 2 Signature Packet | |
✓ | Tag 4 One-Pass Signature Packet |
Tag 5 Secret-Key Packet | |
Tag 6 Public-Key Packet | |
Tag 7 Secret-Subkey Packet | |
Tag 14 Public-SubKey Packet | |
Versioned Packets, v4 | |
✓ | Tag 2 Signature Packet |
✓ | Tag 3 Symmetric-Key Encrypted Session Key Packet |
✓ | Tag 5 Secret-Key Packet |
✓ | Tag 6 Public-Key Packet |
✓ | Tag 7 Secret-Subkey Packet |
✓ | Tag 14 Public-SubKey Packet |
Unversioned Packets | |
✓ | Tag 8 Compressed Data Packet |
✓ | Tag 9 Symmetrically Encrypted Data Packet |
✓ | Tag 10 Marker Packet |
✓ | Tag 11 Literal Data Packet |
✓ | Tag 12 Trust Packet |
✓ | Tag 13 User ID Packet |
✓ | Tag 17 User Attribute Packet |
✓ | Tag 19 Modification Detection Code Packet |
Signature Subpackets | |
✓ | 0x02 Signature Creation Time |
✓ | 0x03 Signature Expiration Time |
✓ | 0x04 Exportable Certification |
✓ | 0x05 Trust Signature |
✓ | 0x06 Regular Expression |
✓ | 0x07 Revocable |
✓ | 0x09 Key Expiration Time |
✓ | 0x0B Preferred Symmetric Algorithms |
✓ | 0x0C Revocation Key |
✓ | 0x10 Issuer |
✓ | 0x14 Notation Data |
✓ | 0x15 Preferred Hash Algorithms |
✓ | 0x16 Preferred Compression Algorithms |
✓ | 0x17 Key Server Preferences |
✓ | 0x18 Preferred Key Server |
✓ | 0x19 Primary User ID |
✓ | 0x1A Policy URI |
✓ | 0x1B Key Flags |
✓ | 0x1C Signer’s User ID |
✓ | 0x1D Reason For Revocation |
✓ | 0x1E Features |
0x1F Signature Target | |
✓ | 0x20 Embedded Signature |
User Attribute Subpackets | |
✓ | 0x01 Image |
Storage Formats | |
✓ | ASCII ASCII armored PGP blocks |
✓ | binary binary PGP packets |
✓ | GPG GPG <= 2.0.x keyrings |
KBX GPG >= 2.1.x keyboxes | |
Other Sources | |
Retrieve Retrieve from HKP key servers | |
Upload Submit to HKP key servers | |
Key Types | |
✓ | RSA RSA |
✓ | DSA DSA |
✓ | ElGamal ElGamal |
Key Actions | |
✓ | Protect Protect private keys encryped with CAST5 |
✓ | Protect Protect private keys encryped with Blowfish |
✓ | Protect Protect private keys encryped with AES |
Protect Protect private keys encryped with Twofish | |
✓ | Unprotect Unprotect private keys encrypted with IDEA [1] |
✓ | Unprotect Unprotect private keys encrypted with Triple-DES |
✓ | Unprotect Unprotect private keys encrypted with CAST5 |
✓ | Unprotect Unprotect private keys encrypted with Blowfish |
✓ | Unprotect Unprotect private keys encrypted with AES |
Unprotect Unprotect private keys encrypted with Twofish | |
RSA Key Actions | |
✓ | Load Load Keys |
✓ | Generate Generate Keys |
✓ | Generate Generate Subkeys |
✓ | Sign Generate detached signatures of binary documents |
✓ | Sign Generate inline signatures of canonical documents |
✓ | Sign Sign messages |
✓ | Sign Sign keys |
✓ | Sign Certify User IDs |
✓ | Sign Certify User Attributes |
✓ | Sign Generate key binding signatures |
✓ | Sign Revoke certifications |
✓ | Sign Revoke keys |
✓ | Sign Revoke subkeys |
✓ | Sign Generate timestamp signatures |
✓ | Sign Generate standalone signatures |
Sign Generate third party confirmation signatures | |
✓ | Verify Verify detached signatures |
✓ | Verify Verify inline signatures of canonical documents |
✓ | Verify Verify messages |
✓ | Verify Verify key signatures |
✓ | Verify Verify User ID certification signatures |
✓ | Verify Verify User Attribute certification signatures |
✓ | Verify Verify key binding signatures |
✓ | Verify Verify key revocation signatures |
✓ | Verify Verify subkey revocation signatures |
✓ | Verify Verify certification revocation signatures |
✓ | Verify Verify timestamp signatures |
✓ | Verify Verify standalone signatures |
Verify Verify third party confirmation signatures | |
✓ | Revocation Designate Revocation Key |
✓ | Revocation Revoke (Sub)Key with Self Signature |
Revocation Revoke (Sub)Key using Designated Revocation Key | |
✓ | Encryption Encrypt data/messages |
✓ | Decryption Decrypt data/messages |
DSA Key Actions | |
✓ | Load Load Keys |
✓ | Generate Generate Keys |
✓ | Generate Generate Subkeys |
✓ | Sign Generate detached signatures of binary documents |
✓ | Sign Generate inline signatures of canonical documents |
✓ | Sign One-Pass Sign messages |
✓ | Sign Sign messages |
✓ | Sign Sign keys |
✓ | Sign Certify User IDs |
✓ | Sign Certify User Attributes |
✓ | Sign Generate key binding signatures |
✓ | Sign Revoke certifications |
✓ | Sign Revoke keys |
✓ | Sign Revoke subkeys |
✓ | Sign Generate timestamp signatures |
✓ | Sign Generate standalone signatures |
Sign Generate third party confirmation signatures | |
✓ | Verify Verify detached signatures |
✓ | Verify Verify inline signatures of canonical documents |
✓ | Verify Verify messages |
✓ | Verify Verify key signatures |
✓ | Verify Verify User ID certification signatures |
✓ | Verify Verify User Attribute certification signatures |
✓ | Verify Verify key binding signatures |
✓ | Verify Verify key revocation signatures |
✓ | Verify Verify subkey revocation signatures |
✓ | Verify Verify certification revocation signatures |
✓ | Verify Verify timestamp signatures |
✓ | Verify Verify standalone signatures |
Verify Verify third party confirmation signatures | |
✓ | Revocation Designate Revocation Key |
✓ | Revocation Revoke (Sub)Key with Self Signature |
Revocation Revoke (Sub)Key using Designated Revocation Key | |
ElGamal Key Actions | |
✓ | Load Load Keys |
Generate Generate Keys | |
Generate Generate Subkeys | |
Encryption Encrypt data/messages | |
Decryption Decrypt data/messages | |
Other Actions | |
✓ | Encryption Encrypt data/messages using symmetric ciphers with passphrases |
✓ | Decryption Decrypt data/messages using symmetric ciphers with passphrases |
RFC 4398¶
RFC 4398 covers publishing and retrieving PGP public keys via DNS CERT records.
Progress | |
---|---|
Key Sources | |
DNS CERT Look up and retrieve keys stored in Content-based DNS CERT records | |
DNS CERT Look up and retrieve keys stored in Purpose-based DNS CERT records |
RFC 5581¶
RFC 5581 extends RFC 4880 to officially add support for the Camellia cipher
Progress | |
---|---|
Actions | |
✓ | Encryption Camellia [1] |
✓ | Decryption Camellia [1] |
RFC 6637¶
RFC 6637 extends OpenPGP to officially add support for elliptic curve cryptography
Progress | |
---|---|
Key Types | |
✓ | ECDH Elliptic Curve Diffie-Hellman |
✓ | ECDSA Elliptic Curve Digital Signature Algorithm |
Curves | |
✓ | Curve NIST P-256 |
✓ | Curve NIST P-386 |
✓ | Curve NIST P-521 |
ECDH Key Actions | |
✓ | Load Load Keys |
✓ | Generate Generate Keys |
✓ | Generate Generate Subkeys |
✓ | KDF Encode KDF data for encryption |
✓ | KDF Decode KDF data for decryption |
ECDSA Key Actions | |
✓ | Load Load Keys |
✓ | Generate Generate Keys |
✓ | Generate Generate Subkeys |
✓ | Sign Generate detached signatures of binary documents |
✓ | Sign Generate inline signatures of canonical documents |
✓ | Sign One-Pass Sign messages |
✓ | Sign Sign messages |
✓ | Sign Sign keys |
✓ | Sign Certify User IDs |
✓ | Sign Certify User Attributes |
✓ | Sign Generate key binding signatures |
✓ | Sign Revoke certifications |
✓ | Sign Revoke keys |
✓ | Sign Revoke subkeys |
✓ | Sign Generate timestamp signatures |
✓ | Sign Generate standalone signatures |
Sign Generate third party confirmation signatures | |
✓ | Verify Verify detached signatures |
✓ | Verify Verify inline signatures of canonical documents |
✓ | Verify Verify messages |
✓ | Verify Verify key signatures |
✓ | Verify Verify Use r ID certification signatures |
✓ | Verify Verify User Attribute certification signatures |
✓ | Verify Verify key binding signatures |
✓ | Verify Verify key revocation signatures |
✓ | Verify Verify subkey revocation signatures |
✓ | Verify Verify certification revocation signatures |
✓ | Verify Verify timestamp signatures |
✓ | Verify Verify standalone signatures |
Verify Verify third party confirmation signatures | |
✓ | Revocation Designate Revocation Key |
✓ | Revocation Revoke (Sub)Key with Self Signature |
Revocation Revoke (Sub)Key using Designated Revocation Key |
Non-RFC Extensions¶
This section covers things that are considered extensions to PGP, but are not codified in the form of an RFC.
DNS PKA¶
Publishing OpenPGP keys in DNS
Progress | |
---|---|
Other Sources | |
DNS PKA Look up and retrieve keys stored in DNS PKA records. |
OpenPGP HTTP Keyserver Protocol (HKP)¶
The protocol is specified in Marc Horowitz’s thesis paper, and an expired RFC draft by David Shaw, draft-shaw-openpgp-hkp-00.
Progress | |
---|---|
HKP | |
Discovery Round robin DNS and SRV lookups (section 7. Locating a HKP Keyserver) | |
Index Look up keys on key server, with multiple possible matches (section 3.1.2.2. The “index” Operation) | |
Get Retrieve keys from key server, single fingerprint fetch (section 3.1.2.1. The “get” operation) | |
Post Send keys to key server (section 4. Submitting Keys To A Keyserver) |
OpenPGP Web Key Service (WKS)¶
LocatesOpenPGP keys by mail address using a Web service and the HTTPS protocol. Protocol specified in an in-progress RFC draft by Werner Koch, draft-koch-openpgp-webkey-service
Progress | |
---|---|
WKS | |
Discovery Fetches keys matching a UID from the server, using DNS and SRV lookups (section 3.1. Key Discovery) | |
Update Update keys on the WKS (section 4. Web Key Directory Update Protocol) |
EdDSA for OpenPGP¶
Use of Ed25519 with ECDSA and ECDH in OpenPGP is currently specified in an in-progress RFC draft by Werner Koch, draft-ietf-openpgp-rfc4880bis.
Progress | |
---|---|
Curves | |
✓ | Curve Ed25519 |
✓ | Curve X25519 |
Additional Curves for OpenPGP¶
Some additional curves that can be used with ECDSA/ECDH that are not explicitly called out in RFC 6637, but have standardized OIDs and are implemented in other software.
Progress | |
---|---|
Curves | |
✓ | Curve Brainpool P-256 |
✓ | Curve Brainpool P-384 |
✓ | Curve Brainpool P-512 |
✓ | Curve Curve25519 [1] |
✓ | Curve SECP256K1 |
Note
Use of Brainpool curves with ECDSA/ECDH
Although these curves are not explicitly mentioned in an RFC for OpenPGP at this point, GnuPG 2.1.x+ does support using them. As such, they have been included here.
[1] | (1, 2, 3, 4) Cipher availability depends on the currently installed OpenSSL being compiled with support for it |