PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA...

54
PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA COMPUTAÇÃO ESCOLA POLITÉCNICA FERNANDO BRASIL BABONI PEDRO AUGUSTO CORSI DO NASCIMENTO PROVENDO SEGURANÇA AO MEDIDOR INTELIGENTE COM SMART CARDS IMPLEMENTAÇÃO FINAL CURITIBA 2016

Transcript of PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA...

Page 1: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

PONTIFICIA UNIVERSIDADE CATÓLICA – PUCPR

ENGENHARIA DA COMPUTAÇÃO

ESCOLA POLITÉCNICA

FERNANDO BRASIL BABONI

PEDRO AUGUSTO CORSI DO NASCIMENTO

PROVENDO SEGURANÇA AO MEDIDOR INTELIGENTE COM

SMART CARDS

IMPLEMENTAÇÃO FINAL

CURITIBA

2016

Page 2: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

FERNANDO BRASIL BABONI

PEDRO AUGUSTO CORSI DO NASCIMENTO

PROVENDO SEGURANÇA AO MEDIDOR INTELIGENTE COM

SMART CARDS

IMPLEMENTAÇÃO FINAL

Implementação final do Projeto, a ser

apresentado à disciplina Projeto Final II,

como parte da documentação do Projeto

Final a ser entregue para a conclusão do

curso de Engenharia de Computação da

Pontifícia Universidade Católica do

Paraná.

___________________________

Altair Olivo Santin (Orientador)

CURITIBA

2016

Page 3: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

PROVENDO SEGURANÇA AO MEDIDOR INTELIGENTE COM

SMART CARDS

Fernando Brasil Baboni, Pedro Augusto Corsi do Nascimento

[email protected], [email protected]

Resumo. Devido à falta de proteção da memória do Medidor Elétrico

Inteligente (Smart Meter), produto largamente utilizado no mercado, e a

necessidade de armazenamento de dados privados no mesmo, o projeto

objetiva integrar o Smart Cards ao medidor e desenvolver as técnicas de

armazenamento/recuperação de dados privados e chaves criptográficas no

mesmo, a fim de proteger os dados contra invasores.

Desenvolver uma solução através do BasicCard da ZeitControl para

armazenar e criptografar todos os dados recebidos pelo Smart Meter. A

comunicação deles será através de protocolos e passados ao Smart Card

Reader. Também, será desenvolvido e validado um cenário de utilização de

teste do ambiente proposto.

___________________________

Fernando Brasil Baboni

___________________________

Pedro Augusto Corsi do Nascimento

Page 4: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

ÍNDICE DE IMAGENS

Figura 1 - Diagrama de Blocos ......................................................................................... 9

Figura 2 - Diagrama de Blocos ....................................................................................... 10

Figura 3 - Arquitetura do Smart Card ............................................................................. 10

Figura 4 - Circuito Integrado Smart Card ....................................................................... 11

Figura 5 - Comunicação ................................................................................................. 19

Figura 6 - Protocolo T=1 ................................................................................................ 20

Figura 7 - Arquitetura do I-block ................................................................................... 21

Figura 8 - Leitor de Smart Card ...................................................................................... 22

Figura 9 - Leitor de Smart Card ...................................................................................... 28

Figura 10 – Gravado com sucesso .................................................................................. 33

Figura 11 – Dados armazenados com sucesso ................................................................ 33

Page 5: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

ÍNDICE DE TABELAS

Tabela 1 - Enhanced Cards ............................................................................................. 14

Tabela 2 - Professional Cards .......................................................................................... 14

Tabela 3 - Multiapplication Cards ................................................................................... 15

Tabela 4 – Legenda dos Algoritmos ................................................................................ 15

Tabela 5 - Legenda das Criptografias .............................................................................. 16

Page 6: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

Sumário 1. INTRODUÇÃO .................................................................................................................... 7

2. DETALHAMENTO DO PROJETO ..................................................................................... 9

2.1. SMART CARD ............................................................................................................... 10

2.2. BASICCARD .................................................................................................................. 13

2.3. PROGRAMAÇÃO ZC-BASIC ....................................................................................... 17

2.4. COMUNICAÇÃO ........................................................................................................... 19

2.8. SMART CARD READER .............................................................................................. 22

3. IMPLEMENTAÇÃO .......................................................................................................... 23

3.1. LEITURA DE DADOS ................................................................................................... 23

3.2. ARMAZENAMENTO DE DADOS ............................................................................... 23

3.3. CHAVE CRIPTOGRAFADA DESSES DADOS........................................................... 24

3.4. ARMAZENAMENTO/RECUPERAÇÃO DA CHAVE ................................................ 24

3.5. DETERMINAÇÃO DE ESPAÇO LIVRE ...................................................................... 24

3.6. DELEÇÃO/SUBSTITUIÇÃO DE CONTEÚDO ........................................................... 24

3.7. INSERÇÃO DE CONTEÚDO NUMA POSIÇÃO ESPECÍFICA DO SMART CARD 25

3.8. PROTEÇÃO DA CHAVE .............................................................................................. 25

4. PROCEDIMENTOS DE TESTES E VALIDAÇÃO DE PROJETO ................................. 26

5. MANUAL DO CÓDIGO .................................................................................................... 28

5.1. CÓDIGO DO CARTÃO ................................................................................................. 28

5.2. CÓDIGO DO USUÁRIO ................................................................................................ 29

5.3. CÓDIGO DO MEDIDOR ............................................................................................... 30

6. RESULTADOS ................................................................................................................... 33

7. CONCLUSÃO .................................................................................................................... 34

8. REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................ 36

APÊNDICE A ............................................................................................................................. 37

APÊNDICE B ............................................................................................................................. 39

APÊNDICE C ............................................................................................................................. 43

APÊNDICE D ............................................................................................................................. 51

Page 7: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

7

1. INTRODUÇÃO

A segurança de dados sempre foi uma preocupação. Com o surgimento da era

digital, esta dobrou principalmente com o receio de vazamento de informações sigilosas

e a integridade de transferências bancárias. A origem dos computadores, qualquer tipo de

serviço, alteração, execução de atividades requeriam um certo tipo de autenticação de

usuário, a fim de prevenir contra falhas e desastres.

Com o avanço tecnológico, novas técnicas de segurança vêm surgindo, como o

código de barras, radiofrequência, reconhecimento facial, biometria, senhas de acesso,

tags, e outros, e o Smart Card, que basicamente é um cartão com capacidade de

processamento e armazenamento de informações.

Discute-se muito a utilização de dispositivos como Smart Meter e Smart Cards, e

também a preocupação com os riscos de segurança e comprometimento da privacidade

dos dados. Assim como aplicações aonde estas tecnologias vêm sendo implantadas, como

transações digitais, compras e serviços pela internet, e também negociações e acessos

digitais. No atual cenário do mercado é possível encontrar Smart Cards sendo,

principalmente, utilizados como cartões de pagamento (débito/crédito) e sistemas de

identificação para login e acesso.

Diversas empresas vêm trabalhando fortemente com a evolução destas

tecnologias de longa data, porém há peculiaridades do ponto de vista construtivo nos

medidores inteligentes. Se os Smart Cards forem acessados fisicamente e o protocolo de

comunicação com o medidor atacado, existe a possibilidade de inferir nos dados. Desta

forma, o Smart Card não pode ser substituído ou a comunicação, entre o Smart Meter e

o Smart Card, seja violada sem que o medidor detecte.

Um grande estudo é então realizado sob estes devices, a busca pela segurança e

garantia de sigilo total de dados é um dos assuntos de maior importância. Este projeto tem

como finalidade provar o quanto as informações podem ser asseguradas e quão benéfico

