Você está na página 1de 6

CODIFICAO DE DADOS E O COMRCIO ELECTRNICO

PhD, Ana Maria Abro


Instituto Superior Dom Afonso III Loul Portugal

RESUMO Atravs desta contribuio pretende-se tornar mais evidente o subtendido uso da codificao de dados confidenciais nas transaces electrnicas on-line, processo este ao mesmo tempo to comum e obscuro ao utilizador. Pretende-se ainda tornar mais acessvel a compreenso do processo da criptografia, de um ponto de vista mais tcnico, atravs da implementao e anlise do algoritmo de criptografia Vigenre , bem como do processo de criptoanlise equivalente e cujos cdigos o leitor mais curioso poder executar utilizando a linguagem de programao Clean. PALAVRAS -CHAVE criptografia, criptoanlise, segurana, comrcio electrnico, programao.

1. A CRIPTOGRAFIA NOS SISTEMAS ELECTRNICOS MODERNOS


A insegurana nos sistemas de comunicao e no comrcio electrnico uma preocupao que atinge grande parte dos utilizadores comuns nos dias de hoje. Porm, h indcios de que vrios povos antigos tentaram esconder informaes desde que a escrita comeou a ser desenvolvida (como forma seleccionar o receptor ou de valorizar a importncia do contedo quando revelado). Existem hoje registos pblicos de inmeros algoritmos de criptografia desde os mais simples queles que utilizam equaes e clculos matemticos complexos. Alguns destes ltimos suportam comprimentos de chave de at 4.000 bits. Assim como os algoritmos de criptografia, esto tambm em domnio pblico inmeros algoritmos de criptoanlise que utilizam engenhosos clculos de correlaes, probabilidade e estratgias matemticas com a funo de encontrar a provvel chave utilizada na codificao. As limitaes humanas de memria, capacidade de processamento, e outras, tornam-se pouco relevantes se o algoritmo de descodificao for implementado numa linguagem de programao. O resultado da parceria homem/computador que agora so necessrias estratgias cada vez mais elaboradas de codificao. Ainda assim, pelo menos teoricamente, um sistema absolutamente infalvel pouco provvel que seja idealizado. O que se deseja de um bom sistema de codificao de mensagem, no entanto, que ele exija tanto tempo de processamento para a sua descodificao que, at que o interceptor da mensagem consiga faze-lo, a informao j no tenha mais interesse ou validade.

2. A CRIPTOGRAFIA ELECTRNICO

NO

COMRCIO

Quando um utilizador preenche o seus dados pessoais e nmero de carto de crdito num formulrio de compras do sit e efectiva a compra, ocorrem dois processos de criptografia: um realizado pelo servidor web do sit eeo outro pelo browser do utilizador. Ao efectivar a compra, o browser codifica os dados do e carto de crdito do utilizador atravs de uma criptografia de chave nica (pblica). Mas, para enviar os dados codificados para o sit e tambm enviar a chave para que o proprietrio do sit possa aceder os dados e eles sejam interceptados pois, na criptografia de chave nica, a mesma e originais, corre-se o risco de que chave utilizada para codificar e para descodificar a mensagem. Para evitar que isto acontea, o sit realiza e

212

CODIFICAO ELECTRNICO

DE

DADOS

COMRCIO

automaticamente uma segunda criptografia no momento em que o utilizador decide-se pela compra, agora de chave dupla, envia a chave pblica para o computador do utilizador e reserva a chave privada. O browser do utilizador recebe a chave pblica enviada pelo sit e codifica a chave pblica gerada anteriormente para e chave codificada por outra chave. Desta forma, a codificar os dados do carto de crdito. Tem-se agora uma mensagem pode ser enviada despreocupadamente pois, o interceptor precisaria da chave privada que ficou reservada no sit para conseguir decifra-la. e

2.1 Assinaturas Digitais


