Re: [PATCHES] [PATCH] pgcrypto: pgp_encrypt v3 - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [PATCHES] [PATCH] pgcrypto: pgp_encrypt v3
Date
Msg-id 200507041419.j64EJWc14180@candle.pha.pa.us
Whole thread Raw
Responses Re: [PATCHES] [PATCH] pgcrypto: pgp_encrypt v3
List pgsql-hackers
Your patch has been added to the PostgreSQL unapplied patches list at:
http://momjian.postgresql.org/cgi-bin/pgpatches

It will be applied as soon as one of the PostgreSQL committers reviews
and approves it.

---------------------------------------------------------------------------


Marko Kreen wrote:
> 
> Well, I needed to decide, whether it is realistic to implement
> PGP public-key encryption someday, because then I better rename
> the function 'pgp_encrypt' to something more specific immidiately.
> 
> But after hacking a while, I soon had working implementation,
> so it seems silly to wait 8.2 for it.  This is thanks to the
> fact that for encryption I can ignore most of the OpenPGP
> complex parts - signing and key-management.  IMHO they don't
> even make sense inside database, they need an end-user
> application.
> 
> In short, the goal of this code is not to be full OpenPGP
> implementation, but just provide more flexible encryption
> than the usual symmetric encryption.
> 
> So here is updated pgp_encrypt patch, with support for both
> symmetric and public-key encryption.  Also, as Neil requested,
> non-failing regression tests - unsupported parts are replaced
> with empty test named '*-DISABLED'.
> 
> Note: it uses OpenSSL bignum code - so without OpenSSL
> no public-key encryption.  Look below for plans for
> fixing this dependance.
> 
> New names for symmetric-key functions:
> 
>     pgp_sym_encrypt(data, key)
>     pgp_sym_decrypt(data, key)
> 
> Public key functions:
> 
>     pgp_pub_encrypt(data, key)
>     pgp_pub_decrypt(data, key)
>     pgp_pub_decrypt(data, key, psw)
> 
> Plus variants with 'arg' and for bytea.
> 
> Not mentioned in previous mails:
> 
>     armor(bytea) -> text
>     dearmor(text) -> bytea
> 
> Apply and remove PGP Ascii Armor.
> 
> 
> 
> Implemented feature?:
> * Elgamal-encryption keys - preferred public-key algo for OpenPGP.
> * Password-protected secret keys.
> 
> Missing features (needs implementing ASAP):
> * pgp_key_id() - Function to query the ID of a key, and
>   the key ID from encrypted packet - so user can implement
>   key rings on his own.
> 
> Maybe:
> * As it does not parse sign packets, it does not support
>   recipient cipher preferences.  It is not important for
>   planned use-case, but maybe it would be nice to have.
> 
> Does not support (and I see no need):
> * RSA-encrypt and sign+encrypt keys - they are deprecated in
>   RFC, GnuPG does not even give option to generate them, so IMO
>   it's fine to ignore them.
> * Picking a key from list of keys - accepting a keyring in
>   place of key.
> * Several encryption subkeys under one key.
> * Any form of signing - that also means no key integrity checks
>   (eg - does the subkey belong to master key).
> 
> 
> Now, the code is significant in the following respect - the
> module 'contrib/pgcrypto' is complete.  As I said, I don't
> think rest of the OpenPGP makes sense here, and there isn't
> any other generally-useful crypto functionality that would be
> good to have.
> 
> 
> Still, there are various things to do:
> 
> 1. Polishing of the new PGP code.
> 2. Rework documentation and add FAQ.
> 3. Try to extract OpenSSL and zlib settings from main
>    PostgreSQL config.  Basically that means that ./configure
>    should put them to separate variables, not into main CFLAGS.
> 4. Include strong RNG. Yarrow, Fortuna, ?.
>    This is for both symmetricy and public-key encryption.
> 5. Include bignum code (only ops needed for Elgamal).
>    This is for public-key encrypt/decrypt.
> 6. Propose crypt(), gen_salt() into mainline for 8.2.
>    They are self-contained, except crypt-md5 depends on a MD5
>    implentation, which already exists in mainline.
> 
> 
> Points 4 and 5 are suspicious - I'm not yet sure it can
> be done in manageable way.  But without those, the PGP
> functions are unusable in default build.  It may not be that
> bad - Yarrow/Fortuna seem to be small pieces only requiring
> external cipher and hash, which we have.  And I could
> drop parts of libtommath into separate directory.  But
> I don't think such things should be done in hurry.
> 
> In the end, I think the code can go into 8.1 in current state -
> requiring OpenSSL.  I'll look into dependencies in
> 8.2 timeframe.
> 
> -- 
> marko
> 

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
>                http://www.postgresql.org/docs/faq

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
359-1001+  If your life is a hard drive,     |  13 Roberts Road +  Christ can be your backup.        |  Newtown Square,
Pennsylvania19073
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [PATCHES] Dbsize backend integration
Next
From: Bruce Momjian
Date:
Subject: Re: [PATCHES] Disable page writes when fsync off, add GUC