Godare cirklar

Äntligen är det utrett vad som är kompatibelt med vad och varför saker och ting inte funkar som de ska. Den närmaste tiden ska jag ägna åt att simulera javacardapplets i en perfekt simulerad värld där all hårdvara är virtuell, där solen skiner, gräset är grönt och inga buggar finns. :) Jag ska också skriva en liten agent som kan ta emot data. Koden ska vara kommenterad, men inte på varje rad, är mina förhållningsorder. ;)

Nu är det dags att sticka och handla. Jag ska få besök av en viss Fisk som är väldigt förtjust i Pasta Carbonara. :)

Den onda cirkeln

Det var värre än jag trodde. Att mitt javakort inte stödde JCKv2.2.2 gjorde att jag skulle få göra en hel del jobb för hand, men nu stöder det inte 2.2.1 heller, utan bara 2.1.1 och 2.1.1:an klarar inte av att skicka data till USB-läsare vad det verkar. Kanske går problemet att lösa med lite nya drivrutiner, eller något annat knep? Får ta och undersöka saken efter dagens föreläsning.

Lysande, Sickan?

Jag har en plan! För en gångs skull vet jag vad jag ska göra. Jag ska bygga ett litet program för det gamla javakortet och programmet ska vara byggt med det gamla toolkitet, d.v.s. det ska vara gammaldags så att kortet förstår. Det är ett uråldrigt kort så det begriper inte när man talar som vanligt med det... tror vi. Återstår att se.

Plattformsberoende

Men alltså... Jag ska vara tacksam över att jag äntligen har fått ett fungerade smartkort, men när jag skulle kolla upp exakt vilken modell det var för att kunna hitta datablad så upptäckte jag att jag har fått... *nu kommer min handledare på besök och vi har frustrationsutbyte i tjugo minuter, han var också upprörd över det här* ...ett attans SunRay-kort som inte är kompatibelt med PC:ar alls! Det har ju uppenbarligen en Masterfile och en kryptofunktion till skilland från det förra kortet, men det äter inte såna applets som jag skriver.

Transformerat

Jag lyckades omvandla appletkoden till den ena formen efter den andra till den till slut var omgjord till rena APDU:er, bara att ladda in i simulatorn eller kortet. Simulatorn tackar och tar emot, men kortet? Hur man går till väga verkar vara olika beroende på korttyp så det tas inte upp nånstans hur man gör. Hmm... Om jag hittar ett datablad för just mitt kort så kanske det står där. Jag provade att skicka APDU:erna manuellt med Smart Card Toolset, men det tyckte inget av korten om alls. Får modda lite och testa på nytt.

Nåväl, vissa framsteg har man ju gjort. Jag kan...
  • Använda alla tänkbara verktyg för smartcardprogrammering med blandade resultat
  • Välja Masterfile
  • Få kortet att ge mig en massa slumptal (ja, det funkar med det nya kortet)
  • Köra en applet i simulatorn
  • Tänka i hex :)

Den oskicklige smeden

Så fick jag då dema vad jag gjort sen sist, visa alla mina arbetsytor och verktyg hit och hit. All demokod jag testat, mina egna hemkodade små verktyg... och alla checking error. "Hmm..." sa min handledare och gick sedan och hämtade ett smartkort som hade tillverkarens namn och ett ID-nummer på sig samt ett chip som såg ut som sådana chip ser ut i manualerna. Titta på ditt bankkort. Precis så ser chipet ut, lite större kanske. Mitt testkort är helt vitt på utsidan förutom en konstig fläck som ser ut som om nån har försökt att attackera det fysiskt med syra och chipet liknar inget jag nånsin sett. Givetvis hittades Masterfile direkt och gav det efterlängtade "90 00", transaktionen fungerade.

