14 de Dezembro de 2009 Teste Diehard aplicado ao gerador da biblioteca OpenSSL Segurança em Redes Móveis Elaborado por: Luís Ricardo Fonseca Instituto Superior Técnico
2 / 8 A. Objectivos B. Geração de Números (OpenSSL) C. Testes Diehard D. Resultados Teste Diehard aplicado ao gerador da biblioteca OpenSSL Indice
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. 3 / 8 Teste Diehard aplicado ao gerador da biblioteca OpenSSL
B. Geração de Números (OpenSSL) 4 / 8 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: Teste Diehard aplicado ao gerador da biblioteca OpenSSL #include 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; }
C. Testes Diehard 1. Birthday Spacings 2. Overlapping Permutations 3. Ranks of 31x31 and 32x32 matrices 4. Ranks of 6x8 Matrices 5. Monkey Tests on 20-bit Words 6. Monkey Tests OPSO,OQSO,DNA 7. Count the 1`s in a Stream of Bytes 8. Count the 1`s in Specific Bytes 9. Parking Lot Test 10. Minimum Distance Test 11. Random Spheres Test 12. The Sqeeze Test 13. Overlapping Sums Test 14. Runs Test 15. The Craps Test 5 / 8 Os testes realizados (Diehard) foram os seguintes: Teste Diehard aplicado ao gerador da biblioteca OpenSSL
C. Testes Diehard 6 / 8 O Diehard retorna para cada um dos testes, valores-p que pertencem ao intervalo [0,1]. Caso se obtenha um valor-p 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: 2 - 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. Teste Diehard aplicado ao gerador da biblioteca OpenSSL
7 / 8 Teste Diehard aplicado ao gerador da biblioteca OpenSSL D. Resultados Legenda: Passou Falhou Teste Nº valores-p Ok [0.025,0.975] Nº valores-p Nok Resultado 1. Birthday Spacings90 2. Overlapping Permutations11 3. Ranks of 31x31 and 32x32 matrices20 4. Ranks of 6x8 Matrices Monkey Tests on 20-bit Words Monkey Tests OPSO,OQSO,DNA Count the 1`s in a Stream of Bytes20 8. 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 Test20 Da análise aos resultados obtidos (Resultados.txt) verifica-se que:
D. Resultados 8 / 8 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