Application Protocol Data Unit

**[[Applikasjonslaget|Application]] [[Protokoll (datamaskiner)|Protocol]] Data Unit (APDU)** er en essensiell komponent i kommunikasjonen mellom en smartkortleser (terminal) og et smartkort, og danner grunnlaget for strukturen av kommandoer og responser i ISO/IEC 7816-standarden. Denne protokollen er kritisk for implementeringen av en rekke sikkerhetsrelaterte applikasjoner, inkludert EMV-baserte betalingssystemer, elektroniske ID-kort, adgangskontrollsystemer, og mobiltelefoniapplikasjoner som benytter SIM-kort.

APDU-protokollen beskriver to hovedtyper meldinger: **kommando-APDUer** sendt fra terminalen til kortet, og **respons-APDUer** returnert av kortet til terminalen. Hver meldingsstruktur følger et veldefinert binært format og er bygd for robust og sikker kommunikasjon.

## 1. Historisk og teknisk kontekst
Utviklingen av APDU-protokollen kan spores tilbake til de tidlige versjonene av ISO/IEC 7816-standarden, som ble utformet for å standardisere interaksjonen mellom integrerte kretser på smartkort og ytre enheter. De første delene av standarden, publisert på 1980-tallet, la grunnlaget for definisjonen av APDU-formatet slik vi kjenner det i dag.

Med fremveksten av kontaktløse smartkort og NFC-teknologi, har APDU-strukturen blitt tilpasset for å fungere over ulike transportlag, inkludert ISO/IEC 14443 og ISO/IEC 18092 (NFCIP-1).

## 2. Struktur av APDU-meldinger

### 2.1 Kommando-APDU
En kommando-APDU består av følgende felt:

* **CLA** (1 byte): Class byte. Identifiserer protokollklassen eller instruksjonsklassen.
* **INS** (1 byte): Instruction byte. Angir hvilken kommando kortet skal utføre.
* **P1, P2** (2 byte): Parameter bytes. Brukes som kommando-spesifikke parametere.
* **Lc** (0 eller 1-3 byte): Lengde på datadelen som skal sendes til kortet.
* **Data** (valgfri): Faktiske data som skal overføres til kortet.
* **Le** (0 eller 1-3 byte): Forventet lengde på responsen fra kortet.

Det finnes to formatvarianter: **kort format** (for Lc ≤ 255) og **utvidet format** (Lc > 255).

### 2.2 Respons-APDU
En respons-APDU består av:

* **Data** (valgfri): Data sendt fra kortet til terminalen som svar på kommandoen.
* **SW1, SW2** (2 byte): Statusord. Indikerer resultatet av kommandoen, f.eks. `0x9000` for "OK", `0x6A82` for "File not found", etc.

## 3. Kommunikasjonsprotokoll
APDU-protokollen brukes over **T=0** og **T=1** transportprotokoller, definert i ISO/IEC 7816-3:

* **T=0**: Byte-orientert, halvdupleks kommunikasjon.
* **T=1**: Block-orientert, med error detection og retransmisjon.

Transportlaget er ansvarlig for overføring av APDU-meldinger og håndtering av eventuelle overføringsfeil. APDU-meldinger er transparente for lavere lag og påvirkes i liten grad av fysisk medium, noe som gir høy interoperabilitet.

## 4. Bruksområder

### 4.1 EMV-betalingssystemer
APDU-protokollen er ryggraden i kommunikasjonen mellom betalingsterminaler og chipkort i EMV (Europay-MasterCard-Visa) systemer. Kommandoer som `SELECT`, `READ RECORD`, `GET PROCESSING OPTIONS` er alle standardiserte APDUer.

### 4.2 SIM-kort og [[mobilnett]]
Mobiltelefoner bruker APDU-meldinger for å kommunisere med SIM-kortet for operasjoner som autentisering, filsystemtilgang og overføring av SMS-data.

### 4.3 Elektroniske ID-systemer
Nasjonale ID-kort og e-pass benytter APDU-protokollen for å muliggjøre sikker overføring av identitetsinformasjon, biometriske data og digital signatur.

## 5. Sikkerhetsmekanismer
APDU-protokollen støtter ulike sikkerhetsfunksjoner:

* **Secure Messaging (SM):** Beskytter konfidensialitet og integritet gjennom kryptering og MAC.
* **[[PIN]]-verifikasjon:** Bruk av kommandoer som `VERIFY` for autentisering av brukeren.
* **Mutual authentication:** Brukes i PKI-systemer for å etablere en sikker kanal.

## 6. Feilhåndtering og statuskoder
Statusordene (SW1 og SW2) i respons-APDU gir detaljert informasjon om resultatet av en kommando. Noen vanlige koder inkluderer:

* `0x9000` – Succesful execution.
* `0x6A82` – File not found.
* `0x6982` – Security condition not satisfied.
* `0x6D00` – Instruction code not supported.

Feilkoder er essensielle for robust applikasjonslogikk i klientapplikasjonen.

## 7. APDU-analyse og debugging
Feilsøking av APDU-kommunikasjon krever verktøy som kortlesere med logging-funksjon, samt programvare som GlobalPlatformPro eller kommersielle alternativer som Lauterbach og Micropross. En typisk utviklingsprosess innebærer sporing av APDU-utvekslinger og tolkning av responskoder og datainnhold.

## 8. Fremtidsperspektiv
Selv om APDU-protokollen opprinnelig ble utviklet for kontaktbaserte smartkort, har den vist seg bemerkelsesverdig tilpasningsdyktig og benyttes nå i kontaktløse miljøer og over IP-baserte kommunikasjonslag. Med overgangen til digital identitet og sikker mobil autentisering, forventes bruken av APDU å fortsette å vokse og utvikles i takt med nye kryptografiske krav og reguleringer som eIDAS 2.0.

## Konklusjon
APDU-protokollen er en sentral mekanisme i moderne digital sikkerhet og smartkortinfrastruktur. Den gir en standardisert, fleksibel og sikker metode for kommunikasjon med integrerte mikroprosessorer, og dens struktur har muliggjort interoperabilitet på tvers av nasjonale grenser, bransjer og teknologier.

## Referanser