On Sun, 15 Nov 2009 21:44:55 -0500
Victor Duchovni <victor.ducho...@morganstanley.com> wrote:
| > 
| >    Subject:    Re: Encapsulation of AES_KEY
| >    Date:       2009-11-11 18:49:38
| > 
| > The problem is the openssl command does not make this function available
| > either directly as a password to key+IV converter,  or as part of its
| > file encryption method, for use from CLI.
| 
| The enc(1) command uses EVP_BytesToKey(), which would have been good
| enough in most applications, if the iteration count were high-enough,
| or configurable.
| 
| Thus, unless I'm misreading the code, the solution is to use a strong
| pass-phrase, or code up your own tool, that uses PBKDF2, with as high
| an iteration count is practical within your latency and CPU cost bounds.
| 
Which I did. :-)

| Breaking backwards compatibility with already encrypted files is not
| a good option, so any new key-derivation mode for enc(1) would have
| to be switched-on via new, non-default flags.
| 
But didn't enc(1) break that compatibility!

At one point the default for 'enc' was to use '-nosalt' whcih does not have
any file 'magic' included.  At least that was what the manpages say is the
default!!!

But when I started to work with it I found the default is to use use '-salt'.

That is the file format is
   * 'Salted__'  magic string
   * 8 bytes of random salt
   * encrypted data

Similar I found many other references to the change in the openssl
encrypted file generation.


The iterative count (ic) defaults to 1, with no options from the
command line to change this count.  Nor does it seem to store the
count into file, something that would be necessary.

So I decided to do my own pass-phrase to key stage. But found the "openssl"
command deficient here too.

You can specify alternative sources for password, but a user derived
key and IV for direct data encryption can only be given on the command
line (VERY bad for security).  These should at least be able to be read
from file descriptors, like pass-phrases can.

Salt and counts don't need this as they are public data.  But Key and IV
are not and alternative input methods other than hex digit arguments is
a must.


In Summery the "openssl" command is deficient.

 * You can't create a encrypted file that included an ic

 * You can't even specify the ic for the encryption (it just 1)

 * You can't pass Key and IV other than as command line arguments!
     (making them visible in process listings!)

 * You can't even use the "openssl" command to just do the basic
   conversions of 
       pass-phrase + salt + count  --TO->  key + IV
   perhaps with options for base64 or base16 (hexadecimal) output.
   For either  PBKDF 1.5  using  EVP_BytesToKey()
   or for PBKDF 2   using PKCS5_PBKDF2_HMAC_SHA1()

This was my finding during my last phase of development as an
application programmer.


  Anthony Thyssen ( System Programmer )    <a.thys...@griffith.edu.au>
 --------------------------------------------------------------------------
           Out testing new time machine. Be back yesterday!
 --------------------------------------------------------------------------
     Anthony's Home is his Castle     http://www.cit.gu.edu.au/~anthony/
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to