• Nenhum resultado encontrado

Avaliação de geradores de números pseudoaleatórios baseados em autômatos celulares não elementares

N/A
N/A
Protected

Academic year: 2021

Share "Avaliação de geradores de números pseudoaleatórios baseados em autômatos celulares não elementares"

Copied!
151
0
0

Texto

(1)

SILVIA REGINA LEITE MAGOSSI

AVALIAÇÃO

DE

GERADORES

DE

NÚMEROS

PSEUDOALEATÓRIOS

BASEADOS

EM

AUTÔMATOS

CELULARES

NÃO

ELEMENTARES

CAMPINAS 2019

(2)

SILVIA REGINA LEITE MAGOSSI

AVALIAÇÃODEGERADORESDENÚMEROSPSEUDOALEATÓRIOSBASEADOS EMAUTÔMATOSCELULARESNÃOELEMENTARES

Dissertação apresentada à Faculdade Engenharia Elétrica e de Computação da Universidade Estadual de Campinas como parte dos requisitos exigidos para a obtenção do título de Mestre em Engenharia Elétrica, Área de Engenharia de Computação

Orientador: Prof. Dr.MARCO AURÉLIO AMARAL HENRIQUES

ESTE EXEMPLAR CORRESPONDE À VERSÃO FINAL DA DISSERTAÇÃO DEFENDIDA PELA ALUNA SILVIA REGINA LEITE MAGOSSI, ORIENTADA PELO PROF. DR. MARCO AURÉLIO AMARAL HENRIQUES

CAMPINAS 2019

(3)
(4)

Candidata: SILVIA REGINA LEITE MAGOSSI RA 918277 Data da Defesa: 09 de Abril de 2019

Título da Tese: AVALIAÇÃO DE GERADORES DE NÚMEROS

PSEUDOALEATÓRIOS BASEADOS EM AUTÔMATOS CELULARES NÃO ELEMENTARES

Prof. Dr. Marco Aurélio Amaral Henriques FEEC/Unicamp (Presidente) Prof. Dr. Paulo Lício de Geus IC/Unicamp

Prof. Dr. Tiago Fernandes Tavares FEEC/Unicamp

A ata de defesa, com as respectivas assinaturas dos membros da Comissão Julgadora, encontra-se no SIGA (Sistema de Fluxo de Dissertação/Tese) e na Secretaria de Pós Graduação da Faculdade de Engenharia Elétrica e de Computação.

(5)

A meu marido, José Carlos, e a minhas filhas, Giulia e Clara, pelo apoio

incondicional em todos os momentos, principalmente nos de incerteza, muito

comuns para quem tenta trilhar novos caminhos. Sem vocês nenhuma

conquista valeria a pena.

(6)

Este trabalho é fruto de um sonho, realizado com muito estudo, esforço e empenho, mas que foi possível principalmente por ter encontrado pessoas que me apoiaram, me ensinaram e me conduziram, revelando um caminho possível.

Agradeço a Deus por me colocar diante de pessoas sensíveis e inteligentes, como o Prof. Dr. José Carlos Magossi, meu marido, que me apoiou nesta caminhada, me ensinando e me estimulando ao conhecimento.

Agradeço ao Prof. Dr. Marco Aurélio Amaral Henriques, meu orientador, pelo profissionalismo, pela ética e compromisso com a ciência. A ele o meu reconhecimento pela oportunidade de realizar este trabalho, meu respeito e admiração por sua serenidade, sua capacidade de análise do perfil de seus alunos e por seu dom no ensino da ciência, com simplicidade e eficiência.

Também agradeço aos bons professores que tive a oportunidade de ouvir e adquirir conhecimentos com suas instruções, lições e experiências.

Não posso deixar de agradecer aos amigos do laboratório LCA Laboratório de Computação e Automação da FEEC Faculdade de Engenharia Elétrica e de Computação e aos alunos que participam do grupo ReGrAS Research Group on Applied Security, que me ajudaram com programas, com discussões e com a compreensão de muitos assuntos. Cito aqui alguns nomes: Moisés Danziger, Vitor Moia, Antônio Unias, Yoshitomi Maehara, Felipe Balabanian e muitos outros que fizeram parte das nossas reuniões semanais.

Por fim, agradeço à minha família e às minhas filhas, Clara Giuliana e Giulia Isabela, razão da minha força e orgulho em minha vida.

Espero que este trabalho possa contribuir para aumentar nossos conhecimentos e que muitos outros possam fazer uso dos resultados aqui expressos.

(7)

Neste trabalho estudamos a geração de números pseudoaleatórios usando diferentes tipos de autômatos celulares não elementares (AC), para checar a hipótese de que autômatos celulares mais complexos conseguem produzir sequências aleatórias com qualidade (aleatoriedade) aceitável e menor custo que os autômatos mais elementares. Para avaliar a qualidade das sequências pseudoaleatórias produzidas por estes autômatos e compará-las mais facilmente, utilizamos os testes padronizados do National Institute of Standards and Technology (NIST) e propomos uma métrica que consolida vários parâmetros destes testes. Esta métrica permite uma comparação das relações custo/benefício de diversos geradores, incluindo os não baseados em autômatos celulares. Com base nesta avaliação, investigamos o potencial de vários tipos de autômatos na geração de números pseudoaleatórios e a viabilidade de empregá-los como parte do gerador de números pseudoaleatórios do sistema operacional Linux. Os resultados são favoráveis à utilização de autômatos celulares não elementares como geradores de números pseudoaleatórios, uma vez que alguns deles apresentam vantagens de desempenho e qualidade em relação a outras alternativas. Finalmente, discutimos o cuidado extra necessário quando um autômato celular é usado como gerador de números pseudoaleatórios em aplicações seguras.

Palavras-chave: Autômato Celular; gerador de números pseudoaleatórios; números

aleatórios; autômato celular bidimensional; vizinhança de Von Neumann; métrica de aleatoriedade; geradores de números pseudoaleatórios criptograficamente seguros.

(8)

In this work we study the generation of pseudorandom numbers using different types of non-elementary cellular automata (CA) in order to check the hypothesis that more complex cellular automata can produce random sequences with acceptable quality (randomness) and costing less than the most commonly used CA: The elementary automata. To assess the quality of pseudorandom number sequences produced by these automata and compare them more easily, we use standardized testing software provided by the National Institute of Standards and Technology (NIST) and propose a method to consolidate several test results into few parameters. This method allows the comparison of the cost-benefit ratios of various generators, including those not related to cellular automata. Based on this evaluation, we investigate the potential of various types of automata in pseudorandom number generation and the feasibility of employing them as part of the pseudorandom number generator of the Linux operating system. The results are favorable to the use of non-elementary cellular automata as pseudorandom number generators, since some of them show quality and performance advantages relative to other alternatives. Finally, we discuss the extra care needed when a cellular automata is used as pseudorandom number generator in secure applications.

Keywords: Cellular Automata; pseudorandom numbers generator; random numbers; two-dimensional cellular automaton; Von Neumann neighborhood; metric of randomness; cryptographically secure pseudorandom number generator.

(9)

AC Autômato Celular

CSPRNG Cryptographically Secure Pseudorandom Number Generator

IoT Internet of Things

LFSR Linear Feedback Shift-Register LRNG Linux Random Number Generator

NIST National Institute of Standards and Technology PRNG Pseudorandom Number Generator

RNG Random Number Generator SHA-1 Secure Hash Algorithm (v. 1) TRNG True Random Number Generator VLSI Very Large Scale Integration BIST Built-in Self-Test

(10)

k número de estados possíveis em uma célula

i posição de uma célula individual em um arranjo unidimensional de células

t instante de tempo

ai(t) estado da i-ésima célula no instante de tempo t

r raio: distância da célula a ser atualizada em relação à vizinha mais distante usada na atualização

ci, j célula c em um arranjo bidimensional de células; i indica a linha e j, a

coluna

ai,j(t) estado da célula na posição (i,j) no instante de tempo t

D vetor de regras de um autômato celular (AC) híbrido di i-ésimo elemento do vetor D

MF Média Final de qualidade R Relação custo/benefício FQ Fator de Qualidade

FQI Fator de Qualidade Inicial NMR Nota Mínima de Referência

p-value Valor estatístico referente a cada sequência analisada P-VALUE Valor estatístico de todas as sequências analisadas

(11)

1.1 Objetivos da pesquisa 14

1.1.2 Objetivos 15

1.2 Metodologia e contribuições 15

1.3 Organização do Texto 16

2. Autômato Celular 18

2.1 Autômato celular unidimensional de raio um 19

