
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
Sistema de
Ficheiros de uma PalmOs :
Java 2 Micro
Edition, Jbuilder 3.5 Foundation e Handheld Express:
Outras Linguagens
com que tivemos Contacto :
A nossa
Biblioteca BigNumber :
Login no sistema
operativo Linux / Integração com o PAM
Investigação /
Linguagens de Programação
Páginas Por nós
Consultadas durante todo o Projecto :
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.
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.
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.

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.
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.
à 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.
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 :

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.


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.
![]()
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].
Além das linguagens acima apresentadas, que foram aquelas que usámos para o nosso projecto, ainda tivemos contacto com :
-
DB2 Everywhere da IBM[11]
-
PocketC
produzida pela Orbworks[12]
-
YS COBOL da Yorick
Systems[13]
-
VisualWaba
da Dmic[15]
Mas por um
ou outro motivo não tinham uma reputação tão boa.
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.
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.
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).
Neste
tipo de cifras o segredo é partilhado unicamente entre dois intervenientes e
esse segredo é a chave que serve para cifrar e decifrar a mensagem.
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.
.
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.
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
Apesar
de não precisarmos deste tipo de cifras, como tivemos trabalho a encontrá-las
aqui estão:
-
PGPGP[20] (Pretty Good Privacy by Paul Gargan)
-
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).
Começamos por encontrar
estas bibliotecas criptográficas, que são apenas uma versão livre do RSA.

-
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.
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.
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.
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.
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, tudo é bastante básico, com
se pode ver :
Tamanho da Chave
Desejado
Sair Enviar Chave Gerar Chave ![]()
![]()
![]()

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.
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.
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;
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.
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.

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.
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.
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.
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.
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).
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:
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.
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.
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.

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.
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.
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.
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.
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”).
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/
.
“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
http://www.palmos.com/dev/tech/tools/emulator/
http://users.erols.com/tygris/xcopilot/
http://www.acme.com/java/software/Package-Acme.Crypto.html
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://members.nbci.com/winikoff/palm/COBOL/
http://www.dmic.fr/web/dmicweb.nsf
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://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/
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.
[9] Aplicação do Java SDK.
[27] INTPS = (32 / sizeof(unsigned long))
[28] Men-in-the-middle
[29] chave pública
[34] chamamo-lhe “s”, pois é a inicial de script e dava jeito visto estarmos a escrever na Palm ser um nome pequeno
[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