Buscar

Implementaçãodeumsistemadedecriptografiaemhardwarepara controlebancário

Prévia do material em texto

1
IMPLEMENTAÇÃO DE UM SISTEMA DE DECRIPTOGRAFIA EM
HARDWARE PARA CONTROLE BANCÁRIO
Augusto Ken Morita(1), Wilhelmus A. M.Van Noije
LSI/PSI – Escola Politécnica, Universidade de São Paulo
Av. Prof. Luciano Gualberto, 158, trav.3, São Paulo, SP, Brasil
(1) Atualmente está na empresa NEC do Brasil S.A.
Rodovia Presidente Dutra, Km 214, Guarulhos, SP, Brasil
AUGUSTKM@nec.com.br noije@lsi.usp.br
Abstract
This paper addresses a implementation of a
hardware system to decrypt data in real-time from an
encrypted floppy disks. The encryption protocol
used was DES (Data Encription Standard). The
hardware was modeled in VHDL and tested in
FPGA. Investigation on possible advantages and
disadvantages using this technology, compared
against traditional software techniques is also
considered. Also is demonstrated that using VHDL
we can produce technology independent circuits.
Introdução
Por um longo tempo a criptografia foi e tem sido
implementada com técnicas de software. Poucas
pessoas se interessavam para a implementação em
hardware. Este fato é devido à complexidade do
circuito, para se implementar algoritmos de
criptografia, os quais são sempre baseadas em
funções matemáticas.
Nos dias de hoje com o aumento do poder de
processamento dos computadores pessoais e também
pelo avanço das redes de Internet, é muito mais fácil
utilizar-se de grande poder de processamento em
conjunto para se quebrar a segurança de um sistema.
Junto com o aumento da possibilidade de quebra
de segurança em menos tempo, cresce a necessidade
de algoritmos de criptografias mais sofisticadas os
quais levam mais tempo para se criptografar ou
decriptografar os dados, pois utilizam funções
matemáticas que demandam um maior
processamento. Conseqüentemente levaria mais
tempo para quem tentasse decodificar os dados
criptografados.
Hoje com a demanda que existe para sistemas de
criptografia cada vez mais sofisticadas e lentas para
se realizar com implementações em software, há
uma grande necessidade para se implementar
sistemas dedicados em circuitos integrados para que
realizem algoritmos criptográficos.
A grande vantagem de se utilizar hardware em
vez de software é que quando feito uma função
criptográfica em circuito temos o aumento do poder
de processamento em relação a uma implementação
em software, no que se refere ao algoritmo de
criptografia ou decriptografia. Este fato de deve a
natureza dos circuitos elétricos ser paralela, isto é,
poder fazer múltiplas operações simultaneamente,
como também não podemos deixar de citar as
estruturas dedicadas para a realização das funções
matemáticas que envolvem em cada algoritmo de
criptografia, o qual computadores normais não
possuem.
Já em uma implementação em software as
funções matemáticas são realizadas de modo
seqüencial, executando cada linha de instrução uma
a uma.
Existe uma grande gama de pesquisas referentes
a técnicas de implementação de funções
criptográficas em circuitos integrados dedicados.
Este trabalho se refere a uma das muitas
possibilidades da implementação do DES (Data
Encryption Standard) em hardware e nosso escopo
não envolve somente a função de criptografia
propriamente dita, e sim a um sistema completo de
segurança.
A escolha do algoritmo de criptografia não se
baseou somente no algoritmo mais sofisticado para
ser decriptografado ou implementado. A decisão foi
por ser um padrão muito bem conhecido como
também de grande utilização, mesmo tendo um
tempo razoavelmente grande desce a sua primeira
utilização, ainda hoje no mercado é utilizado com
grande freqüência, principalmente no que ser refere
a segurança bancária.
A utilização de VHDL (Very high-speed
integrated circuit Hardware Description Language)
para a implementação do sistema de segurança foi a
facilidade de se descrever circuito utilizando esta
linguagem.
O tamanho físico também foi considerado onde
não poderia ser de forma alguma ser utilizado
circuitos discretos devido a complexidade do
circuito a ser desenvolvido.
 Muitas são as vantagens do VHDL, a