2.2 Autômato celular unidimensional de raio dois 21

2.3 Autômato celular bidimensional de raio um 22

2.4 Autômato celular híbrido 23

2.5 Condições de Fronteira 24

2.6 Classes Wolfram 26

2.7 Regras da mesma família e regras similares na evolução em grupos

distintos 28

2.7.1 Identificação de regras inversa, espelho e espelho-inversa 28 2.7.2 Identificação de regras unidimensionais de raio dois com regras

elementares 31

2.7.3 Identificação de regras bidimensionais com regras elementares 32

2.7.4 Validação de Regras Equivalentes 33

2.8 Conclusões 34

3. Geradores de Números Aleatórios 36

3.1 Geradores de números verdadeiramente aleatórios (TRNGs) 36 3.2 Geradores de números pseudoaleatórios (PRNGs) 37 3.2.1 Exemplo de PRNG: o gerador congruente linear 38 3.2.2 Gerador de números aleatórios do Linux (LRNG) 39 3.3 Principais propriedades para geradores de números pseudoaleatórios

PRNGs 40

3.4 Utilização de autômatos celulares como PRNGs 43

3.5 Trabalhos relacionados 44

3.6 Conclusões 47

4. Uma metodologia para avaliar geradores de números pseudoaleatórios 48

4.1 Testes do NIST 48

4.2 Definição de parâmetros e diferentes estratégias de coleta dos bits 55 4.3 Avaliação e resultados da coleta por linha/coluna para os ACs elementares,

híbrido e unidimensional de raio dois 56

(12)

5.1 Avaliação com a nova métrica das sequências geradas pelos ACs 65 5.1.1 Coleta de bits por plano no AC bidimensional 65 5.1.2 Coleta de bits da coluna central no AC bidimensional 66 5.2 Avaliação com a nova métrica das sequências geradas pelo PRNG do Linux 69

5.3 Definição de relação custo/benefício 70

5.4 Relação custo/benefício dos PRNGs avaliados 74

5.5 Conclusões 78

6. Análise dos ACs em geradores criptograficamente seguros 80 6.1 Estratégias de coletas voltadas à segurança criptográfica 80 6.2 Resultados iniciais acerca de segurança criptográfica 83

6.3 Análise de Segurança 87

6.4 Avaliação da substituição do SHA-1 do LRNG por um AC-2D 100

6.5 Conclusões 106

7. Conclusões finais e trabalhos futuros 108

REFERÊNCIAS 111

APÊNDICE 1:Trabalhos publicados 117

APÊNDICE 2 : Um breve histórico sobre geradores de números aleatórios 118

APÊNDICE 3 :Tabelas de regras equivalentes 125

APÊNDICE 4 : Cálculo das regras inversa, espelho e espelho-inversa em ACs

elementares 128

APÊNDICE 5 : Método para identificar regras equivalentes 131 APÊNDICE 6 : Uma estrutura particular para construção de regras 136 APÊNDICE 7 : Análise do impacto do número de testes sobre os resultados 141 APÊNDICE 8 : Utilização de autômatos celulares como função hash 142 APÊNDICE 9 : Análise do algoritmo de realimentação e extração de bits do

(13)

1.I

NTRODUÇÃO

O surgimento da Internet possibilitou a transmissão de informações em ritmo acelerado e intenso. Com ela estabeleceram-se conexões entre máquinas, pessoas, indústrias etc., com vistas às facilidades de transmissão das informações. Isso gerou, sem sombra de dúvidas, problemas, sejam eles associados aos dispositivos de conexão ou à segurança das informações transmitidas.

Estima-se que, em futuro breve, mais de vinte bilhões de equipamentos eletrônicos estejam conectados à Internet. A segurança das informações transmitidas é uma preocupação frequente. Como exemplo podem ser citados os investimentos atuais em segurança voltados à Internet das Coisas (IoT). Esses investimentos são necessários, haja vista que somente nos cinco primeiros meses de 2017 foram identificadas cerca de 7.242 versões de software que violam a segurança de sistemas (malwares) alocados em dispositivos na IoT, discussão que pode ser acompanhada no trabalho de Martinez [MARTINEZ 2017].

Algumas informações que trafegam pelas redes de computadores precisam ser protegidas. Isso implica a criação de protocolos de segurança, os quais podem consumir recursos de processamento de memória e de comunicação. Dispositivos embarcados, por exemplo, apesar de todas as melhorias desenvolvidas, ainda têm baixa capacidade de processamento e memória reduzida [MEGAS 2017].

Os Autômatos Celulares (ACs) são um caso particular de sistema dinâmico com tempo e espaço discretos [WOLFRAM 1996B] e com características de evolução complexa por meio de procedimentos computacionais simples. Eles podem ser utilizados como geradores de números pseudoaleatórios (PRNGs) [TOMASSINI 2001] ou como funções hash [KUMARESAN 2017], discussão apresentada no Apêndice 8. Na análise dos ACs, parâmetros tais como regra de evolução, tamanho, número de iterações, condições de fronteira e forma da coleta dos resultados mostraram-se fundamentais na produção de bits pseudoaleatórios. Percebe-se que a

(14)

busca por parâmetros calibrados corretamente é de extrema importância, pois eles influenciam na aleatoriedade dos números produzidos.

1.1 Objetivos da pesquisa

1.1.1 Definição do problema

Partimos da hipótese de que ACs não elementares podem gerar números pseudoaleatórios com qualidade aceitável e com um custo mais baixo quando comparado ao dos ACs elementares. Dizemos que uma sequência de números pseudoaleatórios tem qualidade aceitável se for aprovada em testes específicos de aleatoriedade. Esses testes são projetados para medir a aleatoriedade das sequências numéricas produzidas por um gerador. Embora seja impossível fornecer uma prova matemática de que um gerador é de fato aleatório, tais testes ajudam a detectar alguns tipos de fragilidade que o mesmo possa ter. A conclusão de cada teste não é definitiva e sim probabilística. [KATS 1996].

Para avaliar ACs não elementares, foi necessário um estudo minucioso sobre os mesmos, a fim de calibrar parâmetros, tais como: tipo de vizinhança, número de células, forma de coleta dos bits de saída, número de iterações e regra de evolução.

Outra questão importante surge com a escolha do conjunto de testes de aleatoriedade. Existem várias alternativas na literatura e foi preciso avaliar qual delas seria mais adequada para este trabalho. Além disso, em razão da forma como as informações são apresentadas nestes testes, foi necessário buscar uma métrica que consolidasse os resultados e simplificasse a avaliação das sequências de números geradas.

Além da avaliação da aleatoriedade proporcionada por diferentes geradores, foi preciso avaliar também os custos e os benefícios de cada um, sem deixar de lado outros aspectos importantes como a viabilidade de usar um determinado gerador em aplicações criptográficas, dadas a importância que geradores de números pseudoaleatórios têm nestas aplicações e as exigências de segurança das mesmas.

(15)

1.1.2 Objetivos

Este trabalho tem como ponto central a investigação de novos ACs não elementares (uni e bidimensionais) para serem utilizados como PRNGs. Para atingir tal objetivo, propomos o uso vários tipos de ACs e utilizamos testes do NIST com a finalidade de analisar e comparar a qualidade das sequências aleatórias produzidas por eles. Os resultados também serão confrontados com os de outros PRNGs a fim de avaliar o quão viável e vantajosa seria uma troca do núcleo destes PRNGs para trabalharem com ACs.

Também cabe uma discussão sobre como utilizar os ACs como PRNGs em aplicações sensíveis, onde é necessário que os geradores sejam criptograficamente seguros. O estudo desta questão também é um objetivo deste trabalho.

1.2 Metodologia e contribuições

Para atingir nossos objetivos, iniciamos os estudos com um AC simples (regra 30), que já é bem conhecido na literatura e utilizado no software Mathematica como gerador de números pseudoaleatórios [WOLFRAM 1986B]. Em seguida, realizamos uma busca exaustiva em artigos, livros e sites com o propósito de encontrar regras diferentes, além de uma investigação para encontrar um método para definir regras aleatórias em grupos distintos.

