quinta-feira, 28 de junho de 2007

Reflections on Trusting Trust - Ken Thompson

Um dos artigos mais interessantes que já li. Vale a pena perder alguns minutos para rever esse material.

Alguns pontos interessantes do artigo:

  • Facilidade de inserção de códigos maliciosos através do próprio compilador;
  • O código fonte pode ser reproduzido integralmente e serem adicionadas algumas funções, procedures ou qualquer outro conteúdo em seu algoritmo principal;
  • Assim pode-se desconfiar do próprio código gerado pelo autor e contar com a garantia dos fornecedores de compiladores e de ferramentas de desenvolvimento de software sobre seus produtos; e, principalmente
  • Ética: Os profissionais ligados ao ramo devem ter em mente os conceitos de ética e boa conduta profissional;
RSA é um algoritmo para encriptação de dados, que deve o seu nome a três professores do Instituto MIT (fundadores da actual empresa RSA Data Security, Inc.), Ron Rivest, Adi Shamir e Len Adleman, que inventaram este algoritmo, a mais bem sucedida implementação de sistemas de chaves assimétricas, e fundamenta-se em Teorias Clássicas dos Números. Este algoritmo tem como princípio a construção de chaves públicas e privadas usando números primos.

Funcionamento do Algoritmo:
1) Dados dois números primos p e q, trabalha-se com a hipótese de que quanto maiores forem os números mais seguro será o algoritmo;
2) Obtém-se n, pela fórmula n = p * q;
3) Obtém-se z, pela fórmula z = (p - 1) * (q - 1)
4) Escolhe-se um número “e”, onde “e” e “z devem ser primos entre si;
5) Calcula-se “d” pela fórmula d = e^-1 mod z;

Encriptação
Para transformar uma mensagem m numa mensagem c encriptada usando a chave pública do destinatário n e e basta fazer uma potenciação modular:

c = m^e mod n

A mensagem então pode ser transmitida em canal inseguro para o receptor. Há um algoritmo para realizar esta potência rapidamente.

Decriptação
Para recuperar a mensagem m da mensagem encriptada c usando a respectiva chave privada do receptor n e d, basta fazer outra potenciação modular:

m = c^d mod n

Referências:
http://pt.wikipedia.org/wiki/RSA