Algoritmo de Blum-Golwasser
Sistema de chave pública probabilística.
O algoritmo de Blum–Goldwasser é um sistema de encriptação assimétrico que foi proposto, em 1984, por Manuel Blum e Shafi Goldwasser.
O esquema de encriptação probabilístico de chave pública de Blum-Golwasser combina a cifra probabilística de Golwasser-Micali com o gerador de bits pseudo-aleatório, Blum–Blum–Shub generator. Este esquema de encriptação baseia a sua segurança na dificuldade de fatorizar números de Blum, isto é, números primos que são congruentes com 3 módulo 4.
1. Geração da chave (chave pública, chave privada)
1- Seleciona-se dois primos, grandes e distintos, em que cada um é congruente com 3 módulo 4.
2- Calcula-se n = p*q.
3- Usando o algoritmo de Euclides extendido, calcula-se a e b tal que a*p + b*q = 1.
4- A chave pública é n e a chave privada é (p, q, a, b).
2. Encriptação da mensagem
1- Obtém-se a chave pública para quem vai a mensagem.
2- Escolhe-se uma string que irá representar a mensagem que se quer enviar.
3- Separa-se a mensagem que se quer enviar a blocos, isto é, separa-se cada letra da mensagem e passa-se esta para o respetivo carácter ascii.
4- Seleciona-se um número aleatório (r) de e calcula-se x0 uma vez que este é congruente r^2 módulo n.
5- Para cada bloco da mensagem, calcula-se:
1- x = x^2 módulo n;
2- Calcular os bits menos significativos de x;
3- O criptograma é igual ao xor entre os bits menos significativos de x e o bloco da mensagem.
6- Calcular x = x^2 módulo n.
7- Enviar o criptograma que corresponde ao último passo do ciclo mais o x.
3. Desencriptação da mensagem
1- Calcular d1 = ((p+1)/4)^(t+1) mod(p-1).
2- Calcular d2 = ((q+1)/4)^(t+1) mod(q-1).
3- Calcular u = x^d1 mod(p).
4- Calcular v = x^d2 mod(q).
5- Calcular x0 = vap + ubq mod(n).
6- Para cada bloco do criptograma, calcula-se:
1- x = x^2 módulo n;
2- Calcular os bits menos significativos de x;
3- A mensagem é igual ao xor entre os bits menos significativos de x e o bloco do criptograma.
4. Segurança
Se considerarmos que a fatorização de inteiros é um problema difícil então, podemos considerar que o esquema probabilístico de encriptação de Blum-Golwasser é seguro. No entanto, este esquema é vulnerável a ataques de criptograma escolhido uma vez que mesmo só sabendo a chave pública com estes ataques consegue-se descobrir a chave privada. Por esta razão, esta cifra não é usada.
5. Eficiência
A eficiência deste algoritmo ao nível da encriptação é menor do que a do RSA porque enquanto que este faz uma multiplicação modular para encriptar 8 bits de texto limpo, o RSA faz uma exponenciação modular. No entanto, ainda é bastante eficiente.
A eficiência deste algoritmo ao nível da desencriptação é melhor que a do RSA quando se trata de mensagens mais longas.
7. Observações
No algoritmo de Blum-Golwasser existe ainda um fator que é o h. Isto é, podemos representar cada bloco da mensagem de tamanho h de forma a introduzir alguma aleatoriedade e tornar a cifra mais segura. No entanto, nesta implementação foi escolhido um número certo de bits de forma a que o h fosse igual a 8 e então fosse de mais fácil implementação.