Na Internet, a assinatura digital o recurso criado para conferir identidade a um utilizador cuja referncia era apenas um nmero de IP, at antes da expanso do comrcio electrnico. Ao efectivar uma transaco electrnica, o utilizador envia tambm a sua assinatura digital. Para adquirir uma assinatura digital pela primeira vez, em geral a pessoa convidada a comparecer pessoalmente entidade a fim de ser identificada. Feita a identificao, so geradas duas chaves necessrias para a transmisso codificada das informaes. A chave de descodificao permanece na entidade e a de codificao mantida em segredo pelo utilizador. Considerando-se emissor/receptor como sendo um cliente e um determinado banco on-line , uma vez utilizada uma assinatura digital, qualquer transaco financeira que seja realizada na ausncia da assinatura ser recusada. Por um lado, este processo limita as possibilidades de aces no-autorizadas por terceiros e por outro, restringe tambm as aces do cliente que v-se limitado utilizao de um nico computador ou obrigado a transportar e instalar a sua assinatura digital em outros computadores. As Assinaturas Digitais utilizam criptografia de chave assimtrica, mas no da mesma forma que a criptografia padro. O receptor (o servidor web do banco), ao receber a mensagem codificada, utiliza a chave pblica do cliente para descodific-la. Ora, se ao utilizar a chave pblica gerada para o cliente, o certificado puder ser visualizado, ou seja, descodificado, ento sabe-se que ele foi mesmo emitido pelo cliente. Embora o certificado no d garantias de confidencialidade dos dados, ela permite a identificao (saber de quem se trata) e a autenticao (assegurar-se de que a pessoa identificada mesmo a pessoa em questo) e ainda a integridade (as informaes do documento no foram alteradas depois da assinatura).

3. IMPLEMENTAO DE CRIPTOGRAFIA EM LINGUAGEM DE PROGRAMAO


Neste tpico ser apresentado o algoritmo de codificao Vigenere - um programa exemplo implementado na linguagem de programao Clean. Este programa foi testado na verso 1.3 da referida linguagem e encontrase a funcionar correctamente. Clean uma linguagem funcional desenvolvida na Universidade de Nijmegen, Holanda A linguagem gratuita e o seu download poder ser feito pela Internet na seguinte morada electrnica: http://www.cs.kun.nl/~clean. Para executar o programa de criptografia fornecido na listagem 1, o leitor dever escrever o programa no ambiente do Clean e grava-lo com a extenso . . Dever tambm salvar um projecto .prj, alm de importar icl as bibliotecas da linguagem. Depois disto, dever ir linha de comando do DOS e executar a funo vigen como sugerido: C:\Clean\ vigen TABLE texto.txt textoCod.txt. Isto considerandose que: o programa Clean foi instalado no drive C do computador onde o teste ser realizado, a senha escolhida foi a palavra "table", o texto a ser codificado foi escrito num ficheiro chamado "texto.txt" e est localizado na mesma pasta que o programa e ainda, que o texto codificado dever ser escrito num ficheiro com o nome "textoCod.txt". O texto contido neste ficheiro passado como argumento para a funo Vigenere e nele ser aplicado o mtodo de codificao elaborado pelo francs Vigenere. Para uma melhor compreenso do algoritmo vamos assumir a seguinte entrada de dados: Vigenere "nowisthetimeforallgoodmen" . "TABLE" A funo rtp ir criar uma string do mesmo tamanho que o texto original (25 caracteres) a partir da senha TABLE : NOWISTHETIMEFORALLGOODME N TABLETABLETABLETABLETABLE

213

Conferncia IADIS Ibero-Americana WWW/Internet 2003

