Hi all,

There are a number of new protocols in the proposal/early adoption phases that 
will probably require the support of a new public library function in 
openssl.

These protocols (more below) are used for authenticating roaming access for 
802.1x wireless access. They generally use TLS (tunnelled over the Radius UDP 
protocol) to establish a secure channel over which the roaming wireless 
client is authenticated by a Radius server.

The issue is that they require access to the master_key, client_random, 
server_random and the TLS1 pseudo-random-function (PRF) to check challenge 
material and to generate MPPE keys. Unfortunately, none of the functions in 
openssl t1_enc.c implement the exact requirements, and the ones that might be 
used as building blocks are declared as static

The new protocols I know of now are:

1. EAP-TTLS (draft-ietf-pppext-eap-ttls-01.txt) currently available on Funk 
Odyssey wireless clients. To check the challenges from the client, it 
requires:
 EAP-TTLS_challenge = PRF(SecurityParameters.master_secret, 
                             "ttls challenge", 
                             SecurityParameters.client_random + 
                             SecurityParameters.server_random); 

and to generate the MPPE keys, it requires
PRF(SecurityParameters.master_secret, 
                             "ttls keying material", 
                             SecurityParameters.client_random + 
                             SecurityParameters.server_random); 
where PRF is the TLS1 pseudo-random-function
(note that the order client + server for the random is the reverse of what TLS 
generally uses). Further the PRF is required to deliver various lengths of 
key material from 7 to 64 octets in length.

2. PEAP (draft-josefsson-pppext-eap-tls-eap-02.txt) currently under 
development by Cisco et al.
It requires:
PRF(master key, "client PEAP encryption", client_random + server_random)
and
PRF("", "client PEAP encryption", client_random + server_random)

In the interests of supporting these protocols, I think there needs to be a 
public library function (possibly in t1_enc.c) which can be passed a keying 
string and the number of octets required, and which returns
PRF(master_key, string, client_random + server_random) with as many octets as 
requested.

Needless to say, exposing a TLS-specific function in t1_enc.c is inconsistent 
with the current way that the internals of openssl are encapsulated. Is there 
a better way?

Views?



-- 
Mike McCauley                               [EMAIL PROTECTED]
Open System Consultants Pty. Ltd            Unix, Perl, Motif, C++, WWW
24 Bateman St Hampton, VIC 3188 Australia   http://www.open.com.au
Phone +61 3 9598-0985                       Fax   +61 3 9598-0955

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to