UNIVERSIDADE DO MINHO

 

 

 

 

Cryptography on

 

 

 

Projecto de 5.º ano

(1º Semestre  2000/2001)

 

 

 

 

 

 

Fernando Alexandre Peixoto Gomes N.º 22652

Pedro Miguel de Andrade Tarrinho Nº22713

Ricardo André Fernandes Costa Nº22716

 

 

 

 

Supervisor:                                                Agradecimentos Extra:

                   Prof. Alcino Cunha                                    Luciano Rocha

Eng. Pedro Borges

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Índice

Resumos. 4

Resumo do Relatório.. 5

Resumo do Trabalho.. 5

Introdução.. 6

Investigação.. 8

O Que é PalmOS ?. 9

Sistema de Ficheiros de uma PalmOs : 10

Terminologia.. 11

Linguagens. 12

SDK  e Falch’net : 13

“Falch.net DeveloperStudio PalmOS Edition is an Integrated Development Environment (IDE) for developing applications for the PalmOS computing platform. Using the IDE you can easily create anything, from the simplest program to the most advanced application package.”. 13

Java 2 Micro Edition, Jbuilder 3.5 Foundation e Handheld Express: 14

Waba e SuperWaba : 14

Outras Linguagens com que tivemos Contacto : 15

Tabela de Comparações : 16

Emulador.. 17

Criptografia.. 17

Simétrica. 17

Assimétrica. 17

Assinaturas Digitais. 18

Bibliotecas : 18

Simétricas. 18

Cifras Assimétricas. 19

Projecto.. 20

Aplicação Criptográfica : 21

O Código no PC.. 21

O Código na Palm.. 21

Exemplos de Execução. 22

Na Palm : 22

No PC: 23

A nossa Biblioteca BigNumber : 24

Big Number. 24

As funções implementadas. 24

Exemplo de Execução. 26

Login no sistema operativo Linux / Integração com o PAM... 27

O que é um desafio-resposta. 27

O Algoritmo. 27

Login IRDA.. 28

StartXTerm.. 28

Configuração no servidor. 28

Exemplo de Execução. 30

Trabalhos Relacionados. 31

Análise e Resultados. 33

Investigação / Linguagens de Programação.. 34

Bibliotecas. 35

Criptografia na Palm... 36

A nossa biblioteca BigNumber.. 38

Login / Password.. 38

Conclusão.. 39

Bibliografia.. 42

Páginas Por nós Consultadas durante todo o Projecto : 43

Agradecimentos. 45


 

 

 

 

 

 

Resumos


Resumo do Relatório

 

 

O relatório começa com uma pequena introdução teórica, não só sobre criptografia, mas também sobre outros aspectos que consideramos interessantes.

O software e as bibliotecas criptográficas, por nós desenvolvido, são expostas nos capítulos subsequentes.

No capitulo 5 fazemos uma introdução à segunda parte do nosso trabalho que foi como descrito no resto deste capitulo o login nume máquina Linux usando para o efeito uma Palm, e a sua porta de infra – vermelhos.

Por fim temos a relação com outros trabalhos, a analise do nosso projecto e a conclusão.

 

 

 

Resumo do Trabalho

 

 

            O nosso trabalho tinha como principal objectivo criar uma aplicação criptográfica para o Sistema Operativo PalmOS, que fosse capaz de, usando o algoritmo RSA (preferencialmente), Gerar Chaves, Assinar e Verificar assinaturas, Cifrar e Decifrar documentos, pedir Certificados e Integração com o Pam de Linux, a fim de fazer Login Automático .

            Numa primeira fase vamos explicar os conceitos por detrás do Sistema Operativo PalmOS, que são, em alguns pontos, bastante distintos de todos os outros com que trabalhámos até então.

            De seguida apresentamos o nosso trabalho, que se resume se dividiu em duas partes fundamentais, primeira a criação da aplicação criptográfica e segundo a integração com o Pam de Linux, este último com recurso a criptografia Simétrica, por razões que mais à frente iremos mencionar.


 

 

 

 

 

 

Introdução
 

 

 

Com o crescente desenvolvimento das telecomunicações, foi-se tornando mais “vulgar” o uso do maior sistema de comunicação global – a Internet, que nos permite ter um maior leque de comodidades na nossa própria casa, ou seja, permite-nos fazer um número sem fim de tarefas, sem ser necessário sair de casa, e por consequentemente, não ter de esperar em filas, não ter problemas com o tempo. Mas isto ainda nos fazia perder muito, por isso apareceram os PDA (Personal Digital  Assistent) que podem ser usados para aceder a essa rede de quase qualquer sitio (podemos usar a ligação por rádio já disponibilizada em alguns países ou mesmo o telemóvel para fazer a ligação). No entanto, com tantas facilidades existem alguns problemas, como por exemplo a falta de segurança. A falta de segurança tem para nós uma única solução no momento, que é o uso de criptografia assimétrica.


 

 

 

 

 

 

Investigação


O Que é PalmOS ?

 

PalmOs é um Sistema  Operativo, que tem como objectivo ser simples, sem fios e móvel. Este corre em cima de um “preemptive multitasc kernel”, em que uma tarefa corre a “interface” com o utilizador, e outra trata de coisas, com por exemplo, monitorizar o input da própria Palm.

A interface do utilizador apenas permite que uma aplicação esteja aberta de cada vez, logo, quando uma aplicação é aberta, esta tem controle de todo o ecrã.

Numa PalmOs a memória é usada de uma forma muito pouco usual, uma vez que a RAM nesta, tem dois fins:

à Para alocação dinâmica, sendo esta a memória que o sistema, ou qualquer aplicação precisa enquanto está a correr, podendo ser comparada com a memória RAM de um computador tradicional.

