2009-02-14 9 views
5

Hay una biblioteca Java con el nombre Uncommon Maths que dice proporcionar mejores generadores de números aleatorios que Sun y (potencialmente) incluso BouncyCastle. ¿Cómo se puede determinar si se puede confiar en su biblioteca? Confío en Sun y BouncyCastle porque muchas compañías importantes usan sus cosas. No está claro si Uncommon Maths pertenece a la misma categoría. ¿Algunas ideas?¿Se puede confiar en la biblioteca de matemáticas poco común?

+0

Puede preguntarle al desarrollador: http://stackoverflow.com/users/5171/dan-dyer –

+0

Uncommon Maths se bifurcó de Watchmaker Framework, que es una biblioteca de computación evolutiva también escrita por Dan Dyer. Ha existido por más tiempo, y se usa en varios proyectos Apache. Creo que su historia de confianza comunitaria demuestra su valía. – ingyhere

Respuesta

4

Poco frecuentes Maths afirma para pasar el Diehard tests. Eso es tan confiable como yo sé.

Siempre puede ser un científico y volver a ejecutar esas pruebas por sí mismo como un control independiente.

0

Escriba sus propias pruebas.

una comprobación básica de un generador de números aleatorios se puede hacer usando un chi-square test

8

Buena pregunta;)

Todos los algoritmos RNG son conocidos algoritmos inventadas por gente más inteligente que yo. Soy un programador, no un matemático. Acabo de portar el código C original. Así que tienes que esperar que no haya introducido ningún error en la conversión.

Al igual que con la mayoría del software de código abierto, NO HAY GARANTÍA. Si desea usarlo para simulaciones, creo que es una muy buena opción. Si desea usarlo para criptografía, algo como Fortuna sería mejor.

Uncommons Maths no es tan utilizado como algunas bibliotecas. Obtiene entre 5 y 20 descargas por semana. No sé cuántos de ellos realmente lo usan en aplicaciones serias. Lo uso para evolutionary computation y algunos programas triviales relacionados con el poker con los que he estado jugando.

He ejecutado Diehard en cada una de las implementaciones de RNG y no resalta ningún defecto. Dicho esto, los resultados de Diehard no son los más fáciles de interpretar:

Por lo tanto usted no debe sorprenderse con los valores de p ocasionales cerca de 0 o 1, tal como 0,0012 0,9983 o. Cuando un flujo de bits realmente FALLA EN GRANDE, obtendrá p s of 0 or 1 to six or more places. By all means, do not, as a Statistician might, think that a p < .025 or p> .975 means that the RNG has "failed the test at the .05 level". Such p entre los cientos que produce DIEHARD, incluso con buenos RNG. Así que tenga en cuenta que "p sucede".

Todos los RNG matemáticos de Uncommons satisfacen esta definición confusa de éxito. Hay uno o dos valores p fuera del rango 0.025 .. 0.975, pero ninguno que "falla grande". Esto es comparable a los resultados obtenidos con SecureRandom de Java (y mejor que java.util.Random, que "falla grande").

Si quiere probar esto usted mismo, hay una clase llamada DiehardInputGenerator en la distribución. Esto genera el archivo de 12mb que necesita para ejecutar Diehard.

+0

¿Algún plan para transferir Fortuna a Java? :) FSF lanzó una versión de Java pero es GPL y no extiende java.util.Random por conveniencia: http://www.docjar.com/html/api/gnu/javax/crypto/prng/Fortuna.java .html – Gili

+1

+1 - trabajo increíble, Dan. Realmente bien hecho. – duffymo

+0

Fortuna es un verdadero cinturón de llaves. Gestiona múltiples fuentes de entropía y se recupera de un compromiso. El Uncommons Maths AESCounterRNG es el núcleo de PRNG que Fortuna usa, pero omite la puesta en común de entropía, la nueva siembra automática y la administración de archivos semilla. –

Cuestiones relacionadas