No contexto de cartões inteligentes, uma application protocol data unit (APDU), em português unidade de dados de protocolo de aplicativo, é a unidade de comunicação entre um leitor de cartão inteligente e um cartão inteligente. A estrutura da APDU é definida pela ISO/IEC 7816-4 Organization, security and commands for interchange (Organização, segurança e comandos para intercâmbio).[1]
Par comando-resposta de mensagem APDU
Existem duas categorias de APDUs: comando APDUs e resposta APDUs. Um comando APDU é enviado pelo leitor para o cartão - ele contém um cabeçalho obrigatório de 4 bytes (CLA, INS, P1, P2) e de 0 a 65 535 bytes de dados. Uma resposta APDU é enviada pelo cartão para o leitor - contém de 0 a 65 536 bytes de dados e 2 bytes de status obrigatórios (SW1, SW2).
Comando APDU
|
Nome do campo
|
Tamanho (bytes)
|
Descrição
|
CLA
|
1
|
Classe de instrução - indica o tipo de comando, por exemplo interindústrial ou proprietário
|
INS
|
1
|
Código de instrução - indica o comando específico, por exemplo "gravar dados"
|
P1-P2
|
2
|
Parâmetros de instrução para o comando, por exemplo offset (deslocado) para o arquivo no qual os dados serão gravados
|
Lc
|
0, 1 ou 3
|
Codifica o número (Nc) de bytes de dados de comando para o seguinte
0 bytes denota Nc=0
1 byte com um valor de 1 a 255 indica Nc com o mesmo valor
3 bytes, o primeiro dos quais deve ser 0, denota Nc no intervalo de 1 a 65 535 (todos os três bytes podem não ser zero)
|
Dados de comando
|
Nc
|
Nc bytes de dados
|
Le
|
0, 1, 2 or 3
|
Codifica o número máximo (Ne) de bytes de resposta esperados
0 bytes denota Ne=0
1 byte no intervalo de 1 a 255 indica que o valor de Ne ou 0 indica Ne= 256
2 bytes (se Lc estendido estava presente no comando) no intervalo de 1 a 65 535 denota Ne desse valor ou dois bytes zero indicam 65 536
3 bytes (se Lc não estava presente no comando), o primeiro dos quais deve ser 0, denota Ne da mesma maneira que Le de dois bytes
|
Resposta APDU
|
Dados de resposta
|
Nr (no máximo Ne)
|
Dados de resposta
|
SW1-SW2 (Trailer de resposta)
|
2
|
Estado de processamento do comando, por exemplo 90 00 (hexadecimal) indica sucesso
|
Referências
Ligações externas