Do not include a timestamp in the Client/ServerHello Random field.
Instead, send random bytes, unless SSL_SEND_{CLIENT,SERVER}RANDOM_MODE is set. This is a forward-port of commits:4af793036f
f4c93b46ed
3da721dac9
2583270191
While the gmt_unix_time record was added in an ostensible attempt to mitigate the dangers of a bad RNG, its presence leaks the host's view of the current time in the clear. This minor leak can help fingerprint TLS instances across networks and protocols... and what's worse, it's doubtful thet the gmt_unix_time record does any good at all for its intended purpose, since: * It's quite possible to open two TLS connections in one second. * If the PRNG output is prone to repeat itself, ephemeral handshakes (and who knows what else besides) are broken.
This commit is contained in:
@@ -1236,12 +1236,9 @@ int ssl3_get_client_hello(SSL *s)
|
||||
* server_random before calling tls_session_secret_cb in order to allow
|
||||
* SessionTicket processing to use it in key derivation. */
|
||||
{
|
||||
unsigned long Time;
|
||||
unsigned char *pos;
|
||||
Time=(unsigned long)time(NULL); /* Time */
|
||||
pos=s->s3->server_random;
|
||||
l2n(Time,pos);
|
||||
if (RAND_pseudo_bytes(pos,SSL3_RANDOM_SIZE-4) <= 0)
|
||||
if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0)
|
||||
{
|
||||
goto f_err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user