possibilidade de fazer circuitos não dependentes de
tecnologia, isto é, possível utilização do mesmo
código em tecnologias diferentes como por exemplo
2
FPGA (Field-Programmable Gate-Arrays) e ASIC
(Application-Specific Integrated Circuits)[1] sem a
necessidade de mudanças no código. Utilizando
VHDL o nível de abstração é muito alto, isto é, não
precisamos nos preocupar com os vários problemas
existentes em projetos de circuitos dedicados. Este
faz com que o projeto seja fácil de se desenvolver e
também flexível, rápido e compacto. A
documentação é de fácil entendimento e elimina o
problema de futuras mudanças no circuito.
Foi utilizado o FPGA, componente que pode ser
gravado com o circuito descrito em VHDL, esta
gravação pode ser feita quase que instantaneamente
após a compilação do circuito. A facilidade de
gravação facilita na depuração do circuito
propriamente dito como também não precisamos
esperar longos meses para que um protótipo seja
confeccionado, assim diminuímos muito o ciclo de
projeto.
Tanto para os testes de bancada como também
para o produto final foi utilizado FPGA, dada a
pequena demanda das unidades com o sistema de
segurança.
Idéia Inicial
O sistema consiste de um módulo que tem por
função decriptografar, via hardware, os dados lidos
em um disquete de 3,5 polegadas, este compatível,
em termos de formatação, com a linha de
microcomputadores IBM-PC.
A motivação deste projeto foi diminuir os custos
operacionais da atualização dos arquivos nos caixas
automáticos dos bancos. Atualmente, o caixa
automático é composto de um PC padrão que possui
um disk drive que serve tanto para carregar novas
versões de programas/dados quanto para ler arquivos
contendo os logs das transações efetuadas.
Do modo como está atualmente os caixas, é
possível inclusive incializar -“dar o Boot”- a
máquina, o que torna o sistema vulnerável, pois
qualquer programador mais experiente poderia
iniciar a máquina e rodar um aplicativo que fizesse a
máquina liberar dinheiro indevidamente.
Para evitar transtornos como o citado, o disk
drive é montado no cofre junto com o numerário e
qualquer Upload/Download exige a abertura do
cofre. Operacionalmente, o processo de Upload/
Download de dados/programas é muito caro, pois
exige seguranças armados durante o processo da
abertura do cofre, além de exigir uma pessoa com
certa confiança, já que este terá acesso interno ao
cofre onde se encontram as caixas com dinheiro,
aumentando muito os custos.
A solução para diminuir os custos operacionais é
criptografar o conteúdo dos floppy disks utilizados
nos disk drives dos caixas automáticos, de tal forma
que somente disquetes criptografados, utilizando
uma chave de conhecimento restrito, poderiam ser
utilizados para fazer o download de
programas/dados na máquina.
A decriptografia dos dados/programas contidos
no disquete é totalmente feita em hardware. Poder-
se-ia argumentar que a decriptografia poderia ser
feita por software via BIOS (Basic Instruction
Operational System) modificada, porém é sabido
que sistemas operacionais, como o Windows NT,
por exemplo, capturam as interrupções e têm suas
próprias rotinas de acesso a disco, tornando a
decriptografia por software inócua.
Utilizando-se um sistema de decriptografia em
hardware pode-se obter algumas vantagens como na
velocidade de decriptografia, a transparência, tanto
para o usuário como para qualquer sistema
operacional sem a utilização e manipulação de
softwares específicos a cada sistema operacional e
plataforma.
O método de criptografia utilizado foi o Data
Encryption Standard (DES), por sua rapidez, aliada
a facilidade de implementação em hardware.
O circuito desenvolvido, “intercepta" os dados
lidos do disquete, recompõe os frames originais
lidos, validando-os e descartando os parâmetros de
controle desses frames (número da trilha e cabeça,
setor do frame, bytes de sincronismo e CRC).
Em tempo real a leitura de cada frame, o circuito
decriptografa os dados contidos nos frames lidos,
utilizando algoritmo DES.Num segundo momento, o circuito monta novos
frames, usando os bytes decriptografados,
conservando, entretanto, as posições originais
relativas, equivalentes aos bytes originais. Todas as
informações de controles (número de trilha e setor,
setor do frame, bytes de sincronismo e novo CRC),
são gerados conforme as características dos bytes
decriptografados. Estes novos frames são então
direcionados à placa controladora de floppy disk do
micro IBM-PC.
Tendo em vista que as operações acima descritas
são feitas em tempo real a leitura dos dados no
disquete, a placa controladora não percebe a
existência do módulo decriptografador.
Evidentemente, a existência do referido módulo,
num micro IBM-PC, habilita a leitura, apenas, dos
disquetes cujos dados estejam criptografados, com a
particular chave gravada no módulo. Isto evita a
leitura indevida, proposital ou acidental, de arquivos
que não tenham sido criptografados com a particular
chave de cada módulo.
Outra característica importante do módulo
decriptografador é a possibilidade de troca da chave
de decriptografia, a qualquer tempo, de acordo com
a opção do usuário do micro, o que dificulta as
3
eventuais tentativas para descoberta ou quebra
dessas chaves.
A opção por um sub-sistema autônomo traz a
vantagem do uso, no micro IBM-PC, de mother-
boards de mercado, sem a necessidade de alterações,
retrabalhos, especificações particulares ou limitações
das características dessas unidades.
Metodologia
Técnicas de codificação dos dados no
disquete
O controlador de floppy escreve dados no disk
drive serialmente como pulsos codificados. Estes
pulsos são então convertidos pelo drive em variações
de fluxo magnético na superfície do disquete. Os
pulsos podem ser posteriormente lidos pelo drive e
convertidos de volta para pulsos codificados, que
podem ser decodificados pelo controlador resultando
os dados originais. [2]
Como o dado é um conjunto de bits seriais e,
devido a imperfeições no processo de escrita/leitura,
podem haver variações e deslocamento nas
informações seriais, o relógio está embutido na
seqüência de bits recebidos do floppy, o que
possibilita a sincronização dinâmica dos dados
durante a leitura.
Os dois esquemas de codificação mais populares
utilizados em disquete são: FM (Frequency
Modulation) e MFM (Modified Frequency
Modulation). FM define uma célula para cada bit de
dados. Cada célula contém uma posição para o pulso
de dado e outra para o pulso de relógio. Cada uma
destas posições são conhecidas como janelas. O
pulso de relógio está presente em todas as células e
os pulsos de dados estão presentes somente se o bit
de dado para aquela célula for um. Quando este dado
é lido a partir de um disco, o relógio de leitura pode
ser gerado a partir dos pulsos de relógio do sinal. A
codificação FM foi o primeiro método usado para
gravar dados em disquete. No sistema FM somente
50% da área útil do disco é utilizada para gravar
dados enquanto os outros 50% são utilizados para
gravar pulsos de relógio.
A Codificação MFM destina 100% da área útil
do disco para armazenar dados. MFM define uma
célula para cada bit de dado, como no FM.
Novamente cada célula contém uma posição para
pulso de relógio (Janela de relógio) e uma posição
para o pulso de dado (Janela de dado). Um pulso de
dado está presente se o bit de dado for um. O pulso
de relógio está presente somente se o bit de dado for
zero e o anterior também for zero. Veja Figura 1
Figura 1. Exemplo de como o dado e o relógio são
codificados em MFM.
Comparando os dois métodos, pode-se observar
que o método MFM requer menos pulsos para
codificar a mesma quantidade de dados, gastando
metade do espaço requerido pelo FM.
O único problema do MFM é que requer uma
cabeça de leitura/escrita melhor e circuitos
eletrônicos melhores. É também necessário um
separador de dados mais preciso do que o necessário
para o FM.
Como o MFM é a técnica dominante utilizada
nos discos flexíveis atuais e a utilização do FM nos
discos atuais é quase insignificante, enfocaremos
neste trabalho a codificação e decodificação desta
técnica.
Formato típico de um setor
Cada trilha contém um conjunto de vários
setores. Cada setor contém um campo de endereço e
um campo de dados. A seguir será abordado em
detalhes o formato IBM para dupla densidade,
apesar de existirem outros formatos no mercado,
este formato é o mais comum nos dias atuais.
O campo de endereço dentro de um setor é usado
para identificar a qual setor e trilha pertence o
campo de dados. Começa com um campo de
sincronização ou preâmbulo para permitir que o
separador de dados sincronize a velocidade na qual
os dados são lidos do disco.
Depois um address mark (AM) identifica
univocamente este campo como um campo de
endereço. Os address marks são codificados com um
padrão ilegal único que é uma violação da regra de
codificação do MFM. Esta violação consiste em um
pulso de relógio faltando em uma posição particular
dentro de um byte. Este padrão ilegal garante que
este é um address mark e não um padrão de dados
de alguma outra área do disco. Os quatro bytes
seguintes identificam o setor que está sendo lido.
Este é seguido por um campo de CRC (Cyclic
Redundance Check). O CRC permite ao controlador
verificar se a informação lida está livre de erros.
Este é seguido por um GAP que é simplesmente uma
4
série de bytes que separa fisicamente o campo de
endereço com o campo de dados. [3]
O campo de dados contém os dados que o setor
representa. Começa com um preâmbulo e um
address mark do campo de dados, de forma
semelhante ao campo de endereços. O campo de
dados é seguido por um CRC e depois por um GAP,
que separa o setor atual do próximo. O formato das
ordens de informações que compõe o quadro do
floppy disk esta ilustrado na Figura 2
G A P
8 0 O F 
4 E
T
R
A
C
K
H
E
A
D
C
R
C
C
R
C
S
E
C
T
O
R
#
B
Y
T
E
S
G A P
PR O GR A -
M A BLE
G A P
5 0 O F 
4 E
G A P
2 2 O F 
4 E
S Y N C
1 2 O F
0 0
S Y N C
1 2 O F
0 0
S Y N C
1 2 O F
0 0
IA M
3 O F
C 2*
3 O F
A1*
3 O F
A1*F C F E
F B
O R
F 8
A M A M D ATA G A P
D ATA FI ELD
R EP EAT ED FO R EAC H S EC T OR
AD D R E E F IELDIN D EX AD D R ESSF IELD
C 2 * = D a d o s C 2 c o m c lo ck 1 4
A 1 * = D a d o s A 1 co m c lo c k 0 A
Figura 2. Formato típico da unidade de disco. Formato
padrão IBM MFM.
O Algoritmo de Criptografia DES
DES é um algoritmo que criptografa blocos de
64 bits. Um bloco de dados de 64 bits como entrada
produz um bloco de 64 bits criptografado na saída
do DES. DES é um algoritmo simétrico, isto é, o
mesmo algoritmo e a mesma chave são usadas tanto
para criptografar como para decriptografar [4].
O comprimento da chave é de 56 bits.
Normalmente a chave é expressa em 64 bits,
contudo a cada conjunto de 8 bits é utilizado um bit
para checagem de paridade e este bit é ignorado
como parte da chave. Estes bits de paridade são
sempre o bit menos significativo dos bytes que
compõe a chave. A chave pode ser qualquer
combinação de 56 bits e pode ser trocada a qualquer
instante. Um conjunto pequeno de números é
considerado chave fraca, contudo pode ser
facilmente evitado.
Uma explicação simplificada do algoritmo seria
dizer que este combina duas técnicas básicas da
criptografia; confusão e difusão. O bloco
fundamental da arquitetura DES é uma combinação
destas técnicas, uma substituição seguida de uma
permutação, aplicada nos dados, levando como base
a chave. Este é chamado de etapa. O DES tem 16
etapas; isto é, aplica-se 16 vezes nos dados a ser
criptografado, a mesma combinação de técnicas
mencionadas anteriormente.
O algoritmo utiliza-se de aritmética básica e
operações lógicas básicas em números de 64 bits,
além de sua natureza repetitiva, o que torna este,
ideal para ser implementado em chips de aplicações
específicas (ASIC) [5].
Detalhamento do algoritmo.
O DES opera em blocos de 64 bits de dados.
Depois de uma permutação inicial, o bloco de dados
é dividido em duas partes, metade à esquerda e
metade à direita, cada parte com 32 bits de
comprimento. Logo após,há 16 etapas de operações
idênticas, chamadas de função F, no qual os dados
são combinados com a chave. Após o termino das 16
etapas, a parte da esquerda e da direita são juntadas e
uma permutação final (inverso da permutação
inicial) é aplicada, assim finalizando o algoritmo.
Veja Figura 3.
T e xto
IP
L 0 R 0
f K 1
L 1= R0 R 1= L 0+ f(R 0,K 1 )
f K 2
L 2= R 1 R2= L 1+ f(R1,K 2)
f K 1
R 15= L 14+ f(R 14,K 15) L 15= R 14
L 15= R14 R 15= L 14+ f(R 14,K 15 )
IP -1
Te xto c r ip to grafado
Figura 3. Diagrama de blocos DES.
Em cada etapa, a chave é deslocada e 48 bits
desta chave de 56 bits são escolhidos. A parte da
direta dos dados é expandido para 48 bits através de
uma permutação de expansão, combinado com
operador XOR com os 48 bits da chave já deslocada
e permutada, enviada através dos 8 blocos S,
produzindo 32 novos bits, e permutado novamente.
Estas 4 operações são chamadas de função F. O
resultado da função F é combinado com a parte da
esquerda utilizando-se novamente XOR para esta
operação como podemos observar na Figura 4. O
resultado destas operações torna-se a nova parte da
direita e a parte da direita anterior se torna a nova
parte da esquerda. Estas operações são repetidas por
16 vezes, compondo as 16 etapas do DES.
Se Bi é o resultado da interação número n, Li e
Ri são a parte da esquerda e a parte da direita de Bi,
5
Ki é a chave de 48 bits para a etapa i, e F é a função
que faz todas as substituições, permutações e XOR
com a chave, então a etapa seria como detalhado na
Figura 4
L i-1 Ri-1
Perm utação com Expansão
Subs tituiç ão Bloc o S
Perm utação Bl oco P
R iL i
Chave (key)
Perm utação com Expansão
Shi ft Shi ft
Chave (key)
Figura 4. Detalhamento etapa do DES.
Permutação Inicial
A permutação inicial ocorre antes da primeira
etapa, o embaralhamento dos bits dos dados de
entrada pode ser visto na Tabela 1. As tabelas
apresentadas a respeito do algoritmo do DES devem
ser lidas da esquerda para direita de cima para baixo.
Por exemplo, a permutação inicial move o bit 58 dos
dados de entrada para a posição 1, o bit 50 para
posição 2 e assim por diante.
A permutação inicial e a correspondente
permutação final não afetam na segurança do DES.
Tabela 1. Permutação Inicial (IP).
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
Transformação da chave
Inicialmente, a chave de 64 bits do DES é
reduzida para uma chave de 56 bits, isto é feito
ignorando-se o oitavo bit de cada byte, como pode
ser visto na Tabela 2. Estes bits ignorados podem
ser utilizados como checador de paridade para
garantir que a chave não está errada ou para outros
fins se necessário.
Tabela 2. Permutação da chave.
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
Após a chave de 56 bits ser extraída, uma
subchave diferente de 48 bits é gerada para cada
uma das 16 etapas do DES. Estas subchaves, Kn são
geradas da seguinte maneira.
Primeiramente os 56 bits da chave são divididos
em duas metades de 28 bits. Então as metades são
deslocadas circularmente para a esquerda de um ou
dois bits, dependendo da etapa. Este deslocamento
pode ser visto na Tabela 3.
Tabela 3. Número de bits da chave a ser deslocada para
esquerda pela interação.
Int. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Des 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Após terem sido deslocados, 48 bits dos 56 bits
são selecionados. Devido a permutação dos bits
nesta operação como também na operação de
seleção dos 48 bits, este é chamado de permutação
com compressão (Compression permutation).
Devido ao deslocamento, um diferente conjunto
de bits da chave é utilizado para geração de cada
subchave. Cada bit é utilizado, aproximadamente,
nas 14 das 16 subchaves, contudo nem todos os bits
são utilizados exatamente o mesmo número de
vezes.
Tabela 4. Permutação com compressão.
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
6
Permutação com expansão
Esta operação expande a metade da direta dos
dados, Ri, de 32 bits para 48 bits. Esta operação é
chamada de permutação com expansão devido ao
fato desta mudar a ordem dos bits como também
repetir alguns dos bits.
Esta operação tem dois propósitos: fazer com
que a metade da direita tenha o mesmo tamanho da
chave para a operação com XOR e também produzir
um resultado maior que pode ser comprimido
durante a operação de substituição. Contudo nenhum
dos dois tem a finalidade de criptografia. Permitindo
que um bit afete duas substituições, a dependência
dos bits de saída nos bits de entrada cresce
rapidamente. Este é chamado de efeito avalanche.
DES é projetado para chegar a uma condição de que
todos os bits criptografados dependam de todos os
bits dos dados originais e de todos os bits da chave o
mais rápido possível.
 Este é chamado freqüentemente de bloco E. Para
cada 4 bits dos dados de entrada, o primeiro e o
quarto bit de cada, representam dois bits dos dados
de saída, enquanto que o segundo e o terceiro bit
representam um bit dos dados de saída. A Tabela 5
mostra qual das posições de saída corresponde a
qual das posições da entrada. Por exemplo, o bit de
posição 3 dos dados de entrada é movido para a
posição 4 dos dados de saída, e o bit na posição 21
dos dados de entrada é movido para a posição 30 e
32 dos dados de saída.
Apesar dos dados de saída serem maiores que os
dados de entrada, cada dado de entrada gera um
único dado de saída.
Tabela 5. Permutação com expansão (E).
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
O bloco S de substituição
Após a chave comprimida ter feito uma operação
de XOR com o bloco expandido, os 48 bits
resultantes vão para uma operação de substituição.
As substituições são feitas por 8 blocos de
substituição chamados de blocos S. Cada bloco S
tem 6 bits de entrada e 4 bits de saída, havendo 8
blocos S diferentes. Os 48 bits são divididos em 8
sub-blocos de 6 bits. Em cada sub-bloco é feita uma
operação de substituição com diferentes blocos S.
Cada bloco S é uma tabela de 4 linhas por 16
colunas. Cada entrada no bloco gera uma saída de 4
bits. Os 6 bits de entrada do bloco S especifica qual
das linhas e qual das colunas deve ser pego para a
saída. As Tabela 6 à Tabela 13, mostra todos os 8
blocos S.
Tabela 6. Substituição S[1].
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
Tabela 7. Substituição S[2].
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
Tabela 8. Substituição S[3].
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
Tabela 9. Substituição S[4].
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
Tabela 10. Substituição S[5].
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
Tabela 11. Substituição S[6].
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
7
Tabela 12. Substituição S[6].
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
Tabela 13. Substituição S[8].
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11Os bits de entrada especificam uma entrada no
bloco S em uma maneira muito particular. Considere
um bloco S com só 6 bits de entrada, b1, b2, b3, b4,
b5 e b6. Os bits b1 e b6 são combinados para formar
um número de 2 bits, o qual corresponde à linha da
tabela. Os 4 bits do meio, b2 até b5 são combinados
para formar um número de 4 bits, o qual
corresponde à coluna da tabela.
Por exemplo, imagine que as entradas do sexto
bloco S sejam 110011. O primeiro e o último bit
combinado são 11, o qual corresponde a linha 3 do
sexto bloco S (lembrando de contar as linhas de 0 a
3 e colunas de 0 a 15). Os quatro bits do meio
combinados são 1001, o qual corresponde à coluna 9
do bloco S. O número na tabela correspondente é o
14. Assim podemos dizer que o número 110011 será
substituído por 1110 (14 decimal).
Para uma implementação em software podemos
re-arranjar os blocos S em uma matriz de 64
entradas. Contudo nunca se deve rearranjar a
indexação sem rearranjar as entradas. Os blocos S
foram projetados com muito cuidado.
As substituições dos blocos S são um passo
crítico do DES. Os algoritmos das outras operações
são lineares e fáceis de analisar. Os blocos S são
não-lineares e mais que tudo dão ao DES a
segurança.
O resultado desta fase de substituição formam 8
blocos de 4 bits os quais combinados formam um
bloco de 32 bits. Este bloco é então a entrada do
bloco de permutação (bloco P).
Bloco P permutação
Os 32 bits de saída do bloco de substituição são
permutados de acordo com o bloco P. A Tabela 14
mostra a posição a qual cada bit é permutado. Por
exemplo, o bit 21 é movido para o bit 4, enquanto o
bit 4 move para o bit 31.
Finalmente o resultado do bloco P é feito um
XOR com a metade da esquerda dos 64 bits iniciais.
Após esta operação a parte da direita é trocada com
a parte da esquerda e inicia-se uma nova etapa.
Tabela 14. Permutação (P).
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
Permutação final
A permutação final é o inverso da permutação
inicial e está descrita na Tabela 15. Note que a
metade da esquerda e a metade da direita não são
trocadas após a última etapa do DES, os blocos R16
e L16 são concatenados e utilizados como entrada
do bloco de permutação final. Não ocorre nada nesta
fase, trocando-se as metades e deslocando-se na
permutação levaria a exatamente o mesmo resultado.
Isto é verdade, pois o algoritmo pode ser utilizado
tanto para criptografar como para decriptografar.
Tabela 15. Permutação final
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
Decriptografando o DES
Após todas as substituições, permutações, XOR e
deslocamentos, podemos pensar que a decriptografia
seja alguma coisa complexa como o algoritmo de
criptografia. Ao contrário as várias operações foram
escolhidas para produzir uma propriedade
específica. O mesmo algoritmo funciona como
criptografador e decriptogrador.
Com o DES é possível utilizar as mesmas
funções para criptografar e decriptografar um dado.
A única diferença é que as chaves devem ser usadas
em uma ordem reversa, isto é se na criptografia as
chaves para cada etapa foram k1, k2, k3,..., k16,
então para decriptografar devem ser utilizadas k16,
8
k15, k14, ...., k1. O algoritmo utilizado para se criar
as chaves para as etapas é circular. O deslocamento
da chave é um deslocamento para a direita e o
número de bits a ser deslocado é 1, 1, 2, 2, 2, 2, 2, 2,
1, 2, 2, 2, 2, 2, 2 e 1.
Abordagem
A partir dos dados disponíveis foi feito um
modelamento do sistema como um todo, sendo nesta
etapa divididos em 4 macroblocos.
O sistema foi dividido de tal forma que
facilitasse no projeto dos circuitos. Um dos pontos
mais considerados foi à possibilidade de reutilização
de cada macrobloco em um projeto futuro, como
também a possibilidade de simulação de cada
macrobloco separadamente. Assim pudemos dividir
cada parte do sistema em macroblocos
independentes que em conjunto podem ser utilizados
com o sistema de segurança aqui abordado. Veja
Figura 5 com mais detalhes.
O primeiro macrobloco chamado de
Decodificador e Controle é componsto dos seguintes
blocos:
• Separador de dados e clock.
• Detector de fase.
• Máquina de estado de controle
• Multiplexador.
• Codificador MFM
O separador de dados e clock é um módulo onde
é feita toda a decodificação dos dados vindos no
formato MFM do floppy disk e convertidos para
sinais de níveis lógicos 0s e 1s, esta etapa é
necessária devido a dificuldade em trabalharmos
com dados codificados em MFM, assim este módulo
se encarrega de decodificar este sinal em um sinal de
dados e um sinal de relógio. É importante notarmos
que neste estágio de decodificação dos dados MFM,
não temos ainda informações suficientes sobre a fase
de captura dos dados pois a fase do sinal de relógio
restaurado pode estar invertido.
Uma vez passado este bloco podemos então
detectar a fase correta do sinal de relógio, isto é feito
no bloco de detector de fase.
O bloco detector de fase observa características
específicas dos dados gravados no floppy disk, os
quais são padronizadas para este fim, chamado de
preâmbulo ou dados de sincronização, estes é
composta por uma seqüência de H00 e H4E. Uma
vez que estes dados são detectados o circuito deste
bloco tem a capacidade de identificar e fornecer na
saída o dado e o relógio recuperado na fase correta.
Podemos dizer que este bloco, máquina de estado
de controle, é o bloco mais importante para a
sincronização e o funcionamento em conjunto do
sistema todo.
O bloco multiplexador tem a função de substituir
os dados bem como o CRC quando estiver na região
de dados e na região de CRC onde serão substituídos
por dados decriptografados e seus respectivo CRC.
O codificador de MFM tem a função de gerar
novamente sinais MFM a partir dos dados
decriptografados e do sinal de relógio, ambos em
sinais de níveis lógicos 1 e 0. Este bloco é necessário
pois o controlador de floppy disk entende somente
dados vindos no formato MFM, é claro que se os
dados fossem utilizados em algum tipo diferente de
interface como por exemplo uma entrada serial, este
bloco não seria necessário.
Se pa ra dor de da d os
e c loc k D ete cto r d e fas e
D ados F lo p p y
C lo ck 1 6 M H z
D ados
C lo ck R
M aquina de
est ado de
co n t ro le
M ó dulo D E S
M o do C F B
 Mó dulo d e CRC
C o m p arado r
M ó dulo de
T ro ca de
C h ave
Chave 6 4
V eto r In icial 64
 Mó dulo I 2C
P / M e m ória c om
Cha ve
 Mó dulo d e CRC
x o rD ados sy c
D ados sy c
E st a no s D ado s
E st a no CR C
D ados D ecr ip t o gra fado s
C RC C h ecado
M ult ip lex ado r
C o dif icado r
M F M
C lo ck R
C lo ck R
C lo ck R
Sa ida M F M
Sina l p a ra c r ia r m issin g c lo ck
SC L
SD A
C lo ck 1 0 0 K H z
 M ó d u lo I2 C
T ro ca d e C h av eSC L
SD A
C lo ck 1 0 0 K H z
� � � � � � � � � � � � � � � 	 
 � 
 � � 	 � � � 
 � � � � � � �
� � � � � � � � � � � � � � � � � � � 	 � � � � � �
� � � � � � � � � � � 
 � � � �
� � � � � � � � � � � � � 	 � � � � � �
Figura 5. Diagrama de blocos detalhados do sistema de segurança.
9
O segundo Macrobloco chamado de Detector de
Erros é composto dos seguintes blocos:
• Módulo de CRC.
• Comparador.
• XOR.
No bloco módulo de CRC é calculado dois
CRC, um para os dados que estão chegando dos
floppy disk, o qual serve para uma verificação da
integridade dos dados decodificados pelo primeiro
macrobloco. Neste instante os dados ainda não
estão decriptografados, somente em estado digital,
dado e relógio.
Paralelamente o segundo gerador de CRC está
calculando o valor do CRC para os dados
decriptografados que estão vindos do terceiro
macrobloco.
Se houver algum erro na decodificação do
primeiro macro bloco, o primeiro gerador de CRC
resultará em um número errado.
Este CRC errado calculado pelo primeiro
gerador de CRC é comparado no bloco XOR com o
CRC que está gravado na trilha do floppydisk.
Uma vez detectado o erro, este bloco gera pulsos de
erro para que o CRC do segundo gerador seja
destruido.
Quando o controlador de floppy disk observar
os dados decriptografados e o CRC errado ira
enviar pulsos de controle para o floppy disk
avisando para que envie novamente os dados.
É importante ressaltar que a estrutura do bloco
XOR foi projetada para que este macro bloco não
gere nenhum atraso dos sinais, todo procedimento é
feito em tempo real para garantir o desempenho do
sistema.
O terceiro Macrobloco chamado Chave
componsto dos seguintes blocos:
• Módulo I2C para memória com chave.
• Módulo I2C de troca de chave.
• Módulo de troca de chave.
O módulo I2C para memória com chave tem a
função de fazer a interface no padrão I2C [6][7]
com a memória onde está guardado o valor da
chave utilizado pelo quarto bloco onde se concentra
o algoritmo de criptografia.
Existe o módulo de I2C de troca de chave tem a
função de interfacear com um módulo de
carregamento de chave onde este módulo utiliza-se
também do padrão de comunicação I2C.
For fim o módulo de troca de chave faz uma
checagem nos dados vindos do módulo I2C de troca
de chave e decide se a nova chave será aceita ou
não.
O quarto Macrobloco chamado de Módulo DES
é composto somente com um único bloco onde é
realizada a decriptografia propriamente dita. Este
bloco foi projetado para que faça somente a
decriptografia dos dados que entram serialmente,
sendo que a taxa de dados pode ser modificada de
taxas baixas até um valor máximo de 1M ciclos de
decriptografia por segundo, com uma inserção de
dados a uma taxa de 16 Mb/s.
Foi projetado para que em um futuro projeto
onde necessite de um bloco que faça tanto a
decriptografia como também a criptografia, este
bloco pode ser utilizado com mínimas alterações.
Estas alterações se referem à criptografia dos dados
visto que este bloco somente faz a decriptografia,
contudo, como o algoritmo DES descrito
anteriormente, seria necessária somente uma
mudança do sentido do deslocamento da chave.
Logicamente caso este bloco seja transformado
em um ASIC dedicado (Standard Cell ou gate
Array) a taxa de dados pode ser bem superior, hoje
este taxa está limitado à tecnologia da FPGA
utilizada neste sistema.
Na Figura 6 podemos observar a placa de
decriptografia desenvolvida neste trabalho e seu
posicionamento entre a unidade de floppy disk e a
controladora da unidade de floppy disk que esta
localizado na placa mãe.
Figura 6. Ilustração do sistema de segurança e seu
posicionamento.
Tanto na Figura 6 como na Figura 7 podemos
observar a existência de dois chips no centro da
placa de decriptografia, este é o componente FPGA
utilizado. Foram necessárias as utilizações destes
dois componentes para o primeiro momento,
devido ao tamanho do circuito desenvolvido.
Contudo, em uma segunda fase de minimização e
melhoramento da construção do circuito
propriamente dito, o tamanho do circuito foi
minimizado para caber em um único componente,
diminuindo o custo do sistema.
10
Figura 7. Detalhe da placa decriptografadora.
Conclusão
O sistema aqui proposto foi concluído
utilizando como componente final o FPGA da
Altera da família FLEX6000. A quantidade de
Gates utilizados foi de 35.000, em células dos
componentes da altera foi 1.500 células e a
ocupação do componente foi de 92%.
Foi notado que neste nível de ocupação podem
ser encontradas problema quanto a erros no circuito
causados pelos atrasos das interconexões dentro do
componente. Para minimizar estes tipos de
problemas devem ser sempre utilizadas estruturas
síncronas e estruturas bem definidas para confecção
de circuitos.
Agradecimentos
O projeto foi apoiado e financiado pela
Procomp Indústria Eletrônica LTDA. e LSI/PSI –
Escola Politécnica, Universidade de São Paulo.
Referência Bibliográfica
[1] D. J. Smith, ”HDL Chip Design: A Pratical
guide for Designing, Synthesizing, and
Simulation ASICs and FPGAs using VHDL”,
Doone Publications, 1996.
[2] AN-505, ”Floppy disk Data Separator Design
Guide”, National Semiconductor, Feb. 1989.
[3] DP8470, “Phase Locked Loop Data Sheet”,
National Semiconductor, 1986.
[4] ANSI X3.92, “American National Standard for
Data Encryption Algorithm (DEA),”American
Nationa Standard Institute, 1981.
[5] ANSI X3.105, “American National Standard
for Information System – Data Link
Encryption,”American National Standards
Institute, 1983.
[6] “The I2C bus And How to Use It,” Philips
Semiconductors, Jan. 1992.
[7] “The I2C-Bus Specification,” Philips
Semiconductors,Version 2.0, Dec. 1998.

Continue navegando