Wednesday, May 25, 2016

Rejsekort, NFC og smartphone kompatibilitet

Det sker ikke så sjældent, at jeg får en mail på noget lignende følgende form:
Min telefon har da NFC, hvorfor kan jeg så ikke downloade din app?
Hvorfor sker ikke noget når jeg scanner kortet med din app?
Jeg savner et sted hvor man kan se om hvilke telefoner der er kompatible med din app (Rejsekortscanner). Jeg kan finde nogle spredte informationer skrevet af dig. Nogle er 2 år gamle på din blog. Hvorfor vedligeholder du ikke bare en liste?
Det er jo gode spørgsmål som jeg har svaret på rigtig mange gange de seneste par år. Det siger sig selv, at som udvikler er jeg naturligvis interesseret i, at gøre det så nemt og smertefrit for potentielle brugere som muligt - men Rejsekort og NFC er og bliver bare et kompliceret emne. Herunder har jeg forsøgt at bryde emnet ned i let-fordøjlige bidder.
  • Hvad er NFC?
    NFC (Near Field Communication) udspringer af envejskommunikation RFID (Radio Frequency IDentification), og tillader kontaktløs tovejskommunikation med et smartcard. Det er altså muligt, over en meget kort afstand, at kommunikere elektronisk med en chip på f.eks. et adgangskort, Rejsekort eller Dankort. Dette sker på frekvensen 13.56MHz og med en båndbredde på 106 kbit/s. Det var firmaerne NXP (tidligere Philips) samt Sony, der pionerene NFC i sin tid og i dag er især NXP stadig en stor spiller inden for NFC, men Samsung, Broadcom mv. er også kommet til. NFC teknologien er nu (delvist) standardiseret af NFCForum under ISO/IEC 14443A. Men sådan har det ikke altid været!

  • Hvad er Mifare?
    Før NFC blev hvermandseje og indbygget i de fleste mobiltelefoner, var teknologien mere eksklusiv og blev primært brugt til elektroniske adgangskort, billetter mv. Til dette var der behov for et såkaldt krypteret "sikkert element", altså et område på kortet man ikke bare sådan uden videre kan læse og skrive til - af hensyn til sikkerhed og svindel. En af disse teknologier fra NXP hedder Mifare og det er dén teknologi rejsekortet også benytter. Selv om NXP var med til at standardisere NFC, så var de smarte nok til at sørge for en udvidelsesmekanisme, således at de stadig kunne bibeholde deres egen overbygning, i form af Mifare - uden at dette stred direkte imod standarden. Ligesom NXP har Mifare som overbygning, har Sony iøvrigt deres Felicia teknologi.

  • Burde alle NCF telefoner ikke kunne læse rejsekortet?
    I teorien jo, for protokol og frekvens er helt den samme og andre producenter end NXP kan stadig godt få lov til at kommunikere med Mifare typen, mod at betale en licens til NXP og implementere det i deres driver. Problemet er bare, at det gør ingen af de andre store spillere som Sony, Samsung og Broadcom. Istedet læner de sig, måske fornuftigt nok, op af den åbne standard - uden at tænke på evt. propriotære udvidelser. Det er derfor en smartphone skal have en NFC chip fra NXP, for overhovedet at have mulighed for at kunne læse rejsekortet!

  • Hvorfor vælger Rejsekort A/S at benytte sig af Mifare?
    Jo det gør de, fordi det i mange år har været de-facto standard inden for elektronisk rejsehjemmel og fordi teknologien er fra før mobiletelefoner med NFC blev hvermandseje. Rejsekort A/S har også haft krav om en pæn portion hukommelse på kortet, p.g.a. det danske system er et nationalt asynkront system, så der var ikke rigtig så mange alternativer. De har også haft krav til sikkerhed, p.g.a. risikoen for svindel med data på kortet. I praksis er der dog ikke megen sikkerhed, da krypteringen blev knækket tilbage i 2007 ligesom nøgler ligger spredt rundt på internettet og i diverse apps. Sikkerheden af systemet må derfor formodes primært at blive håndteret via overvågning af backend systemerne. Rejsekort A/S er sidenhen overgået fra Mifare Classic til Mifare Plus der er sikret bedre mod hacking. Her i 2016 findes der åbne alternativer ligesom, eftersom den fysiske sikkerhed er ikke-eksisterende, man burde kunne formattere Mifare kortet til kun at bruge standardiserede NDEF records - så ville alle NFC telefoner i princippet kunne aflæse kortet, og så ville krypteringen blot ligge i software.

  • Findes der ikke en liste over telefoner et sted?
    Der er faktisk ikke et sted på nettet med troværdig information omkring en telefon har Mifare support eller ej, det bedste der findes er en liste på shopnfc men denne har ofte fejl og mangler. Jeg forsøgte faktisk også i starten at vedligeholde en liste, men det skulle hurtigt vise sig at være en uholdbar praksis. Der kommer nye telefoner, samt nye versioner af eksisterende telefoner til, og det er ingen nem sag at finde ud af, om den har en NFC chip fra NXP eller ej - nogen gange kan man finde ud af dette på ifixit, men her lander kun de største og mest kendte telefoner. Den eneste sikre metode er derfor simpelthen at gå ned i din lokale butik, og prøve at installere og afprøve f.eks. Rejsekortscanner.

  • Hvorfor virker Google Play filtreringen ikke altid?
    Prøv f.eks. at se det screenshot herunder, fra Google Play. Som du måske kan se, er der 432 manuelt udelukkede enheder alene fra Samsung! Dette er altså telefoner med NFC, men som jeg (af den ene eller anden årsag) ikke mener har en NFC chip fra NXP og derfor ikke vil kunne bruge min app Rejsekortscanner. Bemærk også, at der er flere forskellige S6, S6 Edge og S6+ modeller - så man KAN faktisk slet ikke skrive "Virker ikke med S6" for det kommer an på hvilken af de 15 versioner det drejer sig om. Samsung S4 Mini (som min kone har) har aldrig kunne læse Mifare, men seneste model kan sjovt nok godt, så nu har jeg specifikt åbnet for denne. Sidst men ikke mindst, ser jeg også en del rapporter fra brugere der har enheder som Google Play simpelthen ikke kender endnu (f.eks. PHICOMM PASSION).