Nu när jag har ett fungerande kort så kunde jag ju hoppa över läsa/skriva-biten och fixa en fungerande applet... till imorgon! (Eller jo, jag får jobba med det imorgon också om det krävs.) Hey, det här kortet äter ju inte vilken data som helst det heller. Nåja, en liten utmaning är ju inte fel och jag har faktiskt demokod som gått hjälpligt genom appletsimulatorn. Gäller bara att få kortet att ta emot den.

Plan: Jobba lite till, handla, baka till fredagsfikat, koka en balja bönor, äta, läsa på om appletöverladdning, vara här sjukt tidigt imorgon och tanka över appleten. Mission accomplished... snart!

Dränka det i data, hota det med logikprobe

Här sitter jag och testar APDU:er. Det har jag gjort ett bra tag nu, morgonpigg som jag var för en gångs skull. Ska strax ge mig iväg på gästföreläsning. Väntar på att få lite handledning för att kunna lösa mina kortproblem, iaf ska jag redogöra för vad jag har gjort och visa hur oförskämt smartkortet beter sig mot mig.

Värsta slumpen

Jag trodde att jag fått kortet att spotta ur sig en radda slumptal nu, men blev misstänksam när alla 240 slumptalen var 0, -1 eller 110 (och 110 betyder som sagt checking error). Nej, det ligger uppenbarligen en gravad hund här nånstans.

Dagens...
Katapult: Stolarna i labbsalen där min grupp höll till. Hjälp, de är livsfarliga!
Överaskning: En blomma utanför min dörr! Så snällt! (Fisken, det finns ingen anledning till oro, den var från en tjejkompis, inte en hemlig beundrare. :)
Säkraste SmartCard: Mitt, uppenbarligen! Om ingen kan läsa och skriva till det borde risken för datastöld vara noll, eller hur? ;)
Nu-går-jag-hem: Jag. Nu!

Om 3,4 årtusenden

Jag har ett långt gruppmöte framför mig, uppenbarligen. Tänkte att min körning av den nya apdu-scannern som testar alla upptänkliga APDU:er skulle vara klar efter mötet... eller kanske skulle det ta lite längre tid än så? Gjorde en snabb beräkning som visade att den skulle vara klar om drygt 3,4 årtusenden(!). Jag är då alltid en tidsoptimist. Nu ska jag komma ihåg det här: att aldrig nånsin använda brute force (inte med den datorkraft jag har här iaf). :)

Scanning...

Ok, den kommer inte att vinna pris för mest optimerade kod, men min lilla APDU-scanner funkar. Den skickar kommandon till kortet (till en början testar jag med det enklaste: aktivera Masterfile) och provar med alla de 256 möjliga värden som CLA kan ha. Bara en massa checking error. Mycket lurigt.

Idéer

Godmorgon! Jag började dagen med en jättebalja kaffe och ett avsnitt av "Ah! My goddess" samt en promenad i kylan med ett bra soundtrack i lurarna ("Slow pain of water" med "I, parasite" är nog något av det vemodigaste och finaste man kan börja en vintermorgon med). Skönt att få lite frisk luft och rensa tankarna. Idéerna brukar komma då.

Det slog mig plötsligt att jag har fel CLA! Det sista jag gjorde igår var att jag testade "Smart Card Toolset" som är ett verktyg för att bygga APDU:er (såna där små datapaket) och inte ens den lyckades göra Masterfile aktiv. Den borde ju bygga fungerande paket även om jag kanske inte gör det när jag byggde egna. Det enda den inte kan veta är CLA, det är typ som en postadress man skriver på paketet. Fel adress och det kommer inte fram. Nu måste jag alltså kolla vilken CLA som är rätt för mitt kort. Det finns ett verktyg för det i ToolSet, men det kan jag inte använda för det är bara en demoversion. Så, be min avdelning att köpa in fullversionen eller knacka ihop en liten APDU-scanner själv? Tja, det sista verkar roligast så det provar jag. Jag kan ju inte sitta och skriva rapport hela dagen, eller hur? *smiter undar det teoretiska* ;)

