Hack: Rejsekort-feature tillader check ind trods flere NFC-kort i pungen

21. november 2014 kl. 06:2926
Checker du ind med et rejsekort og et kontaktløst adgangskort i pungen, risikerer du, at standeren melder fejl. En uudnyttet feature i teknologien bag rejsekortet, gør det muligt at checke ind alligevel. Der er tale om et bevidst fravalg, forklarer Rejsekort-direktør.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

Måske du også har oplevet, at det er uladsiggørligt at checke ind ved at holde tegnebogen med rejsekortet op til standeren. Det behøver som sådan ikke være fordi, hverken kort eller stander fejler noget. Forklaringen kan være, at der også er eksempelvis et adgangskort i tegnebogen, der anvender den MiFare-teknologi, som også rejsekortet bygger på. Og er det tilfældet, melder standeren fejl.

Det var den private rejsekort-udvikler, Casper Bang, træt af, og han har derfor undersøgt en feature i Mifare-teknologien, som gør det muligt for systemet at håndtere flere kontaktløse kort i radiofeltet. Han har tidligere gjort sig bemærket i rejsekort-sammenhæng ved på eget initiativ at udvikle en app, der gør det muligt at kommunikere med netop Mifare-chippen i Rejsekortet via mobiltelefoner med NFC-chip fra NXP.

»Dette irriterede mig, fordi jeg (og mange andre) går rundt med andre Mifare-kort som f.eks. medarbejder-/adgangskort i deres pung,« skriver Casper Bang i en mail.

I MiFare er der en feature, som Casper Bang kalder 'anti-collision', og som er defineret ifølge Mifare-standarden (ISO 14443A). Den gør det muligt at håndtere flere kort i radiofeltet ved fx en stander. Casper Bang har lagt en lille video på Youtube, som kan ses under artiklen, hvor han demonstrerer anti-collision i MiFare.

Artiklen fortsætter efter annoncen

Anti-collision fungerer ved, at alle kort udsender sit serienummer, når det kommer ind i feltet ved standeren, forklarer Casper Bang. Rejsekort-læseren kan herefter kommunikere med kortene et ad gangen via serienummeret.

I den forbindelse stiller Casper Bang sig uforstående overfor, at andre kort med Mifare-chip på den måde er en showstopper i forhold til check ind (og ud), som det i dag er tilfældet.

»... som kunde/bruger kunne det være rart ikke at skulle passe på med at blande diverse kort i sin pung/taske - det er jo bare en teknisk implementationsdetalje, at begge benytter Mifare,« skriver han.

Casper Bang tilføjer, at et argument for ikke at aktivere featuren med anti-collision i rejsekort-systemet kunne være, at der kan opstå et problem i forhold til, hvilket kort der skal checkes ind, hvis pungen indeholder flere rejsekort. Og at det kan være en del af forklaringen på, hvor slet ingen kort bliver checket ind, hvis der registreres flere kort med Mifare.

Artiklen fortsætter efter annoncen

»Jeg ville måske nok personligt have foretrukket at alle kort i feltet bliver checket ind og så ladet standeren bippe en gang for antal kort og skrive antallet på displayet - det ville også gøre det hurtigere at checke flere ind samtidigt (én arbejdsgang),« skriver Casper Bang.

Adm. direktør i Rejsekort A/S Bjørn Wahlsten fortæller, at det er et bevidst fravalg, når Rejsekort-systemet ikke understøtter flere Mifare-kort i standerens radiofelt. Bjørn Wahlsten har undersøgt sagen nærmere og oplyser via mail til Version2:

»Det er rigtigt, at det er teknisk muligt at afgøre, om et givet kort i kortlæserens læsefelt er et rejsekort eller ej. Vi bruger den mulighed til at give en specifik fejlmeddelelse i det tilfælde der vises et kort, som ikke er et rejsekort.«

Bjørn Wahlsten oplyser endvidere, at det er teknisk nødvendigt at læse informationer på kortet udover kortets serienummer for at afgøre, hvorvidt kortet er et rejsekort eller ej. Og dermed kommer der til at gå for lang tid med at vurdere, hvilke kort der holdes op mod standeren.

Artiklen fortsætter efter annoncen

»Hvis der er flere kort til stede i læsefeltet er det så nødvendigt at læse igennem dem alle for at afgøre, hvilket eller hvilke som er rejsekort. Dette ville medføre en længere transaktionstid – og dermed en større risiko for, at kunden når at fjerne sit kort inden operationen er færdig,« står der i mailen fra Wahlsten, som fortsætter:

»I den situation vil kortlæseren give en fejlmeddelelse til kunden, men ved enhver anden fejlsituation skaber det en usikkerhed hos kunden om udstyret fungerer korrekt. Det er baggrunden for at vi har valgt at afvise operationen helt, hvis der er flere kontaktløse kort i læsefeltet på en gang.«

Derudover vil det også skabe forvirring hos kunden i de situationer, hvor der er flere rejsekort i pungen ad gangen, lyder det i svaret fra Rejsekort A/S.

»For det specielle tilfælde, hvor der er flere rejsekort i læsefeltet på en gang, har vi desuden fundet, at det var bedst for kunden, at funktionen var 100 procent forudsigelig. Vi kan ikke være sikre på, at en kunde, som har f.eks. flere rejsekort i tegnebogen, virkelig ønsker at checke alle sine rejsekort ind. Den situation vil i mange tilfælde også optræde, hvor kunden har flere rejsekort til forskellig anvendelse. F.eks. ét til rejse i forbindelse med arbejde og ét til privat brug.«

Casper Bang har lavet følgende korte demonstrationsvideo, hvor to Mifare-kort bliver registreret af en læser. Han har også skrevet et blogindlæg om udviklingen af en C#-driver til læseren, ER301.

[video: http://youtu.be/TIomZB-3Gbs]

26 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
22
23. november 2014 kl. 10:29

Jeg gemmer mit rejsekort inde i coveret i min mobil :)

25
24. november 2014 kl. 08:49

Tilgængæld kan du, i teorien, overføre selve rejsekortet til din telefon i en emuleret form via Host Card Emulation og smide kortet ud. Det står dog hen i det uvisse, hvad Rejsekort A/S og diverse togførere vil sige til dette - men jeg har en fornemmelse.

Det er 1000% sikkert, at Rejsekort vil brokke sig - du anvender ugyldigt rejsehjemmel. Det kan godt være at teknisk er der tale om nøjagtig det samme kort, men jeg er ret sikker på, at de vil have det fysiske kort.

Togførerne er så en helt anden sag. De vil overhovedet ikke være i stand til at håndtere Rejsekort på den facon. De har svært nok ved at håndtere, at deres terminal i InterCity togene ikke kan genkende et checkin på S-togsstander som gyldigt checkind ved skifte.

23
23. november 2014 kl. 12:04

Nej det er forvirrende nok, når jeg holder mobilen og pungen i samme hånd. Så bimler og bamler telefonen! :-D

21
23. november 2014 kl. 10:29

Jeg gemmer mit rejsekort inde i coveret i min mobil :)

20
22. november 2014 kl. 12:33

Jeg har mit rejsekort liggende i den "ene side" af min pung (i en lomme "bagtil") og resten af kortene i "kortholderne" (lige til at tage ud). Jeg holder så bagsiden af pungen op imod rejsekortscanneren og den scanner den uden problemer. Det fungere upåklageligt - indtil jeg får flere kort der skal scannes! :-|

16
21. november 2014 kl. 15:55

Som Povl H. Pedersen og Christian Panton også er inde på, kom videoen og emnet til verden i sin tid, fordi jeg ikke forstod hvorfor man ikke bare afviser de kort (lægger dem til at sove) så snart man ser et kortID der ikke er inden for de de kendte nummer-serier Rejsekort har fået leveret fra leverandøren.

Der er 900.000 rejsekort så vidt jeg er ved og med 2^32 mulige numre, vil 4.29 mia. uinteresante numre kunne filtreres fra øjeblikkeligt - uden der er foregået nogen form for 2-vejs kommunikation overhovedet!

Principielt mener jeg stadig, at det er kunden irrelevant hvorvidt rejsekortet er baseret på Mifare teknologien eller ej - det er bare en implementationsdetalje. Den fejler jo heller ikke hvis man holder et klippekort eller pendlerkort op.

7
21. november 2014 kl. 11:36

end det tager at skanneren skan læse mere end et kort.

Folk fjerner i øvrigt ikke kortet før den siger bing, så det med at man risikerer at folk fjerner kortet for hurtigt er ikke nogen god begrundelse. Vi er allerede vant til at skulle afvente succes lyden, da det langt fra er altid den kommer, selv når den burde.

2 rejsekort, er det ene tilfælde hvor den bør afvise.

9
21. november 2014 kl. 12:40

Folk fjerner i øvrigt ikke kortet før den siger bing,

Jo det gør de. Du vil ikke tro hvor svært kan det være for rigtig mange at vente til den siger "bing".

Jeg synes du skal lige sætte dig i nærheden af en stander og holde øje med hvordan folk faktisk bruger kortet... :O)


PS. Jeg mener at huske at der var et krav at en tjek-in/tjek-ud ikke måtte tage mere end 300ms. Bulk tjek-in/tjek-ud ville sandsynlig overskride kravspecs, hermed forståelig droppet.

13
21. november 2014 kl. 13:32

PS. Jeg mener at huske at der var et krav at en tjek-in/tjek-ud ikke måtte tage mere end 300ms. Bulk tjek-in/tjek-ud ville sandsynlig overskride kravspecs, hermed forståelig droppet.

Det er fuldstændig irrelevant hvad transaktionstiden er når man har eet rejsekort. Det er klart, at det vil tage længere tid når der skal læses flere kort og det vil i så fald have en højere tidsgrænse, da der er tale om et andet problem (medmindre dem, som har skrevet kravspecifikationen er inkompetente; hvilket synes at være en mulighed).

Anyway, fortæl hvad du tror er hurtigst:

  1. Rejsekortstanderen finder ud af, at der er flere kort og melder fejl. Kunden tager rejsekortet ud af pungen. Kunden scanner rejsekortet. Ok

eller

  1. Rejsekortstanderen finder ud af, at der er flere kort, scanner dem og finder ud af, at kun eet af dem er et rejsekort. Rejsekortet checkes ind hhv ud. Ok.

?

14
21. november 2014 kl. 13:54

Anyway, fortæl hvad du tror er hurtigst:

Det er nemlig det der er problemet med (store) projekter:real life usecases vs. kravspecs

I sidste ende vil det altid handle om kravspecs og ikke usability for ikke-overholdt kravspecs vil opfattes som et kontraktbrud. :O/

15
21. november 2014 kl. 15:19

Jeg står dagligt i nærheden af en stander, og oplever det som jeg har beskrevet.

Jeg tror det i ret høj grad afhænger af, hvor man befinder sig. Nogle steder tager folk sig rigtig god tid (og nogen gange rigtig, rigtig god tid) til at scanne deres kort og afvente klarsignal. Andre steder bliver der svunget meget hurtigt med kortene. Om ikke andet, så viser dette hvor farlige anekdotisk data er, når to personer kan have modsatrettede observationer af samme [tilsyneladende] hændelse.

6
21. november 2014 kl. 11:29

for at sige meget lidt.

Sad konstant og tænke, kom nu til pointen!

5
21. november 2014 kl. 10:22

Lidt kuriøst og sagen lidt uvedkommende, har jeg faktisk det omvendte problem. Rejsekortstanderen kan fint læse mit rejsekort sammen med firmanøglekortet, mens firmaets kortlæser fejler når rejsekortet er i nærheden.

4
21. november 2014 kl. 10:19

For det specielle tilfælde, hvor der er flere rejsekort i læsefeltet på en gang, har vi desuden fundet, at det var bedst for kunden, at funktionen var 100 procent forudsigelig

Man kunne vel lave det sådan, at hvis der er flere kort, men kun et rejsekort, så checker den ind, hvis der er flere rejsekort, så giver den en fejl - det lyder som en relativ simpel operation

Hvis der kun er et kort burde det kunne gøres på omtrent samme tid som den nuværende løsning

3
21. november 2014 kl. 10:07

En simpel ting ville være at lave et bloom-filter på Mifare UID for alle rejsekort. Så kunne man relativt nemt afgøre om et givent Mifarekort også var et Rejsekort, det skulle ikke tage lang tid at lave antikollison og matche indsamlede UID'er imod filteret. Det som tager lang tid er fejlslagen authentication imod et Mifare kort, hvilket ville være tilfældet over for adgangskort mm.

Det typiske er vel at folk kun har eet Rejsekort. Såfremt man havde to Rejsekort i sin pung, ville maskinen brokke sig som i dag.

2
21. november 2014 kl. 09:51

Da man har serienummeret på alle rejsekort, så kunne man gøre det forudsigeligt ved altid at vælge laveste serienummer.

Jeg ved ikke hvorfor man skal spørge kortet for at afgøre om det er et rejsekort. Jeg går ud fra, at de er udsted i nummerserier, forhåbentlig ikke flere serier end der kan ligge lokalt i en tabel i standeren (a'la dankortterminaler).

Og hvor lang tid taler vi om at det ville tage at løbe 10 kort igennem og se om de er rejsekort ? Man kører vel omkring 100 kBd (kilo-Baud) ? eller 12.5 kbyte/sec. så burde man på 1/10 sekund vel sagtens kunne læse 100 bytes fra 5-6 kort, og udlede om det er et rejsekort. Nu kender jeg ikke protokollen, kan bare se at det er hastigheden på den gamle ISO standard, og nyere MiFare kører væsentligt hurtigere.

8
21. november 2014 kl. 11:41

kilo-Baud

Kilo-bit - Baud er den analoge hastighed på et modem.

11
21. november 2014 kl. 13:14

Baud er symbol-raten. Der kan være flere bit pr. symbol.

Jeg kunne godt have sat anførselstegn om "den analoge hastighed" - det interessante er at det er udtryk for modulations raten af signalet, og afhængig af kodning mv. kan der overføres langt flere bits per Baud.

Det jeg egentlig bare vil frem til er, at taler vi digitale systemer benyttes bit/s ikke Baud.

1
21. november 2014 kl. 08:24

For en gangs skyld er jeg enig i Rejsekorts tankegang.