as implementações de soluções a partir destes dispositivos podem ser para o usuário.

Este documento serve como Relatório e Implementação Final para o Projeto Final

de conclusão de curso de Engenharia da Computação e está dividido em diversas partes.

Inicialmente, é o detalhamento do projeto, onde será apresentado o diagrama de blocos

para se ter uma visão geral do projeto, bem como o modelo de Smart Card escolhido e

suas características. Logo após, vem os procedimentos de testes e validação do projeto

onde é apresentado uma lista de teste para serem realizados em módulos, tanto

individualmente como em conjunto. A finalização do documento encontra-se na etapa de

Page 8: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

8

conclusão. Por fim, a referência bibliográfica com sua respectiva lista de sites, artigos e

livros acadêmicos.

Page 9: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

9

2. DETALHAMENTO DO PROJETO

Para prover maior segurança de informação, o Smart Card foi escolhido para ser

o carro forte do projeto. Considerado o mais difícil para falsificação e com baixa taxa de

falhas, o cartão inteligente lidera no segmento de armazenamento e segurança de dados.

Para sua comunicação, é necessário um Smart Card Reader que serve como uma solução

de baixo custo para leitura e escrita de dados no cartão inteligente.

Figura 1 - Diagrama de Blocos

Os dados recebidos são processados pelo Smart Meter e passados para o Smart

Card através do Smart Card Reader. O cartão inteligente foi programado anteriormente

por um computador através de seu leitor. O cartão criptografa os dados recebidos e

armazena em sua memória EEPROM.

Page 10: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

10

2.1. SMART CARD

Os Smart Cards são divididos em leitura/escrita de dados, tipos de Chip

implementado no cartão e sua capacidade. Existem milhares de modelos para todos os

tipos de projeto.

Figura 2 - Diagrama de Blocos

A arquitetura do Smart Card é padrão para todos os fabricantes, assim, torna-se

mais fácil estudá-los e programá-los. Matos afirma que a estrutura física é dividida em

três segmentos de acordo com a especificação da International Standards Organization

(ISO) 7810, 7816/1 e 7816/2. Elas são: cartão plástico de dimensões 85,60mm x 53,98mm

x 0,80mm, um circuito impresso e um chip de circuito integrado no cartão.

Figura 3 - Arquitetura do Smart Card

O circuito integrado no cartão, de acordo com a ISO 7816/3, mantém apenas cinco

pontos de conexão para dados e alimentação. Este é banhado a ouro para melhor condução

e é fixado na cavidade do cartão. Nguyen diz que o circuito protege o chip integrado do

estresse mecânico e de eletricidade estática, sendo sua comunicação através do contato

que atravessa o circuito impresso.

Page 11: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

11

Esta comunicação para transmissão de dados é feita por uma serial bidirecional

conforme o padrão ISO 7816/3. Estas trocas de informações estão sob controle da

Unidade Central de Processamento do Chip. Para maior privacidade de dados, os

comandos dados pelo cartão sob a entrada de dados são mandados para o Chip que

responde com palavras de status e dados de saída até a confirmação desses comandos e

dados. A informação então é mandada em modo half duplex, ou seja, em apenas uma

única direção de transmissão de informações.

Figura 4 - Circuito Integrado Smart Card

Sua aparência é semelhante a um Chip de celular, porém enquanto um cartão de

telefone contém apenas memória, um Smart Card contém uma CPU, isto é, o cartão

possui capacidade de processar dados. Uma placa com processador típica de hoje pode

conter entre 32 a 256 k bytes de memória ROM (Read-Only Memory) para o Sistema

Operacional, 8 a 72 k bytes de memória EEPROM (Electrically-Erasable Programmable

Read-Only Memory) para os dados do cartão, e 256 a 4096 bytes de RAM (Random Access

Memory). A EEPROM é o "disco rígido" do cartão, ou seja, dados gravados na EEPROM

mantém seu valor quando o cartão é desligado. O aspecto mais importante do cartão com

processador é sua segurança.

A segurança do Smart Card varia com a sua funcionalidade. Borba cita exemplos

de uso deles: No sistema bancário, a sua segurança é baseada em senhas para que

estranhos não possam utilizar o cartão para realizar compras ou sacar dinheiro. Como

também, o cartão SIM, em outras palavras o Chip do celular, onde nele contém todas as

informações do usuário e do celular, tais como o número, tarifas e serviços acionados

pelo dono. Neste caso, o Smart Card tem a funcionalidade de criptografar essas

informações e as chamadas para a segurança do usuário final.

Page 12: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

12

Nesses dois exemplos, é possível ver que o Smart Card cumpre bem o seu papel

de proteger os dados para que intrusos não possam acessá-las ou modificá-las para o seu

interesse. Bem como, uma forma de identificação do usuário na rede.

Unificando essas vantagens do uso do cartão inteligente, com sua simplicidade e

custo benefício, o Smart Card será usado para armazenar dados recebidos e analisados

pelo medidor, também para a mobilidade das informações contidas nele.

Para atender todas essas demandas, foram estudados diversos cartões inteligentes,

mas apenas os da ZeitControl passaram no teste. Assim, foram selecionados diversos

modelos deles, cada qual com suas características de memória e criptografia.

Page 13: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

13

2.2. BASICCARD

O BasicCard da ZeitControl é um cartão inteligente com microprocessador. Rankl

et al (2010) afirma que cartões inteligentes com CPU são capazes de processar e

criptografar os dados sem necessidade de componentes instaladas, pois essas capacidades

já estão instaladas em sua arquitetura.

Sua arquitetura possui protocolo de comunicação baseado na ISO 7816/3, ou seja,

possui plena implementação de nível de bloco de T=0 e T=1 para sinais eletrônicos e

protocolos de transmissão. Também tem comandos internos para o carregamento da

EEPROM, permitir a criptografia, entre outros. Em relação a criptografia, o modelo da

ZeitControl possui comandos e respostas criptografados automaticamente.

De acordo com seu Datasheet, estes modelos de cartões inteligentes ainda

possuem uma memória EEPROM de 2 a 72k bytes, superando assim, todos os outros

pesquisados. Tem até quatro criptografias diferentes, sendo elas: DES, AES, EAX e

OMAC. Ele ainda conta com o algoritmo de segurança HASH SHA-256.

A criptografia utilizada no trabalho é o algoritmo DES (Data Encryption

Standard), aonde utiliza uma cifra em bloco, ou seja, é um algoritmo que recebe uma

string de tamanho fixo de um texto ou comando e transforma-o em um texto cifrado de

mesmo tamanho. Essa transformação é uma série de operações complicadas e invisíveis

ao usuário.

Para facilitar a sua implementação, o BasicCard é programado pela linguagem

ZC-BASIC e não precisa de um microcontrolador para processar seus dados.

Os cartões da ZeitControl são divididos em até três modalidades com diferentes

modelos: Enhanced (Aperfeiçoado), Professional (Profissional) e MultiApplication

(MultiAplicações). As diferenças deles vão desde criptografia, memória e até

comunicação. A programação é a mesma para todos, o que difere é o algoritmo de

criptografia a ser utilizado e o espaço de memória.

Page 14: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

14

ENHANCED:

VERSÃO EEPROM RAM PROTOCOLO CRIPTOGRAFIA

ZC3.14 2k 256

bytes T = 1 DES

ZC3.34 8k 256

bytes T = 1 DES

ZC3.44 16k 256

bytes T = 1 DES

ZC3.54 32k 256

bytes T = 1 DES

Tabela 1 - Enhanced Cards

PROFESSIONAL:

VERSÃO ALGORITMO

PK EEPROM RAM PROTOCOLO CRIPTOGRAFIA EXTRAS

ZC5.4

EC-167

16k 1.8k

T=0 EAX

SHA-256 OMAC

EC-211 T=1 AES

DES

ZC5.5

EC-167

32k 1.8k

T=0 EAX

SHA-256 OMAC

EC-211 T=1 AES

DES

ZC5.6

EC-167

60.5k 1.8k

T=0 EAX

SHA-256 OMAC

EC-211 T=1 AES

DES

ZC7.5

RSA

32k 4k

T=0 EAX

SHA-256 T=1 OMAC

EC-p T-CL² AES

DES

ZC7.6

RSA

72k 4k

T=0 EAX

SHA-256

T=1 OMAC

EC-p T-CL² AES

DES

Tabela 2 - Professional Cards

Page 15: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

15

MULTIAPPLICATION:

VERSÃO ALGORITMO

PK EEPROM RAM PROTOCOLO CRIPTOGRAFIA EXTRAS

ZC6.5

EC-167

31k 1.5k

T=0 EAX

SHA-256 OMAC

EC-211 T=1 AES

DES

ZC8.5

RSA

32k 4k

T=0 EAX

SHA-256 OMAC

EC-p T=1 AES

DES

ZC8.6

RSA

72k 4k

T=0 EAX

SHA-256 T=1 OMAC

EC-p T=CL² AES

DES

Tabela 3 - Multiapplication Cards

LEGENDAS:

ALGORITMOS PK (PUBLIC

KEYS) DESCRIÇÃO TAMANHO

RSA Rivest-Shamir-

Adleman algorithm Até 4k

EC-p

Elliptic Curve

Cryptography over

the field GF(p)

Até 512 bits

EC-211

Elliptic Curve

Cryptography over

the field GF(2211)

211 bits

EC-167

Elliptic Curve

Cryptography over

the field GF(2167 )

167 bits

EC-161

Elliptic Curve

Cryptography over

the field

GF(2168 )

161 bits

Tabela 4 – Legenda dos Algoritmos

Page 16: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

16

ALGORITMO DE

CRIPTOGRAFIA DESCRIÇÃO TAMANHO

EAX

Encryption with

Authentication for

Transfer

(using AES)

128/192/256 bits

OMAC One-Key CBC-

MAC (using AES) 128/192/256 bits

AES

Advanced

Encryption

Standard

128/192/256 bits

DES Data Encryption

Standard 56/112/168 bits

Tabela 5 - Legenda das Criptografias

No projeto serão utilizados os modelos ZC3.14 e o ZC5.4, pois estes possuem o

melhor custo benefício, bem como algoritmo de criptografia e memória compatível com

a aplicação.

Page 17: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

17

2.3. PROGRAMAÇÃO ZC-BASIC

Programar um cartão inteligente não é o mesmo que programar um computador

desktop, por exemplo, tela e teclado não existem no universo dos cartões. Então, este

comunica com o mundo exterior através de seu contato bidirecional de Entrada e Saída.

A comunicação ocorre a 9600 baud (número de vezes em um segundo que um sinal em

um canal de comunicação muda) ou mais, de acordo com os protocolos T = 0 e T = 1

definidos nas normas ISO 7816/3. Entretanto, isso é completamente invisível para o

programador Basic, bastando definir os comandos e seus procedimentos.

A linguagem de programação ZC-BASIC é completamente funcional, com

funções e chamadas de sub-rotina, tipos de dados definidos pelo usuário, diretivas de pré-

processador e arquivos I/O. Além disso, ela tem alguns recursos especiais para o ambiente

de Smart Card, incluindo a definição de comando e invocação, criptografia de I/O, e

arquivo de controle de acesso.

Essas diretivas de pré-processador são instruções para o compilador ZCMBasic,

por exemplo, elas contam ao compilador quais as linhas de código-fonte para compilar e

se estas linhas devem ser escritas na lista pré-solicitada. Fora isso, elas podem ser usadas

para especificar vários parâmetros de linha de comando no código em si. Neste caso, o

compilador aceita a primeira ocorrência do parâmetro, de modo que as diretivas no

código-fonte sejam substituídas por parâmetros na linha de comando.

A ZC-BASIC permite que os dados sejam armazenados em classes: EEPROM,

Public, Static e Private.

No caso da EEPROM, ela funciona como o disco rígido de um computador,

armazenando, assim, os dados mesmo se o equipamento for desligado.

EEPROM CustomerName$ = “ “

EEPROM Balance& = 500

Seu escopo é global, o que significa que pode ser acessado por todos os

procedimentos do programa.

Já as classes Public e Static são armazenadas na memória RAM, onde serão

conservados os valores enquanto o cartão estiver conectado ao leitor. Os dados na Public

têm escopo global, já os da Static são locais, ou seja, apenas acessado quando forem

declarados. Os dados Public e Static podem ser inicializados, assim como dados de

EEPROM. A inicialização ocorre sempre que o cartão é ligado.

Os dados declarados em Private só existem até que o procedimento retorne. Ele

tem escopo local e eles podem ser inicializados com os valores constantes:

PRIVATE LoopCounter = 100

Page 18: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

18

2.4. ISO 7618/3

A ISO 7816/3 é importante para os fabricantes de Smart Card Reader ou para

desenvolvedores que desejam estabelecer uma comunicação com um cartão inteligente

em um nível muito baixo (o nível do sinal). Resumindo, a ISO 7816/3 é tudo aquilo que

está envolvido na criação de software de I/O. Isso pode ser tanto para comunicar por um

microcontrolador ou um PC pela porta serial/paralelo/USB/PCMCIA.

Descrição dos Sinais Elétricos encontrados no Smart Card:

I/O: Entrada ou Saída para dados em série para o circuito integrado dentro do

cartão.

VPP: Entrada de tensão de programação (uso opcional pelo cartão).

GND: Terra (tensão de referência).

CLK: Clocking ou sinal de temporização (uso opcional pelo cartão). É

configurado apenas em versões ZC7.X e ZC8.X.

RST: Usado (sinal de reinicialização fornecido pelo dispositivo de interface) ou

em combinação com um circuito de controle de reinicialização interno (uso opcional pelo

cartão). Se o Reset interno for implementado, a tensão fornecimento em Vcc é

obrigatório.

VCC: Entrada da fonte de alimentação (uso opcional pelo cartão).

NOTA - O uso dos dois contatos restantes será definido nos padrões de aplicação

apropriados.

Ver figura 3 para maior esclarecimento.

Page 19: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

19

2.4. COMUNICAÇÃO

Para compreender o projeto, é necessário entender a comunicação do Smart Card

com outro dispositivo externo. Como foi escolhido o BasicCard, o estudo da

comunicação será baseado nele.

A transmissão de dados entre o Terminal e um cartão inteligente, via Reader, é

feita por uma série de comandos, iniciados pelo Terminal e respondido pelo Smart Card.

Figura 5 - Comunicação

Como observado, o primeiro comando vem do Leitor pedindo para que o Smart

Card reinicie e inicie o processo de leitura dos comandos do Terminal.

O protocolo de comunicação do BasicCard é o ISO 7618/3, ou seja, um protocolo

de nível de bit através de nível de byte para nível de bloco. Serão vistos três aspectos:

- A estrutura do ATR (Answer to Reset);

- O protocolo de transmissão de caracteres T=0;

- O protocolo de transmissão de blocos T=1.

O primeiro é referente ao cartão inteligente identificar ele mesmo e indicar qual

protocolo ele suporta. Muitos desses dados são ignorados pelos programadores, mas é

necessário estar atento a alguns pontos importantes:

- Se o cartão suporta protocolos T=0 e T=1;

- A velocidade máxima de transmissão que o Smart Card suporta;

