Teste Diehard aplicado ao gerador da biblioteca
OpenSSL
Instituto Superior Técnico
Segurança em Redes Móveis
Elaborado por:
Luís Ricardo Fonseca
14 de Dezembro de 2009
Indice
A. Objectivos
B. Geração de Números (OpenSSL)
C. Testes Diehard
D. Resultados
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
2/8
A. Objectivos
O Diehard consiste numa bateria de testes estatísticos que
permite aferir a qualidade de uma função geradora de números
pseudo-aleatórios.
A biblioteca OpenSSL disponibiliza um gerador de números
pseudo-aleatórios. Esta biblioteca é usada, essencialmente, para
manter a privacidade e integridade dos dados de uma aplicação, e
da informação trocada entre aplicações.
Este trabalho teve como objectivo executar os testes do
Diehard sobre um ficheiro binário de números gerados
utilizando a biblioteca OpenSSL, de modo a estudar a
aleatoriedade da função geradora.
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
3/8
B. Geração de Números (OpenSSL)
O ficheiro binário de input ao teste Diehard deverá ter no mínimo
10/11MB. Assim, foi gerado um ficheiro de 12MB
(Num_Gerados.dh), utilizando o programa seguinte:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <openssl/rand.h>
int main(int argc, char * argv[])
{
int i,j=1024;
char string[j];
int fich=open(“Num_Gerados.dh",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR);
for (i=1;i<=12*1024;i=i+1)
{
RAND_bytes(string,j);
write(fich,string,j);
}
return 0;
}
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
4/8
C. Testes Diehard
Os testes realizados (Diehard) foram os seguintes:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Birthday Spacings
Overlapping Permutations
Ranks of 31x31 and 32x32 matrices
Ranks of 6x8 Matrices
Monkey Tests on 20-bit Words
Monkey Tests OPSO,OQSO,DNA
Count the 1`s in a Stream of Bytes
Count the 1`s in Specific Bytes
Parking Lot Test
Minimum Distance Test
Random Spheres Test
The Sqeeze Test
Overlapping Sums Test
Runs Test
The Craps Test
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
5/8
C. Testes Diehard
O Diehard retorna para cada um dos testes, valores-p que
pertencem ao intervalo [0,1]. Caso se obtenha um valor-p <0.025
ou >0.975, o teste falhou.
De qualquer maneira, o criador dos testes, G. Marsaglia, deixa
uma nota a referir que pontualmente, mesmo bons geradores,
poderão falhar alguns testes.
Os 15 testes mencionados são de 3 tipos distintos:
c - Birthday spacing, Overlapping permutations, Rank of
matrices (2), count the 1s (2), squeeze, craps;
KS - Minimum distance, random spheres, overlapping sums,
runs;
N - Monkey (2), parking lot.
2
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
6/8
D. Resultados
Da análise aos resultados obtidos (Resultados.txt) verifica-se que:
Nº valores-p Ok
 [0.025,0.975]
Teste
Nº valores-p Nok
Resultado
<0.025 ou >0.975
1. Birthday Spacings
9
0
2. Overlapping Permutations
1
1
3. Ranks of 31x31 and 32x32 matrices
2
0
4. Ranks of 6x8 Matrices
24
1
5. Monkey Tests on 20-bit Words
20
0
6. Monkey Tests OPSO,OQSO,DNA
80
2
7. Count the 1`s in a Stream of Bytes
2
0
8. Count the 1`s in Specific Bytes
24
1
9. Parking Lot Test
10
0
10. Minimum Distance Test
1
0
11. Random Spheres Test
20
0
12. The Sqeeze Test
1
0
13. Overlapping Sums Test
10
0
Legenda:
14. Runs Test
4
0
Passou
15. The Craps Test
2
0
Falhou
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
7/8
D. Resultados
O ficheiro utilizado como input do Diehard passou em todos os
testes, com excepção do teste 2. Overlapping Permutations,
podendo eventualmente existir fragilidades que poderão ser
exploradas por um atacante.
Assim, é possível concluir que o OpenSSL é um bom gerador de
números pseudo-aleatórios.
Em termos de desempenho de execução, foram obtidas
performances excelentes:
Geração do ficheiro de números aleatórios com 12 MB – 20s;
Execução dos testes Diehard – 60s.
Teste Diehard aplicado ao gerador da biblioteca OpenSSL
8/8
Download

Teste Diehard aplicado ao gerador da biblioteca OpenSSL