à Para guardar de forma permanente, incluindo aplicações ou data que o utilizador irá ver, criar ou editar, pode-se compara o disco de um tradicional PC.

            Qualquer aplicação numa PalmOs não passa de uma base de dados de recursos, que contém vários outros recursos. Um recurso é simplesmente um campo da base de dados que tem um tipo e um ID, nesses recursos estão guardados todos componentes de cada aplicação. Num PC normal, esta base de dados de recursos tem uma extensão .PRC, pelo que é natural tratá-los por PRC files.

            Qualquer aplicação numa PalmOS, é conduzida por eventos, em que estes chegam do tipo “Pen Down” ou “Button Down” e a aplicação deve responder perantes estes, no entanto, existem alguns eventos que são tratados pelo Sistema Operativo. Quando uma aplicação arranca, esta entra num “loop” de eventos, obtendo, repetidamente, os eventos e tratando-os. Este “loop” dura até que outra aplicação seja iniciada.

            O PalmOS traz “built-in” suporte para vários controlos e para tratar forms, estes são similares aos do Windows num PC normal, mas devido à simplicidade do interface com o utilizador de uma Palm, apenas um form pode estar activo de cada vez.

            O PalmOS suporta dois tipo de comunicação, pela porta de serie e pela porta de infravermelhos.

Sistema de Ficheiros de uma PalmOs :

 

Uma dos aspectos mais complicados de perceber durante esta faze de investigação, foi o sistema de ficheiros deste Sistema Operativo específico. Neste não existe um sistema de ficheiro dito “normal”, mas sim um tipo de base de dados que pretende passar por este, achamos essencial explicar mais ao pormenor como esta funciona, por forma a que se possa compreender melhor o tipo de complicações que isso nos trouxe.

 

Como já dissemos anteriormente, os dados permanentes residem também em memória. Esta memória está por sua vez dividida em dois sectores, dinâmica e “storage”. Os dados permanentes são guardados na secção storage e são controlados pelo Data Manager.

Os dados estão organizados de duas formas, em bases de dados e em records, não sendo uma base de dados mais do que uma colecção de records. Estes são blocos de memória realocáveis, mas que cada uma não pode exceder o tamanho de 64Kb.

Como já foi dito, uma base de dados na Palm, não é mais que uma colecção de records, que mantêm uma certa informação acerca de cada record :

-          A localização do record;

-          Um ID único de três bytes, embora seja único apenas dentro de cada base de dados. É atrbuído automaticamente pelo Data Manager quando o record é criado;

-          Um atributo de um byte, contendo uma categoria de 4 bits, apagado, arquivo, ocupado e secreto.

Como já se deve ter percebido, cada vez que se precisa de guardar algo permanentemente numa PalmOs, é preciso criar uma base de dados, que ainda é uma operação complexa devido ao número de ID que temos de atribuir, reservar um record dentro dessa base de dados, após verificar aonde termina o último record actual por forma a não sobrepor um já existente record, atribuindo-lhe além do ID também o tamanho, abrir o record, só então guardar os dados, fechar o record, e fechar a base de dados. Caso a base de dados ainda não existe, esta deve ser criada, dando-lhe um nome, um ID de criador e um ID do tipo de Data.


Terminologia

 

 

à Form, uma janela de uma aplicação, que normalmente neste caso, ocupa todo o ecrã. Normalmente uma form contém controlos, áreas de texto e, ou menus.

 

à Windows, uma área rectangular onde coisas como, forms e menus são desenhados por uma aplicação.

 

à Database, uma colecção de pedaços de memória persistentes. Existem dois tipos, de campos e de recursos.

 

à Recursos, um pedaço de dados contido numa base de dados de recursos.

 

à Campo, uma estrutura de dados identificada por um ID único.

 

à Evento, uma estrutura de dados que descreve tudo o que pode acontecer numa aplicação.

 

à Loop de Eventos Principal, função que repetidamente dá eventos a aplicação, por forma a que esta os possa tratar.

 

à Launch Code, parâmetro passado a uma aplicação que especifica o que esta deve fazer quando esse Launch Code é executado.

 

à Menu, os menus são guardado em grupo de recursos, juntos em menubars, e são apresentados quando um utilizador clica na área de menus.

 

à Menubar, uma coleção de menus guardada num recurso, cada form pode ter associado um menubar.

 

à Dialog, uma janela contendo controlos que requerem que outilizador decida.

 

à Alert, um dialog de warnig ou de informação.


 

 

 

 

 

 

Linguagens

 

 


            Por forma a podermos programar para Palm, foi necessário verificar quais as linguagens existentes que permitiam fazer aplicações para este Sistema  Operativo, de entre várias que encontramos, salientamos as seguintes :

 

SDK  e Falch’net :

 

 