A transformao do texto original em texto codificado ser realizada caracter a caracter e ter como referncia a ordem alfabtica em que se encontra cada caracter de mesma posio no texto original e na senha. Isto feito da seguinte forma: chave = rtp = "TABLE" key ["TABLETABLETABLETABLETABLE"] = [19,0,1,11,4,19,0,1,11,4,19,0,1,11,4,19,0,1,11,4,19,0,1,11,4] Sabendo-se que a contagem da ordem alfabtica inicia-se no zero, temos ento que o primeiro caracter do texto codificado o caracter G. Este processo repetido sucessivamente at o trmino do texto original. Considerando-se o texto e senha exemplo acima, a sada do programa ou o texto criptografado ser: GOXTWMHFEMFEGZVTLMRSHDNPR. Na verdade, o que o algoritmo faz montar uma matriz onde o alfabeto deslocado um caracter a direita a cada linha. O cruzamento do caracter N (do texto) na linha da matriz com o caracter T (da senha) na coluna, obtm-se o caracter G, o primeiro do texto codificado. O prximo passo encontrar a chave privada, ou seja, a funo inversa que o receptador da mensagem precisa aplicar ao texto codificado a fim de recuperar a mensagem original. Isto o que faz a funo invertechave da listagem 1 (linha 17). Cada caracter da chave "TABLE" transformado em inteiros gerando a lista [19,0,1,11,4]. Cada elemento desta lista de inteiros somado ao caractere a (caractere referncia que tambm foi transformado em inteiro), atravs da operao 26 - x mod 26 , onde x a ordem do caractere na chave pblica e 26 a quantidade de caracteres do alfabeto. Assim, utilizando-se a chave "TABLE" para executar a funo invertechave obtem-se: invertechave TABLE = [H,A,Z,P,W] . Completada a tarefa de codificao passamos a tarefa da criptoanlise. A meta neste caso , partir de um texto criptografado, conseguir recuperar a texto original sem que se tenha acesso chave privada. O primeiro passo neste caso descobrir o tamanho da chave privada. A estratgia do algoritmo estabelecer um intervalo para o suposto tamanho da chave, aplicar um clculo de correlaes estatsticas a cada uma delas e ao final seleccionar, no conjunto de correlaes, aquela que adquiriu maior valor. Por exemplo, se o intervalo escolhido for 1-10, ou seja, a senha escolhida tem tamanho provvel entre 1 e 10, o texto codificado ser distribudo em colunas de acordo com cada tamanho, calculando-se em seguida a correlao correspondente. Como exemplo, para o tamanho provvel igual a 5 , a distribuio ficar como mostra a imagem ao lado. A funo histo da listagem 1 (linha 24) recebe como parmetro o suposto tamanho da chave, a coluna seleccionada para o clculo do histograma e o texto criptografado. A cada vez que esta funo for executada a sada ser o clculo da frequncia de cada letra da referida coluna. Considerando-se uma chave de 5 dgitos e a primeira coluna do quadro ao lado, a chamada da funo histo ( histo 5 2 "GOXTWMHFEMFEGZVTLMRSHDNPR ter a seguinte sada: ") {0,0,0,1,1,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0} Isto indica a frequncia das letras da coluna 1 de acordo com suas respectivas posies na ord em alfabtica. Este grfico de frequncia e os outros das 4 colunas restantes sero posteriormente necessrios para o clculo da correlao correspondente suposta chave de tamanho 5. A funo phi (linha 39) a responsvel pelo clculo da correlao de cada coluna da mensagem criptografada. Os parmetros recebidos por ela so os mesmos utilizados pela funo histo. Se executarmos a funo phi isoladamente com os valores Start = phi 5 1 o valor obtido ser: 0.2 . Isto "GOXTWMHFEMFEGZVTLMRSHDNPR", significa que, supondo uma chave de 5dgitos, a coluna 1 do texto codificado ster uma correlao de 0.2. A seguir, a funo keySize retorna a maior mdia das correlaes para cada tamanho de chave testado. O tamanho da chave seleccionado como o tamanho testado que obteve a maior mdia de correlaes. Encontrado o tamanho da chave possvel agora descobrir a chave propriamente dita. O que o algoritmo prope encontrar um novo tipo de correlao porm, agora entre o histograma encontrado para cada coluna do texto codificado e a correlao de cada caractere do alfabeto com relao lngua Portuguesa. Em outras palavras, faz-se uma comparao entre a frequncia de cada caractere na coluna do texto e a frequncia em que o mesmo ocorre na lngua em questo. Finalmente, a funo getkey completa o trabalho ao construir uma lista com os caracteres de maior correlao, ou seja, montando a chave inversa. A chave inversa ento utilizada para obter o texto original: Vigenere textoCriptografado chaveInversa = textoOriginal

214

CODIFICAO ELECTRNICO

DE

DADOS

COMRCIO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