Um outro passo foi a implementação de programas, ajustando-os a cada tipo e forma dos ACs estudados, com a finalidade de produção e coleta dos bits. Foi realizada também uma investigação dos diversos suite de testes estatísticos disponíveis, para verificação da aleatoriedade, e após estudos, optamos pelos testes do Instituto Nacional de Padrões e Tecnologia dos EUA (NIST-National Institute of Standards and Technology [RUKHIN 2010], dado o amplo uso dos mesmos na literatura, o grande volume de informações a respeito dos testes e a disponibilidade do código fonte. Para simplificar a análise dos resultados emitidos pelo NIST, entendemos que seria conveniente propor uma nova métrica para consolidar os diversos parâmetros produzidos por esses testes estatísticos.

(16)

Com base nos valores obtidos pela conjunção entre os resultados do NIST e a métrica proposta, partimos para uma nova empreitada, que leva em conta o custo computacional, indicado pelo número de operações que cada algoritmo realiza, e o benefício alcançado, traduzido pelo nível de aleatoriedade de cada gerador. Cabe ressaltar que esse estudo resultou em diversas contribuições, tais como: métrica utilizada para avaliar a eficiência de geradores utilizando testes do NIST; forma de ajuste dos diversos parâmetros para fornecer aleatoriedade usando ACs; demonstração de como os ACs não elementares podem ser adaptados para funcionar como geradores de números aleatórios; e indicação das formas de uso de PRNGs baseados em ACs para aplicações seguras.

1.3 Organização do Texto

O texto está organizado da seguinte forma: os Autômatos Celulares e um método para encontrar regras idênticas em sua evolução são apresentados no Capítulo 2. No Capítulo 3 é feita uma discussão sobre geração de números aleatórios, e também sobre o gerador de números aleatórios do Linux (LRNG). No Capítulo 4 apresentamos os testes de aleatoriedade do NIST, sua aplicação nas sequências aleatórias, e a realização da primeira bateria de testes e sua análise. Ainda nesse capítulo, apresentamos a proposta de uma nova métrica que busca sintetizar os resultados do NIST. O Capítulo 5 trata de diferentes estratégias de coleta de bits gerados por ACs e seus resultados. No Capítulo 6 apresentamos uma discussão sobre a aplicação de ACs em geradores de números pseudoaleatórios criptograficamente seguros. Finalmente, no Capítulo 7, temos as conclusões e os trabalhos futuros, seguidos pelas referências usadas nesta pesquisa.

No Apêndice 1 listamos os trabalhos publicados e que foram decorrentes desta pesquisa. No Apêndice 2, temos uma breve apresentação sobre a história dos geradores de números aleatórios. No Apêndice 3 trazemos tabelas de regras de ACs equivalentes e no Apêndice 4 discutimos os cálculos para encontrar as regras inversa, espelho e espelho-inversa em ACs elementares. Já no Apêndice 5 apresentamos um método para identificar regras equivalentes. No Apêndice 6 apresentamos uma estrutura particular para construção de regras e, no Apêndice 7, é feita uma discussão

(17)

sobre a quantidade de testes repetidos a cada experimento para uma maior confiabilidade dos resultados. No Apêndice 8, mostramos como os ACs podem ser utilizados como função hash. Por fim, no Apêndice 9, fazemos uma discussão sobre o algoritmo de realimentação e extração de bits do LRNG.

(18)

2.

A

UTÔMATO

C

ELULAR

Na década de 50 do século XX o matemático John von Neumann propôs um modelo de autorreprodução biológica [VON NEUMANN 1951] por um espaço celular, utilizando autômato celular (AC). Ele estava interessado em derivar computacionalmente um espaço celular com características de autorreprodução. Stanislaw M. Ulam fez grandes contribuições a esse trabalho [ULAN1952].

Arthur W. Burks, logo após a morte de von Neumann em 1957, revisou os trabalhos sobre AC e os editou, publicando um livro intitulado Theory of Self-Reproducing Automata [VON NEUMANN 1966]. A partir disso o interesse científico por autômatos celulares aumentou e outras aplicações surgiram em diversas áreas, tais como: na biologia [ERMETROUT 1993], no processamento de imagens [PRESTON 1979] e no processamento paralelo [MANNING 1977]. Mas foi com Stephen Wolfram, na década de 1980, que se iniciou uma nova vertente de aplicações de AC, utilizando-os como modelos matemáticos para sistemas estatísticos de auto-organização [WOLFRAM 1983].

Dentre as características de auto-organização mencionadas por Wolfram, uma identificava regras aleatórias em sua evolução [WOLFRAM 1986A]. Esse tipo de AC pode ser utilizado em diversas aplicações que exijam o uso de números aleatórios, como sistemas de simulação, por exemplo, por possibilitar a criação de geradores de números pseudoaleatórios a um baixo custo [BOUVRY 2004].

Os ACs, um caso particular de sistema dinâmico com tempo e espaço discretos [WOLFRAM 1995], com características de evolução complexa e por meio de procedimentos computacionais simples, podem ser utilizados como geradores de números pseudoaleatórios (PRNGs) [WOLFRAM 1986B] ou como funções hash [KUMARESAN 2017].

Na análise dos ACs, parâmetros como número de regra, tamanho, iterações, condições de fronteira e forma da coleta dos bits, mostraram-se fundamentais na estrutura de produção de bits pseudoaleatórios. Percebe-se que a busca por parâmetros calibrados corretamente é de extrema importância, pois eles indicam melhorias na qualidade dos números produzidos, tornando o sistema mais eficiente.

(19)

O ponto de partida desta pesquisa é o AC unidimensional binário de raio um regido pela Regra 30, que configura um bom gerador de números pseudoaleatórios [WOLFRAM 1986B]. Estende-se a análise a outros três tipos de ACs: o unidimensional de raio 2, o bidimensional de raio um e o híbrido 90/150.

Como é muito usado em outros trabalhos da literatura e pela facilidade de acesso ao código fonte, decidimos adotar o conjunto de programas do NIST, que fornece software voltados à análise e classificação de números pseudoaleatórios com base em testes estatísticos [RUKHIN 2010]). As métricas e os desenvolvimentos desta pesquisa fundamentam-se em indicadores baseados nesses testes.

2.1 Autômato celular unidimensional de raio um

Apresentamos, na sequência, uma estrutura unidimensional simples (Figura 2.1), que pode ser vista como um arranjo discreto de células, em que cada célula assume os valores zero ou um. A evolução se dá ao considerar que, a cada intervalo de tempo, as células se alteram de acordo com regras e com estados anteriores. As alterações dependem do próprio estado da célula e dos estados das células vizinhas, à esquerda e à direita. As células evoluem em tempo discreto, governadas por uma regra determinística uniforme.

Figura 2.1 Autômato celular binário com 16 células

Designa-se por parâmetro k a quantidade de estados por célula, e por raio r a distância da célula central (célula avaliada) em relação à sua vizinha mais distante.

Os ACs unidimensionais com quantidade de estados k=2 (binários) e raio r=1 usam 2r+1= 3 células em suas regras de evolução e são chamados de ACs de vizinhança tres. Deste modo, tem-se k2r+1= 8 possíveis padrões de vizinhança (Figura

2.2). Estes ACs binários, unidimensionais de raio unitário também são chamados de ACs elementares.

(20)

Com base nesses oito padrões, tem-se um total de 28=256 configurações

de estado futuro possível para a célula central de cada um deles.

Os estados futuros possíveis da célula central (um para cada padrão) representam, na sequência dos oito padrões, os oito bits do número da regra, a qual é normalmente descrita em base dez. No exemplo da Figura 2.2 temos os oito estados futuros da célula central definidos como 00011110, que equivalem ao valor 30 na base dez.

Notação utilizada para caracterizar um AC elementar:

i: posição de uma célula individual em um arranjo unidimensional de células;

t: instante de tempo;

ai(t+1): estado da i-ésima célula no instante de tempo (t+1);

r (raio): distância da célula a ser atualizada em relação à vizinha mais distante.

Os valores das células evoluem de acordo com as iterações da regra escolhida, como mostra a Eq. (2.1) para um AC de raio r.

ai(t+1) = f [ai-r(t),ai-r+1(t), ,ai(t), ,ai+r-1(t),ai+r(t)] (2.1)

Como exemplo, apresentam-se na Tabela 2.1 os padrões de evolução associados às regras 30 e 150.

Tabela 2.1 Padrões de evolução para um AC elementar segundo as regras 30 e 150

As correspondentes expressões lógicas para as regras 30 e 150 são apresentadas nas Eqs. (2.2) e (2.3).

Regra 30 : ai(t+1) = ai-1(t) ⊕ (ai(t) ∨ ai+1(t)) (2.2)

(21)

O operadore e deno am a opera e l gica de o e cl i o e o incl i o , re pec i amen e.

2.2 Autômato celular unidimensional de raio dois

Os ACs unidimensionais binários (k = 2) com raio r = 2 usam 2r+1= 5 células binárias em suas regras de evolução e são chamados de ACs de vizinhança cinco. Desse modo, tem-se k2r+1= 32 possíveis padrões de vizinhança, apresentados na