“Falch.net DeveloperStudio PalmOS Edition is an Integrated Development Environment (IDE) for developing applications for the PalmOS computing platform. Using the IDE you can easily create anything, from the simplest program to the most advanced application package.”

 

 

 

 

            Umas das primeiras, senão mesmo a primeira linguagem com que nos deparámos foi no site da PalmOS (http://www.palmos.com/), e não é nada mais do que a vulgar linguagem C com algumas pequenas alterações por forma a obedecer a uma certa filosofia da PalmOs. Este SDK, como é chamado, existe na versão 3.5 e nas versões anteriores a 3.5, estando estas últimas englobadas como se fosse uma só.

Esta é a linguagem primitiva da PalmOs, por isso é a linguagem mais rápida sobre uma Palm, visto que não precisa de ser interpretada. Como fizemos para todas as linguagens fizemos alguma investigação e descobrimos duas maneiras de criar código e compila-lo para depois podermos enviar para a Palm. A primeira foi o método mais simples, que era criar o ficheiro usando um editor de texto e seguidamente chamar o compilador “Gcc” que gera um ficheiro normal executável. Depois de termos estes ficheiros chamamos um transformador do ficheiro executável normal em ficheiro executável em PalmOs[1]. O segundo método utilizado tem a ver com um programa chamado Falch.net DeveloperStudio 2.1[2]. Este software é um IDE para C/C++ freeware, que nos permite uma muito mais fácil programação em relação ao simples editor de texto.

Java 2 Micro Edition, Jbuilder 3.5 Foundation e Handheld Express:

 

           Uma outra linguagem que encontrámos foi o Java, aqui numa versão Mivro, mais  virado para dispositivos PDA, não sendo ao contrário da anterior apenas para PalmOS, mas sim para uma vasta gama de dispositivos HandHeld.

            Por forma a se poder utilizar esta linguagem, a maneira mais aconselhável era integrá-la com o Jbuilder 3.5 Foundation, após ter adicionada a este uma extensão, que é o HandHel Express. Como seria de esperar, é uma linguagem de muito Alto Nível, muito fácil de trabalhar, mas também muito lenta, num dispositivo com poucas capacidade de Hardware.

A primeira vez que testámos o Java TM 2 Micro Edition, por infelicidade nossa não funcionava, uma vez que ainda se encontrava numa versão Beta. No entanto, no dia 12 de Dezembro de 2000 a Sun Microsystems apresentou o Java 2 Platform, Micro Edition for Palm Powered Handhelds[3].

            Esta nova versão funciona na perfeição, embora ainda não tire total pertido deste tipo de dispositivos, e acabou de ser descontinuada, coma saída muito recentemente de uma nova aplicação a SUN que veio substituir esta, chamada Wirelless ToolKit Aplication.

 

Waba e SuperWaba :

 

           

            Não é mais que uma variante de Java para este tipo de dispositivos. Apareceu antes de qualquer outra linguagem interpretada (incluindo o próprio J2ME), e com a ajuda de vários colaboradores foram sendo adicionadas novas funcionalidades, chegando a ter no momento duas versões, uma standart, que é o Waba, e uma outra mais apetrechada que é o SuperWaba.

            Neste momento prevesse que vá originar uma pequena “guerra” entre a Sun e a WabaSoft, devido a este última ser o Java com outro Nome.

Por outro lado foi uma das primeiras linguagens a ser testada pois era muito bem cotada, isto é, todas as paginas que falavam de linguagens interpretadas[4] davam grande relevo a esta. Começamos por visitar a página oficial www.wabasoft.com[5]. Seguidamente juntamo-nos ao Newsgroups: pilot.programmer.waba no servidor news.massena.com. Onde discutimos as vantagens e desvantagens desta linguagem. Nós consideramos que tem como vantagem a fácil programação visto ser muito parecida com o Java, o interface gráfico é muito acessível tanto para o programador como para o utilizador e como se isto não fosse suficiente, quando chegamos aos limites desta linguagem encontramos a pagina de um brasileiro[6] que estava a fazer melhorias à maquina virtual tanto aumentando o numero de funções disponíveis como a rapidez de resposta das próprias funções. Apenas encontramos um problema, não tínhamos implementado nenhuma biblioteca criptográfica. Para concluir a nossa investigação no que trata o Waba, ainda encontramos um IDE, muito fácil de usar chamado Visual Waba[7], e podemos dizer que assistimos á construção da pagina http://www.superwaba.org/[8].

Para concluir falta dizer que o código gerado para superwaba funciona em PalmOs, Windows CE e AppletViewer[9].

 

Outras Linguagens com que tivemos Contacto :

 

 

Além das linguagens acima apresentadas, que foram aquelas que usámos para o nosso projecto, ainda tivemos contacto com :

-         TinyLogo por Timothy [10].

-          DB2 Everywhere da IBM[11]

-          PocketC produzida pela Orbworks[12]

-          YS COBOL da Yorick Systems[13]

-          CASL da CASLSoft[14]

-          VisualWaba da Dmic[15]

Mas por um ou outro motivo não tinham uma reputação tão boa.

 

Tabela de Comparações :

 

            Nesta tabela pode-se ver uma comparação entre as diversas linguagens :

 

 

PocketC

Waba

KVM

CASL

TinyLogo

DB2

Super

Waba

Visual Waba

Falch.net

Desenvolver na Palm

sim

não

não

não

sim

não

não

não

sim

Desenvolver no PC

não

sim

sim

sim

não

sim

Sim

Sim

não

Corre em  WinCE

sim

sim

não

sim

não

não

Sim

Sim

não

Corre no PC

não

sim

não

sim

não

???

Sim

Sim

sim

Nível Linguagem

Médio

Alto

Alto

Médio

Médio

Médio

Alto

Alto

Baixo

Linguagem

C

Java / Waba

Java

???

Logo

C/C++

Java / Waba

Java / Waba

C/C++

Tamanho da máquina virtual

47K

39K

118K

41K

29K

130KB

110K

110K

0

Fiabilidade

Média

Boa

???

Boa

???

N/A

Boa

Média

Boa

Versão actual

(Fevereiro 2001)

3.9

1.0

1.0

3.0

N/A

7.1

1.2

1.1

2.1

Custos

$ 18.50

$0 (beta)

$0

$64.95

$0

$51

$0

$60

$ 149.00

 

Nota : os preços apresentados são em Dólares Americanos.


Emulador

 

            Como não possuíamos nenhum dispositivo deste tipo, tivemos de recorrer ao uso de um Emulador de PalmOs.

Um emulador de Palm OS é um programa que funciona como uma PalmTop, ou seja, é um programa que faz a ponte entre os programa para a Palm e o sistema operativo do computador.

Encontramos três emuladores distintos: um deles está disponível para três sistemas operativos distintos (Windows, Mac OS e Unix).[16] O segundo emulador está incluído no pack de Linux da RedHat[17] e por fim o terceiro o XCopilot[18]. Nos três casos é necessário fazer um download de uma ROM de uma Palm para o emulador.

 

 Criptografia

 

Para melhor percebermos o que tínhamos de fazer fizemos também uma pequena investigação sobre Criptografia.

 

Para controlo do conhecimento é conveniente que a preservação do segredo se faça através de chaves. Assim essas funções transformam-se em famílias de funções indexadas por um parâmetro: a chave.

 

As técnicas criptográficas oferecem-nos meios para estabelecer um canal de comunicação seguro em ambientes abertos (hostis).

 

 

Simétrica

 

            Neste tipo de cifras o segredo é partilhado unicamente entre dois intervenientes e esse segredo é a chave que serve para cifrar e decifrar a mensagem.

           

 

Assimétrica

 

            Ao contrário da simétrica temos duas chaves/segredos, que são usados para cifrar e decifrar as mensagens. Este tipo de protocolo obriga que uma das chaves seja publica, isto para que os agentes que pretendem enviar uma mensagem para nós possam cifrar com a nossa chave pública, isto tudo porque o  protocolo certifica-se através do “One way” que só a chave privada é que pode decifrar a mensagem.

            Este tipo de criptografia também é usado na assinatura e verificação de assinaturas de documentos. 

            .

 

Assinaturas Digitais

 

            Uma assinatura não é mais do que usar a chave privada do agente que envia e aplica-la à mensagem. Isto para que quando o receptor queira verificar a mensagem  apenas tem que aplicar a chave publica do nosso agente na assinatura que recebeu.

            Sendo computacionalmente impraticável  assinar directamente uma mensagem de tamanho realista é assinado, em sua substituição, o hash da mensagem. Tipicamente o resultado da hash da mensagem tem 128 bits e 160 bits.

 

Bibliotecas :

 

 

            No que trata á procura que fizemos sobre bibliotecas criptográficas, encontramos uma grande variedade, que após algum desenvolvimento nosso chegamos á infeliz conclusão de que não existe uma única assimétrica. No entanto, existem muitas simétricas, visto ter uma matemática mais simplificada

 

Simétricas

 

Caixa de texto: Definição: a mesma chave é usada para cifrar e para decifrar.

            Apesar de não precisarmos deste tipo de cifras, como tivemos trabalho a encontrá-las aqui estão:

 

-          Acme.Crypto[19]

-          PGPGP[20] (Pretty Good Privacy by Paul Gargan)

-          PlotSSLeay-2.01[21]

 

-          Crypto++ 4.1[22]

-          Logi.crypto[23] estes dois últimos são bibliotecas que além de criptografia simétrica também implementam o RSA, mas não são para a Palm.

 

            Todas as bibliotecas têm os seguintes protocolos implementados: AES (Advanced Encryption Standart), DES (Data Encryption Standard), IDEA (International Data Encryption Algorithm).

 

Cifras Assimétricas

 

Começamos por encontrar estas bibliotecas criptográficas, que são apenas uma versão livre do RSA.

 

Caixa de texto: Definição: a cifragem e a decifragem usam chaves distintas.

-          Logi.crypto[24]

-          Crypto++ 4.1[25]

-          Legion of the Bouncy Castle[26]

 

 

Por felicidade nossa, a partir do dia 7 de Janeiro de 2001, a biblioteca Legion of the Bouncy Castle disponibiliza uma API funcional para o Java 2 Micro Edition.


 

 

 

 

 

 

Projecto

 

 

 

 

 


Aplicação Criptográfica :

 

 

            Um dos objectivos do nosso projecto era desenvolver uma aplicação criptográfica para o PalmOS. Coma ajuda da API encontrada conseguimos implementá-la, totalmente em Java, com um senão, é muito lenta.

 

O Código no PC

 

 

No PC foi efectuada uma pequena aplicação, toda ela em Java, que usando a API to “The Legion of The Bouncy Castle”, a API completa e não a Light Weight API, capaz de gerar chaves RSA, no formato PKCS1 de acordo com o tamanho desejado, enviando-as após para a Palm. Um dos problemas encontrados, é que ao enviarmos algo pela porta de serie, esta envia também, por um motivo desconhecido, grandes quantidades de lixo, dificultando assim a recepção dessa chave na Palm, uma vez que é tudo bytes, quer a chave quer o lixo.

 

 

O Código na Palm

 

 

Na  Palm temos uma aplicação capaz de ler uma base de dados, e que mediante a chave escolhida, ou o par de chaves escolhido, é capaz de Cifrar, Decifrar, Assinar e Verificar pequenos pedaços de texto inseridos numa Text Area. Mais abaixo serão mostrados exemplos de Execução, facilitando assim a compreensão.

 


 

Exemplos de Execução

 

 

            Na Palm :

 

Area de Status

 

 

Acesso à area de Cifrar/Decifrar

 

 

Acesso à area de Assinar/Verificar

 

 

Chaves Existentes na Base de Dados

 

 

Após premir o Botão Sign, o utilizador será brindado com o seguinte Frame:

 

Texto a ser Assinado, ou Verificado

 

 

Volta ao Menu Anterior

 

 

Verificar

 

 

Assinar

 

 

 

Agora, vamos mostrar exemplos de execução de uma pequena aplicação para gestão da nossa Base de Dados:

 

Remover Objecto

 

 

Adicionar Objecto

 

 

Barra de status

 

 

 

Objectos Existentes

 

 

Nome do Objecto a Adicionar

 

 

 

No PC:

 

No PC, tudo é bastante básico, com se pode ver :

Tamanho da Chave Desejado

 

 

 
 


Sair

 

 

Enviar Chave

 

 

Gerar Chave

 

 


 

A nossa Biblioteca BigNumber :

 

 

Depois de dois meses fazendo “research” na Internet à procura de uma biblioteca criptográfica para Palm OS, foi decidido que havíamos de criar uma biblioteca nossa.

Apesar da complexidade do que nos foi pedido, metemos mãos à obra e aqui está o resultado de uma semana de criação visto termos encontrado o que foi descrito acima. Nessa semana começamos definir o que era o nosso big number.

 

 

Big Number

 

O big number não passa de uma lista ligada circular de arrays de tamanho fixo a cada arquitectura[27], incluindo também uma variável do tipo boolean para ter o sinal do numero.

 

 

As funções implementadas

           

Começamos por implementar as seguintes funções:

 

·         novo(sem parâmetros) - cria uma estrutura big number e devolve o seu apontador;

·         cria(inteiro normal) – igual ao anterior mas ao criar o big number insere um inteiro;

·         destruir(apontador para o big number) – liberta o espaço de memória usado pela estrutura big number apontada;

·         cpy(apontador para o big number) – devolve uma estrutura criada igual á passada como parâmetro;

·         cmp(dois apontadores para big numbers) – devolve 0 se os dois big numbers forem igual, se o primeiro for menor devolve –1 e se for maior devolve +1;

·         cmpabs(dois apontadores para big numbers) -  igual á funcao anterior mas não verifica o sinal das estruturas;

·         isneg(apontador para o big number) – devolve true se o big number for negativo e false caso contrario;

·         iszero(apontador para o big number) – devolve true se o big number for 0 e false caso contrario;

·         neg(apontador para o big number) – troca o sinal da estrutura passada e devolve o sinal anterior;

 

o        Operações matemáticas

·         add(dois apontadores para big numbers) – devolve a soma aritmética das duas estrutura (big number) passadas;

·         sub(dois apontadores para big numbers) – devolve a subtracção  aritmética das duas estrutura (big number) passadas;

 

 


Exemplo de Execução

 

 

            Começamos por testar o nosso programa no sistema Linux, o qual serviu para os teste iniciais. Isto porque seria muito mais trabalhoso fazer directamente para Palm.

 

Caixa de texto:  Como podemos ver começamos por introduzir um numero muito grande com cerca de 156 bits o que se usássemos um inteiro normal teria dado um resultado diferente, depois adicionamos um numero aleatório. Como resultado tivemos a soma hexadecimal de dois big numbers. No fim do teste subtraímos um valor superior ao que se encontrava lá e obtivemos um big number negativo.

 

            Quando testamos na Palm obtemos o mesmo resultado. No entanto usamos números mais pequenos do que os anteriores, isto porque a Palm em termos de uma simples TextBox não permite visualizar um número grande.

 

 

Caixa de texto:

 

 

Este exemplo, não passa apenas de um teste para mostrar que a nossa biblioteca BigNumber, funciona tanto em Linux como na Palm. Para isso usamos o IDE Falch.net para criar esta aplicação. Como podemos ver simplesmente adicionamos um valor hexadecimal a outro e obtivemos um resultado válido.

 

 

 

 

 

 


Login no sistema operativo Linux / Integração com o PAM

 

 

O que é um desafio-resposta

 

 

Um desafio-resposta não é mais do que um modo de fazer login-password (reconhecimento), mas com segurança. Enquanto que no segundo modo podemos ter um intruso que estando á escuta[28], pode perfeitamente saber o login e a password de um utilizador e depois futuramente entrar na conta desse utilizador sem grandes problemas, o primeiro modo, que é o que estamos a introduzir, podemo-lo considerar seguro.

 

Como explicação à figura 6.1.1 temos:

-   dois agentes: A e B;

-   três funções que são publicas : id, f e g;

-   três mensagens: , x e y;

 

Este mecanismo exige certificação da informação pública [29] associando-a ao agente A.

 

 

 

 

O Algoritmo

 

 

Vamos começar por identificar A como um cliente e B como o servidor. O cliente A pretende ligar-se ao servidor B, para isso envia o seu nome e a sua chave publica. Em seguida, B verifica se o identificador de A é  e envia um número aleatório cifrado com a chave pública de A. Quando A recebe x, vai ter de decifrar x com a sua própria chave privada, enviando de seguida y (no caso de se queres uma ligação y é o numero aleatório cifrado com a chave pública de  B, caso contrario é apenas o numero aleatório decifrado). Quando B recebe o y sabe que A é mesmo A dependendo da comparação do próprio numero aleatório com o y.


Login IRDA

 

 

O nosso programa LoginIRDA foi um pouco mais longe, conseguimos fazer o login/password que era o pedido, e ainda conseguimos tratar a informação gerada pelo simples uso de aplicações normais do sistema em causa. Esta aplicação foi feita em SuperWaba e usamos uma aplicação já existente para que a porta de infravermelhos se comporte como uma porta de serie(COM). Sendo muito mais acessível programar para uma porta serie, visto que existe uma biblioteca para Super Waba que nos fornece essas funções.

 

 

StartXTerm

 

 

Como continuação da aplicação anterior, e conforme pedido, fizemos uma aplicação que indicando o utilizador e a sua password, inicia no servidor de infravermelhos um servidor de X, ou seja, podemos ter uma máquina em que a única maneira de trabalhar nela, é iniciar o servidor de X, fechando para isso todas as outras entradas (mingetty).

 

 

Configuração no servidor

 

 

No que trata o servidor, não foi preciso criar nenhum programa para receber os dados vindos da porta de infravermelhos, visto que já existe um[30], o único problema foi configura-lo. Para isso tivemos de ler o HOWTO[31] sobre IRDA todo, e finalmente conseguimos por a porta do servidor Linux a funcionar.  Seguidamente enviamos informação para a porta IRDA do Servidor e funcionou tudo bem, o problema foi quando pedimos informações ao servidor. Começamos por receber uma grande quantidade de “lixo”. Lixo esse que não era mais do que: cores das letras e caracteres especiais usados na criação de um interface mais acessível para um utilizador em Linux (modo texto). Para conseguirmos retirar todos esses caracteres precisamos de ler uma serie de HOWTO’s. Depois de muito ler, encontramos informação sobre o TERM dumb[32]. Este não é mais do que um modo sem cores e alguns caracteres especiais. Os outros restantes tivemos que ser nos a anular na recepção dos dados.

           

Precisávamos de colocar à escuta algo que fosse buscar informações à porta de infravermelhos e para isso tivemos que usar o getty[33]. Acrescentando a seguinte linha ao “/etc/inittab”.

 

 

“S1:2345:respawn:/usr/bin/strace  -f  /sbin/getty ircomm0 DT9600 dumb –h 2> /var/log/nsktty”

 

 

Como tínhamos problemas do getty acabar “crashado”, obrigamos à criação de um ficheiro de log que se encontra no /var/log/nsktty ).