Det bedste jeg p.t. kan gøre, er at medsende så meget jeg kan omkring en brugers telefon, når de indsender en fejlrapport i app'en. Dette er nogengange nok til, at jeg kan identificere den inde i Google Play og åbne på eller lukke ned for den. Så når der kommer nye modeller til (og versioner af modeller), har disse jo som udgangspunkt lov til at installere Rejsekortscanner. Kun når jeg bliver bekendt med modeller/versioner der giver problemer (typisk brugere der sender vrede mails eller giver én stjerne som bedømmelse) skynder jeg mig ind på Google Play for at tilføje i filtret. Det er dog ikke altid jeg når det i god tid (jeg har job, familie osv. som så mange andre) og så er jeg da lidt ked af at få hivet gennemsnittet ned på ratingen af app'en når det nu ikke er min skyld, men sådan er det bare.

Sidst men ikke mindst, er der nogen gange driver problemer på telefoner på bestemte versioner af Android. Eksemplerne på dette er:
  • Visse Samsung telefoner med Android 5, returnerer ved en fejl 17 bytes for en Mifare blok hvor den kun skal returnere 16
  • På visse HTC One kørende med Android 5 har er NfcA null i TechExtras og skal trækkes ud via et hack
  • På Sony Xperia Z3 findes der 2 NfcA med forskellige SAK værker i TechExtras, som skal patches med et hack
  • Nexus X5 som ser ud til at virke 1/10 gange om som derfor er blokeret indtil jeg kan finde en løsning


På grund af desse problemer, forsøger jeg nu at logge (via Google Analytics) når folk bruger Rejsekortscanner og de IKKE kan læse kortet p.g.a. manglende Mifare. Dette samler jeg op i noget statistik og snart vil jeg formentlig kunne bruge dette til at lukke ned noget hurtigere. Det betyder at jeg på sigt nok VIL være i stand til at lave en form for liste, men den vil være meget stor, særdeles teknisk og vil aldrig være så brugervenlig at hr og fru Danmark bare lige kan se "S5, jo den er på listen".

Håber det var et klart nok svar - i en desværre noget uklar NFC/Mifare verden.

Post a Comment