Figura 2.3.

Figura 2.3 Os 32 padrões de vizinhança e uma possível evolução (regra 1436194405) em AC unidimensional de raio dois

Com base nos 32 padrões de vizinhança possíveis, tem-se um total de 232

= 4.294.967.296 mapeamentos distintos referentes a todas as configurações para o próximo estado da célula central nos 32 padrões de vizinhança. A função de transição de estado para um AC com raio dois unidimensional é apresentada na Eq. (2.4).

ai(t+1) = f [ai-2(t),ai-1(t),ai(t),ai+1(t),ai+2(t)] (2.4)

A regra binária 1436194405 unidimensional de raio 2, representada na Figura 2.3, foi definida por um algoritmo genético (para produção de números pseudoaleatórios) [KAR 2011] e, por isso, iremos adotá-la neste trabalho.

(22)

2.3 Autômato celular bidimensional de raio um

Os ACs bidimensionais possuem características em comum com os ACs unidimensionais, mas têm dois tipos de vizinhança. A primeira chama-se vizinhança Von Neumann, (Figura 2.4), que consiste em um arranjo de cinco células. A segunda chama-se vizinhança Moore, com arranjo de nove células (Figura 2.5) [Von NEUMANN 1966]. Em ambos os casos, raio=1.

Figura 2.4 Vizinhança Von Neumann Figura 2.5 Vizinhança Moore

Neste trabalho iremos considerar os ACs bidimensionais de vizinhança Von Neumann, com configuração k = 2 e r = 1. Eles utilizam 4r+1 = 5 células binárias em suas regras de evolução e são chamados de ACs de vizinhança 5. Desse modo, tem-se k4r+1 = 32 possíveis padrões de vizinhança (Figura 2.6).

Figura 2.6 Os 32 padrões de vizinhança e uma possível evolução (Regra 1453938345) em AC bidimensional de raio um

Nota-se aqui a ocorrência de 32 padrões de vizinhança possíveis, com um total de 232= 4.294.967.296 estados distintos, referentes a todas as configurações de

saída para os 32 padrões de vizinhança (mais de quatro bilhões de regras possíveis). Uma delas, utilizada nesta pesquisa e apresentada na Figura 2.6, é uma regra

(23)

construída com base em alguns padrões de evolução extraídos da regra 30, chamados por Wolfram de padrões permitidos [WOLFRAM 2003 p. 943].

A função de transição de estado para os ACs com vizinhança Von Neumann e raio dois é apresentada na Eq. (2.5).

ai,j(t+1) = f[ai,j(t),ai,j+1(t),ai+1,j(t),ai,j-1(t),ai-1,j(t)], (2.5)

onde:

i, j: posição de uma célula em um arranjo bidimensional de células; i indica a linha e j, a coluna.

t: instante de tempo;

ai,j(t+1): estado da célula na posição (i,j) no instante de tempo (t+1).

2.4 Autômato celular híbrido

Se todas as células estão sujeitas a uma mesma regra, então o AC é dito uniforme; caso contrário é hibrido ou não uniforme. Em um AC híbrido são aplicadas regras diferentes nas células do AC, de acordo com a posição de cada uma delas. Estudos feitos com ACs híbridos mostram que combinações específicas das regras 90 e 150 (denotadas por 90/150) com fronteira nula (detalhada mais adiante) geram comportamento aleatório na evolução, resultado de interesse para este trabalho.

Sua evolução é definida por um vetor de regras, em que zero se refere à regra 90 e um, à regra 150 [CHAUDHURI 1995]. ]

Esse vetor D = [d1, d2, ...dn] não é modificável, e a função de transição para o próximo instante de tempo, em um AC híbrido, é apresentada na Eq. (2.6).

fi [ ai-1(t) , ai(t) , ai+1(t) ] = ai-1(t) ⊕ di ai(t)⊕ ai+1(t) (2.6)

A computação para as regras 90 e 150 está exposta nas Eqs. (2.7) e (2.8). Regra 90 : ai(t+1) = ai-1(t) ⊕ ai+1(t) (2.7)

Regra 150: ai(t+1) = ai-1(t) ⊕ ai(t) ⊕ ai+1(t) (2.8)

É possível gerar padrões complexos em ACs híbridos 90/150. Nesse caso, cada célula obedece uma regra distinta em sua evolução, de maneira a reproduzir o

(24)

comportamento de uma estrutura conhecida como Linear Feedback Shift Register. Nessa estrutura geram-se padrões aleatórios com ciclo de repetição máximo (2n-1,

onde n é o número de células do AC), se determinadas condições forem satisfeitas [CATTELL 1996].

2.5 Condições de Fronteira

Sem perda de generalidade, considera-se, para efeitos didáticos, um AC unidimensional, como um vetor de elementos binários [x, ... , y]. Esse vetor, com suas fronteiras à esquerda (indicada por E) e à direita (por D), pode ser representado por [E, x, ..., y, D].

Na evolução dos ACs há seis possíveis condições de fronteira: fronteira fixa nula [0, x,...,y,0], fronteira fixa 11 [1,x,...y,1], fronteira fixa 01 [0,x,...,y,1], fronteira fixa 10 [1,x,...,y,0], fronteira periódica [y, x, ...,y, x] e fronteira intermediária [x, x,..., y,y].

No AC com fronteira periódica, as células mais à esquerda e mais à direita são consideradas vizinhas [y, x, ..., y, x]. Para um AC com condições de fronteira intermediária, a fronteira à esquerda E assume o valor da própria célula mais à esquerda x e a fronteira à direita D assume o valor da própria célula mais à direita y.

Para este trabalho os tipos de fronteira consideradas são as fronteiras fixas e a periódica. A Figura 2.7 detalha as fronteiras fixas.

a. Fronteira Fixa Nula [0,x,...,y.0]

b. Fronteira Fixa 11 [1,x,...,y,1]

c. Fronteira Fixa 01 [0,x,...,y,1]

d. Fronteira Fixa 10 [1,x,...,y,0] Figura 2.7 Condições de Fronteira Fixa

(25)

Podemos observar nas (Figuras 2.8 e 2.9) a representação das fronteiras periódica e intermediária, em que os valores das extremidades se alternam com a evolução do AC. O AC com fronteira periódica gera sequências de estados com maior aleatoriedade [SALMAN 2013].

Figura 2.8 Condi o de Fronteira Periódica

Figura 2.9 Condição de Fronteira Intermediária

Apresenta-se na Figura 2.10 a evolução de dois ACs uniformes (regra 30), partindo de um estado inicial com apenas uma célula igual a 1, ou seja, [0,...,0,1,0,...,0]. A primeira evolução usa fronteira periódica e a segunda, fronteira nula.

Figura 2.10 Diagrama Espaço-tempo de dois ACs Regra 30 com fronteira periódica e fronteira nula no tamanho de 128 células e 500 iterações

(26)

2.6 Classes Wolfram

Wolfram utilizou medidas estatísticas de ordem e caos nos padrões gerados pela evolução de ACs unidimensionais binários de raio um (também conhecidos como ACs elementares) para distinguir classes de comportamento denominadas por Class Wolfram [WOLFRAM 1995]. As classes encontradas foram as seguintes.

Classe 1: é a classe em que os ACs evoluem, de um estado inicial qualquer para um único estado homogêneo, em que todas as células ficam com o mesmo valor. A regra zero, regra 255 e regra 32 são alguns exemplos de regras dessa classe.

Classe 2: é a classe em que estados simples e estáveis são gerados de quaisquer estados iniciais. Os estados finais desses ACs são chamados de persistentes. Sua aparência é semelhante a listras. Possuem ciclos de períodos curtos, contendo a mesma estrutura persistente. São exemplos dessa classe: regra 2, regra 34 e regra 240.

Classe 3: é a classe dos ACs que evoluem para padrões caóticos, irregulares, a partir de quaisquer estados iniciais. Com o passar do tempo, na evolução de alguns ACs dessa classe, percebe-se a presença de características de irreversibilidade, como ocorre, por exemplo, com a regra 30. Daí a associação do termo aumento de entropia com a evolu o desses ACs. H tamb m uma vertente de evolução dessa classe cuja entropia é baixa, como é o caso das regras 90 e 150, que fazem parte de um conjunto de regras da classe 3 chamadas de simétricas.

Classe 4: é a classe em que os ACs evoluem de forma complexa. Em alguns casos, sua evolução direciona-se para a estabilidade, em outros, para o caos. Ao longo da evolução alguns estados desaparecem e outros se tornam persistentes, como é o caso das regras 137, 110 e 169.