Para acabar, ainda tivemos que criar uma pequena script, pois não vimos outra maneira de  arrancar o servidor  X sem ter de  chamar a script “s”[34] da  seguinte maneira “. s”. E como era preciso estar na consola para arrancar o servidor X, alteramos o PAM[35]. Para isso editamos o ficheiro  /etc/pam.d/xserver” como está demonstrado a seguir.

 

 

auth sufficient /lib/security/pam_rootok.so

#auth required /lib/security/pam_console.so

auth required /lib/security/pam_permit.so

account required /lib/security/pam_permit.so

 

 

Retiramos a necessidade de estar na consola para abrir uma servidor X. Tem como inconveniente, sempre que algum utilizador executa o comando “starx” abre um terminal X seu na consola, permitindo ao utilizador que lá se encontra a trabalhar a ter acesso ao seus dados.


Exemplo de Execução

 

Quando iniciamos o nosso LoginIRDA aparece-nos um menu como o que se segue:

 

 

Caixa de texto:  Temos varias opções, desde abrir uma ligação ao servidor de IRDA, fechar essa ligação, e podemos escrever comandos seguidos de um “Send”.

 

 

 

Em relação ao interface do StartXTerm temos dois campos a preencher que indica qual o nome do utilizador e a sua password. Seguidamente clicamos no botão StartXTerm e os dados são enviados para o servidor de infravermelhos e o servidor de X é iniciado.

 

 

 

 