- O histórico de caracteres.

O primeiro protocolo é o T=0, definido para ser um protocolo de transmissão a

nível de caracteres do circuito integrado com contatos. Este é usado apenas quando o T=1

Page 20: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

20

não está disponível ou não é suportado. Ele é definido por uma sequência de mensagens

trocada entre o IFD (Interface Device ou Equipamento de Interface) e o ICC (Integrated

Circuit Card ou Cartão de Circuito Integrado). Para melhor entendimento, o IFD é o

Terminal enquanto o ICC é o Smart Card. Assim, o IFD envia uma unidade de dado

contendo um comando e o ICC responde com uma unidade de dado contendo a resposta.

Por último é o T=1, protocolo definido para transmissão a nível de bloco. Ele é

mais rápido, mais fácil de usar e contem menor probabilidade de erro que o T=0. Assim

como o T=0, neste protocolo é uma sequência de troca de dados através do IDF com o

ICC, porém algumas vezes o ICC pode transmitir um pedido de WTX (Waiting Time

Extension ou Tempo de Extensão de Espera) para pedir mais tempo.

Figura 6 - Protocolo T=1

Page 21: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

21

Quando se trata de T=1, é necessário entender o conceito de I-blocks. Estes são

unidades de transmissão e são acorrentados para produzir um Comando ou uma Resposta.

Sua arquitetura é definida na Figura 7:

Figura 7 - Arquitetura do I-block

Sendo eles:

- NAD: Node Address Byte. Aqui contém o endereço (0-7) do remetente e o

endereço (0-7) do possível receptor.

- PCB: Protocol Control Byte. Embora é possível ignorar esse byte, é interessante

analisar que ele alterna entre 00 e 40.

- LEN: Lengh of the INF field. Tamanho em bytes do INF.

- INF: Information Field. Aqui contém o conteúdo do I-block.

- LRC: Longitudinal Redundancy Check. É apenas um XOR para todos os bytes

anteriores.

Também é necessário entender o conceito do BWT (Block Waiting Time). Este é

definido no ATR para contar o tempo de espera por uma resposta antes do tempo limite.

Por padrão é 12,8 segundos, mas caso um comando estiver demorando mais do que isso,

ele deve requisitar mais tempo utilizando o WTX.

Page 22: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

22

2.8. SMART CARD READER

O Smart Card Reader CyberMouse USB 38U fornece uma solução de baixo custo

para leitura e escrita de dados para cartões inteligentes. Bolchini e Schreiber argumentam

que mesmo com toda a capacidade de um Smart Card, é necessário energiza-lo para

acessar seus dados e seu processamento.

Figura 8 - Leitor de Smart Card

Este possui suporte para detectar automaticamente inserção de Smart Cards em

seu slot. Bem como uma fácil interface programável em BASIC compatível com o cartão

inteligente escolhido. “Após a inserção do cartão na leitora, ela se encarregará de fazer a

interface com o cartão, enquanto o computador suporta e gerencia as aplicações” (Ladeira

e Tavares). Seu protocolo de comunicação varia com o cartão escolhido, no caso do

projeto, é o protocolo ISO 7618/3.

Os pinos do IC embarcado no cartão inteligente são acessados através das placas

de contato de ouro na parte superior do cartão. O leitor de cartão inteligente faz esta

conexão através de oito contatos dentro do módulo leitor (cartão deve ser inserido com

as bases de ouro para cima). Uma vez conectados, os pinos do Smart Card são divididos

na placa com espaçamento próximos de 0,1 polegadas.

Page 23: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

23

3. IMPLEMENTAÇÃO

Para melhor entendimento e implementação, o Protótipo do Projeto foi dividido

em diversas partes conforme o cronograma. Cada uma delas requereu estudos do

documento e testes para a melhor funcionalidade.

- Leitura de dados;

- Armazenamento de dados;

- Chave criptografada desses dados;

- Armazenamento/recuperação da chave;

- Determinação de espaço livre

- Deleção/substituição de conteúdo

- Inserção de conteúdo numa posição específica do Smart Card

- Proteção da chave

Abaixo são alguns exemplos de códigos em ZC-Basic.

3.1. LEITURA DE DADOS

Para ler os dados armazenados na EEPROM, é necessário o conhecimento da

syntax em ZC-Basic. O comando é basicamente READ EEPROM dando os parâmetros

necessários.

Call ReadEeprom (P1P2=addr%, data$, Le=len@)

Para o melhor entendimento, o código vai ler o tamanho len bytes iniciando no

endereço addr da EEPROM.

3.2. ARMAZENAMENTO DE DADOS

Para escrever dados na EEPROM, é necessário especificar o tamanho e o endereço

que será inicializado. Então, o código de escrita fica:

Call WriteEeprom (P1P2=addr%, data$)

Page 24: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

24

Sendo addr o endereço a ser inicializado a escrita e data o dado que será

armazenado.

3.3. CHAVE CRIPTOGRAFADA DESSES DADOS

O ZC-BASIC permite a implementação de algoritmos de criptografia de maneira

extremamente rápida e fácil. Primeiro, é necessário criar uma chave criptografada através

de um programa KeyGen. Em seguida, incluir esta chave no programa e no BasicCard,

assim é possível definir o início da criptografia e seu fim através de comandos:

Call StartEncryption (P1=algorithm, P2=keynum, RND, RND)

Call EndEncryption()

Para ficar mais fácil de entender, P1 recebe o algoritmo de criptografia e o P2 é o

valor entre 0 a 255 para especificar o tamanho da chave.

3.4. ARMAZENAMENTO/RECUPERAÇÃO DA CHAVE

Para armazenar uma chave e recuperá-las mais tarde, deve-se utilizar um KeyGen

para gerar diversas chaves criptogramas de dados. Essas keys devem ser passadas para o

Terminal e o Cartão para assim, os dois terem acesso aos dados.

Para gerar essas chaves, deve rodar o programa KeyGen:

KeyGen TestKeys –K108

Logo em seguida, a saída deve ser parecida com:

Declare Key 108 = &H03,&HAF,&H59,&H92,&HC9,&HE5,&H0D,&HC6

3.5. DETERMINAÇÃO DE ESPAÇO LIVRE

Para determinar o espaço livre da EEPROM, é necessário utilizar o código

EEPROMSIZE, onde são passados os parâmetros de início e tamanho. Sendo assim:

Call EepromSize (start%, length%)

3.6. DELEÇÃO/SUBSTITUIÇÃO DE CONTEÚDO

O comando para limpar um conteúdo pré existente na EEPROM, é dado por Clear

EEPROM. Sendo os parâmetros endereço e o tamanho que deseja deletar.

Call ClearEeprom (P1P2=addr%, length%)

Page 25: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

25

3.7. INSERÇÃO DE CONTEÚDO NUMA POSIÇÃO ESPECÍFICA DO

SMART CARD

O comando de escrita em um lugar específico não é recomendado pelo fabricante

e não é liberado para o uso comum. Utilizar esse comando por risco pode danificar o

cartão permanentemente. Assim, essa seção do protótipo foi cancelada.

3.8. PROTEÇÃO DA CHAVE

A proteção das chaves é feita pelo KeyGen que gera o arquivo com diferentes

chaves. Essas chaves servem para que os dados transferidos do Smart Card para o

Terminal, e vice-versa, não sejam abertos por terceiros. Ao enviar um dado, ele deve

chegar ao destinatário com sua respectiva chave, caso um terceiro capte este, ele não

conseguirá abrir devido a criptografia.

Page 26: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

26

4. PROCEDIMENTOS DE TESTES E VALIDAÇÃO DE PROJETO