Como o objetivo desta pesquisa reside na geração de números pseudoaleatórios, a análise dos ACs das classes 1, 2 e 4 está fora de escopo, haja vista a presença de regularidades nessas classes. Já a classe 3 mostra ser a mais adequada aos propósitos desta pesquisa para geração de números pseudoaleatórios.

(27)

As regras da classe 3 que pertencem ao grupo de regras que não respeitam a reflexão simétrica1, são de interesse desta pesquisa, por possibilitarem a geração

de números pseudoaleatórios com melhores propriedades, como foi apresentado por Wolfram [WOLFRAM 1995].

Pode ser observado nos diagramas espaço-tempo de tamanho 200 células x 200 iterações (Figuras 2.11 a 2.15) a evolução das regras 90, 150, 30, 45 e 60, todas da classe 3 e todas iniciando com uma única célula ao centro com estado um. As três últimas fazem parte do conjunto de regras assimétricas.

Figura 2.11 Regra 90 Figura 2.12 Regra 150

Figura 2.13 Regra 30 Figura 2.14 Regra 45 Figura 2.15 Regra 60

Apresentam-se também outros diagramas espaço-tempo, com exemplos da evolução de regras referentes às quatro classes, no tamanho 200 x 128, incluindo duas evoluções para cada regra: uma iniciando com uma única célula com estado um ao centro e outra com estado inicial aleatório (Figuras 2.16, 2.17, 2.18 e 2.19).

1 Segundo Wolfram [Wolfram 1983, p. 803] uma regra é considerada simétrica se no padrão 0 a saída for 0, se nos

padrões [1,4] as saídas forem [1,1] ou [0,0] e se nos padrões [3,6] as saídas forem [1,1] ou [0,0]. Caso contrário é dita ser assimétrica.

(28)

Figura 2.16 Classe 1 Regra 32 Figura 2.17 Classe 2 Regra 34

Figura 2.18 Classe 3 Regra 30 Figura 2.19 Classe 4 Regra 110

É possível fazer uma análise qualitativa com base na observação dos diagramas acima e identificar que as evoluções das regras da classe 1, 2 e 4 podem apresentar padrões regulares que se repetem, o que não é interessante para a geração de números pseudoaleatórios. As regras que se mostram mais adequadas pertencem à classe 3, que são as mais aleatórias.

2.7 Regras da mesma família e regras similares na

evolução em grupos distintos

2.7.1 Identificação de regras inversa, espelho e espelho-inversa

Após investigações sobre o trabalho de Wolfram com os ACs unidimensionais elementares, o qual compreende um conjunto de 256 regras, conseguimos verificar características em sua evolução que denominamos de regra inversa e regra espelho.

(29)

A partir de qualquer regra e utilizando os oito padrões do AC elementar é possível obter as quatro regras da mesma família, apresentaremos exemplos de regras que a chamamos de regras inversa (com bits invertidos), regras espelho, e espelho-inversa.

Dizemos que a regra 30 possui a sua inversa, que corresponde à regra 135; a evolução dessas regras se apresenta de formas diferentes: ocorre a inversão dos bits, ou seja, dada uma condição inicial invertida, as células que na regra 30 são um, na regra 135 são zero durante toda a evolução. Este comportamento pode ser observado nas Figuras 2.20 e 2.21, com a apresentação do diagrama espaço-tempo das regras 30 e sua inversa 135, com uma condição de início unitária em cada caso.

Figura 2.20 Regra 30 Figura 2.21 Regra 135

É possível encontrar no conjunto das 256 regras cada uma das suas correspondentes, chamadas de inversa.

No caso da Regra 86, ela tem como inversa a Regra 149; é apresentado o diagrama espaço-tempo das duas regras nas Figuras 2.22 e 2.23.

(30)

Não por acaso, escolhemos a Regra 86, que também é espelho da 30; quando observamos essas duas regras identificamos que possuem muita semelhança, no entanto estão apresentadas do lado oposto, como se a imagem da regra 30 estivesse refletida na regra 86. Essas observações podem ser analisadas nas Figuras 2.24 e 2.25.

Figura 2.24 Regra 30 Figura 2.25 Regra 86

Vamos também observar as regras, 30 com a 149, nas Figuras 2.26 e 2.27, temos o que chamamos de espelho-inversa, a idéia de reflexão é a mesma, com a diferença que a imagem projetada na regra 149 está com os bits invertidos. Apresentamos a forma de como chegar a regras espelho, inversa e espelho-inversa no Apêndice 4.

(31)

Portanto, ao encontrar as regras inversa, espelho, e espelho-inversa em relação a uma regra específica, estamos encontrando regras que possuem características de semelhança em sua evolução, e as denominaremos regras da mesma família.

2.7.2 Identificação de regras unidimensionais de raio dois com

regras elementares

Além da identificação de regras que fazem parte da mesma família, chegamos a uma forma de como identificar regras que possuem evoluções equivalentes em grupos distintos.

Observamos que há regras em ACs mais complexos que são equivalentes (produzem o mesmo padrão de saída) a regras de um AC elementar. Esta equivalência também existe para os ACs de raios maiores que 2 e para os ACs n-dimensionais com vizinhança von Neumann e vizinhança Moore.

Para obtenção das regras equivalentes é necessário realizar a conversão de regras elementares em regras de ACs maiores como, por exemplo, os ACs unidimensionais de raio dois. Para isso temos que encontrar os padrões raio 2 que correspondam aos elementares a partir da regra elementar escolhida.

Sabe-se que no conjunto de regras elementares existem 256 regras, e no conjunto das regras unidimensionais de raio doiis temos mais de quatro bilhões de regras; sendo assim, estima-se que existam 256 regras consideradas equivalentes a regras elementares no conjunto das quatro bilhões de regras de raio dois.

Construímos um método para identificar regras equivalentes em grupos distintos, que apresentamos no Apêndice 5, nessa seção nos limitaremos a exibir os diagramas espaço-tempo para uma observação, das regras equivalentes de raio dois e bidimensional de raio um von Neumann com a regra 30.

Após executar os cálculos necessários, chegamos ao número 66.847.740 que corresponde à regra de raio dois, equivalente à regra 30. Nas Figuras 2.28 e 2.29, podem-se observar os diagramas espaço-tempo das regras 30 e 66.847.740.

É possível verificar por meio de uma análise visual que existe um alto grau de similaridade na evolução dos dois ACs. Um exame mais rigoroso mostra que as

(32)

evoluções das duas regras são idênticas, ou seja, a regra 66.847.740 não passa de uma regra elementar 30 vestida com outra roupagem.

Figura 2.28 Regra 30 Figura 2.29 Regra 66.847.740

Uma lista com os 256 números de regras elementares e suas regras equivalentes aos ACs unidimensionais de raio dois pode ser vista no Apêndice 3.

2.7.3 Identificação de regras bidimensionais com regras

elementares

Para encontrar regras equivalentes bidimensionais de raio um com regras elementares, é preciso tomar o cuidado em perceber que a evolução ocorre de maneira diferente. Também é preciso observar a construção do padrão unidimensional de raio dois e o padrão bidimensional de raio um com vizinhança Von Neumann. Conforme mostra a Figura 2.30, observamos cinco células denominadas de C0, C1, C2, C3 e C4 e a Figura 2.31, o número de células é o mesmo, alterando

apenas a posição das células C0 e C4. Sabemos que os dois conjuntos possuem o

mesmo número de regras (232) e que devem haver, dentre estas, 256 regras

correspondentes às elementares.

(33)

Pelo fato de haver o mesmo número de células nos dois tipos de padrões, e portanto, o mesmo número de regras, as regras possuem os mesmos números.

Desse modo, rodamos a regra 66.847.740 em um programa com configuração Von Neumann (VN) e chegamos à conclusão de que são similares. Ao observarmos o padrão VN, temos as mesmas quatro combinações do AC unidimensional de raio dois no AC bidimensional de raio um; dessa forma, encontramos os mesmos números de regras para os ACs bidimensionais.

No entanto, uma comparação pela observação dos diagramas espaço-tempo se torna impraticável. No caso do AC bidimensional, sua evolução se dá em camadas, ou seja, a cada passo de tempo uma nova camada se forma. É possível observar a matriz de forma fatiada, iniciando com uma única célula ao centro valendo um, como mostrado na Figura 2.32. Assim, é viável verificar a similaridade entre as saídas, como mostrado na próxima seção.

2.7.4 Validação de Regras Equivalentes