Quando clicamos no  menu “About”, de ambos os programas (LoginIRDA ou StartXTerm), é-nos fornecido uma lista dos programadores da aplicação.

 

 

 

 

 

 

 

 

Trabalhos Relacionados

 

Durante estes 4 meses de investigação/navegação pela Internet, no que trata o sistema operativo Palm OS, apenas encontramos alguns alunos/programadores que estivesse a fazer algo parecido (desde cifragem de dados[36] com simples DES até cifragem de base de dados completas ou os próprios ficheiros com o 3DES), mas o nível de segurança por eles requerido era baixa, logo usaram criptografia simétrica. No entanto, para nós foi pedido o uso de criptografia assimétrica o que leva a tornar a nossa aplicação muito complexa e de demorada execução. 

No caso do outro sistema operativo para PDA, o Windows CE, temos os nosso colegas de projecto que usando uma biblioteca intragável (por esta razão não conseguimos descodifica-la de modo a podermos usá-la na Palm) desenvolvida pela própria Microsoft conseguiram assegurar os objectivos do projecto, indo mais longe e desenvolvendo uma aplicação muito útil em vários aspectos relacionados com segurança de dados.

 

 

 

 


 

 

 

 

 

 

Análise e Resultados

 

Podemos dizer que o nosso trabalho foi dividido em 5 partes: a procura por informação sobre como programar em Palm; a procura de bibliotecas criptográficas, o inicio da criação de uma biblioteca Big Number, a criação de uma aplicação criptográfica para a Palm e por fim a criação de uma aplicação que nos possibilita fazer login numa maquina Linux através da Palm.

 

 