Para testar o projeto, foram precisos realizar uma bateria de testes dentre os quais

constituem em técnicas de Engenharia de Software, são eles:

TESTE EM CAIXA BRANCA: Estes testes são feitos com base interna do

programa, afim de verificar sua funcionalidade a nível de código. Para isso, foram

selecionados testes nas áreas:

- CRIPTOGRAFIA: Verificar se a criptografia foi realizada com sucesso.

- ENVIO/RECEBIMENTO DE DADOS: Verificar se o cartão recebe os dados

enviados pelo medidor.

- PIN: Verificar se o PIN aceito permite acesso ao cartão, e o PIN errado deve

bloquear o acesso.

- DADOS ARMAZENADOS: Verificar se os dados foram armazenados com

sucesso no cartão mesmo após o desligamento de energia.

TESTE EM CAIXA PRETA: Estes testes focam na aplicação do projeto, assim,

nas ações que ele deve desempenhar.

- ENVIAR DADOS INVÁLIDOS: Verificar se o cartão armazena dados inválidos

pelo terminal, tais como números negativos em data.

- DADOS COMPATÍVEL: Verificar a originalidade dos dados armazenados na

memória.

- RETIRAR O CARTÃO DURANTE A GRAVAÇÃO DE DADOS: Verificar se

o cartão armazenou o último dado antes de ser interrompido.

- INICIALIZAR APÓS ENERGIZÁ-LO: Verificar se o cartão está pronto para o

uso após conectá-lo ao Reader.

Para validar o projeto, foi necessário criar uma API em C# para comunicar os dois

mundos. Esta API (Application Programming Interface) foi feita para ser um conjunto de

rotinas e padrões de programação para acessar o cartão. Assim que foi possível acessá-

lo, foram feitas as check-lists mencionadas anteriormente no item 3. Assim, foi realizado

estudos na ISO 7618/3 para entender seu funcionamento e poder coloca-los em prática.

Por meio da API foi possível invocar as funções implementadas no cartão

inteligente pelo ambiente do Visual Studio C#. A empresa responsável pelo BasicCard já

Page 27: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

27

possui uma API base para que possa desenvolver em .Net e Java, mas é necessário

implementar todas as funções que estão no cartão para embarcar a aplicação.

Isto é, a API do BasicCard permite que ele inicialize o Framework do Smart Card,

fazendo assim, a comunicação com o Smart Card Reader. A partir disso, foi possível

enviar comandos e receber respostas do leitor diretamente da APDU do leitor.

Logo, foi possível validar o projeto, uma vez que foi comprovado que a

implementação criada no cartão inteligente pode ser utilizada em outras plataformas de

desenvolvimento, além da do próprio fabricante, de maneira funcional.

Page 28: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

28

5. MANUAL DO CÓDIGO

O Projeto está dividido em três partes principais: o código do cartão, código do

medidor e o código do usuário. O código do cartão é aonde se encontra todas as funções

evocadas pelo medidor e pelo usuário, sendo que este código é gravado no cartão físico.

O código do medidor utiliza as funções do cartão e informações geradas pelo medidor

físico para gravar dados no cartão, este é gravado no medidor físico. O código do usuário

representa uma configuração inicial do cartão, pode ser utilizado no próprio sistema

operacional Windows/Linux.

Figura 9 - Leitor de Smart Card

5.1. CÓDIGO DO CARTÃO

O código do cartão contém dois arquivos principais, a implementação do cartão,

com extensão .bas, e um código de definição, com extensão .def. Este último é também

utilizado pelo usuário e pelo medidor, pois as funções implementadas no cartão são

evocadas.

Segue o código das principais funções da implementação do cartão:

Declare Command &H80 &H00 PersonaliseCard (ID as String*16, IDType as

String*16, User as String*16, NewPIN As String*4)

Declare Command &H80 &H02 VerifyPIN (TestPIN As String*4)

Declare Command &H80 &H06 RegisterMetric (Timestamp as String*16, Value

as String*16, Flag as Byte)

Declare Command &H80 &H08 ChangePIN (NewPIN As String*4)

Page 29: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

29

Declare Command &H80 &H0A GetCardData (ID as String*16, IDType as

String*16, User as String*16 , Timestamp as String*16, Value as String*16, Flag as

Byte, PINCount)

5.2. CÓDIGO DO USUÁRIO

O código do usuário contém um arquivo principal, sendo do tipo terminal, com

extensão .zct. Esses arquivos de terminais podem gerar vários tipos de saídas, tornando

fácil o seu uso por outro sistemas, esses tipos consistem de: .exe, .img, .list e .map.

Esse código irá utilizar o arquivo de definição criado para o cartão para evocar

funções gravadas no cartão físico.

Segue o código das principais funções da implementação do usuário:

Call WaitForCard()

ResetCard : Call CheckSW1SW2()

Rem Check that the application name is correct

Private Name$ : Call GetApplicationID (Name$) : Call CheckSW1SW2()

If Name$ <> ApplicationName$ Then Print "Card Error" : Exit

Rem Variaveis privadas para receber inputs do usuario

Private PIN$, ID$, IDType$, User$, Len@, result$

Private teste$ as String*8

Rem Dados do medidor

FgCol = Cyan : Print "Meter ID (Enter to abort): ";

FgCol = BrightYellow : Line Input ID$

If ID$ = "" Then Exit

FgCol = Cyan : Print "Meter ID Type (Enter to abort): ";

FgCol = BrightYellow : Line Input IDType$

If IDType$ = "" Then Exit

FgCol = Cyan : Print "User (Enter to abort): ";

FgCol = BrightYellow : Line Input User$

If User$ = "" Then Exit

Page 30: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

30

Rem Pin definido pelo fornecedor

Do

FgCol = Cyan : Print "PIN (Enter to abort): ";

FgCol = BrightYellow : Line Input PIN$

If PIN$ = "" Then Exit

If Len (PIN$) = 4 Then Exit Do

FgCol = Red : Print "PIN must be 4 characters long"

Loop

Rem Inicializa a criptografia, a partir daqui toda a comunicação cartão - terminal

é criptografada

Call AutoEncryption (0, "\Key0") : Call CheckSW1SW2()

Rem Salva os dados do medidor no cartão, só pode ser realizado por dados

criptografados pela chave de criptografia do usuario

Call PersonaliseCard (ID$, IDType$, User$, PIN$) : Call CheckSW1SW2()

Call EndEncryption() : Call CheckSW1SW2()

Print "Configuration successful."

5.3. CÓDIGO DO MEDIDOR

O código do medidor contém 1 arquivo principal, sendo do tipo terminal, com

extensão .zct. Esses arquivos de terminais podem gerar vários tipos de saídas, tornando

fácil o seu uso por outro sistemas, esses tipos consistem de: .exe, .img, .list e .map.

Esse código irá utilizar o arquivo de definição criado para o cartão para evocar

funções gravadas no cartão físico.

Segue o código das principais funções da implementação do medidor:

Call WaitForCard()

ResetCard : Call CheckSW1SW2()

Rem Verifica a aplicacao

Private Name$ : Call GetApplicationID (Name$) : Call CheckSW1SW2()

If Name$ <> ApplicationName$ Then Print "Error: Wrong Application " : Exit

Page 31: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

31

Rem Le os dados no cartao

Private PINCount, PIN$

Private ID$, IDType$, User$

Private Timestamp$

Private Value$

Private Flag as Byte

Call AutoEncryption (1, "\Key1") : Call CheckSW1SW2()

Call GetCardData (ID$, IDType$, User$ , Timestamp$, Value$, Flag, PINCount)

If SW1SW2 = swNotPersonalised Then

Print "Card has not been configured"

Exit

End If