module vigen import StdEnv, ArgEnv Start w # argv=getCommandLine | size argv < 4 = abort "Usage: key inFile outFile\n" # (ok, inFile, w) = fopen argv.[2] FReadText w | not ok= abort ("Unable to open "+++argv.[2]+++" \n") (plainText, inFile)= freads inFile 200000 # crypt= Vigenere plainText argv.[1] (ok, outFile, w)= fopen argv.[3] FWriteText w | not ok= abort ("Unable to open "+++a rgv.[3]++ +"\n") fwrites crypt outFile # file= (ok, w)= fclose file w (inverteChave argv.[1], w) = inverteChave chave= [toChar (a+ (26-x) mod 26) \\ x < - ch] where a = toInt A i = (toInt (toUpper i )) ord a [ord i \\ i <-: chave] ch= Vigenere s k = c where a = toInt A i = (toInt (toUpper i)) ord a ks = ks++(rpt rpt ks) = rpt [ord d \\d <-: k] key vg p k | isAlpha p = A+ (tochar(((ord p)+k) mod 26)) vg p k = p c= {vg p k \\ p <-: s & k <key}

Listagem 1. Programa de Criptografia O programa completo de criptoanlise da listagem 2 pode ser testado na linha de comando do DOS com a seguinte entrada: chave textoCriptografado.txt
1 2 3 4 5 67 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 module chave import StdEnv, ArgEnv Start w # argv= getCommandLine | size argv < 2 = abort "Usage: key inFile outFile\n" # (ok, inFile, w)= fopen argv.[1] FReadText w | not ok= abort ("Unable to open "+++argv.[2]+++" \n") (criptoTexto, inFile) = freads inFile 200000 # = getkey (keySize criptoTexto) criptoTexto HH= { 110, 8, 43, 52, 117, 19, 7, 8, 70, 3, 1, 27, 35, 49, 113, 33, 9, 78, 77, 66, 42, 11, 11, 3, 4, 2} SZ= 25 getKey tchave s= [Xi tchave coluna s \\ coluna < - [0..tchave-1]] where c= histo tchave coluna s xxs= [sum [c.[j] * HH.[(i+j) mod 26] \\ j < - [0..25]] \\ i <[0..25]] [] x i j = j maximo maximo [x:xs] x1 i j | x > x1 = maximo xs x (i + one) i maximo [x:xs] x1 i j = maximo xs x1 (i + one) j histo tchave coluna s = loop coluna (createArray 26 0) where position x = toInt ((toUpper x) - A) sz= size s-1

215

Conferncia IADIS Ibero-Americana WWW/Internet 2003

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

loop i v | i > sz = v loop i v | isAlpha s.[i] #! j=position s.[i] e= v.[j] +1 = loop ( i+ tchave) {v&[j]= e} loop i v = loop (i + tchave) v avgPhi tchave s= m where m= avg [phi tchave coluna s \\ coluna <- [0..tchave]] phi tchave coluna s = (toReal n) / (d*d) where c= histo tchave coluna s n= sum [c. [j] * c.[j] \\ j <[0..25]] d= toReal (sum [c.[j] \\ j < [0..25]]) keySize s= loop sizes (hd sizes) 1 1 where sizes = [avgPhi tchave s \\ tchave <- [1..10]] loop [] x i j = j loop [x:xs] x1 i j | x > x1 = loop xs x (i + 1) i loop [x:xs] x1 i j = loop xs x1 (i + 1) j

Listagem 2. Programa de criptoanlise

4. BIBLIOGRAFIA
Abro, Ana Maria (2001). Interfaces Visuais para Linguagens Funcionais . Alfred J. Menezes, Paul C. Van Oorschot. Handbook of Applied Cryptography . Book News, inc. Portland. Amor, Daniel (2000). The E-business (R)evolution: Living and Working in a Interconnected World . Prentice Hall, Inc. Foster, Caxton. Cryptanalysis for Microcomputers . Out of Print. Gordon, Andrew D (1994). Functional Programming and input/output . Cambridge University Press. Hilt (2000). High Level Software Tolls. Software Technology Research Group. http://www.cs.kun.nl/~clean.

216