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