Call CheckSW1SW2()

FgCol = Green: Print "Meter"

FgCol = Cyan: Print "ID: " ; : FgCol = BrightYellow: Print ID$

FgCol = Cyan: Print "ID Type: "; : FgCol = BrightYellow: Print IDType$

FgCol = Cyan: Print "User: "; : FgCol = BrightYellow: Print User$

Print

FgCol = Green: Print "Metric"

FgCol = Cyan: Print "Timestamp: " ; : FgCol = BrightYellow: Print Timestamp$

FgCol = Cyan: Print "Value: "; : FgCol = BrightYellow: Print Value$

FgCol = Cyan: Print "Flag: "; : FgCol = BrightYellow: Print Flag

Rem Inicia a criptografia, dessa vez usando a chave do usuario para inicialização

Rem Requisita o PIN do cartào

Do

PIN$ = ""

FgCol = Cyan: Print "Enter PIN (Esc to abort): " ;

FgCol = BrightYellow

Do

Private Key$

Key$ = InKey$

Select Case Key$

Case Chr$ (27) : Print : Exit ' Esc

Case Chr$ (13) ' Enter

If Len (PIN$) = 4 Then Print: Exit Do ' Exit Keys pressed loop

Case Chr$ (8) ' Backspace

If Len (PIN$) <> 0 Then

PIN$ = Left$ (PIN$, Len (PIN$) - 1)

CursorX = CursorX - 1

Print " " ;

CursorX = CursorX - 1

End If

Page 32: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

32

Case Else

If Len (Key$) = 1 And Len (PIN$) <> 4 Then

Print "*" ;

PIN$ = PIN$ + Key$

End If

End Select

Loop

Call VerifyPIN (PIN$)

Select Case SW1SW2

Case swPINErrorsExceeded : Print "Too many PIN errors - card disabled" : Exit

Case swInvalidPIN: Print "Invalid PIN"

Case Else : Call CheckSW1SW2() : Exit Do

End Select

Loop

Timestamp$ = "2015-01-01T08:45:00.0Z"

Value$ = "0.111"

Flag as Byte = 0

Call RegisterMetric(Timestamp$, Value$, Flag)

Call GetCardData (ID$, IDType$, User$ , Timestamp$, Value$, Flag, PINCount)

Page 33: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

33

6. RESULTADOS

Gravação de dados do Usuário:

Figura 10 – Gravado com sucesso

Gravação de dados do Medidor:

Figura 11 – Dados armazenados com sucesso

Page 34: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

34

7. CONCLUSÃO

Existem diversas maneiras para prevenir ataques e perda de dados, e o Smart Card

é o melhor nessa categoria. Com sua capacidade de armazenar dados, com difícil

falsificação e baixa taxas de falhas, o cartão inteligente foi então escolhido para

armazenar os dados recebidos por um Smart Meter.

O projeto inclui o BasicCard para leitura e armazenamento de dados, bem como

a criptografia das informações recebidas pelo Smart Meter. Seu leitor é capaz de

comunicar esses dois mundos através de uma placa USB/I²C. Sua capacidade de memória

EEPROM é o suficiente para armazenar esses dados seguros.

A partir desses componentes, foi feito o protótipo de simulação de comunicação

do Smart Card. Foram realizados diversos testes que incluíam transferências de dados

entre o Terminal e o Cartão, bem como a criptografia entre eles. Foi verificado a

consistência dos dados armazenados e funções uteis que prepararam o projeto para as

próximas etapas, como a comunicação com o Smart Meter.

Com o passar dos anos, a preocupação com o meio ambiente vem aumentando, e

isso fez com que as pessoas optassem por produtos com maior sustentabilidade. Os Smart

Cards deverão adotar novas alternativas no plástico utilizado para proteção, aonde estes

podem ser substituídos por plásticos biodegradáveis ou pelos feitos por cana de açúcar.

Já os que vieram de fábrica com o plástico podem ser descartados e substituídos pelos

exemplos citados e devem ser reciclados imediatamente, pois o mesmo leva anos para se

decompor e animais silvestres podem confundi-los com alimentos. Existem programas

que facilitam a reciclagem de cartões inteligentes, tais como o PapaCartão, que é um

sistema que destrói o cartão com segurança, sem precisar de energia elétrica, totalmente

feito por manivela.

O projeto foi validado através de API feita em C# para que pudesse inicializa-lo,

manter a comunicação, iniciar o processo de leitura e escrita de dados, criptografar os

dados e armazena-los em segurança em sua EEPROM. Com isso, foi possível realizar os

testes e garantir as melhores opções de armazenamento e segurança aos dados.

As dificuldades do projeto foram a falta de conhecimento inicial de cartões

inteligentes, bem como comunicação bit-a-bit de dados e criptografias. A falta de artigos

específicos para a utilização foi uma das barreiras inicias, mas logo foram cessadas

através de muito estudo e pesquisa.

Em virtude dos fatos mencionados, o projeto permite ser uma ótima base para

trabalhos futuros, como a própria implementação do medidor inteligente ou melhoria na

Page 35: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

35

comunicação entre eles. O mesmo proporciona conhecimento sobre a arquitetura dos

cartões para ser utilizado em outras aplicações ou para aprimorar tecnologias já existentes.

Page 36: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

36

8. REFERÊNCIAS BIBLIOGRÁFICAS

Bolchini, C.; Schreiber, F. Smart card embedded information systems: a methodology for

privacy oriented architectural design. Data & Knowledge Engineering, v. 41, n. 2-3, p.

159-182, 2002.

Rankl, W.; Effing, W.; Cox, K. Smart card handbook, fourth edition. Tradução .

Chichester, West Sussex, U.K.: ohn Wiley & Sons Ltd, 2010.

Sade Ladeira, I.; Alves Tavares, E. Arquitetura de Sistemas de Segurança baseado em

Smart Card. [s.d.].

SHANGHAI FM. Datasheet: FM4428, 8KBits Memory Card Chip. Datasheetlib, 2008.

INFINEON. Datasheet: SLE5542, Intelligent 256-Byte EEPROM with Write Protection

function and Programmable Security Code. Zotei, 2006.

INTEGRATED SILICON SOLUTION. Datasheet: IS24C16A, 16K-bit 2-WIRE

SERIAL CMOS EEPROM. ALLDATASHEET, 2006.

ZEITCONTROL. Datasheet: Z5.4, the ZeitControl Professional and MultiApplication

BasicCards. BasicCard, 2012.

KETEREX. Datasheet: USB-910H, Embedded Systems Interface. Katerex, 2009.

Leiras Matos, C. SMART CARD. Disponível em:

<http://www.gta.ufrj.br/grad/01_2/smartcard/smartcard.html>. Acesso em: 14 jun. 2016.

Nguyen, A. Smart Card Types. Disponível em: <http://www.smartcardbasics.com/smart-

card-types.html>. Acesso em: 3 abr. 2016.

Assis Borba, E. TECNOLOGIA SMART CARD. [s.d.].

Page 37: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

37

APÊNDICE A

CÓDIGO DO USUÁRIO:

using BasicCard;

using BasicCard.BasicCards;

namespace Meter

{

/// <summary>

/// Service class for managing issuer functions for BasicCard debit example card.

/// </summary>

public class UserService : MeterService

{

/// <summary>

/// Constructs a IssuerService object

/// </summary>

public UserService()

: base()

{

byte[] key =

{

(byte) 0xF1,

(byte) 0xA8,

(byte) 0xF4,

(byte) 0x3E,

(byte) 0x04,

(byte) 0x04,

(byte) 0x8D,

(byte) 0xEB };

SetKey(0, key);

}

/// <summary>

/// Override of start encryption using issuer key.

/// </summary>

public override void StartEncryption()

{

AutoEncryption(0, "\\Key0");

}

public void PersonaliseCard(decimal Amount, string NewPIN, string

Name)

{

Page 38: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

38

BasicCardCommand cmd = new BasicCardCommand(0x80,

0x00);

cmd.AppendBasicLong(FromDecimal(Amount));

cmd.AppendBasicStringN(

new BasicCardStringN(4, NewPIN,

BasicCardString.CharsetIdAscii));

cmd.AppendBasicString(new BasicCardString(Name,

StringEncoding));

cmd.DisableLE(); // we do not need response data

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

}

public void PersonaliseCard(string Id, string Type, string User, string NewPin)

{

BasicCardCommand cmd = new BasicCardCommand(0x80, 0x00);

// cmd.AppendBasicString(new BasicCardString(Id, StringEncoding));

// cmd.AppendBasicString(new BasicCardString(Type, StringEncoding));

// cmd.AppendBasicString(new BasicCardString(Meter, StringEncoding));

cmd.AppendBasicStringN(new BasicCardStringN(16, Id,

BasicCardString.CharsetIdAscii));

cmd.AppendBasicStringN(new BasicCardStringN(16, Type,

BasicCardString.CharsetIdAscii));

cmd.AppendBasicStringN(new BasicCardStringN(16, User,

BasicCardString.CharsetIdAscii));

cmd.AppendBasicStringN(new BasicCardStringN(4, NewPin,

BasicCardString.CharsetIdAscii));

//cmd.DisableLE();

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

}

}

}

Page 39: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

39

APÊNDICE B

IMPLEMENTAÇÃO DO USUÁRIO:

/*

* Created on 14.07.2005

* Project: BasicCard .Net

* --------------------------------

* Copyright 2005 ZeitControl cardsystems GmbH

* --------------------------------

* $Archive: $

* $Revision: 1.1 $

* $Modtime: $

* --------------------------------

* $History: $

*/

using System;

using BasicCard;

using BasicCard.Framework;

using BasicCard.GenericCards;

namespace Meter

