Just that porting to OpenVPN needs to be consistent. There is no sense in supporting a feature using one cryptographic library, while this one is also the one that least use... So I suggest either you port this to openssl as well, or drop this. I know there are some other abnormalities in crypto, I will dig them out when I cleanup this code as well.
On Mon, Apr 2, 2012 at 8:42 PM, Adriaan de Jong <dej...@fox-it.com> wrote: > Prediction resistance is a useful feature to have in some circles. It's > definitely an option that's useful for OpenVPN-NL, which is why I ported it > to the mainline. If there is no interest, could we include it in a contrib > directory or something along those lines? > > Adriaan > >> -----Original Message----- >> From: Alon Bar-Lev [mailto:alon.bar...@gmail.com] >> Sent: maandag 2 april 2012 11:19 >> To: Adriaan de Jong >> Cc: openvpn-devel@lists.sourceforge.net >> Subject: Re: [Openvpn-devel] [PATCH 2/6] Added a configuration option >> to enable prediction resistance in the PolarSSL random number >> generator. >> >> Hello, >> I think that we should not have these options specific to one crypto >> library. >> Alon. >> >> On Mon, Apr 2, 2012 at 10:28 AM, Adriaan de Jong <dej...@fox-it.com> >> wrote: >> > Signed-off-by: Eelse-jan Stutvoet <stutv...@fox-it.com> >> > Signed-off-by: Adriaan de Jong <dej...@fox-it.com> >> > --- >> > doc/openvpn.8 | 14 ++++++++++++++ >> > src/openvpn/crypto_polarssl.c | 9 +++++++++ >> > src/openvpn/crypto_polarssl.h | 7 +++++++ >> > src/openvpn/init.c | 6 ++++++ >> > src/openvpn/options.c | 22 ++++++++++++++++++++++ >> > src/openvpn/options.h | 3 +++ >> > src/openvpn/syshead.h | 8 ++++++++ >> > 7 files changed, 69 insertions(+), 0 deletions(-) >> > >> > diff --git a/doc/openvpn.8 b/doc/openvpn.8 index 53d6bdb..ee46de6 >> > 100644 >> > --- a/doc/openvpn.8 >> > +++ b/doc/openvpn.8 >> > @@ -3846,6 +3846,20 @@ space-saving optimization that uses the unique >> > identifier for >> > datagram replay protection as the IV. >> > .\"********************************************************* >> > .TP >> > +.B \-\-use-prediction-resistance >> > +Enable prediction resistance on PolarSSL's RNG. >> > + >> > +Enabling prediction resistance causes the RNG to reseed in each call >> > +for random. Reseeding this often can quickly deplete the kernel >> > +entropy pool. >> > + >> > +If you need this option, please consider running a daemon that adds >> > +entropy to the kernel pool. >> > + >> > +Note that this option only works with PolarSSL versions greater than >> > +1.1. >> > +.\"********************************************************* >> > +.TP >> > .B \-\-test-crypto >> > Do a self-test of OpenVPN's crypto options by encrypting and >> > decrypting test packets using the data channel encryption options >> > diff --git a/src/openvpn/crypto_polarssl.c >> > b/src/openvpn/crypto_polarssl.c index 158ccfc..96d41b7 100644 >> > --- a/src/openvpn/crypto_polarssl.c >> > +++ b/src/openvpn/crypto_polarssl.c >> > @@ -219,6 +219,15 @@ havege_state * rand_ctx_get() >> > >> > #endif /* (POLARSSL_VERSION_NUMBER >= 0x01010000) */ >> > >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > +void rand_ctx_enable_prediction_resistance() >> > +{ >> > + ctr_drbg_context *cd_ctx = rand_ctx_get(); >> > + >> > + ctr_drbg_set_prediction_resistance(cd_ctx, 1); } #endif /* >> > +ENABLE_PREDICTION_RESISTANCE */ >> > + >> > int >> > rand_bytes (uint8_t *output, int len) >> > { >> > diff --git a/src/openvpn/crypto_polarssl.h >> > b/src/openvpn/crypto_polarssl.h index 2f303db..6152878 100644 >> > --- a/src/openvpn/crypto_polarssl.h >> > +++ b/src/openvpn/crypto_polarssl.h >> > @@ -96,4 +96,11 @@ ctr_drbg_context * rand_ctx_get(); >> > havege_state * rand_ctx_get(); >> > #endif >> > >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > +/** >> > + * Enable prediction resistance on the random number generator. >> > + */ >> > +void rand_ctx_enable_prediction_resistance(); >> > +#endif >> > + >> > #endif /* CRYPTO_POLARSSL_H_ */ >> > diff --git a/src/openvpn/init.c b/src/openvpn/init.c index >> > bc7718e..05a07fa 100644 >> > --- a/src/openvpn/init.c >> > +++ b/src/openvpn/init.c >> > @@ -2008,6 +2008,12 @@ init_crypto_pre (struct context *c, const >> > unsigned int flags) >> > >> > if (c->options.mute_replay_warnings) >> > c->c2.crypto_options.flags |= CO_MUTE_REPLAY_WARNINGS; >> > + >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + if (c->options.use_prediction_resistance) >> > + rand_ctx_enable_prediction_resistance(); >> > +#endif >> > + >> > } >> > >> > /* >> > diff --git a/src/openvpn/options.c b/src/openvpn/options.c index >> > bd83843..5b52ed0 100644 >> > --- a/src/openvpn/options.c >> > +++ b/src/openvpn/options.c >> > @@ -545,6 +545,10 @@ static const char usage_message[] = >> > " using file.\n" >> > "--test-crypto : Run a self-test of crypto features enabled.\n" >> > " For debugging only.\n" >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + "--use-prediction-resistance: Enable prediction resistance on the >> random\n" >> > + " number generator.\n" >> > +#endif >> > #ifdef ENABLE_SSL >> > "\n" >> > "TLS Key Negotiation Options:\n" >> > @@ -837,6 +841,9 @@ init_options (struct options *o, const bool >> > init_gc) >> > o->replay_time = DEFAULT_TIME_BACKTRACK; >> > o->use_iv = true; >> > o->key_direction = KEY_DIRECTION_BIDIRECTIONAL; >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + o->use_prediction_resistance = false; #endif >> > #ifdef ENABLE_SSL >> > o->key_method = 2; >> > o->tls_timeout = 2; >> > @@ -1581,6 +1588,9 @@ show_settings (const struct options *o) >> > SHOW_STR (packet_id_file); >> > SHOW_BOOL (use_iv); >> > SHOW_BOOL (test_crypto); >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + SHOW_BOOL (use_prediction_resistance); #endif >> > >> > #ifdef ENABLE_SSL >> > SHOW_BOOL (tls_server); >> > @@ -3018,6 +3028,11 @@ options_string (const struct options *o, >> > buf_printf (&out, ",no-replay"); >> > if (!o->use_iv) >> > buf_printf (&out, ",no-iv"); >> > + >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + if (o->use_prediction_resistance) >> > + buf_printf (&out, ",use-prediction-resistance"); #endif >> > } >> > >> > #ifdef ENABLE_SSL >> > @@ -6416,6 +6431,13 @@ add_option (struct options *options, >> > options->keysize = keysize; >> > } >> > #endif >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + else if (streq (p[0], "use-prediction-resistance")) >> > + { >> > + VERIFY_PERMISSION (OPT_P_GENERAL); >> > + options->use_prediction_resistance = true; >> > + } >> > +#endif >> > #ifdef ENABLE_SSL >> > else if (streq (p[0], "show-tls")) >> > { >> > diff --git a/src/openvpn/options.h b/src/openvpn/options.h index >> > 9e78d00..1be3dfa 100644 >> > --- a/src/openvpn/options.h >> > +++ b/src/openvpn/options.h >> > @@ -520,6 +520,9 @@ struct options >> > const char *packet_id_file; >> > bool use_iv; >> > bool test_crypto; >> > +#ifdef ENABLE_PREDICTION_RESISTANCE >> > + bool use_prediction_resistance; >> > +#endif >> > >> > #ifdef ENABLE_SSL >> > /* TLS (control channel) parms */ >> > diff --git a/src/openvpn/syshead.h b/src/openvpn/syshead.h index >> > e60dc44..b14d50d 100644 >> > --- a/src/openvpn/syshead.h >> > +++ b/src/openvpn/syshead.h >> > @@ -534,6 +534,14 @@ socket_defined (const socket_descriptor_t sd) >> > #define MANAGMENT_EXTERNAL_KEY >> > #endif >> > >> > +/* Enable PolarSSL RNG prediction resistance support */ #ifdef >> > +ENABLE_CRYPTO_POLARSSL #include <polarssl/version.h> #if >> > +POLARSSL_VERSION_NUMBER >= 0x01010000 #define >> > +ENABLE_PREDICTION_RESISTANCE #endif #endif /* ENABLE_CRYPTO_POLARSSL >> > +*/ >> > + >> > /* >> > * MANAGEMENT_IN_EXTRA allows the management interface to >> > * read multi-line inputs from clients. >> > -- >> > 1.7.5.4 >> > >> > >> > --------------------------------------------------------------------- >> - >> > -------- >> > This SF email is sponsosred by: >> > Try Windows Azure free for 90 days Click Here >> > http://p.sf.net/sfu/sfd2d-msazure >> > _______________________________________________ >> > Openvpn-devel mailing list >> > Openvpn-devel@lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/openvpn-devel