Sei sulla pagina 1di 10

155

UTILIZAO DE JAVA CARD COMO PLATAFORMA PARA O DESENVOLVIMENTO


DE APLICAES EM SMART CARD.
Lucas Plis Dolce, Francisco Assis da Silva, Silvio Antonio Carro
Faculdade de Informtica (FIPP) Universidade do Oeste Paulista (UNOESTE) Presidente Prudente SP. E-mail: silvio@unoeste.br

RESUMO
Com o crescimento da tecnologia Java Card e o aumento do uso de Smart Cards no mercado,
aumentaram-se a demanda pelo desenvolvimento de aplicaes que so executadas nos cartes.
Essas aplicaes necessitam oferecer alm de portabilidade, comodidade e segurana, servios com
qualidade e alta disponibilidade para os usurios. Nesse artigo so abordados os conceitos principais
da tecnologia Smart Card bem como o uso destas para desenvolver pequenas aplicaes usando a
linguagem Java Card focando o uso para sistemas de controle nas quais o carto serviria de
repositrio de alguns dados e instrumento de consulta de sistemas maiores.
Palavras-chave: cartes inteligentes - Java Card - Applets

USING JAVA CARD AS A PLATFORM FOR DEVELOPING APPLICATIONS IN SMART CARD.

ABSTRACT
With the growth of Java Card technology and the increased use of smart cards in the market, demand
for the development of applications that run on the cards has risen. These applications need to offer
besides portability, convenience and safety, service quality and high availability for users. This article
examines the main concepts of Smart Card technology and use these to develop small applications
using the Java Card focusing on the use for control systems where the card would serve as a repository
of some data and query tool for larger systems.
Keywords: Smart card - Java Card - Applets

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

156

INTRODUO
O

um ou mais terminais de captura off-line (que so

advento

rapidamente

da

maneira

Internet
das

alterou

pessoas

se

os leitores de carto), por um ou mais cartes


comerciante

(usados

para

armazenar

as

comunicarem umas com as outras, o mundo se

informaes dos abastecimentos), por um ou

tornou conectado e os negcios evoluram do

mais cartes consumidor (pertencentes ao dono

modelo tradicional frente a frente para o modelo

da frota) e possui um software de gesto via web

virtual onde atravs de poucos cliques as

que proporciona um relacionamento transparente

pessoas fazem compras sem sair de suas casas

e confivel entre o posto e o frotista, elimina

ou escritrios. Esse grande crescimento do

discordncias entre relatrios de consumo e

comrcio eletrnico no abriu novos caminhos

possibilita a reduo de despesas administrativas

apenas para os comerciantes, mas tambm

com coleta e digitao de dados das bombas de

trouxe vrias oportunidades para as indstrias

combustvel, preparao e emisso de relatrios.

alcanarem novos clientes e objetivos. Outro


grande

responsvel

tecnologia

no

pelo

mercado

crescimento

rea

Este trabalho tem

como objetivo o

da

desenvolvido de uma aplicao em dois mdulos,

de

o primeiro uma aplicao host que tem as

telecomunicao mvel, com os chips GSM, no

funes

de

acessar,

gravar

consultar

qual a maior parte deles utiliza a tecnologia Java

informaes no Smart Card e o segundo so as

Card. Os Smart Cards oferecem uma maneira

applets Java Card que devem ser instaladas nos

segura, confivel, conveniente e eficaz para

Smart Cards.

garantir a segurana de comrcio eletrnico e

Foram investigadas algumas tecnologias

permitir uma ampla gama de novas aplicaes

e recursos como: Java Card, que foi a linguagem

[Chen 2000].

de programao utilizada para o desenvolvimento

Como exemplos de aplicaes que usam

do projeto; o Smart Card responsvel por

Java Card e trazem benefcios para a populao

armazenar

as

e para o comrcio em geral tem-se o Projeto RIC

Protocolo de Comunicao APDU responsvel

Registro de Identidade Civil [Projeto RIC 2009]

pela comunicao entre o carto e a leitora e o