Vamos considerar um plano 21 x 21 com valor um na célula central, conforme Figura 2.32. Se evoluirmos por t passos de tempo, com a regra

66.847.740, teremos t planos cujo comportamento se apresenta similar ao da regra elementar.

Figura 2.32 Representação de 15 planos da evolução da Regra 66.847.740 a partir de uma única célula central em um.

(34)

É preciso ter o cuidado na observação visual: se tomarmos apenas as linhas centrais de cada plano, colocarmos as mesmas justapostas, de forma a compor uma evolução unidimensional, teremos a mesma configuração da regra 30 ou da regra de raio 2 equivalente.

Para confirmar que os resultados eram os mesmos aplicamos uma função de hash (SHA-1) aos arquivos contendo as evoluções das regras citadas e os resultados foram idênticos.

Foram executados os mesmos passos para identificar a regra bidimensional de raio 1 com vizinhança Moore e chegou-se à regra:

0x00FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000 0000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF0000 00 (em notação hexadecimal).

Esta também foi evoluída a partir de uma condição inicial simples e mostrou comportamento idêntico à regra elementar 30. A Tabela 2.2 apresenta as quatro regras consideradas equivalentes.

Tabela 2.2 – Regras equivalentes

Com esse estudo foi possível definirmos uma estrutura em que é possível identificar regras elementares no padrão von Neumann e Moore, e como as regras utilizadas no experimento são observadas na nova estrutura. Mais detalhes podem ser encontrados nos Apêndice 5 e Apêndice 6 que exibe uma estrutura a partir da qual é possível chegarmos a regra MOORE equivalente.

2.8 Conclusões

Este capítulo apresentou diferentes tipos de ACs, desde o elementar até o AC bidimensional de raio um, passando pelos ACs híbrido e unidimensional de raio

(35)

dois. Observamos que os ACs com fronteira periódica apresentam resultados mais adequados para este trabalho do que os ACs cuja evolução se dá utilizando fronteira fixa.

Na sequência, abordamos os conceitos referentes a cada tipo de AC, e utilizamos para isso os ACs elementares, para identificar as principais características que um autômato celular deve possuir, a fim de desempenhar satisfatoriamente um comportamento requerido por um PRNG. O estudo realizado por Wolfram identificou quatro classes distintas para os ACs, chamadas de Classes Wolfram, sendo a Classe 3 a mais indicada para os propósitos deste trabalho.

Por fim apresentamos regras consideradas de uma mesma família, as quais exibem características de evolução semelhantes. Também foram apresentadas técnicas para encontrar regras que são idênticas em evolução, mesmo pertencendo a tipos diferentes de ACs.

Na sequência trataremos os conceitos e características dos geradores de números aleatórios e pseudoaleatórios, necessários para classificarmos as propostas dos geradores apresentados neste trabalho.

(36)

3.

G

ERADORES DE

N

ÚMEROS

A

LEATÓRIOS

À parte o questionamento filosófico, ou matemático, sobre a existência ou não de números aleatórios, sabe-se que números, com características de aleatoriedade, são de interesse não só da comunidade acadêmica, mas também da sociedade em geral. Isso se deve às inúmeras utilizações desses números em segurança de sistemas, simulações computacionais, amostragem de dados, geração de senhas, análises numéricas, tomada de decisões, recreação (jogos), criptografia, estética (música) etc. É longa a lista de aplicações de tais números e grandes são os desafios ligados às suas descobertas.

Essa busca não se limita aos tempos atuais. No início do século XX esses números eram obtidos com a retirada, ao acaso, de bolas em uma urna. Também eram obtidos com o lançamento de dados ou com a distribuição de cartas. O avanço da tecnologia fez com que dispositivos fossem criados para tal propósito. O surgimento dos computadores e o desenvolvimento de programas impulsionou a produção de números aleatórios. As sequências aleatórias geradas em computadores ou outros equipamentos determinísticos recebem o nome de sequências pseudoaleatórias. A seguir, apresentamos os dois grandes grupos de geradores de números aleatórios.

3.1 Geradores de números verdadeiramente aleatórios

(TRNGs)

Nos geradores de números verdadeiramente aleatórios (True Random Number Generator ou TRNGs) as sequências de bits aleatórios são obtidas das fontes de ruídos, que são a fonte de entropia desses geradores. Esse é um processo não determinístico de fornecimento de entropia, o qual é responsável pela incerteza associada à saída das sequências de bits. As fontes de ruídos podem ser divididas em duas categorias: (a) Fontes de ruídos físicos, que utilizam hardware dedicado para

(37)

prover aleatoriedade; e (b) Fontes de ruídos não físicos, que utilizam dados do sistema ou intervenção humana para prover a aleatoriedade dos TRNGs [BARKER 2012 ].

Podemos citar como exemplos algumas fontes de ruídos não físicos: 1. o valor instantâneo do relógio do sistema;

2. tempo decorrido entre pressionamentos de teclas ou entre cliques no mouse;

3. conteúdo de buffers de entrada e saída; 4. dados de entrada do usuário;

5. valores do sistema operacional, como carga do sistema e estatísticas da rede.

Exemplos de fontes de ruídos físicos:

1. tempo decorrido entre a emissão de partículas durante o decaimento radioativo;

2. ruído térmico de um diodo ou resistor semicondutor; 3. a instabilidade de frequência de um oscilador;

4. variação na latência de acesso a setores de discos rígidos causada pela turbulência do ar dentro de uma unidade de disco selada;

5. sinais de som de um microfone ou de vídeo de uma câmera.

3.2 Geradores de números pseudoaleatórios (PRNGs)

Os PRNGs produzem seus números de forma determinística, que não podem ser chamados de números verdadeiramente aleatórios. Existem vários algoritmos para PRNGs: Linear Congruential Generators, Linear Feedback Shift Registers, Generalized Fibonacci Generators, geradores criptográficos, Quadratic Congruential Generators e Cellular Automaton Generators. A Figura 3.1 ilustra uma ideia de um PRNG, o qual também é conhecido como um gerador de números aleatórios determinístico e, portanto, é responsável por gerar sequências de bits a partir de um estado inicial, conhecido como semente.

A determinação se a sequência de bits é aleatória ou não se dá por intermédio de testes de aleatoriedade, existindo vários conhecidos nos meios acadêmicos.

(38)

Figura 3.1 Geração de bits pseudoaleatórios a partir de um estado inicial.

3.2.1 Exemplo de PRNG: o gerador congruente linear

É um algoritmo que produz uma sequência de números pseudoaleatórios chamado gerador congruente linear (do inglês Linear congruential generator) também conhecido como LCG, o qual utiliza uma função linear em trecho.

Esse método representa um dos geradores de números pseudoaleatórios mais antigos e mais conhecidos. Sua implementação é simples, de fácil compreensão e sua execução e bastante rápida, sendo definida por uma relação de recorrência:

Gn+1 = (rGn + t) mod m

onde:

G: é a sequência de valores pseudoaletórios a ser gerada; m: é o módulo, sendo m < 0;

b: é o multiplicador, sendo 0 < b < m; f: é o incremento, sendo 0 𝑓 𝑚;

G0: é a semente ou valor inicial, sendo 0 𝐺0 𝑚;

As sementes são constantes inteiras que definem o gerador. Se f = 0, o gerador é comumente chamado de gerador congruente multiplicativo, referenciado pela sigla MCG ou Lehmer RNG. Caso f 0 o gerador é chamado de congruente misto. Enquanto esse gerador é muito usado para fins de simulação e algoritmos probabilísticos, e passa nos testes estatísticos, eles são previsíveis e, totalmente

(39)

inseguros para propósitos criptográficos, assim, dada uma seqüência de saída parcial, o restante da sequência pode ser reconstruída mesmo se os parâmetros r, t, e m forem desconhecidos, como apresentado em [Knuth 1985].

3.2.2 Gerador de números aleatórios do Linux (LRNG)

A geração de números aleatórios no Linux envolve a coleta e armazenamento de bits aleatórios em três repositórios, como pode ser observado na Figura 3.2 extraída de [GUTTERMAN 2006]. O primeiro repositório de 512 bytes coleta bits aleatórios de diversos eventos do sistema operacional, tais como intervalos entre acionamentos de teclas ou de mouse, intervalos entre interrupções ou intervalos entre acessos ao disco. Recentemente a Intel e outros fabricantes de CPUs começaram a integrar TRNGs dentro de seus chips, como está descrito no Apêndice 1. Esse primeiro repositório alimenta outros dois com seus bits verdadeiramente aleatórios (sementes).

