Re: pgcrypto seeding problem when ssl=on
От | Marko Kreen |
---|---|
Тема | Re: pgcrypto seeding problem when ssl=on |
Дата | |
Msg-id | CACMqXCLGSRfDLAqqBHSti5F2QPKa1+G=3XOuCxKoZidJuipe3w@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: pgcrypto seeding problem when ssl=on (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: pgcrypto seeding problem when ssl=on
|
Список | pgsql-hackers |
On Sat, Dec 22, 2012 at 9:20 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > I'm not thrilled with the suggestion to do RAND_cleanup() after forking > though, as that seems like it'll guarantee that each session starts out > with only a minimal amount of entropy. No, that's actually the right fix - that forces OpenSSL to do new reseed with system randomness, thus making backend (including SSL_accept) maximally disconnected from static pool in postmaster. This also makes behaviour equal to current ssl=off and exec-backend mode, which already do initial seeding in backend. The fact that PRNG behaviour is affected by complex set of compile- and run-time switches makes current situation rather fragile and hard to understand. > What seems to me like it'd be > most secure is to make the postmaster do RAND_add() with a gettimeofday > result after each successful fork, say at the bottom of > BackendStartup(). That way the randomness accumulates in the parent > process, and there's no way to predict the initial state of any session > without exact knowledge of every child process launch since postmaster > start. So it'd go something like > > #ifdef USE_SSL > if (EnableSSL) > { > struct timeval tv; > > gettimeofday(&tv, NULL); > RAND_add(&tv, sizeof(tv), 0); > } > #endif If you decide against RAND_cleanup in backend and instead do workarounds in backend or postmaster, then please also to periodic RAND_cleanup in postmaster. This should make harder to exploit weaknesses in reused slowly moving state. -- marko
В списке pgsql-hackers по дате отправления: