Öva, öva och åter öva

Godmorgon! Då var man på plats och redo för en ny dag på exjobbet. Min kontorskaktus börjar bli rätt less på "Smart Card Security" nu, själv tycker jag att det är ett spännande ämne och en kärnfull titel (givetvis med en lång underrubrik som jag inte kan uttala riktigt ännu). Ska ta och öva lite mer, men sen ska jag bara ta det lugnt och knacka kod och läsa artiklar. Gäller ju att vara utvilad inför sin långresa. Jag har laddat min lilla musikspelare med Grendels "Soilbleed" och andra godbitar så att jag kan skruva upp volymen och glömma alla bussfjortisar som kommer att sitta och prata i telefon precis bakom mig. Jag vet det redan innan. Bussfjortisar dras till mig precis som borrande människor dras till Elisabeth och blir hennes grannar. ;) Det är typ ödet.

Trofast publik

Idag gör jag slag i saken och vädrar mitt kontor! Här luktade mer apelsin än vad som är tillrådligt. Idag ska jag fortsätta att förbereda min presentation. Imorgon ska jag nämligen lägga fram halva exjobbet. Det är nog inte så man brukar göra, men min examinator var nyfiken på vad jag höll på med och hennes kollegor hade också nytta av en snabbkurs i smartcard-programmering, tydligen, så jag får se det som bra övning inför slutpresentationen som jag ska ha till sommaren. Innan jag sätter igång att föreläsa för mina krukväxter (de är en utmärkt övningspublik) så ska jag ta och snygga upp lite kod som jag satt och pysslade med igår. Tror jag ska kommentera den lite också, det hör ju till god sed. Kanske kan krukväxterna få hålla en kodgranskning? *fniss, fniss* Nå, dags att jobba på!

Det börjar med ett J

Det visade sig att OpenPlatforms funktioner för att skapa säkra tunnlar och liknande används inne i applets, inte för att skicka applets genom. Det senare går säkert, men det är inte dokumenterat någonstans. Det verkar som om man skulle kunna använda JOpenPlatform (observera J:et) istället, för att utveckla sina egna javaapplikationer som kan skicka applets och APDU:er till ett smartkort. Varför man skulle vilja göra det är ju lite oklart. De flesta nöjer sig med att skicka sina applets med GPshell sitälelt för att göra något eget... och tänker jag efter så ska ju inte mina användare få skicka applets (det är det sista de ska få göra!). Däremot ska de få skicka APDU:er och då tycker jag inte att de ska behöva använda GPshell utan istället mitt lilla, användarvänliga program.

Snart ska jag sticka iväg på gruppmöte, men innan dess tänkte jag läsa in mig lite på JOpenPlatform och se om det är nåt att ha. Funktioner med namn som
OPSP_GET_DATA_EF_PROD_DATA_PROFILE_WITH_PROFILE_VERSION
skrämmer mig en smula.

GPSystem

Det var roligt att att få reaktioner på det lilla aprilskämtet. De flesta förstod efter att ha läst några rader att det var på skoj, men en viss familjemedlem blev rejält uppskrämd. Jag är inte heller den person som bara tar sitt pick och pack och sticker iväg sådär, så det måste ju ha kommit som en chock. :) Nog för att det skulle vara skönt att göra nåt helt nytt och jag har fått erbjudande om att sova på en nätväns golv tills designerkarriären tar fart, så varför inte, egentligen? ;)

Just nu sitter jag och sliter med Global Platform. Förmodligen gör jag något jättetrivialt fel och de är ju de svåraste att hitta. Jag har en "vanlig" javaapplikation med main-metod och allt. Den skapar en instans av mig egen klass GPtest (som ligger i en egen fil). GPtest skapas fint trots att den inte har någon main-metod (däremot en konstruktor, förstås). Sen kommer problemen när GPtest ska skapa en instans av GPSystem (klass som finns i Global Platform). Jag får felmeddelandet att GPSystem saknar main-metod. Änsen, bara den har en konstruktor borde det väl vara lugnt, tycker jag? Jag har även provat att bara använda metoder i GPSystem utan att skapa en ny GPSystem, men samma problem uppstår då. Det var ett tag sen jag kodade "normal" Java, så jag kan ju ha missat nåt, men det känns som om jag har gjort som man brukar. Får väl ta och läsa Javadoc och se om man kan komma runt det hela på nåt sätt.

Ring ring!

Psykologiexperimentet som ska göras kommer att handla om närminnet, närmare bestämt ska vi testa folks sifferminne. Mitt är selektivt. Telefonnummer minns jag aldrig, inte människors ålder heller. IP-nummer däremot brukar jag komma ihåg. Efter föreläsningen ägnade jag helhjärtat åt mina inlämningsuppgifter i användbarhetskursen. Vi designar ett telefonsystem som vi sedan ska vända ut och in på och analysera ur alla tänkbara vinklar. Jag tog chansen att illustrera det hela (för tydlighetens skull, inte bara för att jag tycker att det är så roligt att använda min ritplatta :). Nu ska jag bara vila mig och ta det lugnt. Imorgon blir det både exjobb och föreläsningar och sen kanske nån vill hänga med på synthfest på kvällen? Verkar som om "de vanliga" har fullt upp med studier, vilket jag nog också borde ha... egentligen. :) Tja, en lugn fredag funkar också, men inte nästa vecka för då smäller det!

image48
Fjärde generationens telefoni gör livet lyckligare!

Bli min labbråtta!

Nu ska jag snart sticka iväg på ett seminarium om experimentell metodik. Det låter spännande, tycker jag, och tänker osökt på forskare i vita rockar och på genmodifierade råttor som rymmer. Iofs tror jag att vi ska experimentera med varandras hjärnor (låter också läbbigt!) och det handlar om kognitiv psykologi, så att låta kurskamrater klura på tankegåtor och mäta hur fort det går är nog mer sannolikt det vi ska göra, men ändå. :)

Har suttit och klurat på säkra kanaler med GlobalPlatform i nån timma nu (måste justera min sömnrytm så jag kommer upp tidigare) och har på känn att det går att göra kanaler som är lite svårare att sniffa än den som är standard i GPshell. Iofs har jag lyckats knåpa ihop krypterade APDU:er nu, så
Eve kan gå och dra nåt gammalt över sig! ;)

Dagens...
Kafferumskommentar: Att jag borde läsa källkoden till Mozilla. Uh oh! De har visst inte släppt plugin-idén ännu. Jag sa något om javascript vs säkerhet och gjorde mig redo att springa iväg, men tog mig i kragen, lovade att kika på det, men till en början bygga ett fristående program innan jag gick på plugin:andet. Det var tydligen helt ok. :)
Eftermiddagsplan: Hemstudier. Jag har ett antal deadlines inom kort och behöver ägna en eftermiddag åt mina kurser. Även om det är väldigt roligt att sitta med Global Platform så finns det ju annat som måste tas om hand.

Sånt jag gör

Yay, jag har krypterat en liten buffer med data i! :) Det kan tyckas trivialt, men de sätt som används i exempelkod är inte alltid anpassade till JCOP-kort, så jag fick ändra och testa lite olika saker. Lagom till 10-fikat bjuder jag på en liten kodsnutt. Den gör DES-kryptering av ett APDU-paket och ska ligga i process-metoden. Glöm inte felhanteringen! :)

byte[] buf = apdu.getBuffer(); //Här lagras APDU:n som man skickar till kortet
//Längden på datat som ska krypteras räknas ut
short Lc = (short) (buf[ISO7816.OFFSET_LC] & 0x00FF);
//Kryptofunktionen initieras, tdesKey är en 16-bitars bytearray
desCipher.init(tdesKey, Cipher.MODE_ENCRYPT);
try {
//transientBuffer är en bytearray för utdatat, deklarerad högst upp i klassen
Lc = desCipher.doFinal(buf,(short)ISO7816.OFFSET_CDATA,Lc,transientBuffer,(short)0x00);
apdu.setOutgoing(); //Nu ska här skickas utdata!
apdu.setOutgoingLength(Lc); //Det ska vara Lc långt
//Varsågod, här kommer det krypterade datat!
apdu.sendBytesLong(transientBuffer,(short)0x00,Lc);
} //Här kommer det felhantering sen, det ska man alltid ha. :)

Sommar?

Näringsrik lunch med det sedvanliga sällskapet och sen en liten fika ute i det fria blev det. Vädret är verkligen superfint, varmt och skönt. Det var många studenter som lunchade utomhus eller bara gick ut en sväng för att få lite solsken. Från mitt fönster ser jag just nu en grupp reglertekniker (vild gissning) som släpat ut en whiteboard och allt till innergården för att kunna konferera utomhus. Det ser skönt ut. :)

Jag fick bra handledning innan lunch och vet nu precis vad jag ska göra fram till sommaren. Jag ska bygga System B (agent på datorn, applet på kortet) vilket jag redan har kommit halvvägs med. Sen ska jag göra riskanalyser av de tre system jag har designat samt att jag ska diskutera runt identitetshantering och risker relaterade till detta. Chansen var rätt stor att jag skulle bli klar i juni, tydligen, och det tror jag också nu när jag har tydliga mål och de svåraste bitarna redan är klara. Nu ska jag fortsätta med krypterandet av APDU:er och sen ska jag ta en titt på Global Platform som kan ge mig möjligheten att skriva hela min agent som ett javaprogram utan vare sig bat-filer eller andra underligheter.

Vad hittar vi väl där?

Det slog mig att min agent måste göra två saker: dels fylla i formulär och dels prata med kortet. För de olika sysslorna lämpar sig helt olika tekniker så frågan är om man kan få agenten att vara ett enda program. Efter att ha spånat och skissat kom plötsligt en lösning farande, en sån där lösning som man egentligen ska vifta bort. Den bestod av (håll i er nu) en bat-fil (såna där som min pappa och jag skrev på 80-talet), ett grafiskt litet javaprogram, tredjepartsmjukvara för formulärifyllning (eller hemknackad, den litar jag nog mer på), plattformen GPshell, en tempfil som måste städas bort sen, nån signerad jar-fil kanske... och sen kan man toppa det med en drös javascript om man vill göra ett plugin av det. Hu, så hemskt! Iofs kommer det att se snyggt ut för användaren som ser ett grafiskt gränssnitt av något slag och inte allt som dväljs där under. Toppen av ett isberg är bara förnamnet, men så får det väl bli om min miljö ska stödjas. Jag tror att det kan bli rätt ok, men det gäller ju att hålla tungan rätt i mun med så många delar. (Sluta nu genast att fnissa åt tempfilen, datat i den kommer att vara krypterat så du har ändå ingen chans, men jag vet, jag ska försöka undvika att ha en sån. :)

Idag...
  • Åt jag på lunchrestaurang för att det är måndag och då behöver man göra nåt lyxigt
  • Firades Superroots födelsedag med glass (han fyllde jämnt delbart med 2)
  • Fick mina kontorsväxter grönt te att dricka för det tycker de om
  • Åtog jag mig att handla två kilo smör + resten till våffelkvällen imorgon (de på snabbköpet kommer att stirra och då ska jag se ut som om jag har tänkt att äta allt själv, "160 våfflor ja, det var bra så, jag är lite fikasugen idag". :)

I ottan

Morgonstund har inte alls guld i mund! Vem vill stiga upp en timma förtidigt när det är iskyla och dimma ute? Inte jag iaf, men jag fick i mig mitt morgonkaffe och hann springa ett ärende på vägen... och nu är jag ju här, på exjobbet. Resten av stan verkar ligga i dvala fortfarande. :)

Dagens plan: Rita detaljerade systemskisser, göra en hemuppgift, gå på psykologiföreläsning (om experiment tror jag visst), ha ett litet möte och sova i en viss förenings mjuka soffa. :)

Egen kod och andras fulhack

Efter föreläsningen som var en snabbgenomgång av hur neurala nät kan lära sig att känna igen bokstäver satte jag mig och läste källkoden till några Firefox-plugins som skulle hantera lösenord och certifikat och sånt. Jag hade tänkt mig att det vore smidigt att göra min smartcard-agent som ett webbläsarplugin också, men upptäckte till viss fasa att man skriver de små sakerna i JavaScript! Om jag nu är så illa tvungen att ha något som omvandlar APDU-paket till textsträngar (hemliga, viktiga sådana) så vill jag inte att det ska vara ett litet script som skriker ut till hela världen vad det gör. Hellre en JavaApplet då. Det är inte bra det heller, jag vet, men det är iaf bättre.

Kort sagt: Jag har hittat en massa spännande anfallsvinklar och hoppas på att i nästa vecka även komma på ett sätt att bygga en agent som inte är sårbar när det gäller allt detta.
Sen undrar jag bara: Om man bygger ett plugin som man vill att försvarsmänniskor ska kunna lita på, varför har man då små kommentarer i källkoden där det står saker i stil med detta är en fullösning och jag vet inte varför detta inte funkar riktigt. Plocka bort era fula fixme-taggar och skäms, jag läser er kod! *hihi*

Svart blomma
Ha en lyxig fredagskväll!
Själv ska jag se "The Game" på trean. Lika spännande varje gång!

Dagens bevis

