Here is the sample program I have so far to test the concept of anonymous
DH:

1) Start with the samples included in the source. For e.g :
demos/ssl/serv.cpp and cli.cpp

2) Server & Client: Remove all the calls related to certificates -

SSL_CTX_use_certificate_file(ctx, CERTF, SSL_FILETYPE_PEM)
SSL_CTX_use_PrivateKey_file(ctx, KEYF, SSL_FILETYPE_PEM)
SSL_CTX_check_private_key(ctx))
SSL_get_peer_certificate()

etc.

3) Write a function to either load the DH params from a file or generate it:

void load_dh_params(ctx)
SSL_CTX *ctx;
{
 DH *dh=NULL;
 RAND_seed(rnd_seed, sizeof rnd_seed);
 if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, 128, 5,
NULL))
  printf("Couldn't generate DH \n");
 //Make calls to DH_check() to make sure generated params are ok
 ....

 if (!DH_generate_key(dh))
  printf("Couldn't generate DH key\n");
 //If you want to read from a file, use following, comment out generation
calls above
 ////////BIO *out;
 ////////out=BIO_new(BIO_s_file());
 ////////BIO_set_fp(out,stdout,BIO_NOCLOSE);
 ////////dh = PEM_read_bio_DHparams(bio,NULL,NULL,NULL);
 ////////BIO_free(bio);
 if(SSL_CTX_set_tmp_dh(ctx,dh)<0)
  printf("Couldn't set DH parameters\n");
}

4) Server : Call the DH generation function

  ....
  ctx = SSL_CTX_new (meth);
  load_dh_params(ctx);

5) Server & client: Set the cipher

SSL_CTX_set_cipher_list(ctx,"ADH-AES256-SHA");

This should be enough for a very basic anonymous DH client/server program

Regards

Ramg



On Fri, Aug 28, 2009 at 7:42 AM, Josue Andrade Gomes <
josue.gomes.honey...@gmail.com> wrote:

> I'm also interested in such sample program. Anyone?
>
>
>
> On Thu, Aug 27, 2009 at 4:39 PM, Ram G <mydevfor...@gmail.com> wrote:
>
>> Things are getting clearer as I dig deeper. The book "Network Security
>> with OpenSSL" by John Viega et al has some explanation of how the DH key
>> exchange takes place.
>>
>> With that knowledge, I went through the source code and found that
>> DH_Compute_Key() is being called in s3_clnt.c and s3_srvr.c. So there is no
>> need to call it in client applications.
>>
>> BRs
>>
>> Ramg
>> On Thu, Aug 27, 2009 at 12:23 PM, Ram G <mydevfor...@gmail.com> wrote:
>>
>>> Hello,
>>>
>>> Going through various posts, I have come across references to Bodo
>>> Moeller's example code showing SSL communication without certificates and
>>> using anonymous DH key exchange. If anybody has that sample, can you please
>>> forward it ?
>>>
>>> I have written a client and server taking help from the sample programs.
>>> I'm generating the DH params in the server and setting it in the SSL
>>> context. I'm setting the cipher as ADH-AES256-SHA in both server and client.
>>> The client and server are communicating.
>>>
>>> To generate the DH parameters P & G, I have done this:
>>>
>>> 1) Calling DH_generate_parameters() in the server will generate the Prime
>>> P
>>> 2) Calling DH_generate_key() performs the first step of a Diffie-Hellman
>>> key exchange by generating private and public DH values.
>>>
>>> Documentation also talks about this call to generate the shared key:
>>>
>>> 3) Calling DH_compute_key(), these are combined with the client's public
>>> value to compute the shared key. (My program is working even without the
>>> DH_compute_key() call in the server - which is strange I think)
>>>
>>> What I'm not sure is :
>>>
>>> What is the call I need to make in the client to pass the client's public
>>> key ( G (power X) mod P ) to the server ?
>>>
>>> I'm working on a prototype and beginning to get my hands dirty with
>>> OpenSSL. Your help is greatly appreciated.
>>>
>>> -Ramg
>>>
>>
>>
>

Reply via email to