Suplemento sobre el informe de errores del software de prueba de números aleatorios NIST

La descarga, instalación, configuración del entorno Cygwin, etc. del software de prueba relacionado con el algoritmo de prueba de números aleatorios del NIST se ha descrito repetidamente en muchos blogs, por lo que no hablaré de ello aquí.

Pero descubrí que encontré muchos errores inesperados durante mi uso real. También noté que en el área de comentarios de blogs relacionados, muchos amigos mencionaron contenido de error similar y la misma confusión. Pero el problema es que CSDN e incluso toda la red no pueden encontrar un análisis detallado del contenido de este error de algoritmo. Así que aquí trato de resumir los consejos para evitar el uso incorrecto del software de prueba NIST y el análisis de algunos mensajes de error.

Formato y contenido del archivo a probar

Acerca del formato de archivo

Cuando Cygwin ejecuta el paquete de algoritmo sts-2.1.2, el mensaje para seleccionar el formato de archivo es el siguiente

Formato de archivo de entrada:
[0] ASCII - Una secuencia de ASCII 0's y 1's
[1] Binary - Cada byte en el archivo de datos contiene 8 bits de datos

Aquí hablamos principalmente de los archivos [0] ASCII de uso común.

  1. En términos generales, es más conveniente y rápido exportar el archivo txt con el algoritmo escrito en python o matlab.
  2. Los archivos txt codificados en UTF-8 son compatibles con ASCII.
  3. "Una secuencia de ASCII 0 y 1" no se refiere a códigos binarios. Esta descripción significa que todos los datos son números binarios.
  4. Si está utilizando un archivo codificado en binario, seleccione la segunda opción: Binario.

Acerca del contenido del archivo

  1. La matriz codificada en binario puede garantizar una precisión ultra alta, y no hay necesidad de preocuparse de que el valor decimal se convierta en un número de doble precisión después de exceder el límite superior del tamaño entero de matlab / python, lo que resulta en una disminución en la precisión. Por lo tanto, incluso si el valor del número aleatorio generado es un número muy grande, no afectará el juicio y la prueba de aleatoriedad.
  2. Requisito especial (1): Todos los números binarios deben tener la misma longitud. Si el número de dígitos no es suficiente, use 0 para completar el anverso.
  3. Requisito especial (2): Todos los números binarios están ordenados consecutivamente y no puede haber espacios entre ellos.
  4. Aquí hay un ejemplo con matlab. Suponiendo que se haya generado una matriz de números aleatorios, según los requisitos anteriores, la función de guardado muy rápido no se puede utilizar al exportar. Necesitamos convertir manualmente cada número en la matriz en forma binaria y escribirlo en un archivo txt de forma continua. A continuación, pongo un fragmento de mi propio código, cambie los parámetros cuando lo use.
    fid = fopen('E:/Final1.txt','w'); 
    %E:/Final1.txt是待检测文件的绝对路径
    for i = 1:1000000
        fprintf(fid, '%s',dec2bin(X(i),32));
    end 
    %1000000是数组长度,32是这个数组中最大的二进制数的长度
    fclose(fid);
    
  5. Una pequeña sugerencia: después de generar el archivo txt, puede abrirlo y alejar el zoom para echar un vistazo. Si puede ver la regla obvia de 0 y 1, como se muestra en la figura a continuación, demuestra que su matriz es extremadamente aleatoria y este paquete de algoritmos no se puede utilizar para usted. Para las pruebas, el informe final generado puede tener 0 kb vacíos o los parámetros pueden ser todos 0. Esta es también una de las dos razones principales por las que "igamc underflow" sigue informando errores.
    De esta manera, los archivos con una aleatoriedad extremadamente baja pueden inspeccionarse visualmente sin perder tiempo.Se recomienda verificar directamente la exactitud del algoritmo.
    Ejemplo de regularidad del archivo txt binario 01

Parámetros al ejecutar el algoritmo

Elija el tamaño y el número de la secuencia de bits

  1. El tamaño y el número de flujos de bits determinan en gran medida si el Informe final final se puede generar normalmente.
  2. Cuando el valor después de ./assess es menor que 1000000, es posible que no pueda generar el informe final (es decir, 0kb txt vacío) o generar todos los informes 0, como se muestra
    Inserte la descripción de la imagen aquí
    en la siguiente figura. En realidad, tengo algunos datos aquí, no todos 0s. Puede ver un contraste claro, el probador en la mitad inferior pasó. Sin embargo, los datos no son suficientes y el archivo con ceros es la mitad superior.
  3. Si la cantidad de datos no es suficiente, ingrese un valor menor para ./assess, como 10000, luego se recomienda consultar la siguiente parte de este blog y completar gradualmente 15 pruebas mediante pruebas parciales segmentadas.
  4. El número de flujos de bits es generalmente más de 10 más razonable.
  5. Nota: La longitud de un solo flujo de bits * El número de flujos de bits no puede exceder el volumen de datos de su archivo txt; de lo contrario, se seguirá informando del error "igamc underflow". (Es decir, la segunda razón más importante para informar errores)

Seleccionar elemento de prueba

Según mis intentos personales, si desea completar las quince pruebas a la vez, necesita al menos cien mil números aleatorios, y un millón es mejor.
Sin embargo, algunos algoritmos (como el algoritmo LCG optimizado para la marca de tiempo) tienen una tasa de operación muy baja y se tarda demasiado en generar un millón de números aleatorios. Supongamos que solo tenemos menos de cien mil números aleatorios, si ejecutamos el programa a la fuerza, se producirá un error en el informe final.
Aquí sugerimos dividir las 15 pruebas en varios grupos para probar.
Después de ingresar la dirección absoluta del archivo, verá las siguientes instrucciones:

PRUEBAS ESTADÍSTICAS
_________________________________
[01] Frecuencia [02] Frecuencia de bloque
[03] Sumas acumuladas [04] Ejecuciones
[05] Ejecución más larga de unos [06] Rango
[07] Transformada de Fourier discreta [08] Coincidencias de plantillas no periódicas
[09] Coincidencias de plantillas superpuestas [ 10] Estadística universal
[11] Entropía aproximada [12] Excursiones aleatorias
[13] Variante de excursiones aleatorias [14] Serie
[15] Complejidad lineal
INSTRUCCIONES
Ingrese 0 si NO desea aplicar todas las
pruebas estadísticas a cada secuencia y 1 si tú haces.
Ingrese Elección:

Elija 0 aquí y vea las siguientes instrucciones:

INSTRUCCIONES
Ingrese un 0 o 1 para indicar si la
prueba estadística numerada debe aplicarse o no a cada secuencia.
123456789111111
      012345

Las dos filas de números aquí representan del 1 al 15. El 1 superior en la segunda mitad del párrafo es el dígito de las decenas y el inferior es el dígito de las unidades. La entrada correspondiente 1 a continuación significa ejecutar la prueba y 0 significa no ejecutar.

Finalmente, verifique cada parte del informe en las siguientes carpetas. El informe final total no está detallado. Inserte la descripción de la imagen aquí
Esto es lo que pienso actualmente, bienvenido a agregar lagunas y preguntas en el área de comentarios. Intentaré perfeccionar esta respuesta.

Supongo que te gusta

Origin blog.csdn.net/weixin_46983031/article/details/115365328
Recomendado
Clasificación