Dags för lite dagens...
Tiofika: Sockerfri cappuchino, nån måtta på onyttigheterna får det faktiskt vara
Föreläsning: Lite kognitiv modellering efter lunch. Självlärande nätverk tror jag det handlar om
Läsning: Den här
artikeln om elektronisk bevisföring. Kom ihåg att om någon har ett antal smarta kort nära sin dator så är personen utan tvekan en stor bov. ;) Det ligger ändå något i det. Jag tror inte att folk har förstått hur sårbara smarta kort är och hur vanligt förekommande de faktiskt är. Jag är säker på att just du har ett antal smarta kort där hemma: Ett till digital-TV:n, ett i plånboken, ett i telefonen... kanske ett som passerkort på jobbet också. Det finns inga smartkortvirus ännu, men tro mig, det kommer. Ett smartkort är precis som en mobiltelefon: inget annat än en sårbar dator med kassa tangentbordsmöjligheter. :)

Hur man än gör

Det är inte klokt att det redan är fredag igen. Det känns som om det var fredag igår. Gahh, jag behöver minst tre parallella liv för att hinna med alla mina åtaganden. Disigt och träligt var det ute också. Så pass att mina glasögon immade igen när jag cyklade till uni. *gnäsar och gnäller*

Hursomhelst, nu är det slutgnällt! :) Det slog mig igår alldeles innan jag skulle somna, att jag genast ska sluta krångla med kryptering av kortdata. Hur jag än förvränger datat på vägen till PC:n måste det göras till klartext innan det läggs in i ett formulär. Jag ska alltså skicka lösenord och användarnamn från kortet och peta in det i ett inloggningsformulär automatiskt så att jag slipper skriva in det själv, det är hela grejen. Även om datat är oläsligt på vägen till PC:n så måste det göras om till klartext av något litet program och *krack* där sprack säkerheten. Små javaprogram som hanterar känsliga data är mian favoriter... när jag är elak testare, inte när jag är snäll programmerare som jag är idag. Hmm... Om jag skickar datat i klartext då, fast i en sån där "säker" tunnel som jag per definition inte kunde ha sniffat i förrgår, och sen petar in det direkt i formuläret utan att det går via något program? Nej, det går inte heller, för kortet skickar ju sina egna datapaket som måste översättas. Det behövs en mellanhand hur jag än gör. Jag tror såhär: Om jag använder en innbyggd kortläsare som inte är lika trivial att avlyssna (fast det vet jag ju inte, jag bara hoppas) och sen ser jag till att lägga mycket krut på att agenten (den lilla mottagaren av data som ligger på PC:n) inte gör nåt dumt. Jo, det är nog den bästa taktiken. Dags att sätta igång!

Kartläggning

Jag har onekligen ett omväxlande exjobb. Dagens uppgift var att titta på existerande smartcardlösningar för att spara lösenord till webbtjänster. Det var länge sen jag dök ner i shareware-träsket senast och nog finns det en del att hämta för den som har tid att leta. Vad man kan sluta sig till är att smarta kort inte är något som används av gemene man så särskilt ofta. (Hittade ett enda program som verkade vettigt.) Vill jag titta på system som kan vara intressanta att jämföra med min lösning eller värdiga att anfalla, ja då får jag nog titta på de system som större företag och myndigheter använder sig av. Antar att Tucows är fel ställe att leta på då. ;) Hmm... Undrar vilket företag som vill låta mig dissekera deras system. Någon frivillig där ute? :)

Kortbugg
Hjälp, en läskig bugg!

Marknaden

Förmiddagen har ägnats åt fyra timmars föreläsning om hur man skriver en marknadsplan. Det var spännande hela tiden vilket tyder på en bra föreläsare för mitt intresse för ekonomi och försäljning brukar vara ganska lågt i vanliga fall. Dags att ändra på det om man ska starta eget en vacker dag. Planen för eftermiddagen är att exjobba vidare, boka in lite möten och sedan köpa en begagnad psykologibok av en datormänniska som ville bli av med sin. (En vinna-vinna-situation! :) För er information vill jag upplysa om att jag åt fullkorns-cous-cous till lunch. Höjden av nyttighet och dessutom gott. :)

När militärer surfar loss

Jag har nu ägnat mig åt att leta runt på nätet efter webbläsarplugin som använder sig av smarta kort för att spara lösenord till webbsidor. Problemet är just det där med smarta kort. Tänker man bort det så finns det ett antal lösenordshanterare där ute. Det här t.ex, IntelliLogin. Jag har inte provat det så jag kan inte uttala mig om dess funktioner, men hör bara: det är "well-behaved" och det har "some serious Artificial Intelligence". *fniss* Jag vill helst inte ha program som är intelligentare och mer väluppfostrade än jag själv är, men annars så. :)

Sen hittade jag det sötaste lilla Firefox-plugin också: DoD-configuration. Med det installerat törs även folket på amerikanska försvarsdepartementet ge sig ut och surfa. Självklart har de sina smarta kort i högsta hugg. Det är rätta takterna det! :)