Deve ser notado que a taxa de geração desses bits para o primeiro repositório (mesmo os bits produzidos por hardware TRNG) pode ser relativamente baixa, se comparada à demanda de bits aleatórios de muitas aplicações. Por isso é comum se recorrer a PRNGs para complementar o trabalho dos TRNGs.

O segundo repositório tem 128 bytes e oferece uma interface para aplicações coletarem os bits disponíveis (lendo de /dev/random). Se a aplicação demandar mais bits que os disponíveis, ela será bloqueada, até que novos bits aleatórios sejam armazenados.

O terceiro repositório, também de 128 bytes, é chamado de Urandom e também oferece uma interface para as aplicações (/dev/urandom). Entretanto, essa interface não é bloqueante e consegue entregar bits aleatórios a taxas muito maiores do que as taxas em que eles são gerados. Sendo assim, ela é a interface a ser usada por aplicações que demandam grande número de bits aleatórios em pouco tempo.

A geração de bits aleatórios que alimentam o repositório Urandom é feita por uma função determinística que pode ser definida em tempo de compilação do kernel. Normalmente é utilizada a função de hash criptográfico SHA-1 (Secure Hash Algorithm), a qual produz vários bits pseudoaleatórios a partir de sementes que são coletadas dos bytes do próprio repositório Urandom.

(40)

Além disso, a própria função retorna alguns dos bits produzidos por ela para o mesmo repositório, ajudando a mantê-lo sempre com sua entropia em níveis aceitáveis. Sendo assim, é possível entregar com Urandom uma grande quantidade de bits (pseudo)aleatórios às aplicações sem que estas sejam bloqueadas à espera pela produção de novos bits aleatórios nas fontes de entropia.

Figura 3.2 Estrutura básica do gerador de números aleatórios do Linux (fonte: Gutterman 2006)

3.3 Principais propriedades para geradores de números

pseudoaleatórios PRNGs

Um gerador de números pseudoaleatórios (PRNG) é um algoritmo determinístico que, de uma sequência verdadeiramente aleatória de comprimento s (estado inicial), produz uma sequência binária de comprimento l (geralmente maior que s), que deve parecer aleatória. A entrada de um PRNG é chamada de semente, enquanto a saída é chamada de sequência de bits pseudoaleatórios.

Para declarar que os ACs são geradores de números aleatórios adequados, os bits que eles produzem devem ser submetidos a testes estatísticos que são projetados para detectar características específicas esperadas de sequências aleatórias. No entanto, passar nos testes estatísticos é uma condição necessária, mas

(41)

não suficiente, para que um gerador seja considerado seguro, isto é, adequado para aplicações criptográficas.

Portanto, nesta seção examinaremos algumas das principais propriedades de um PRNGs, tais como: tamanho do estado interno, período, previsibilidade, segurança criptográfica, desempenho temporal e espacial e tamanho do código.

Tamanho do estado interno

Uma dessas propriedades é o tamanho do estado interno. Dizemos que para um gerador de números pseudoaleatórios ser considerado seguro, o comprimento s do estado interno deve ser suficientemente grande. Assim, a busca por um estado em um conjunto com 2s elementos (número de possíveis sementes)

torna-se intratável.

Período

O período indica o número de estados pelos quais o PRNG passa antes de voltar a um estado já produzido, uma vez que as sequências são produzidas com máquinas de estados finitos. É possível que um PRNG tenha vários ciclos distintos com tamanhos distintos.

Também é importante procurar avaliar o tamanho do menor dos ciclos e evitá-lo para não gerar uma repetição mais frequente de estados, o que comprometeria a aleatoriedade dos números produzidos. É desejável que o PRNG tenha apenas um ciclo contendo todos os estados possíveis.

Imprevisibilidade

A imprevisibilidade é outra propriedade esperada de um PRNG, e o fato de utilizar algoritmos determinísticos faz com que se produza a mesma faixa de números se forem utilizadas as mesmas condições iniciais. Para tornar mais seguro o algoritmo (para aplicações criptográficas, por exemplo), a semente deve permanecer desconhecida. Mesmo sem conhecer a semente, ainda assim pode ser possível inferir o estado corrente pelas saídas, produzindo novas saídas com a função geradora dos estados futuros. Dessa forma, para aplicações seguras, é necessário criar algoritmos que, em qualquer estado, tornem inviável encontrar os próximos estados ou estados anteriores.

(42)

Segurança criptográfica

Há dois requisitos importantes a se considerar em PRNGs para fins criptográficos: o primeiro é que as sequências de saída de um PRNG devem ser estatisticamente indistinguíveis de sequências verdadeiramente aleatórias; no segundo, os bits de saída devem ser imprevisíveis para um adversário com recursos computacionais ilimitados.

Desse modo o primeiro requisito estabelece que, um PRNG deve passar em todos os testes estatísticos, isto é, nenhum algoritmo em tempo polinomial deve poder distinguir corretamente entre uma sequência de saída desse gerador e uma sequência verdadeiramente aleatória de mesmo comprimento.

Já no segundo requisito, para que um algoritmo possa ser considerado um PRNG seguro, ele deve ser definido como um algoritmo que passa no teste de próximo bit, ou seja, não deve existir um algoritmo em tempo polinomial que, pela entrada dos primeiros bits de uma sequência, possa prever a saída do próximo bit com probabilidade significativamente maior que 50%.

Embora o primeiro requisito de segurança pareça ser mais rigoroso do que o segundo [KATS 1996], diz-se que eles são equivalentes, ou seja, um gerador de bits pseudoaleatórios passa no teste do próximo bit se, e somente se, ele passar em todos os testes estatísticos.

Um PRNG que passa no teste do próximo bit (possivelmente sob alguma suposição matemática plausível, mas não comprovada, como a intratabilidade de fatoração de números inteiros) é chamado de gerador de bit pseudoaleatório criptograficamente seguro (CSPRBG).

Desempenho temporal

O desempenho temporal também é outra importante propriedade para um gerador de bits pseudoaleatório, principalmente em aplicações que exigem a geração de uma grande quantidade de bits aleatórios.

Tamanho do código

Além do espaço usado para representar o estado do gerador, é desejável que o espaço necessário para seu código (programa) seja tão pequeno quanto

(43)

possível. Essa propriedade é especialmente importante em aplicações embarcadas e aplicações de Internet das Coisas (IoT).

3.4 Utilização de autômatos celulares como PRNGs

Os valores das células de um AC em um determinado instante definem o estado nesse instante. Logo, um AC de tamanho n pode assumir até 2n estados

distintos. Idealmente, todos esses estados deveriam pertencer a um único ciclo, o que significa que uma repetição de estado só ocorreria após 2n iterações. Entretanto, na

prática, isso nem sempre ocorre.

Dependendo da regra de um AC, o conjunto de estados se divide em vários ciclos menores, o que é indesejável do ponto de vista de PRNG, pois esses ciclos geram repetições mais frequentes, o que foi analisado por Wolfram [WOLFRAM 1986B].

Outra forma de obter bits aleatórios de um AC consiste em ler apenas a célula central desse AC. Os bits desta célula podem ter uma boa aleatoriedade (dependendo da regra adotada) e Wolfram usa essa técnica com o AC elementar, regra 30, no software Mathematica para criar números inteiros aleatórios [WOLFRAM 2003 p. 317 e 973].

A Figura 3.3 apresenta um exemplo da evolução da regra 30 no tamanho de 300 x 128 células, que representa a coleta dos bits na célula central. Considerando um conjunto de iterações, podemos ver esta coleta como sendo na coluna central do diagrama.

(44)

Figura 3.3 Extração de 400 bits aleatórios da coluna central da evolução de um AC-Regra 30 de 128 células

3.5 Trabalhos relacionados

Muitos trabalhos já se debruçaram sobre as características aleatórias dos ACs, particularmente sobre aqueles ditos elementares, isto é, os que são unidimensionais, binários e usam uma vizinhança mínima [WOLFRAM 1983].

Stephen Wolfram foi o primeiro a utilizar AC nos domínios da criptografia e, em seu artigo [WOLFRAM 1986B], ele avalia o AC que usa a regra 30 como sendo apropriada para um PRNG, devido às suas características de aleatoriedade. Wolfram propôs um sistema criptográfico baseado em seu gerador de sequência temporal [WOLFRAM 1986A]. Entretanto, esse sistema foi quebrado por Meier et al. [MEIER 1991].

