BankID vs OpenPGP, eller “den här hexagonen fungerar nog bra att rulla saker på”
Tuesday, 3 November 2009
Ett problem med internet är att det är mycket svårare att verifiera någons identitet när man inte träffas. Egentligen är det samma problem som finns i kommunikation utan dator; hur vet man att den man pratar med verkligen är den som han eller hon utger sig för att vara? Vid tillfällen där det är viktigt använder vi någon form av legitimation, som i princip är ett dokument från en tredje part som intygar att personen är den den utger sig för att vara.
Liknande tekniker finns även för datormedierad kommunikation; istället för ID-kort används kryptografiska nycklar som representanter för olika personer. Dessa nycklar genereras av användarna själva, vilket gör att de inte kan garantera användarens identitet bara som de är.
För att hantera det finns det möjlighet att med sin kryptografiska nyckel gå i god för att någon annans nyckel verkligen tillhör den faktiska personen. Det betyder att om jag har fått en nyckel som jag vet är äkta från Alice, och sen får en e-postad nyckel från Bob som har en signatur som garanterar äkthet från Alice så kan jag (om jag har valt att lita på Alice omdöme i frågan) vara säker på att Bobs nyckel verkligen tillhör just Bob. Och, vad bättre är, det kan min dator också. Automatiskt.
Runt 2001 bestämde sig några driftiga typer för att starta ett konsortium för en gemensam standard för identifikation på nätet, det som blev BankID. På något sätt lyckades de lura på både banker och vissa myndigheter, exempelvis CSN, sin teknik, och resten är, som de säger, historia.
Vad dessa entreprenörer (och jag använder här ordet, som alltid, i smädande bemärkelse) inte verkar ha lagt märke till är att det redan fanns standarder för kryptografisk signering och autenciering, nämligen OpenPGP. Och, förstås, de släppte aldrig någon beskrivning över denna tilltänkta “standard”. Istället säljer de in den hos företag och myndigheter.
Men ett ännu större problem med att deras standard är hemlig, är för oss klienter. I de äldre versionerna av BankID kördes klientmjukvaran som en Java-applet i webläsaren på de websidor som behövde använda det för autenciering. Denna Java-applet var ofri, och fungerade bara ihop med ofritt java. Med tiden blev de fria Java-implementationerna dock bättre, och Sun släppte till slut en hel drös kod.
Till slut fungerade nästan BankID med bara fri programvara (förutom den ofria appleten). Då bytte de system. Nu behöver man ett externt “säkerhetsprogram”, som finns färdigkompilerat för ett fåtal plattformar. Den som råkar befinna sig utanför denna mängd, exempelvis om man har en gammal mac med GNU/Linux eller kör någon BSD-smak utan Linux-emulering, har inte en chans.
Detta “säkerhetsprogram” är givetvis ren ormolja. “Säkerheten” ligger över huvud taget inte i klientprogramvaran! Möjligen finns det vinster att göra på att inte ha inmatningen inuti en webläsarruta, utan i ett externt program, i termer av att det blir svårade att phisha lösenord.
Men det finns långt större säkerhetsproblem i att koden inte finns tillgänglig. Det är alltid en dålig idé att förlita sig på så kallad “security through obscurity”, det vill säga säkerhet som bygger på att en anfallare inte får veta hur ett system fungerar. Systemet blir då ett slags extra lösenord till krypteringen, som dessutom måste skickas med.
Allt anfallaren behöver göra är att studera hur systemet ser ut och på så sätt så småning om pilla ut lösenordet, och sen ta sig förbi skyddet. Givetvis behöver inte ofri programvara ha såna brister, men den uppmanar till det mycket mer än en öppen standard–och vi kan ju inte veta!
Så hur skulle en lösning av ID-problemet se ut med en OpenPGP-liknande modell? Man kan tänka sig olika stadier av decentralisering, men i princip skulle det gå till så att användaren genererar en nyckel som personlig identifikation, får den signerad av sin bank (eller annan organisation) genom en kanal som gör att denna bank eller organisation kan gå i god för nyckelns äkthet.
Användaren använder sedan nyckeln för att autenciera sig hos CSN, eller var han eller hon nu vill autenciera sig, och CSN tittar på nyckeln och ser att den har en giltig signatur från banken (som är deras gemensamt pålitliga tredje part). Man kan tänka sig att bankernas nycklar som de signerar med i sin tur är signerade av, säg, statens banktillsynsmyndighet, som går i god för att de är vad de utger sig för att vara.
Då kan banker dyka upp och försvinna, och allt CSN (eller andra organisationer som vill verifiera någons ID) behöver göra när de presenteras för en nyckel signerad av någon organisation de inte känner igen är att hämta denna organisations nyckel och se efter om den är signerad av statens banktillsynsmyndighet, som då går i god för att denna organisation verkligen har rätt att utfärda ID:n.
No. 1 — November 3rd, 2009 at 00:44
[...] http://eval.nu/blog/2009/11/03/bankid-vs-openpgp-eller-den-har-hexagonen-fungerar-nog-bra-att-rulla... a few seconds ago from Laconica Tools [...]
No. 2 — November 6th, 2009 at 16:00
Men om du nu är så himla standards compliant, lägg in att man kan verifiera sig med OpenID på eval.nu-bloggen!
No. 3 — November 6th, 2009 at 19:55
Det är gjort. Jag hade faktiskt glömt det!!!