Småskrämmande upptäckt

Ok, nu kommer ett vulgärt uttryck här, men det är en nödvändighet: Shit pommes frittes! Ni kan inte ana vad jag just upptäckte efter lite noggrannare granskning av vad USB-sniffern gav mig. Data från kortet (vi pratar lösenord nu) skickas i klartext, fastän datat påstås vara krypterat. Undrar om det alltid är så, eller om det finns ett bättre sätt att skicka data på. Antar att det där bättre sättet är något jag ska komma på... attans också. :) (Det här är förmodligen något som redan är allmänt känt, men nu vet även jag om det. För mig är det en stor upptäckt.)

Riskfyllt

En ny dag gryr och jag är redo att exjobba. Hittils har jag mest ordnat med passerkortsärenden (plastkort tar upp en stor del av mitt liv, uppenbarligen), men nu ska jag fortsätta med min riskanalys. Den ser lite tunn ut än sålänge. Jag har fått förhållningsorder som ser ut ungefär såhär: skriv en första riskanalys, kolla upp om några vanliga webbläsare stöder smartcards som lösenordssparare, undersök om det finns smartcardlösningar som kan klassas som någolunda säkra... och när jag har gjort det mailar jag och berättar vad jag har gjort. Jag snöar inte in på nåt suspekt sidorspår och sitter med det i veckor. Typiskt, jag som har kommit på en del kul idéer till CardTrojan. För att sätta upp en "säker" överföringskanal till kortet skickar man kryptonycklar i klartext (ja, hemliga nycklar!) så det borde inte vara så svårt att fånga upp en sån, avbryta den pågående överföringen och slänga upp sin egen lilla trojan-applet på ett smartcard. Sen ligger den där och är dum.

Nåja, riskanalys var det. Sen ska jag försöka få tag på en kursbok i kognitiv psykologi. Kursen verkar jättekul, men det är en projektkurs. Jag läser nu tre såna utöver exjobbet. Inte för att skryta, snarare för att varna: gör inte så, det skapar en viss press. :) (Dock är det roligt att läsa en massa spännande saker på samma gång, men man ska ju inte göra allt som är roligt heller. :)

Skrivbordsspion

Efter en matig lunch och en liten skvallerfika med Vic ska jag nu återgå till att anfalla mitt smartkort. Innan lunchen fick jag idén att börja avlyssna trafiken till och från kortet. Nu är det iofs ingen nätverkstrafik som genereras, men jag tänkte att äsch, man kan nog använda nätverksscannern Ethereal ändå. Sagt och gjort och oj, vad mycket data som skickades hit och dit! Det måste ju beror på kommunikationen med kortläsaren, för jag använde ju inte nätverket alls. Jag bara... lyssnade på webbradio. Ojsan. :) Nåväl, med den avstängd hände det inget spännande, så jag bytte taktik och skaffade en USB-sniffer istället och lyckades spela in kortläsarens dataskickande till och från PC:n. Nåt vettigt sa den dock inte. Det hela är ju krypterat (med DES änsålänge, ska fixa nåt bättre). Nu ser jag iaf vad som skickas och kan göra lite roliga experiment. Kommer att bli kul, tror jag. :)

Anfall är bästa försvar

Det här med att göra riskanalyser är ganska roligt egentligen. Vad man gör är att man försöker komma på det värsta tänkbara som kan inträffa och sen hitta lösningar till de problem som kan uppstå. I ett stort programmeringsprojekt i en kurs jag gick för något år sen satt min grupp och spånade fram risker och riktigt levde oss in i en situation då: "Företaget vi jobbar åt har gått i konkurs, handledaren är oanträffbar, halva gruppen är bortrest, resten är osams, mjukvaran buggar, hårdvaran kan inte levereras, rapporten har vi råkat radera, vår backuppmaskin har brunnit upp och simulatorn är inte kompatibel med våra PC:ar". Så, säger jag till gruppen, "om detta händer, vad gör vi då?" Det är tyst en stund, sedan svarar vår systemkille lite försiktigt: "Gråter?" :)

Nu har jag alltså listat vad som kan hota min stackars smartcardlösning och kommit på några skydd, men så tog fantasin slut och då förstod jag att jag tänkte på fel sätt. "Hur skyddar jag den här?" är en tråkig fråga. "Hur anfaller jag den här?" är betydligt roligare och kreativare... och jag sitter ju i labbmiljö så jag får göra vad helst jag vill. Tror att jag ska skriva en liten smartcard-trojan om det går. :)

Tidigare inlägg Nyare inlägg