Outra linha de pesquisa é o trabalho de Hortensius et al. [HORTENSIUS 1989A] que apresenta o AC híbrido 90/150 com base no trabalho de Pries et al. [PRIES 1986]; Hortensius compara o AC híbrido com as regras 30 e 45 e também com o tradicional LFSR Linear Feedback Shift Register. O foco desses experimentos leva em consideração o layout para a geração de vetores de teste na fabricação de chips VLSI; ambos os ACs tiveram melhor desempenho que o LFSR.

(45)

O AC híbrido com condição de fronteira nula tem períodos mais longos que o AC regra 30 com condições de fronteira periódica. Os ACs híbridos são constituídos por duas ou mais regras que são combinadas para, entre outras características, produzir ciclos com períodos máximos. Os resultados desse artigo foram alcançados por meio de busca exaustiva.

Outro trabalho de Hortensius et al. [HORTENSIUS 1989B] faz uma contribuição no convencional gerador de teste padrão LFSR para circuitos built-in self-test com o emprego do AC unidimensional híbrido 90/150; os self-testes demonstraram propriedades aleatórias aceitáveis e também se mostraram adequados para uso em testes de VLSI. Os autores mostram que o AC híbrido 90/150 pode ser construído de maneira a se comportar exatamente como um LFSR e, consequentemente, produzir uma sequência aleatória de ciclo máximo e único, contendo 2n - 1 estados, onde n é

o número de células do AC.

É apresentada no artigo de Serra et al. [SERRA 1990] a definição de propriedades para simplificar um AC linear com condições de fronteira nula com base em um polinômio primitivo. Os autores também identificaram um isomorfismo entre a matriz de transição de um LFSR e a de um AC híbrido, mostrando que são similares, e fornecem um algoritmo para produzir a matriz de transição para um AC linear usando apenas as regras 90 e 150, dado um polinômio característico. Outros autores melhoraram esses resultados e apresentaram outros algoritmos, como Cattel et al. [CATTELL 1996 ] e Cho et al. [CHO 2007].

No trabalho de Bardel [BARDELL 1990] vemos que as saídas de um AC linear híbrido e de um LFSRs são idênticas. O autor propõe a conjectura de que não há AC híbrido 90/150 com condições de fronteira periódica que tenha polinômio característico primitivo e que produza ciclo máximo. Essa conjectura é comprovada por Nandi et al. [NANDI 1994]; em seu trabalho eles também afirmam que a fronteira periódica de um AC linear fornece melhor aleatoriedade estatística do que a fronteira nula. Essa afirmação também é suportada por Cho et al. [CHO 2007].

No artigo de Nandi et al. [Nandi 1994], os autores examinam o comportamento de um grupo de ACs híbrido com as regras 51, 153 e 195 para serem utilizadas em sistemas criptográficos. Entretanto esse trabalho foi revisado e esses sistemas foram quebrados por Blackburn et al. [BLACKBURN 1997].

Sipper et al. [SIPPER 1996] apresentaram um algoritmo genético na produção de geradores de números aleatórios e descobriram um novo ACs híbrido,

(46)

formado com as regras elementares 165, 90 e 150 e o outro com as regras 165 e 225. Quando comparados ao AC de regra 30 e ao AC híbrido 90/150, se mostraram mais interessantes no atributo aleatoriedade e são vistos como bons geradores para uso geral, sem contudo serem boas alternativas para aplicações seguras (CSPRNGs).

No trabalho de Koc et al. [KOC 1997], investigou-se a alegação feita por Wolfram de que não seria possível recuperar o estado inicial de um AC após algumas iterações, dado que inverter uma sequência de estados sobre um autômato de tamanho n usando a regra 30 era um problema NP-completo. Os autores desenvolveram um algoritmo e mostraram que a regra 30 pode ser invertida em tempo O(n) para alguns valores de sementes e até 2n/2 operações são necessárias para

outros diversos valores de sementes, com coleta realizada por linha.

Os autores Tomassini et al. [TOMASSINI 1999] apresentaram um estudo sobre PRNGs com ACs elementares uniformes e não uniformes; eles utilizaram programação celular e algoritmo genético para encontrar as melhores regras. Afirmaram que os ACs não uniformes (ACs Híbridos) são melhores; no entanto, eles os consideraram inferiores ao PRNG Congruente Linear e ao PRNG defasado Fibonacci. Mesmo assim, a aleatoriedade das sequências geradas pode ser satisfatória para muitas aplicações.

Tomassini et al., em outro artigo [TOMASSINI 2000], apresentam a descrição de um simples sistema de criptografia de chaves baseado em autômato celular. Eles comparam o novo sistema a outras duas propostas e mostram que o mesmo parece ser mais seguro, uma vez que a reconstrução da chave requer uma quantidade de recursos computacionais exponencial em relação ao tamanho da chave. A vantagem prática dos ACs descritos no artigo é que eles são muito fáceis e baratos de implementar em hardware e software e podem atender a muitas aplicações nas quais um alto grau de segurança é necessário, mas a inviolabilidade absoluta não é.

A resposta ao grande número de trabalhos realizados com os ACs híbridos, nas últimas 3 décadas, se deu devido a pesquisas no campo de VLSI, que se iniciou no Instituto Indiano de Tecnologia (IIT), Kharagpur, Índia, em meados de 1980. O maior objetivo desse grupo de pesquisa, foi em cima de testes em VLSI, especificamente o projeto on-chip Built-In Self-Test (BIST), uma estrutura para melhorar a testabilidade de circuitos VLSI.

(47)

3.6 Conclusões

Neste capítulo investigamos dois grandes grupos de geradores de números aleatórios: os geradores de números verdadeiramente aleatórios (TRNGs) e os de pseudoaleatórios (PRNGs).

No caso dos TRNGs, consideramos como as sequências de bits são obtidas por meio de duas categorias: as fontes de ruídos físicos e as fontes de ruídos não físicos.

Já para os PRNGs, listamos alguns algoritmos determinísticos e ilustramos como podem ser gerados os bits pseudoaleatórios a partir de um estado inicial. Também suas principais propriedades foram analisadas e apresentadas.

Por fim apresentamos os trabalhos relacionados e observamos que os ACs híbridos têm sido utilizados na geração de padrões de testes para circuitos que demandam geradores aleatórios simples e eficientes, no entanto não são úteis para aplicações criptográficas.

(48)

4.

U

MA METODOLOGIA PARA

AVALIAR GERADORES DE

NÚMEROS

PSEUDOALEATÓRIOS

4.1 Testes do NIST

Foi desenvolvido pelo Instituto Nacional de Padrões e Tecnologia dos Estados Unidos (NIST) [RUKHIN 2010] um conjunto de 15 testes para avaliar Geradores de Números Pseudoaleatórios (PRNGs) e Geradores de Números Aleatórios (RNGs). Esses testes têm sido amplamente usados para determinar se uma aplicação particular atende especificações mínimas de aleatoriedade.

A escolha pelo NIST se deu de acordo com algumas características importantes como: independência de plataforma, flexibilidade, extensibilidade, versatilidade, portabilidade, ortogonalidade e eficiência, termos detalhados a seguir.

Independência de plataforma: o código-fonte foi escrito em ANSI C. Entretanto, algumas modificações podem ser necessárias, dependendo da plataforma-alvo e do compilador

Flexibilidade: o usuário pode introduzir livremente suas próprias rotinas de software matemáticos.

Extensibilidade: novos testes estatísticos podem ser incorporados ao conjunto existente.

Versatilidade: o conjunto de testes é útil na realização de testes para PRNGs, TRNGs e algoritmos criptográficos.

Portabilidade: com pequenas alterações, o código fonte pode ser portado para diferentes plataformas. Ele já foi portado para WinXP executando o compilador Visual Studio 2005 e para o Linux (Ubuntu) usando o compilador gcc.

Referências

Documentos relacionados

RESUMO Litígios estratégicos ambientais e justiça participativa: o caso do desmatamento nos projetos de assentamento de reforma agrária na Amazônia Legal Esta pesquisa

For a better performance comparison, and due to the difficulty in categorizing ML approaches in a simple way, we began by characterizing them in agreement with Caret’s

As key results, we found that: the triceps brachii muscle acts in the elbow extension and in moving the humerus head forward; the biceps brachii, pectoralis major and deltoid

Certain it is, this was not the case with the redoubtable Brom Bones; and from the moment Ichabod Crane made his advances, the interests of the former evidently declined:

Não é nossa intenção abordar aqui todos os tipos de processos estocásticos exis- tentes, mas sim analisar, com algum detalhe, uma pequena parcela, bastante relevante para o estudo

Aborda questões como disfunção sexual, sida, sexo seguro, sexo desprotegido, fatores de risco, satisfação sexual, sexualidade juvenil, relação entre sexo e outras questões