Investigação / Linguagens de Programação

 

Caixa de texto: Obtain ROM Image Files
For legal reasons, you must sign an agreement with Palm Inc. to download ROM images. To obtain the Prototype License and Confidentiality Agreement, you must be a member of the Alliance Program. After joining the Alliance Program, we recommend that you join the Developer Seeding Program, which requires that you return a signed agreement to us. This allows you to access ROM images and other valuable prerelease information. If you are based in the USA, you may also obtain images using a "clickwrap" agreement that does not require a signed agreement.
Texto 9.1

Quando aceitamos o projecto de fazer uma aplicação criptográfica para a Palm, nunca imaginamos os trabalho que nos iria trazer. Como nenhum de nós tinha um aparelho desses tivemos de procurar emuladores, e até encontramos vários, o problema foi arranjar uma ROM[37], isto porque existem pré-requisitos e alguns problemas legais na divulgação de uma ROM como nos explica o texto 9.1[38]. Após algumas tentativas falhadas fomos obrigados a procurar alguém que tivesse uma Palm para podermos fazer download do seu sistema operativo(isto porque só tivemos acesso a uma Palm três meses após o inicio do projecto).

 

 

 

 

Enquanto procurávamos por uma ROM começamos a escolha da linguagem de programação. Nenhum de nós jamais tinha utilizado um Palm, pois foi para nós o que eu considero um problema visto que já tínhamos ouvido falar que era de uma programação fácil e que existiam muitas bibliotecas, de todo o tipo, o que em parte é verdade. Na realidade existem muitas linguagens com nomes semelhantes senão iguais às linguagens de programação usados nos PCs, o problema é que todas as linguagens foram alteradas para poderem funcionar na Palm, o que nos obrigou a aprender um leque de novas linguagens. Muitas das funções deixam de existir na Palm[39], como muitas funções foram alteradas de tal forma que consideramos novas funções[40]. Criamos um interface em Waba que caso encontrássemos uma biblioteca em Waba ou em Java teríamos o trabalho facilitado.

 

Bibliotecas

 

Como vimos que existia pouca informação para Palm OS, achamos que em vez de encontrarmos uma linguagem acessível seria preferível encontrar primeiro uma biblioteca criptográfica e depois consoante a linguagem que esta suportasse iríamos usá-la. No entanto, apenas encontramos criptografia simétrica o que foi um pouco frustrante pois isso significava que tínhamos que criar uma biblioteca nós.

 


Criptografia na Palm

 

            Após termos encontrado finalmente algo que pudéssemos usar, e um pouco já cansados de investigação, e de encontrar aplicações que quando as testávamos davam ‘Not Yet Implmented’, começámos finalmente a desenvolver a aplicação criptográfica para a Palm, usando para o efeito o J2ME e a Ligth Weight API “The Legion of the Bouncy Castle”.

            Numa primeira fase começámos por analisar o código da  própria API, e este pareceu-nos bastante acessível e bastante bem documentado, pelo que ficámos surpresos, uma vez que isso pouco acontece, pois a maioria dos programas por nós encontrados não tinham qualquer tipo de documentação o que dificultava a sua compreensão.

            Após analisado o código passámos então a utilizá-lo na nossa aplicação e deparámo-nos com um novo problema, não que a API não funcionasse, pois esta funciona, mas devido ao baixo processamento da Palm, esta demora cerca de dois três dias a assinar uma mensagem não muito grande, com uma chave de 1024 bits, o que começou desde logo a inviabilizar as coisas, que até estavam a ter um bom andamento.

            Foi então que começamos a procura soluções para tentar diminuir o tempo de execução, e encontrámos, disponibilizado pela SUN, o código fonte da máquina virtual para o j2me, bem como já compilado para vários sistemas operativos, Windows, Solaris, Linux, … que nos permitiu testar tudo muito mais rápido, pois ficámos com uma Palm virtual a 500 Mhz e com 256Mb de memória, o que acelera, e de que forma, as coisas. Verificámos então que a biblioteca funcionava, na perfeição, e após alguns contactos com os criadores desta biblioteca e com mais uma série de programadores que encontrávamos frequentemente a “Navegar” e chegámos à conclusão que realmente era a Palm que não passava de “one very small and very slow computer”, devido ao facto do seu processador ser apenas a 16Mhz. Muitos foram-nos dizendo que era possível fazer OverClocking, passando a velocidade deste para 30~35 Mhz, mas não era muito aconselhável. Esta técnica podíamos ter diminuído substancialmente o tempo de resposta desta mas … .