Påminn mig: om att det är gruppmöte med en av mina projektgrupper kl 13. Inte missa.

Checking error

Nämen fy! Enligt den här är alla svaren jag får felmeddelanden. Det innebär att Masterfile inte görs aktiv... men jag får ju kontakt med kortet och kan plocka ut dess ID-information (det ser jag på skärmen, svart på vitt). Mycket skumt. Det ena implicerar tydligen inte det andra. Åter till ritbordet för mig. Vad jag nu väntar på (förutom att våren ska komma) är ett: "97" eller ett "144" (i bilden jag länkade till står det 61 och 90, men det är skrivet hexadecimalt, vem sa att det skulle vara enkelt :).

Hursomhelst, jag har jätteroligt när jag provar mig fram. :) Imorgon ska jag dock *rys* skriva rapport och *dubbelrys* leta upp datablad att läsa så att jag får veta hur man ska göra. Förresten, jättemysig radiostation med lite brittisk pop och annat lättlyssnat finns här. Skönt för öronen (spciellt mina som är vana vid lite mer oväsen).

Tjejen som kunde prata med kort?

Vi pratar inte samma språk, jag och smartkortet, det är uppenbart. "103" säger det glatt när jag gör Masterfile aktiv. "110" blir svaret vid läsning och skrivning av delar av Masterfile. När jag lägger data någon annanstans (om det nu är utanför den där huvudfilen, eller längre fram i den, det vete katten, det ska jag ta reda på) säger den också 110. Jag hoppas att det betyder "Ok". :) ...fast vid läsning av filer vill jag iofs inte att den bara ska säga ok, då vill jag ha data också. Ju. Nåväl. Läsning av det data jag lade någon annanstans gav ett surt "106 -120" och då hade jag ändå följt standarden som universitetet i Michigan hade för sina studentkort för sju år sen. *s* Testade på ett annat sät som kändes mer javakort-aktigt och modernt och fick "103" som svar. Det var lite oväntat. Så, vilket av följande föredras:
  • "Nu har jag skrivit här. Läs upp vad det står!" Svar: Blörk!
  • "Nu har jag skrivit på ett annat sätt här. Läs upp vad det står!" Svar: Din fil är aktiv!
Det första är obegripligheter, det andra är goddag yxskaft. ...men kortet svarar iaf, och det tar emot mina paket! Jippie! :) Ett litet steg för mig, ett ännu mindre för mänskligheten, men det kommer flera steg, jag lovar.

0x3F väntar på bättre tider

Jag har tillbringat förmiddagen med APDU-specificationer och upptäckt att det varierar en del mellan olika kort hur man bör bygga dessa små datapaket. Tyvärr sitter jag med ett Javakort och i dess manualer hyllas JavaCardApplets, d.v.s. små program som kör på kortet. Läsa och skriva rådata kan man också göra till såna kort, men det är inget som tas upp i böcker och artiklar eftersom de bara vill hylla sin fina applet-teknik överallt... Får ta och leta vidare, eller gå lite på känsla. Så stor skillnad verkar det ju inte vara mellan olika korttyper. Jag har iaf hittat Masterfile och kan göra den aktiv så att den sitter och väntar på data eller på godot eller nåt. ;)

Vic var världens gulligaste och kom med semla till tiofikat. Tack! Det var precis vad jag behövde. :)

Hitta filen!

Det som är bra med att blogga är att om jag säger att jag ska göra nåt så är det lixom offentliggjort och då måste jag ta och göra det sen. :) Så, idag ska jag hitta en fil på smartkortet som heter Masterfile och där ska jag lägga lite data (0xFF är mitt favoritdata, det lägger jag in). Hoppas det går. Jag hör av mig och berättar sen, så var inte oroliga, det kommer en fortsättning. ;)

Ett litet paket med data!

