On 2007.05.23 at 17:30:50 +0200, Yves Rutschle wrote:

> Hi,
> 
> I'm trying to work out the relationship between a cipher
> suite, and the encrypters available in OpenSSL. For example,

There is almost no relationship, except that if no encrypter is
available, cipher suite which uses this encryption algorithm cannot be
used.


> in OpenSSL 0.9.8e I see there is blowfish encryption
> available (in `openssl enc`), yet none of the bf variants
> appear in the cipher suite list (`openssl ciphers`).
> 
> So, where does the cipher suite list come from, and how
> would one proceed if one wanted a cipher that's not already


There is list of SSL_CIPHER structures in the s3_lib.c file (there is
also one in the s2_lib.c, but I don't think you are interesting in
SSLv2). List in s3_lib is used both for SSLv3 and TLSv1.

Ciphersuite is composed from four parts - authentication algorithm
(which is based on same electronic signature algorithm), shared key
derivation algorithm, encryption algorithm and message authentication
algorithm. Really OpenSSL supports just one MAC algorithm for TLSv1 - HMAC,
but it can be used with different digest algorithms, so there are two
algorithms - HMAC-MD5 and HMAC-SHA1.

These algorithms are represented as flag in some bitmask field.
In OpenSSL 0.9.8 there is just one 32-bit mask field for all four
algorithms, so there is almost no bits free for adding new algorithms.

In OpenSSL 0.9.9 this mask split into parts - 32-bit field for each of
four algoritms and additional algorithm2 field to hold additional flags.
(really for now it is used just for SSLv2, but ongoing work for GOST
ciphersuites support would require use of some bits in this field)

This structure is intended to use as ciphersuite selection mask, it is
why separate bit for each algorithm is used, rather than sequentual
number.

So if you are going to add new ciphersuite you are better start with
current developer snapshot of 0.9.9 - it at least has free space in the
bitmasks.

Ciphersuite also has 16-bit number. This number should be same for all 
implementations which support this ciphersuite. So, these numbers are 
typically described in internet standards published by IETF and
registered with IANA. If there is such standard/draft for blowfish
ciphersuites, you should use numbers from it.

There is also reserved range from 0xFF00 to 0xFFFF, which can be used
for experimental ciphersuites. If you use number from this range, your
implementation wouldn't be interoperable with any other, but it wouldn't
be protocol violation.

So, if you are just trying to experiment, you should define new
SSL_CIPHER structure with number in this range, define new bit mask
constant and then look into file ssl_ciph.c to see how other encryption
algorithms are handled - i.e. translated from bit constant into
EVP_CIPHER structure which is actually used.

It is not too complicated. It took us less than a day to add GOST89
encryption algorithm. 

Things are much more complicated for adding new authentication and key
derivation algorithms, and even worse for MAC which is not HMAC(some
digest) and PRF functions (for now only one PRF function is supported
for TLS).






> available in that list (specifically, I'm interested in cfb
> and ofb modes)?
> 
> Cheers,
> Y.
> 
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-users@openssl.org
> Automated List Manager                           [EMAIL PROTECTED]
> 
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to