que tem como objetivo substituir o RG, CPF,

ambiente

Ttulo de Eleitor, CNH, Passaporte e Carteira de

integrao da biblioteca JCOP TOOLS.

de

aplicaes

desenvolvidas;

desenvolvimento

Eclipse

com

Trabalho por um nico carto que contenha todos


essas informaes como forma de tentar acabar

SMART CARD

com as fraudes e duplicidades em servios

Parecido com os cartes de crdito de

pblicos e facilitar a vida dos cidados. J na

tarja magntica,

rea

nomeado

capacidade de armazenamento e processamento

WhiteCard [Comsoft 2006] que um sistema que

de informaes de maneira segura e confivel. O

atende a necessidade de controle de informaes

Smart

sobre abastecimentos de frotas em postos de

corporativo e de banco de dados, o seu

combustveis,

funcionamento de forma isolada. Sistemas

comercial

existe

garantindo

sistema

agilidade

no

Card

os

Smart

Cards

independente

tm

sistema

atendimento por no depender de nenhum

convencionais

sistema on-line em funcionamento no momento

prejudicado caso ocorra uma falha na rede de

do abastecimento. Com base na mais avanada

comunicao

tecnologia disponvel, o sistema composto por

informaes no banco de dados, esses sistemas

devido

seu

de

possuem

ao

funcionamento

no

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

acesso

157

podem ser desenvolvidos para funcionar de


maneira

off-line

usando

Smart

Cards

Existem dois tipos de Smart Card (carto

para

inteligente): com contato e sem contato. Smart

armazenar as informaes sem a necessidade de

Cards com contato necessitam de contato fsico

consultar constantemente o banco de dados.

para se comunicar e trocar informaes com o

Ao contrrio das prticas de tecnologia da

exterior, so aqueles que necessitam de um leitor

informao no mbito do PC, o desenvolvimento

de carto, como exemplo os cartes de crdito

das

atuais que precisam ser inseridos em um leitor no

funcionalidades

fortemente

dos

influenciado

Smart
por

Cards

padres

caixa

eletrnico

para

realizar

determinado

internacionais como, por exemplo, ISO/IEC. A

servio. J Smart Cards sem contato so aqueles

razo para isso que a interoperabilidade um

que no precisam de contato fsico para se

fator muito importante para o Smart Card,

comunicar e trocar informao com o exterior,

portanto todas as suas caractersticas fsicas e

eles possuem uma antena embutida em seu

eltricas so guiadas por normas e padres

interior e se comunicam por meio de rdio

[Rankl 2007]. A Figura 1 representa um Smart

frequncia,

Card.

transporte coletivo o qual ao se aproximar de um

como

exemplo

os

cartes

de

equipamento transmissor de rdio frequncia faz


a comunicao e a troca das informaes
necessrias [Rankl 2007].
Todo

Smart

Card

contm

alguns

elementos de hardware que so obrigatrios


(EEPROM ou Flash, RAM, ROM e CPU) como a
Figura 2, mas tambm podem conter vrios
outros elementos que so opcionais e servem
para determinados tipos de servios e aplicaes
Figura 1. Smart Card

como, por exemplo: Timer, USB, Co-processador


para trabalhar com criptografia e outros.

Figura 2. Diagrama de blocos de um microcontrolador de um carto inteligente com uma interface de


contato

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

158

No projeto foi utilizado o Smart Card

O cdigo do programa armazenado na

JCOP - SmartMX JCOP21 V2.3.1 on Secure PKI

memria

no-voltil

do

com 36 KB de capacidade de armazenamento,

memria EEPROM ou flash.

carto

inteligente,

com um Co-Processador auxiliar para trabalhar

Devido a limitao de hardware existente

com funes criptogrficas RSA e ECC podendo

em um Smart Card a especificao Java Card

gerar chaves RSA com comprimento de at 2432

suporta algumas funcionalidades da linguagem

bits, habilitado para executar algoritmos como

Java enquanto outras no so suportadas. A

