You are on page 1of 4

Escola Superior de Tecnologia e Gestão Engenharia Informática

Microprocessadores e Arquitecturas
2010/2011

Projecto de Programação #2 Assembly MIPS ver. 0.1
Introdução Na utilização do algoritmo RSA utiliza-se a chave pública para encriptar ficheiros, que só poderão ser recuperados através da descodificação com a chave privada. A primeira parte deste trabalho consistiu na geração das chaves pública e privada. Este projecto visa completar a implementação do algoritmo de encriptação RSA com a encriptação e desencriptação de ficheiros. Encriptação com o RSA 1. Codificação de ficheiros: A encriptação dum valor é obtida através duma operação de potenciação e resto usando a chave pública. Assim, sendo N e E a chave pública a encriptação dum valor M é dada por: R = ME mod N Por exemplo, vamos supor que se pretende encriptar a seguinte string: “Olá”, com a chave pública: N=899 e E= 11. Podemos usar os valores da codificação dada pela tabela ASCII de cada caracter como os valores a encriptar: Caracter O l á ASCII (Dec/Hex) 79 108 160 4F 6C A0 ME mod N 79^11%899 = 084 108^11%899 = 635 160^11%899 = 862

A encriptação da string será: 084635862. Para encriptar um ficheiro podemos carregar esse ficheiro para memória, ir lendo cada byte de memória, correspondente à codificação ASCII de cada um dos caracteres, calcular o valor da encriptação desse carácter, que será guardado noutra zona de memória alocada para o efeito. No final, escreve-se o resultado da encriptação para outro ficheiro. Para realizar a operação ME mod N temos de ter alguns cuidados dado que o valor de ME pode gerar overflow facilmente. Por exemplo, apesar de 160^11%899 ser igual a 862, o valor de 160^11 resulta em overflow. Deste modo temos de

no final. ou seja. multiplicando os resultados e. podemos particionar E e ir fazendo as operações de potenciação e módulo por partes. Uma maneira simples de fazer a particionar E é usar os valores dos bits da sua representação em binário. Ou seja para E = 11 a sua representação em binário é: 1110 = 0…00010112 = 23 + 21 +20 = 8 + 2 + 1 assim podemos fazer: [(1608 mod 899) * (1601 mod 899)* (1601 mod 899)] mod 899 mas como 1602 mod 899 = 428 e 1608 mod 899 = (1602 mod 899)3 mod 899 = [(1602 mod 899)2 mod 899)(1602 mod 899) mod 899] mod 899 os cálculos podem ser feitos na forma: 1608 mod 899 = {[(428*428 mod 899)* 428 mod 899]*428} mod 899 = 893 Sendo o resultado final dado por: R = {[(893 * 428) mod 899] * 160} mod 899 = 862 ESTIG-IPBeja Microprocessadores e Arquitecturas 2010/2011 2 . fazer o último módulo da divisão. Para isso podemos usar a propriedade da operação módulo da divisão: R = ME mod N = [(MA mod N) * (MB mod N)] mod N onde E = A + B.arranjar um modo de fazer os cálculos sem resultar em overflow.

4 Grave o resultado da codificação do ficheiro que ficou na memória. 1.2 Implemente um procedimento que dados os valores N. que corresponderá à codificação do ficheiro. int M). 1.1. codificar ficheiro. 2. Descodificação de ficheiros: O processo de descodificação de ficheiros é em tudo idêntico ao processo de codificação. para outra zona de memória recorrendo procedimento codec. apenas se usa a chave privada para fazer a sua descodificação. irá dar: Caracter O l á Codificação 084 635 862 RD mod N 084^611%899=79 635^611%899=108 862^611%899=160 Sendo os valores da coluna da direita correspondente aos valores ASCII dos caracteres. copia o seu conteúdo para memória. 3. A descodificação do valor R é dada por: M = RD mod N A descodificação string: “Olá”.1 Escreva um procedimento que. para um ficheiro. os itens: gerar chaves. pelo menos. int E. como resultado do ponto anterior. Estrutura do programa: O programa deve de apresentar um menu com. O nome do ficheiro encriptado relativo à ESTIG-IPBeja Microprocessadores e Arquitecturas 2010/2011 3 . dado o nome dum ficheiro. Deve de pedir ao utilizador o nome do ficheiro a encriptar e/ou desencriptar. recorrendo às rotinas desenvolvidas na ponto anterior. 2. E e M devolve o valor de M codificado. descodificar ficheiro.1 Implemente. 1.3 Desenvolva o procedimento que codifica o conteúdo do ficheiro residente em memória. A chave privada relativa à chave pública do ponto anterior é: N = 899 e D = 611. o um programa que dado um ficheiro encriptado faz a sua desencriptação e escreve o resultado noutro ficheiro. conforme explanado anteriormente: int codec (int N.

onde 1234 e 5678 são os números de aluno dos elementos que compõem o grupo. o que valorizará o projecto quando devidamente justificadas. Conclusão Tal como o projecto anterior este projecto é aberto. O projecto tem a data de entrega a 6 de Junho de 2011. e deverá consistir no código desenvolvido e por um breve relatório.zip. terminando com uma secção de conclusões e eventual bibliografia consultada.txt (o conteúdo deste tipo de ficheiros corresponde unicamente á codificação ASCII dos caracteres digitados). com a identificação das partes mais relevantes. e será objecto de discussão sobre diferentes aspectos. uma breve discussão sobre o desenvolvimento do trabalho.txt_cod. Este projecto pode ser realizado individualmente ou por grupos de dois alunos. bem como as instruções mais pertinentes/obscuras.txt deve de ficar com o nome: teste. O relatório deve de ter 3 a 4 páginas.encriptação do ficheiro com o nome: teste. Todas as fontes utilizadas no desenvolvimento do projecto deverão ser citadas no relatório a entregar juntamente com o código. onde são apresentados os objectivos do projecto. A versão do enunciado pode ser verificada a partir do seu cabeçalho. O nome do ficheiro a submeter deverá ter o formato: MAP2-1011_1234_5678. Bom trabalho João Martins Gonçalo Fontes 23 Maio 2011 ESTIG-IPBeja Microprocessadores e Arquitecturas 2010/2011 4 . com realce para as componentes mais importantes e onde são discutidas as opções tomadas durante o seu desenvolvimento. O código deve de ser comentado. o que significa que os alunos são livres para usar outras técnicas para implementar os algoritmos pedidos. sobretudo relacionados com opções de codificação e como poderiam ser alteradas partes do código. Para testar o programa pode-se usar ficheiros de texto criado com o programa Bloco de Notas (Notepad) e guardado com extensão . Este enunciado poderá ser alterado de forma a tornar o seu conteúdo mais claro (não será acrescentado mais trabalho).