{

public class UserExitException : Exception

{

public UserExitException()

: this("Personalization aborted")

{

}

public UserExitException(string message)

: base(message)

{

}

}

class Issuer

{

private static UserService issuerService;

Page 40: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

40

[STAThread]

static void Main(string[] args)

{

try

{

CardReaderObserver.Instance.Start();

System.Console.WriteLine(

"Please insert a BasicCard.");

issuerService =

(UserService) CardReaderObserver

.Instance

.WaitForCardService(

new UserService(),

new TimeSpan(0,0,30));

if (null == issuerService)

{

System.Console.WriteLine("No matching

BasicCard was inserted.");

}

else

{

decimal Amount;

string PIN;

string Name;

string Id;

string Type;

string User;

System.Console.Write("ID (Enter to abort): ");

Id = System.Console.ReadLine();

if (Id.Length == 0)

throw new UserExitException();

System.Console.Write("Type (Enter to abort): ");

Type = System.Console.ReadLine();

if (Type.Length == 0)

throw new UserExitException();

System.Console.Write("Meter (Enter to abort): ");

User = System.Console.ReadLine();

if (User.Length == 0)

throw new UserExitException();

while (true)

Page 41: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

41

{

System.Console.Write("PIN (4 characters,

or enter to abort): ");

PIN = System.Console.ReadLine();

if (PIN.Length == 0)

throw new UserExitException();

if (PIN.Length == 4)

break;

System.Console.WriteLine("PIN must be 4

characters long");

}

/*

while (true)

{

System.Console.Write(string.Format("Initial balance (e.g. {0:0.00}): ", 12.50));

try

{

Amount =

decimal.Parse(System.Console.ReadLine());

break;

}

catch (FormatException)

{

System.Console.WriteLine("Invalid

number");

}

}

*/

issuerService.StartEncryption();

issuerService.PersonaliseCard(Id, Type, User,

PIN);

issuerService.Dispose();

System.Console.WriteLine("Personalization

succesful");

}

}

catch (CommsException ex)

{

if (null != issuerService)

{

issuerService.ShowMessage(ex);

}

else

{

Page 42: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

42

ex.Dump();

}

}

catch (UserExitException ex)

{

System.Console.Error.WriteLine(ex.Message);

// terminate

}

catch (Exception ex)

{

System.Console.Error.WriteLine(ex.ToString());

}

finally

{

// stop the BasicCard framework

CardReaderObserver.Instance.Stop();

}

System.Console.WriteLine("Press enter to terminate");

System.Console.ReadLine();

}

}

}

Page 43: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

43

APÊNDICE C

SERVIÇO DO MEDIDOR

using System;

using BasicCard;

using BasicCard.BasicCards;

namespace Meter

{

/// <summary>

/// Card data

/// </summary>

public class CardData

{

private decimal amount;

private int pinCount;

private string name;

private string id;

public string Id

{

get { return id; }

set { id = value; }

}

private string type;

public string Type

{

get { return type; }

set { type = value; }

}

private string user;

public string User

{

get { return user; }

set { user = value; }

}

private string timestamp;

public string Timestamp

{

get { return timestamp; }

set { timestamp = value; }

}

Page 44: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

44

private string metricvalue;

public string Metricvalue

{

get { return metricvalue; }

set { metricvalue = value; }

}

private Byte flag;

public Byte Flag

{

get { return flag; }

set { flag = value; }

}

/// <summary>

/// Objeto tipo CardData

/// </summary>

internal CardData()

{

this.id = "";

this.type = "";

this.user = "";

this.timestamp = "";

this.metricvalue = "";

this.flag = 0;

this.PinCount = 0;

}

/// <summary>

/// Amount left within card.

/// </summary>

public decimal Amount

{

get

{

return amount;

}

set

{

amount = value;

Page 45: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

45

}

}

/// <summary>

/// Retorna .

/// </summary>

public string AmountString

{

get

{

return amount.ToString("0."+new string('0',

MeterService.DecimalNumbers));

}

}

/// <summary>

/// Card owners name.

/// </summary>

public string Name

{

get

{

return name;

}

set

{

name = value;

}

}

/// <summary>

/// Number of PIN tries left.

/// </summary>

public int PinCount

{

get

{

return pinCount;

}

set

{

pinCount = value;

}

}

}

Page 46: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

46

/// <summary>

/// Classe de serviço para implementação das funções do cartão inteligente.

/// </summary>

public class MeterService : AbstractBasicCardService

{

public enum MeterStatus

{

swNotPersonalised = 0x6B00,

swEncryptionRequired = 0x6B02,

swIssuingKeyRequired = 0x6B03,

swPINRequired = 0x6B04,

swInvalidPIN = 0x6B05,

swPINErrorsExceeded = 0x6B06,

}

// Change this to use different encodings when translating between

// BasicCard String and .Net String

protected const string StringEncoding = BasicCardString.CharsetIdAscii;

// Decimal representation used internal. E.g. when

// DecimalNumbers = 2 then an amount of 10.25 will be encoded to (int)

1025

internal const int DecimalNumbers = 2;

private const int DecimalFactor = 100; // DecimalNumbers^10

protected static int FromDecimal(decimal val)

{

return (int) decimal.Round(val * DecimalFactor, 0);

}

protected static decimal ToDecimal(int val)

{

return ((decimal)val) / DecimalFactor;

}

/// <summary>

/// Constructs a DealerService object.

/// </summary>

public MeterService()

// Select card by application "ZeitControl DebitCard"

: base("TCC - Fernando e Pedro")

{

// Meter key

byte[] key =

Page 47: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

47

{

(byte) 0x86,

(byte) 0x75,

(byte) 0x90,

(byte) 0x03,

(byte) 0xED,

(byte) 0x88,

(byte) 0xF2,

(byte) 0xB3 };

SetKey(1, key);

}

/// <summary>

/// Start encryption for BasicCard commands using dealer key.

/// </summary>

public virtual void StartEncryption()

{

AutoEncryption(1, "\\Key1");

}

/// <summary>

/// Stop encryption of BasicCard commands.

/// </summary>

public void EndEncryption()

{

CmdEndEncryption();

}

/// <summary>

/// Get card data.

/// </summary>

/// <returns>card data</returns>

public CardData GetCardData()

{

CardData carddata = new CardData();

BasicCardCommand cmd = new BasicCardCommand(0x80,

0x0A);

cmd.LE=0;

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

carddata.Type =

rsp.FetchBasicStringN(16).ToString(BasicCardString.CharsetIdAscii);

carddata.User =

rsp.FetchBasicStringN(16).ToString(BasicCardString.CharsetIdAscii);

Page 48: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

48

carddata.Timestamp =

rsp.FetchBasicStringN(16).ToString(BasicCardString.CharsetIdAscii);

carddata.Metricvalue =

rsp.FetchBasicStringN(16).ToString(BasicCardString.CharsetIdAscii);

carddata.Id = rsp.FetchBasicString().ToString(BasicCardString.CharsetIdAscii);

return carddata;

}

/// <summary>

///

/// Call VerifyPIN command

/// </summary>

/// <param name="pin">PIN for verification</param>

public void VerifyPin(string pin)

{

if (!IsExclusive)

{

throw new CommsException("Must not validate a PIN to

a card not owned exclusivly.");

}

BasicCardCommand cmd = new BasicCardCommand(0x80,

0x02);

// for PIN we always use ASCII encoding

cmd.AppendBasicStringN(

new BasicCardStringN(4, pin,

BasicCardString.CharsetIdAscii));

cmd.DisableLE(); // we do not need to receive data

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

}

/// <summary>

/// Call ChangePIN command.

/// </summary>

/// <param name="pin">PIN for verification</param>

public void ChangePin(string pin)

{

BasicCardCommand cmd = new BasicCardCommand(0x80,

0x08);

// for PIN we always use ASCII encoding

cmd.AppendBasicStringN(

new BasicCardStringN(4, pin,

BasicCardString.CharsetIdAscii));

cmd.DisableLE(); // we do not need to receive data

BasicCardResponse rsp = DoCommandAndResponse(cmd);

Page 49: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

49

rsp.CheckSW1SW2();

}

/// <summary>

/// Call IncreaseAmount command.

/// </summary>

/// <param name="diff"></param>

public void IncreaseAmount(decimal diff)

{

BasicCardCommand cmd = new BasicCardCommand(0x80,

0x04);

cmd.AppendBasicLong(FromDecimal(diff));

cmd.DisableLE(); // we do not need response data

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

}

/// <summary>

/// Call DecreaseAmount command.

/// </summary>

/// <param name="diff">value to subtract (>0)</param>

public void DecreaseAmount(decimal diff)

{

BasicCardCommand cmd = new BasicCardCommand(0x80,

0x06);

cmd.AppendBasicLong(FromDecimal(diff));

cmd.DisableLE();

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

}

public void ChangeMetric(string Timestamp , string Value, Byte Flag)

{

BasicCardCommand cmd = new BasicCardCommand(0x80, 0x06);

cmd.AppendBasicStringN(new BasicCardStringN(16, Timestamp,

BasicCardString.CharsetIdAscii));

cmd.AppendBasicStringN(new BasicCardStringN(16, Value,

BasicCardString.CharsetIdAscii));

cmd.AppendBasicByte(Flag);

cmd.DisableLE();

BasicCardResponse rsp = DoCommandAndResponse(cmd);

rsp.CheckSW1SW2();

}

public void ShowMessage(CommsException e)

Page 50: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

50

{

string message = "";

switch ((MeterStatus)e.SW1SW2)

{

case MeterStatus.swNotPersonalised :

message = "Card is not personalised!";

break;

case MeterStatus.swEncryptionRequired :

message = "Encryption required!";

break;

case MeterStatus.swIssuingKeyRequired :

message = "Issuing key required!";

break;

case MeterStatus.swPINRequired :

message = "PIN required!";

break;

case MeterStatus.swInvalidPIN :

message = "Invalid PIN!";

break;

case MeterStatus.swPINErrorsExceeded :

message = "Too many PIN errors - card disabled";

break;

default :

e.Dump();

break;

}

System.Console.WriteLine(message);

}

}

}

Page 51: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

51

APÊNDICE D

IMPLEMENTAÇÃO DO MEDIDOR

using System;

using BasicCard;

using BasicCard.Framework;

using BasicCard.GenericCards;

namespace Meter

{

public class UserExitException : Exception

{

public UserExitException()

: this("Action aborted")

{

}

public UserExitException(string message)

: base(message)

{

}

}

class Meter

{

private static MeterService meterService;

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main(string[] args)

{

CardData finalCarddata=null;

try

{

CardReaderObserver.Instance.Start();

System.Console.WriteLine(

"Please insert a BasicCard loaded

with Meter code.");

meterService =

Page 52: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

52

(MeterService) CardReaderObserver

.Instance

.WaitForCardService(

new MeterService(),

new TimeSpan(0,0,30));

if (null == meterService)

{

System.Console.WriteLine("No matching

BasicCard was inserted.");

System.Console.WriteLine(

"Please load a BasicCard with

debit example for using");

System.Console.WriteLine("this .Net

example.");

}

else

{

string PIN;

CardData carddata =

meterService.GetCardData();

System.Console.WriteLine("Card Info: " );

System.Console.WriteLine("ID: " + carddata.Id);

System.Console.WriteLine("Type: " +

carddata.Type);

System.Console.WriteLine("User: " + carddata.User);

System.Console.WriteLine("");

System.Console.WriteLine("Timestamp: " +

carddata.Timestamp);

System.Console.WriteLine("Metric Value: " +

carddata.Metricvalue);

System.Console.WriteLine("Flag: " + carddata.Flag);

meterService.StartEncryption();

while (true)

{

System.Console.Write("");

System.Console.Write("PIN (4

characters, or enter to abort): ");

PIN = System.Console.ReadLine();

if (PIN.Length == 0)

throw new UserExitException();

if (PIN.Length == 4)

Page 53: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

53

break;

System.Console.WriteLine("PIN must

be 4 characters long");

}

meterService.VerifyPin(PIN);

carddata.Timestamp = "2015-01-01T08:45:00.0Z";

carddata.Metricvalue = "1.5768";

meterService.ChangeMetric(carddata.Timestamp,

carddata.Metricvalue, 1);

finalCarddata=meterService.GetCardData();

meterService.Dispose(); // release smart

card resources

System.Console.WriteLine("Action

succesful");

}

}

catch (CommsException ex)

{

if (null != meterService)

{

meterService.ShowMessage(ex);

}

else

{

ex.Dump();

}

}

catch (UserExitException ex)

{

System.Console.Error.WriteLine(ex.Message);

}

catch (Exception ex)

{

System.Console.Error.WriteLine(ex.ToString());

}

finally

{

CardReaderObserver.Instance.Stop();

}

System.Console.WriteLine("Press enter to terminate");

Page 54: PONTIFICIA UNIVERSIDADE CATÓLICA PUCPR ENGENHARIA DA …laplima/ensino/tcc/concluidos/2016/fernando_… · para se ter uma visão geral do projeto, bem como o modelo de Smart Card

54

System.Console.ReadLine();

}

}

}