SHA-1, MD5 e CRC e com suporte s interfaces

Tabela 1 relaciona algumas das funcionalidades

de contato do tipo T=0 e T=1 definidas pela

suportadas e no suportadas.

ISO/IEC 7816-3 [Scm 2006].


Em um Smart Card pode ser instalado
qualquer tipo de aplicao de pequeno porte que

Tabela 1. Funcionalidades suportadas e no


suportadas

seja possvel de ser executado com as limitaes


do hardware existentes e que necessitem de

Funcionalidades

Funcionalidades no

portabilidade, comodidade e segurana como, por

suportadas

suportadas

exemplo, aplicaes para TV a cabo ou satlite,

Tipos primitivos:

Tipos primitivos: long,

telecomunicaes

identificao,

boolean, byte, short

double, float

controle

Suporte ao tipo int

Caracteres e string

autenticao,

em

moeda

geral,
eletrnica,

de

acessos, programas de fidelidade, controle em

opcional

universidades e controle em hospitais [Chen

Arrays unidimensionais

2000].

Arrays
multidimensionais

Pacotes, classes,
JAVA CARD

Threads

interfaces e excees

A idia da tecnologia Java Card colocar

Herana

Clone de objetos

um software Java em um sistema de carto


inteligente, preservando o espao suficiente para

A mquina virtual Java Card presente no

as aplicaes, no entanto, o hardware de um

carto dividida em duas partes: uma que

microcontrolador de um carto inteligente tem

executada off-card e outra que executada on-

poder

significativamente

card. A parte on-card da mquina virtual

menor do que o hardware de um PC, ento

responsvel por executar os arquivos CAP

apenas um subconjunto da linguagem Java

(Converted Applet) independente do hardware

definida pelas especificaes da linguagem Java

envolvido

Card. Para desenvolver aplicaes Java Card

representao binria do aplicativo desenvolvido)

aconselhado levar em conta todos os aspectos da

e a parte off-card responsvel por realizar a

especificao desde o incio do processo de

converso dos arquivos de classe em arquivos

desenvolvimento,

CAP.

de

processamento

pois

caso

contrrio

ser

