<div dir="ltr">I've discovered it's not only PHP or sfmt-erlang, but any language or system which uses the reference initialization sequence (i.e. copying the init_gen_rand() of MT or SFMT distribution by the original authors) might be affected by this PRNG state disclosure. <div>-- Kenji Rikitake<br><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 8, 2020 at 7:19 PM Raimo Niskanen <<a href="mailto:raimo%2Berlang-questions@erlang.org">raimo+erlang-questions@erlang.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, Jan 08, 2020 at 01:03:53PM +0900, Kenji Rikitake wrote:<br>
> The following is the security notice of sfmt-erlang, a random number module<br>
> for Erlang based on SFMT, regarding the recently revealed attack against<br>
> PHP mt_seed() vulnerability.<br>
> I've already updated <a href="http://hex.pm/sfmt" rel="noreferrer" target="_blank">hex.pm/sfmt</a> with a new package including the following<br>
> security notice.<br>
> -- Kenji Rikitake<br>
> <br>
> ## Security notice regarding the PHP mt_seed() vulnerability<br>
<br>
Great that you keep an eye on these kinds of matters, Kenji! :-)<br>
<br>
> <br>
> Ambionics Security published [an internal state retrieval algorithm of PHP<br>
> `mt_rand()`](<a href="https://www.ambionics.io/blog/php-mt-rand-prediction" rel="noreferrer" target="_blank">https://www.ambionics.io/blog/php-mt-rand-prediction</a>) on<br>
> 6-JAN-2020. sfmt-erlang uses the same seed-to-internal-state initialization<br>
> algorithm at the function `init_gen_rand/1`.<br>
> <br>
> For reducting the possibility of the internal state revelation, use<br>
> `init_by_list32/1` instead, better combined with `rand:uniform/1`. [Raimo<br>
> Niskanen published a piece of code for this purpose](<br>
> <a href="http://erlang.org/pipermail/erlang-questions/2018-July/095875.html" rel="noreferrer" target="_blank">http://erlang.org/pipermail/erlang-questions/2018-July/095875.html</a>).<br>
<br>
I would just like to emphasize that using `rand:uniform/1` with any algorithm<br>
in the `rand` module only _reduces_ the possibility for internal state<br>
revelation.  All the steps in that Ambionics Security paper, as far as I<br>
can tell, can, in theory, be done on any algorithm in the `rand` module, <br>
albeit with much more work. Not yet figured out work, to be added...<br>
<br>
"Breaking" a non-secure PRNG like a Mersenne Twister is really a moot point<br>
since you can not break what is not supposed to hold.  The Ambionics<br>
Security paper shows code that incorrectly used a non-secure PRNG to<br>
generate a password and then demonstartes exactly how efficiently that<br>
can be exploited.  So what they actually broke was that incorrect code.<br>
<br>
> <br>
> *Note well that sfmt-erlang has no cryptographic security guarantee and<br>
> MUST NOT be used for security purposes such as password generation.*<br>
<br>
_That_ is a very important point here!<br>
<br>
<br>
> <br>
> Also: Version 0.13.0 and 0.13.1 Erlang and C code files are identical.<br>
> Users have no need to upgrade.<br>
<br>
-- <br>
<br>
/ Raimo Niskanen, Erlang/OTP, Ericsson AB<br>
</blockquote></div>