Passada esta fase, em que nada podíamos fazer se não esperar, chegámos à altura de criar uma chave na Palm, mas para nosso desagrado essa parte da API não estava, pura e simplesmente implementada o que nos deixou muito decepcionados. Mas tentámos arranjar outra solução, que quase conseguíamos, não fosse um pequeno pormenor. Lembrámo-nos então de gerar a chave no computador e de alguma forma passa-lo para a Palm, e assim fizemos, um pequeno programa que apenas pede ao utilizador o tamanho que este deseja para a chave e envia-o através da porta de série para a Palm, mas, e foi este o problema, o JDK1.2 apenas suporta portas de série ou paralelas e o J2ME apenas suporta porta IrDa, chegámos assim a uma incompatibilidade, que passámos criando em Waba (que suporta ambas as portas) um pequeno programa para a recepção da chave, guardando-a na base de dados da Palm, uma vez que esta não tem ficheiros como um sistema operativo normal, mas sim um tipo de base de dados que podem ser escritas de uma forma muito complexa e de difícil utilização, que na nossa opinião não é nada prático. Mas, voltámos a depara, com já vem sendo hábito, com um novo problema, é que a base de dados escrita pelo programa em Waba não podia ser lida pelo programa em Java. Ou seja, conseguimos enviar as chaves para a Palm, mas não conseguimos utilizá-las, o que não é lá muito  útil.

Após algum tempo e algumas tentativas de melhorara a prestação da API decidimos fazer duas versões do trabalho, uma para correr na virtual machine de windows, por forma a poder-mos mostrar em tempo útil as coisas a funcionar, uma  outra para a Palm, que embora demore muito tempo a executar as operações, tem um interface muito mais user – friendly. Convém também salientar que conseguimos trabalhar na perfeição com o Sistema de Ficheiros (base de dados) da Palm, quer com Java, como com Waba, como com c, operações que nem sempre são simples, sendo por vezes até muito complicadas.

 

 


A nossa biblioteca BigNumber

 

Para fazermos uma biblioteca criptográfica, tivemos dois passos estudar o big integer e implementar em c (visto que é a linguagem de raiz da Palm). Começamos por definir a estrutura do big integer que não passava de uma lista ligada de array de inteiros com um boolean a servir de sinal do numero. Conseguimos a bom ritmo fazer a complicada soma e subtracção, mas antes de começarmos a fazer a hiper-difícil multiplicação encontramos uma biblioteca criptográfica assimétrica.

 

 

 

Login / Password

 

A segunda parte do nosso projecto foi fazer o login numa maquina Linux usando uma Palm. Tivemos que fazer alguma investigação no que trata a instalação do IRDA em Linux e no que trata a programação de infravermelhos na Palm. Depois de instalar os drivers da IRDA[41] no Linux começamos com a criação de uma aplicação de login. Esta envia o login e a password seguidos de um comando de inicio do servidor de X (“startx”).


 

 

 

 

 

 

Conclusão

 

Para fazer este trabalho/projecto, tivemos que fazer uma grande quantidade de investigação do que já existia, que podia ser reutilizado, e do que era preciso fazer. Não foi senão aqui que nos surgiu o maior problema. Começamos por encontrar muitas bibliotecas, algumas de criptografia simétrica, outras de criptografia assimétrica, mas o problema que nos surgiu foi que todas as bibliotecas para a criptografia  assimétrica ou estavam incompletas (como vamos mostrar), ou tinham código incompreensível, ou por fim não funcionavam mesmo.

            Uma das partes que nos interessou mais foi a criação do login na Palm pois havia algo que poderíamos mostrar já que no resto do projecto como por exemplo a criação da nossa biblioteca eram muito pequenos os passos que dávamos, apesar do imenso trabalho que neles tínhamos.

            Para concluir, achamos que se começássemos hoje este projecto, as linhas finais teriam outros contornos, devido ao grande número de aplicações que estão a ser agora disponibilizados para este sistema operativo tão especifico, ou que vão ser disponibilizadas num futuro muito próximo. Como por Exemplo o novo Wirelless Tool Kit, para Palm’s e MIDP (mais vulgarmente conhecidos por telemóveis), da própria SUN que trouxe um grande número de grandes funcionalidades e que na nossa opinião deverá desenvolver-se muito rapidamente devido ao grande número de parcerias já existentes, com é o caso da Motorola. Tudo isto, não era nada de prever, pois a PalmOs criou a Palm há já algum tempo, e era de esperar que devido ao grande sucesso que estes tiveram existissem muitas mais aplicações. Isso não se terá verificado, talvez devido a criação de um Sistema Operativo totalmente novo e que não tinha nada de comum com nenhum existente, o que atrasou o surgimento tanto de aplicações, como de linguagem de Alto Nível que fossem por este suportado. Pelo contrário, os Pockets PC’s derivaram de um Sistema Operativo, que embora não seja Bom, é muito utilizado em todo o mundo, e tem um grande número de aplicações, que são na sua grande maioria compatíveis, facilitando assim a sua implementação no mercado, chegando neste momento a concorrer seriamente com os dispositivos da PalmOs, não só em nível de preço (ainda por cima têm a mais valida de disponibilizar melhor hardware pelo mesmo preço), como a nível de funcionalidades, que começa já a ser mesmo muito boa, chegando em alguns casos ao nível se poderem visualizar filmes e ouvir músicas nesses pequenos Pocket PC’s, agora só falta mesmo é o SO ... Muito recentemente, pode-se dizer que foi lançado um novo tipo de PDA’s, conseguindo estas englobar um pouco de dois mundos e, que na nossa opinião, tem grandes possibilidades de se implementar no mercado, são elas derivadas da utilização dos grandes recursos de Hardware disponibilizados pelos dispositivos Pocket PC, em junção com um Bom Sistema Operativo, que é o Linux, com se pode ver em http://www.ipaqlinux.com/ .

 

 


 

 

 

 

 

 

