Re: Blowfish Encryption

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 08, 2010 at 09:48:43AM -0400, Adam Richardson wrote:

> Hi Paul,
>  
> 
>     > If one has multiple samples of encrypted emails, it's likely that the
>     several
>     > of the samples will end using the same cipher text, as many people end
>     their
>     > emails with a consistent signature.  This repeated cipher text improves
>     the
>     > ability of those trying to attack (decrypt the message.)  Hence, most
>     > professionals recommend avoiding ECB mode.
> 
>     Well, bcrypt mentions CBC in the (brief) documentation, but the C code
>     contains a couple of tables, one containing probably 1024 32-bit long
>     integer values. Based on your description, that sounds like ECB, right?
> 
> 
> I provided the description of ECB merely to provide a general theoretical
> understanding of ECB (i.e., there is a one-to-one correspondence between any
> chunk of plaintext and any resulting ciphertext that is always the same.)  
> However, in practical terms, tables you see in code usually have to do with
> S-boxes, or some other type of the implementation.  So, seeing tables in the
> implementation code gives you no more info as to the mode.

Makes sense. In the code, they're labeled that way (e.g. S[4][256]).

>  
> 
> 
>     Bcrypt doesn't all the specification of what mode enc/dec is done in.
>     That is, I can't specify to the program ECB, CBC or other.
> 
> 
> Sounds likely, given the goal for portability.
>  
> 
> 
>     Also, according to the docs for bcrypt, it hashes your password out to
>     he maximum size for the cipher (448 bytes?). This sounds like an
>     implementation-specific decision which may not be echoed by PHP's mcrypt
>     functions. Does that sound reasonable?
> 
> 
> 
> You'll have to match the hashing process to generate your key.
>  
> 
>     >
>     > Now, looking at your PHP code, I see that it appears your mixing and
>     matching
>     > some of the families of calls in ways that might lead to unexpected
>     results.
>     > Try the below:
>     >
>     > $ciphertext = mcrypt_encrypt(
>     >     $cipher = MCRYPT_BLOWFISH,
>     >     $key,
>     >     $plaintext,
>     >     $mode = 'cbc', // I just tossed this in as an example, but you should
>     match
>     > the mode bcrypt is using
>     >     $iv = 'use only once, sometimes a count, or a date' // needed for
>     > decryption, too, although it doesn't have to remain a secret.
>     > );
> 
>     Another point: my code above is actually from a post by someone else on
>     this list. Now, the iv above is based on a random number. If I encrypt
>     the file on Monday, and then attempt to decrypt it on Tuesday using a
>     different (random-number-based) iv, will the file decrypt properly?
> 
> 
> NO, if you're using a mode other than ECB.  If you're using CBC or some other
> mode that utilizes the IV, the same IV must be used for encryption AND
> decryption.  However, when using ECB, the IV isn't used, so it wouldn't matter
> (if you pass in an IV, it's just ignored.)  
> 
> The IV is used to make sure no two plaintexts will be represented by the same
> cipher texts, and must be shared between those wishing to encrypt and decrypt
> the message.  However, it doesn't have to kept secret.
>  
> 
> 
>     Paul
> 
>     --
>     Paul M. Foster
> 
> 
> Sounds like you're making progress :)  I'm busy today (off to the doctor for a
> bum knee), but I'll probably look through bcrypt later this week just to better
> understand its implementation (that is to say, sorry I don't have more
> implementation details of that particular encryption scheme right now, but
> maybe later.)

Yeah, this is great. Thanks so much for your help. I really know very
little about encryption. If you think of something else, feel free to
comment.

Paul

-- 
Paul M. Foster

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux