• Nenhum resultado encontrado

2.3 Números Aleatórios

2.3.1 Geradores de Números Aleatórios

Números aleatórios são de grande importância não só para a criptografia, mas também para simulação e estatística. Para obter tais números, é necessária a construção de sistemas com capacidade de gerá-los, de modo geral existem três tipos de geradores aleatórios, são eles (PAAR; PELZL,2010):

• True Random Number Generators (TRNG): são caracterizados pela irreprodutibilidade de sua saída, ou seja, é virtualmente impossível serem geradas duas sequências de tama- nho n idênticas. Esses geradores são baseados em processos físicos, como por exemplo o lançamento de uma moeda e o decaimento de elementos radioativos. Saídas desses ge- radores são comumente utilizadas em criptografia como chaves de sessão, que são distri- buídas geograficamente entre os pares e alimentam geradores pseudoaleatórios (PAAR; PELZL, 2010). Para serem utilizados diretamente em propósitos criptográficos esses devem ter saídas imprevisíveis, e, como alguns processos físicos podem ser previsíveis torna-se interessante a combinação de saídas de mais de uma fonte para geração dos va- lores. Porém, para produzir grandes quantidades de números em TRNGs é demandado uma grande quantidade de tempo, sendo mais recomendável nesse caso a utilização de geradores pseudoaleatórios (RUKHIN et al.,2001).

• Pseudorandom Number Generators (PRNG): utilizados como alternativa à dificuldade de geração dos TRNGs, os geradores de números pseudoaleatórios são baseados em sequências calculadas a partir de um valor inicial chamado semente. A saída de um PRNG é comumente obtida por meio da aplicação de funções determinísticas nessa se- mente. É essa natureza determinística que leva a adoção do nome pseudoaleatório, uma vez que todos os valores gerados são obtidos por meio de uma semente inicial, e além do mais, para obter a mesma sequência novamente basta guardar a semente utilizada e aplicar o mesmo algoritmo de geração. Um requisito esperado desses geradores é a qua- lidade estatística de sua saída. Seu uso pode ser variado, incluindo diversas aplicações diferentes de sistemas de segurança e criptografia, um exemplo é na implementação do gerador LCG (Linear Congruential Generator) presente na função rand() da linguagem ANSI C. O comportamento desses geradores pode ser representado pela forma recursiva mostrada naEquação 2.1, onde a partir de um valor inicial (seed) os próximos números da sequência Si+1, . . . , Si+nsão determinados pela aplicação de uma função f no valor atual

Si (PAAR; PELZL, 2010). Geradores pseudoaleatórios possuem um tamanho predefi- nido de números que podem ser gerados, onde, a partir desse ponto a sequência gerada é repetida em ciclo. A esse tamanho é dado o nome de período (JAMES, 1990). Bons geradores pseudoaleatórios possuem longos períodos, tornando assim a aplicação onde são utilizados mais segura.

s0= seed

si+1= f (si), i = 0, 1, . . .

(2.1)

• Cryptographically Secure Pseudorandom Number Generators (CSPRNG): essa vari- ante de gerador é um tipo especial de PRNG onde a saída desse não é previsível, ou seja, dado n bits consecutivos gerados, não existe algoritmo de tempo polinomial capaz de predizer o próximo bit Sn+1 com chance de sucesso superior à 50%. De forma análoga, também não é possível calcular os valores para os bits antecessores à essa cadeia de n bits, ou seja, Sn−1, Sn−2, . . .. Essa característica é necessária somente para aplicações com pro- pósito criptográfico, para demais aplicações os geradores PRNG são suficientes. Quase a totalidade dos geradores do tipo PRNG que não são explicitamente desenvolvidos com propósito criptográfico não são CSPRNGs (PAAR; PELZL,2010).

Um exemplo de gerador pseudoaleatório comumente utilizado em sistemas de cripto- grafia implementados em hardware são aqueles baseados em registradores de deslocamento. Esses geradores estão presentes em todos os sistemas de Perfil II do portfólio do eSTREAM, que serão discutidos naSeção 2.4. Um exemplo dessa classe de gerador é o LFSR (Linear Fe- edback Shif Register), que consiste de elementos de memória (flip-flops) sincronizados por um sinal de clock e um caminho de realimentação do circuito.