Bibliografia

 

“Java In A Nutshell” – David Flanagan;

 

“PalmPilot The Ultimate Guide” – David Pogue

 

“Palm Programming – The Authoritative Solution” – Glenn BachMann

 

“Palm Programming – The Developer’s Guide” – Neil Rhodes & Julie McKeehan

 

Apontamentos das aulas teóricas e teórico / praticas da cadeira de Criptográfica Aplicada do 5 ano da LESI[42]” – Prof. José Valença e Prof. Alcino Cunha

 

 

Páginas Por nós Consultadas durante todo o Projecto :

 

 

http://www.palmos.com/dev/tech/tools/emulator/

http://www.redhat.com/

http://users.erols.com/tygris/xcopilot/

http://www.acme.com/java/software/Package-Acme.Crypto.html

http://www.isaac.cs.berkeley.edu/pilot/

http://www.eskimo.com/~weidai/cryptlib.html

http://www.logi.org/logi.crypto/1.1.1/

http://www.bouncycastle.org/

http://www.palmgear.com/software/showsoftware.cfm?sid=24094720000127174634&prodID=3775

http://www-4.ibm.com/software/data/db2/everyplace/

http://java.sun.com/products/cldc/index.html

http://www.orbworks.com/

http://www.wabasoft.com/

http://members.nbci.com/winikoff/palm/COBOL/

http://www.caslsoft.com/

http://www.superwaba.org/

http://www.dmic.fr/web/dmicweb.nsf

http://falch.net/

http://java.sun.com/pr/2000/12/pr001212.html

http://members.nbci.com/winikoff/palm/dev.html

http://www.geocities.com/versapalm/

http://www.dmic.fr/web/dmicweb.nsf

http://irda.sourceforge.net

http://linuxdoc.org/HOWTO/Infrared-HOWTO/index.html

http://docs.nsk.yi.org/doc/HOWTO/other-formats/html_single/Text-Terminal-HOWTO.html#ss2.1

http://docs.nsk.yi.org/doc/pam-0.72/html/

http://www.ipaqlinux.com/


 

 

 

 

 

 

Agradecimentos


 

 

Gostaríamos de agradecer ao professor Alcino Cunha, nosso orientador de projecto por todo o apoio que nos deu, bem como ao Eng. Pedro Borges, que foi quem nos acompanhou da parte da SIBS e que em alguns momentos nos deu ajudas fundamentais.

Queríamos também agradecer a uma colega nosso que nos deus alguns empurrões em alguns momentos menos felizes, ao Luciano Rocha.



[1] .prc – extensão de um ficheiro executável; .pdb – extensão de um ficheiro de base de dados.

[2] http://falch.net/

[3] http://java.sun.com/pr/2000/12/pr001212.html

[4] http://members.nbci.com/winikoff/palm/dev.html

[5] http://www.wabasoft.com/

[6] http://www.geocities.com/versapalm/

[7] http://www.dmic.fr/web/dmicweb.nsf

[8] http://www.superwaba.org/

[9] Aplicação do Java SDK.

[10] http://www.palmgear.com/software/showsoftware.cfm?sid=24094720000127174634&prodID=3775

[11] http://www-4.ibm.com/software/data/db2/everyplace/

[12] http://www.orbworks.com/

[13] http://members.nbci.com/winikoff/palm/COBOL/

[14] http://www.caslsoft.com/

[15] http://www.dmic.fr/web/dmicweb.nsf

[16] http://www.palmos.com/dev/tech/tools/emulator/

[17] http://www.redhat.com/

[18] http://users.erols.com/tygris/xcopilot/

[19] http://www.acme.com/java/software/Package-Acme.Crypto.html

[20] http://kaser.nsk.yi.org/trabalhos/Universidade/Disciplinas/Projecto%205%20ano/OpenSLL/pgp.zip

[21] http://www.isaac.cs.berkeley.edu/pilot/

[22] http://www.eskimo.com/~weidai/cryptlib.html

[23] http://www.logi.org/logi.crypto/1.1.1/

[24] http://www.logi.org/logi.crypto/1.1.1/

[25] http://www.eskimo.com/~weidai/cryptlib.html

[26] http://www.bouncycastle.org/

[27] INTPS = (32 / sizeof(unsigned long))

[28] Men-in-the-middle

[29] chave pública

[30] http://irda.sourceforge.net

[31] http://linuxdoc.org/HOWTO/Infrared-HOWTO/index.html

[32] http://docs.nsk.yi.org/doc/HOWTO/other-formats/html_single/Text-Terminal-HOWTO.html#ss2.1

[33] http://docs.nsk.yi.org/doc/HOWTO/other-formats/html_single/Text-Terminal-HOWTO.html#ss14.1

[34] chamamo-lhe “s”, pois é a inicial de script e dava jeito visto estarmos a escrever na Palm ser um nome pequeno

[35] http://docs.nsk.yi.org/doc/pam-0.72/html/

 

[36] memo, números de telefone, campos de endereços, informações no diário, etc.

[37] Uma ROM é um ficheiro que contem o sistema operativo usado numa certa versão da Palm OS

[38] http://www.palmos.com/dev/tech/tools/emulator/#roms

[39] A máquina virtual tem que ser relativamente pequena pois existem restrições de espaço e memória

[40] Basta o exemplo de como é feita a gestão do próprio interface(frontend)

[41] IRDA – InfraRed Data Association

[42] Licenciatura em Engenharia de Sistemas e Informática