(arquivos

CAP

possuem

uma

Essa diviso necessria devido as

bastante difcil aumentar a velocidade ou diminuir

limitaes de recursos nos dispositivos envolvidos

o tamanho de um programa caso necessrio

[Chen 2000]. A Figura 3 mostra os componentes

[Rankl 2007].

da mquina virtual.

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

159

Figura 3. JCVM (Mquina Virtual Java Card)

JCRE

(Java

Card

Runtime

Environment) o ambiente de execuo no

comunicao ser possvel inserir, consultar e


excluir dados do carto.
2 Criar as applets: escrever o cdigo

carto inteligente, responsvel por executar os


aplicativos, gerenciar os recursos do carto,

Java Card da aplicao.


3 Gerar os arquivos .class: atravs do

comunicao e segurana. inicializado apenas


uma vez e isso ocorre durante o perodo de

ambiente

de

desenvolvimento,

realiza

fabricao do carto no qual so inicializados a

compilao da aplicao e automaticamente so

mquina virtual e os objetos que prestam servios

criados os arquivos .class.

para o ambiente de execuo. Quando a energia

4 Definir o AID: um array de bytes em

removida, o JCRE suspenso e mantm seu

hexadecimal que permite que a aplicao seja

estado, objetos e dados em memria persistente.

selecionada, toda vez que for necessrio utilizar

Quando o carto re-energizado o JCRE

uma aplicao a primeira coisa a ser feita

reiniciado e carrega os dados que esto na

selecionar a aplicao atravs desse AID para

memria

depois realizar a troca de informaes com o

persistente

retomando

seu

funcionamento no estado exato em que tinha sido


deixado, a partir desse momento o JCRE fica
aguardando

algum

comando

enviado

carto.
5 Gerar o arquivo .cap: todas os

pelo

arquivos .class devem ser convertidos em um

aplicativo host. O JCRE se mantm em estado de

nico arquivo .cap como se fosse um pacote no

execuo durante uma sesso entre o carto e o

qual todas as classes foram convertidas em um

leitor (uma sesso o tempo em que um carto

nico arquivo.

permanece conectado e energizado pelo leitor)


[Chen 2000].

6 Instalar a applet no carto: atravs do


ambiente de desenvolvimento possvel instala a

Na sequncia so mostradas as etapas

aplicao no Smart Card.

passo a passo desde a criao de uma applet

7 Envio e recebimento de comandos

Java Card at a sua instalao e execuo no

APDUs: aps as etapas anteriores a aplicao j

Smart Card.

est pronta para ser utilizada, para se comunicar


com a aplicao Java Card deve-se enviar

1 Definir as APDUs de comando e


resposta:

atravs

desse

protocolo

comandos APDUs definidos na primeira etapa.

de

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

160

A Figura 4 ilustra todos os passos citados

aplicao Java Card.

anteriormente para o desenvolvimento de uma

Figura 4. Etapas para o desenvolvimento de uma aplicao Java Card


CLA: identifica a categoria dos comandos
PROTOCOLO DE COMUNICAO

e respostas APDU.

APDU (Application Protocol Data Unit)


um protocolo em nvel de aplicao e foi utilizado
nesse projeto para realizar a comunicao e a
troca de informaes entre o Smart Card e a
aplicao host.

INS: especifica qual o comando.


P1 e P2: usados quando necessrio para
fornecer mais informaes para a instruo.
Lc: especifica o tamanho em bytes do
campo Data field.

Ele trabalha atravs de mensagens que

Data field: contm os dados que so

podem ser divididas em duas estruturas: a

enviados

primeira que utilizada pela aplicao host para

instruo.

enviar comandos para o carto e a segunda que


utilizada pelo carto para enviar respostas para

Le:

para

carto

especifica

executar

numero

alguma

de

bytes

esperado como resposta a esse comando.

a aplicao host. Toda mensagem de comando


APDU combinada com uma mensagem de

Corpo Opcional

Cabealho obrigatrio

resposta APDU [Chen 2000].

Data field

SW1

As Figuras 5 e 6 representam o formato

SW2

Figura 6. Formato de uma resposta APDU

de um comando e de uma resposta APDU


respectivamente.

Data field: dados enviados pelo carto


como resposta ao comando APDU, com o

Cabealho obrigatrio
CLA

INS

P1

Corpo opcional
P2

Lc

Data
field

Figura 5. Formato de um comando APDU

tamanho igual ao especificado no campo Le do


Le

comando APDU (Figura 5) .


SW1 e SW2: so chamados de palavras
de status, retornam cdigos hexadecimais, por
exemplo, 0x9000 que indicam se o comado foi

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

161

executado com sucesso ou no e o que


aconteceu caso tenha ocorrido algum problema.

Os possveis casos de combinao de


comando e resposta APDU so mostrados na
Figura 7.

Figura 7. Combinaes de comandos e repostas APDUs


AMBIENTE DE DESENVOLVIMENTO

trecho da comunicao entre os mdulos internos

Para desenvolver o mdulo on-card foi

ao carto.

utilizada a verso do plugin JCOP Tools 3.1.1b

A aplicao foi dividida em dois mdulos:

acompanhado das verses JDK 1.5, Eclipse

o primeiro um mdulo on-card, ou seja, um

Galileu 3.5.0, Java Card 2.2.1 e Global Platform

mdulo que trata todas as classes, funes e

2.1.1, as bibliotecas Java Card e Global Platform

servios que foram inseridos no carto e o

j acompanham o plugin dispensando a sua

segundo um mdulo off-card, ou seja, um

instalao e tambm um kit de desenvolvimento

mdulo que trata toda a parte da interface grfica

com dois cartes JCOP21 36k e uma leitora de

da aplicao host e de como o usurio interage,

cartes ACR38.

se comunica e troca informaes com o carto.

O mdulo off-card foi desenvolvido por meio da


IDE NetBeans 6.8 acompanhado da biblioteca
Java Card 2.2.1 e da API SmartcardIO.

Mdulo on-card
Seguindo as etapas de como desenvolver

uma applet Java Card a primeira coisa realizada

bibliotecas instaladas tem-se o ambiente grfico

foi a definio dos comandos e respostas APDUs,

que

pelos quais o mdulo on-card se comunica com o

Com

todas

automatizou

essas

uso

ferramentas

das

ferramentas

mdulo off-card. A tabela 2 mostra todos os

disponveis para o desenvolvimento do projeto.

comandos APDUs definidos:


DESENVOLVIMENTO DE APLICAES
Para

demonstrar

processo

de

desenvolvimento de uma aplicao Java Card,


este artigo traz um exemplo de uma aplicao
como trechos de cdigo para enviar e receber
comandos APDUs no mdulo off-card e um

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

162

Tabela 2. Definio dos comandos APDUs


Varivel
CLA_INFOESTE

INS_SET_CURSOPALESTRA

INS_DEL_CURSOPALESTRA

INS_GET_NTOTALCURSOPALESTRA

INS_GET_LISTATODOSCURSOPALESTRA

applet

obrigatoriamente

alguns

principal
mtodos

Funo
Define a classe de comando
e resposta para essa
aplicao
Realiza a inscrio de cursos
e (ou) palestras passados por
parmetro.
Realiza o cancelamento da
inscrio dos cursos e (ou)
palestras passados por
parmetro.
Retorna o numero total de
inscries de cursos e
palestras.
Retorna o cdigo de todos os
cursos e palestras que esto
inscritos no carto.

reescreve
devido ao

Valor
(byte) 0xB0

(byte) 0x10

(byte) 0x20

(byte) 0x30

(byte) 0x40

quem tem a responsabilidade de criar uma nova


instncia da applet executando o seu construtor.

relacionamento de herana que possui com a

O mtodo process quem recebe os

classe Applet (javacard.framework.Applet) como:

comandos APDUs, verifica se eles so vlidos e

Seletc, deSelect, install e process.

direciona a aplicao para executar o comando

O mtodo Select responsvel por


selecionar a aplicao e retorna um valor true

APDU.
Outros

dois

mtodos

de

extrema

caso a aplicao seja selecionada. O mtodo

importncia para a aplicao so os mtodos que

deSelect pelo contrrio retira a seleo da

enviam (Figura 8) e recebem (Figura 9) dados do

aplicao, ou seja, deixa o carto liberado para

mdulo off-card.

utilizar outra applet.


J o mtodo install o primeiro a ser
acessado dentro da applet toda vez que ela for
selecionada esse mtodo pode ser comparado ao
mtodo main de uma aplicao Java e ele
1 private void enviarDados(APDU apdu, byte[] dados) {
2
3
short dataLen = (short) dados.length;
4
byte[] buffer = apdu.getBuffer();
5
Util.arrayCopyNonAtomic(dados, (short) 0, buffer, (short) 0, dataLen);
6
apdu.setOutgoingAndSend((short) 0, dataLen);
8 }
Figura 8. Mtodo que envia dados para a aplicao host

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

163

1 private byte[] receberDados(APDU apdu) {


2
3
byte[] dados = new byte[127];
4
byte[] buffer = apdu.getBuffer();
5
short lengthDados = (short) (buffer[ISO7816.OFFSET_CDATA] & 0x00FF);
6
if (lengthDados == 0)
7
ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
8
Util.arrayCopy(buffer, (short) ((ISO7816.OFFSET_CDATA) & 0x00FF),
9
dados, (short) 0, (short) 100);
10 return dados;
12 }
Figura 9. Mtodo que recebe dados da aplicao host

Mdulo off-card
Para o desenvolvimento desse mdulo foi

funes que ajudam a identificar se existem


cartes ou no conectados s leitoras.

utilizada a API SmartcardIO que d suporte para

A Figura 10 mostra a tela principal do

trabalhar com a leitora de carto e com o carto.

mdulo off-card por onde o usurio realiza a

A API prev funes que listam as leitoras

interao com o mdulo on-card.

disponveis, as leitoras conectadas e tambm

Figura 10. Interface grfica do mdulo off-card


O mdulo off-card faz toda a troca de
informaes com o mdulo on-card atravs de

Figura 11 mostra um trecho de cdigo que realiza


essa operao.

envios e recebimentos de comandos APDUs, a

Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

164

1 if (c.getTerminal().isCardPresent()) {
2
c.iniciaComunicacao();
3
4
byte[] select = {(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00, (byte) 0x08, (byte) 0x43, (byte) 0x6f,
5
(byte) 0x6e, (byte) 0x74, (byte) 0x72, (byte) 0x6f, (byte) 0x6c, (byte) 0x61};
6
byte[] apdu = {(byte) 0xB0, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x00};
7
8
ResponseAPDU r_select = c.getCanal().transmit(new CommandAPDU(select));
9
ResponseAPDU r = c.getCanal().transmit(new CommandAPDU(apdu));
10
11
Informacao.append(r + "\n\n");
12
JOptionPane.showMessageDialog(null, Host.paraStringHexa(r.getData()));
13 } else {
14
JOptionPane.showMessageDialog(null, "Carto no conectado!");
15 }
Figura 11. Acessando o mdulo on-card por meio da aplicao host
No trecho de cdigo da Figura 11 pode-

citadas nesse artigo para desenvolver pequenas

se observar a criao dos comandos APDUs

aplicaes de controle que venham servir de base

(linhas 4 e 8), o comando select (linhas 4 e 5)

para desenvolver outros tipos de aplicaes

montado agregando o AID da aplicao (43 6f 6e

futuramente.

74 72 6f 6c 61) em hexadecimal. Na linha 6 a


aplicao selecionada e fica pronta para uso,

REFERNCIAS

aps isso enviado (linha 9) um comando APDU

CHEN, Z. (2000) Java Card Technology for


Smart Cards: Architecture and Programmers
Guide, Edited by Addison Wesley, U.S.A.

montado na linha 8 na classe de comandos e


respostas APDU 0xB0 e a instruo 0x30.
Feito isso a aplicao on-card retorna o nmero
total de cursos e palestras inscritas no carto e
uma palavra de status (SW) com valor igual a
9000 que significa que o comando foi executado
com sucesso.

CONSIDERAES FINAIS
Este trabalho foi desenvolvido com o
intuito de demonstrar que os Smart Cards esto
evoluindo tecnologicamente, e uso destes est
cada vez mais amplo, no se concentrando
apenas

nas

suas

caractersticas

COMSOFT.
(2006).
Disponvel
em
<http://www.comsoft.com.br/?q=produtos/whitecar
d>. Acessado em: 12 dez 2010.
Projeto
RIC.
(2009)
Disponvel
em:
<http://jus.uol.com.br/revista/texto/17931/a-novacarteira-de-identidade-e-o-projeto-ric>. Acessado
em: 10 dez. 2010.
RANKL, W. (2007) Smart Card Applications:
Design models for using and programming in
smart cards, Edited by Kenneth Cox, John Wiley
& Sons ltd., England.
Scm.
(2006).
Disponvel
em:
<http://www.scmmicro.ru/upload/catalog/items/doc
s/JCOP21_SPI.pdf> Acessado em: 10 dez 2010

funcionalidades originais. Cada vez mais esto


sendo

agregadas

novas

funcionalidades,

podendo ser utilizadas no apenas para efetuar


transaes bancrias, mas para uma grande
quantidade de aplicaes e solues.
No tratado nesse artigo a parte de
segurana, que envolve os cartes e o acesso s
informaes armazenadas nele, pois o principal
objetivo do projeto foi utilizar-se das tecnologias
Colloquium Exactarum, Presidente Prudente, v. 3, n. 2, p. 155-164, jul/dez 2011. DOI: 10.5747/ce.2011.v03.n2.e039

Potrebbero piacerti anche