Uma visão geral de um LFSR de grau três com valores iniciais S2, S1e S0é mostrado na Figura 2.15. A saída de um LFSR é produzida na extremidade direita do circuito, a cada ciclo de clock aplicado no circuito, os valores contidos nos flip-flops FF2, FF1e FF0são deslocados para à direita até a saída do gerador, portanto, a cada ciclo um bit pseudoaleatório é produzido. O caminho de realimentação é montado pela combinação das saídas de alguns dos flip-flops por meio da operação lógica ou-exclusivo, o bit gerado mais recentemente pelo LFSR é utilizado como entrada para o elemento de memória mais a esquerda do circuito.

Figura 2.15 – Esquemático de um LFSR de grau 3.

Fonte: (PAAR; PELZL,2010)

Assumindo no LFSR daFigura 2.15que os valores de S2= 1, S0= 0 e S0= 0, é possível listar todos os valores de saída gerados, como mostrado naTabela 2.2. Nesta tabela, observa-se que a partir do sexto ciclo de clock, a sequência 0010111 começa a ser repetida, esse fato ocorre pois o período do gerador alcança seu limite, ou seja, a partir daquele momento o gerador co- meça a repetir os bits gerados anteriormente. Um LFSR com grau n é capaz de gerar no máximo 2n− 1 diferentes bits e para alcançar período máximo deve ter as posições de realimentação de- finidas segundo um polinômio primitivo (PAAR; PELZL,2010), uma tabela com os polinômios primitivos mais utilizados pode ser encontrada emWard e Molteno(2007).

Tabela 2.2 – Sequência gerada pelo LFSR daFigura 2.15. clk FF2 FF1 FF0= Si 0 1 0 0 1 0 1 0 2 1 0 1 3 1 1 0 4 1 1 1 5 0 1 1 6 0 0 1 7 1 0 0 8 0 1 0

Fonte: (PAAR; PELZL,2010)

A desvantagem dos LFSRs é que esses são lineares, ou seja, os valores de sua saída são compostos por uma combinação linear dos valores de entrada. Dessa forma, é possível prever o próximo bit gerado, recuperando as posições de realimentação do circuito. Para isso é neces-

sário apenas que seja conhecido 2m bits de saída de um LFSR de grau m e, a partir de então, é possível recuperar os coeficientes de realimentação simplesmente resolvendo um sistema li- near. Ao fazer isso, o gerador pode ser reconstruído por um indivíduo invasor (PAAR; PELZL,

2010). Na obra de Menezes(1996), é afirmado que um LFSR nunca deve ser utilizado para aplicações de propósito criptográfico devido à linearidade inerente à sua construção. Porém, são destacadas três técnicas para remover a linearidade desses geradores sendo assim possível a sua utilização em tais aplicações, são elas:

• Combinador não linear: consiste na utilização de vários LFSRs em paralelo, onde a saída de cada um desses geradores é entrada de uma função de combinação não linear f , capaz de satisfazer uma série de propriedades que garantam sua segurança contra certos tipos de ataques. AFigura 2.16mostra um esquemático dessa técnica.

Figura 2.16 – Exemplo de combinador não linear.

Fonte: (MENEZES,1996)

• Filtro não linear: esse tipo de gerador utiliza apenas um LFSR, porém para acabar com a linearidade, são utilizadas funções não lineares, chamadas de funções filtrantes, que são alimentadas com valores intermediários desse LFSR. AFigura 2.17mostra um esquemá- tico da construção desse gerador.

Figura 2.17 – Exemplo de filtro não linear.

Fonte: (MENEZES,1996)

• Controle de clock: nos geradores construídos por meio de combinadores e filtros não lineares, os LFSRs que os compõe possuem clock regular, ou seja, o movimento de todos os dados ao longo dos LFSRs são comandados por um mesmo sinal de sincronismo. Nesta técnica, a remoção da linearidade é tratada por meio do controle do sinal de clock de um gerador LFSR por meio dos bits de saída (keystream) de um segundo gerador. Dessa maneira, ataques baseados na regularidade do funcionamento dos LFSRs são dificultados, pois, o sinal de clock gerado pelo LFSR é irregular. AFigura 2.18mostra um exemplo de um sistema que aplica tal técnica, o gerador mostrado é chamado de gerador de sequências alternadas (alternating step generator).

Figura 2.18 – Gerador de sequências alternadas.

Documentos relacionados