Här sitter jag och bygger små datapaket. Istället för att förgäves försöka få högnivåfunktioner (tänk er nåt i stil med att man skriver kort.skrivDataTillKort("Jag heter kaprifol"); och så gör programmet det) att fungera under det något åbäkiga OpenCardFramework med extra små PCSC-grejer i så har jag lärt mig att använda Jaccal som jag trodde skulle ha dessa högnivågrejer inbyggda, men icke.

Jaccal är väldigt mycket mer back-to-basics än vad jag kunnat tänka mig. Det har bara en bråkdel av vad OpenCardFramework har, å andra sidan funkar det utan att trassla. Jag har alltså slutat drömma om skrivDataTillKort-funktionen utan bygger min egen genom att konstruera små datapaket som kortet förstår och skicka iväg dem ett efter ett och vänta på svar. Det är inte det lättaste, och de manualer jag har tillgängliga lämnar en del övrigt att önska.

Jag vill bara påpeka att saker och ting ändå går bra. Jag kommer framåt och följer min veckoplanering (den är nåt i stil med "Sucka över OCF, lär dig skriva paket, trassla med läsning/skrivning" och mina "överordnade" tyckte att det var en bra planering, genomförbar och så).

Nu ska mitt kort få vila en stund. Jag har kastat så många trasiga datapaket på det att det måste tröttna snart. :) Ska ta en kopp svart kaffe och ett äpple till fika. Det blev en god brownie som efter-lunch-fika för att fira att... tja, att det är måndag eller nåt, så nu får det allt bli nyttighetsfika.

Dokumenterat

Hurra! Jag har hittat dokumentation till Jaccal! I Javadoc-format också, mitt favoritsätt att läsa manualer på. Lyx, lyx. Nu slipper jag gissa mig till saker och ting.

Jodå, det blev ett tiofika med Vic. Fattas bara annat. :)

Hemliga koder

Hur ser ditt varumärke ut? Det kan du ta reda på här. Om mig står det att jag är lyhörd, konstnärlig och generös. Eget skryt luktar illa, så jag törs inte hålla med (men nog är det så det är ändå ;).

Nu pluggar jag krypto inför tentan som är i mitten av mars. Det slog mig plötsligt hur länge sen det var jag läste kursen, men det börjar komma tillbaka ju mer jag läser. Läskigt mycket matte också. Tror att förkunskaper i abstrakt algebra rekommenderades. Eh, det finns saker jag är bättre på än algebra, men det ska nog gå ändå. Jag minns att vi hade roliga labbar i kryptoknäckning. De delarna av kursen uppskattade jag mer. :)

Då tar jag mitt data och går

Jaccal var roligt att jobba med, men helt utan dokumentation vad det verkar. Det gör det hela lite svårare, minst sagt. Tack och lov var det ett open source-projekt så det finns (odokumenterad :) kod att titta på. Alltid nåt. Känns lite som att ta språklektioner på det språk som lärs ut, i början är det omöjligt, sen tror man sig har förstått. :)

Håller just på att ladda över filer till min lilla minnespinne så att jag kan gå hem. Fredagsfikat idag var förövrigt ypperligt ordnat som vanligt. Länge leva Marjos kladdkaka! (Men LadyFrost, vi skippar lättgrädden och tar riktiga grejer nästa gång, eller hur? :)

Jaccal

Titta vad jag har hittat! Jaccal! Det ska tydligen vara bättre att jobba med än OpenCardFramework som jar sliter med. Tyvärr är dokumentationen i det närmaste obefintlig, men jag försöker klura ut vad som är vad efter förmåga. Spännande text av Jaccals skapare finns här. Om du skulle glömma vad du heter nån gång så kan du läsa ut det från ditt kreditkort med hjälp av en kortläsare och 20 kilo kod, tydligen. *s*

Nu ska jag gå och omvandla en inlämningsuppgift till pdf-format och maila in den. Sen ska jag traska över hela uni för att få tag på en CD-skiva med viktigt innehåll... och så ska jag äta korvgryta. :)

Tidigare inlägg Nyare inlägg