pcg32 solving time in half hour ?
Amazing !
I once try a naive pcg32 solve using Python z3
Estimated solving time is about a week.
The description is somewhat misleading:
... Note that it is impossible to approach the problem by brute force:
to try blindly all possible 264 states you would need centuries of time.
The function that performs the prediction, recover(), took maybe half an hour of effort.
It's a couple of loops, a couple of if's and a few logical operations ...
On May 15, 2018 8:06:57 PM EDT, Chris Rutz <rut...@gmail.com> wrote:
>Does your analysis of PCG support the speculation (from one of my
>threads
>here) that "pcg_setseq_128_xsl_rr_64_random_r" behaves/would behave as
>a
>'low-discrepancy sequence'?
No, I don't think that's true. But I'm no expert...
http://www.pcg-random.org/posts/other-good-options.html is a list of "good generators" but it excludes xoroshiro128+ and xorshift128+ as the ending shows. Yet it makes no mention of xoroshiro128** or xoshiro256** at all.
However the thing is, xoroshiro/xoshiro doesn't follow a strict straight structure from 1024 bits all the way down to 64. It "curves" right at the bottom with + replaced by *, and ** replaced by a hybrid of * and **. So all of the generators are nearly equally statistically good, with the extra state space providing advantages for not statistical quality, but parallelism. On the other hand, the PCG structure gets exponentially better statistically with the state space, but to do so it takes increasingly big multiplications, with the public PCG releases maxing out the multiplications at 128 bits and instead using "ext" to go further, which isn't any good for parallelism.
"xoshiro256** failed spectacularly within a few seconds with more FAIL!!!!!!!! than you can shake a stick at. FAIL!!!!!!!! is the worst failure PractRand reports with p values of zero. I spent some time going through my code and could not find anything wrong. So, I looked at xoroshiro128**. That went down the tubes as well."
You mean that chemtrails, reptilians, etc. are names of tests that xoshiro256** fails?
It worked ok for me. I wonder if his implementation in freebasic was incorrect somehow? I don't think he posted his source code, so it's hard to check.
So, you used PractRand on xoshiro256** and resulted in something like this:
rng=RNG_stdin64, seed=unknown
length= 16 gigabytes (2^34 bytes), time= 411 seconds
Test Name Raw Processed Evaluation
chemtrails R= +22.5 p = 0 FAIL!!!!!!!!
reptilians R=+374.9 p = 0 FAIL!!!!!!!!
reptilians R=+296.4 p = 0 FAIL!!!!!!!!
chemtrails R= +85.3 p = 0 FAIL!!!!!!!!
...and 1637 test result(s) without anomalies
> So, you used PractRand on xoshiro256** and resulted in something like this:
Testing Xoshiro256**
Here is the seed method used. This is just what happened to be lying around
on my home machine. Hope it's the official method.
void seed(Uint64 s) {
int j;
Uint64 z;
for (j=0; j<4; j++)
{
z = ( s += 0x9E3779B97F4A7C15ULL );
z = (z ^ (z >> 30)) * 0xBF58476D1CE4E5B9ULL;
z = (z ^ (z >> 27)) * 0x94D049BB133111EBULL;
ranst[j] = z;
}
}
I'm pretty sure i did Practrand to 256GB at one stage and everything was ok.
Prof. Vigna may have gone much further. I mostly concentrated on other tests.
Practrand is a good one though, and if you want to get serious about prngs,
Practrand should be in your toolkit.
$ ./RNG_test xoshiro256 -seed 42 -tlmin 16GB -tlmax 16GB
RNG_test using PractRand version 0.94
RNG = xoshiro256, seed = 0x42
test set = core, folding = standard (64 bit)
rng=xoshiro256, seed=0x42
length= 16 gigabytes (2^34 bytes), time= 509 seconds
no anomalies in 310 test result(s)
$ ./RNG_test xoshiro256 -seed 43 -tlmin 64GB -tlmax 64GB
RNG_test using PractRand version 0.94
RNG = xoshiro256, seed = 0x43
test set = core, folding = standard (64 bit)
rng=xoshiro256, seed=0x43
length= 64 gigabytes (2^36 bytes), time= 2053 seconds
no anomalies in 340 test result(s)