Kryptering hos den galna kon

6 oktober 2021

Tags
java

Hur jag byggde en krypteringslösning för en bank i Zürich, samtidigt som jag hamnade hos den galna kon i staden

Jag fick ett meddelande från min chef.

Jens, we need you in Zürich. You need to brush up your skill-set in cryptography and hash-generating functions. Then come up with a solution for how to authenticate our monitoring Java agents when they attempt to connect from the DMZ to the monitoring server placed within the trusted subnet.

Det här var för samma företag, jag berättat om i tidigare nyhetsbrev/bloggartiklar. Saken var den att vår primära produkt hanterade applikations-övervakning i real-tid av stora Java EE system. Kunderna fanns primärt inom bank, finans, tele-operatörer och andra internationella företag med mycket stora Java system. Mitt jobb var att bygga kundanpassade monitorerings-lösningar (när standard inte fungerade), samt utföra problem-analyser av krånglande system hos både befintliga och tilltänkta kunder.

Arkitekturen på vårt övervaknings-system bestod av tre skikt. Det första utgjordes av monitorerings-agenter som installerades direkt på en JVM för respektive applikations-server. Det andra av servern, som samlade in mätdata via TCP skickat från anslutna agenter. Det tredje skiktet utgjordes av en Java Swing klient som presenterade aktuellt och historiskt data hämtat hos servern.

Kruxet för denna kund var att dels måste mät-data skickas krypterat och dels måste en anslutande agent kunna autentisera sig första gången den ansluter. Inget av detta fanns i produkten då. Jag åkte över till kunden i Zürich för att sammanställa kravbilden och teknisk information.

Efter första dagens möte med kunden skulle jag bege mig till hotellet. Till saken, hör att jag vid denna tid överlät åt någon annan att boka resa och logi. Jag satte mig på en buss som skulle ta mig till den plats hotellet låg på. Bussen åkte och åkte, längre ut utanför staden och förbi den ena förorten efter den andra. Paniken börja sakta krypa fram. Hur långt bort är det?

Det här var på den tiden det inte fanns 4G och smartphones, så jag kunde inte ta reda på saken själv medan jag satt på bussen. Jag ringde då min fru, förklarade situationen och bad henne hitta ett hotell, vilket som helst, huvudsaken att det låg i centrala Zürich och därför på måttligt avstånd från kunden.

Väl framme vid hotellet hade min fru hittat och bokat ett hotellrum. Så jag ursäktade mig i receptionen och bad dem beställa en taxi, vilken transporterade mig sen till det nya hotellet.

Vilken överraskning! Hotellet hade som tema kossor och allt var inspirerat av detta. Namnet var Crazy Cow. Egentligen var det restaurangen som hette det, men hotellet gick på samma tema och det var kor och komotiv överallt. Hotellet var förvisso enkelt men det kompenserades av dess charm. Hotel Crazy Cow

Under middagen i hotellets restaurang började jag skissa på en lösning. Första steget var en plugin för agent respektive server, som möjliggjorde installation av en socket factory respektive server-socket factory. Eftersom Java API:et erbjuder denna möjlighet, så borde det vara en smal sak att bygga om produkten med detta stöd.

Nästa steg var autentiseringen, vilken krävde kryptering. På grund av exportrestriktioner så fanns inte detta i Java JVM, utan man måste anskaffa detta på annat håll och installera i JVM:en, som en så kallad extension.

Detta var direkt oacceptabelt av kunden, eftersom de signatur-märkte samtliga filer i en JVM för att upptäcka externa förändringar.

Efter en del googlande hittade jag en open-source lösning, med ett för den tiden lustigt namn, nämligen The Legion of the Bouncy Castle. Namnet till trots, så var det och är fortfarande ett mycket kraftfullt och användbart bibliotek för kryptering och signaturer. Jag har använt det flera gånger sedan dess. The Legion of the Bouncy Castle

Med detta som utgångspunkt, kunde sen jag presentera en lösning för kunden och vårt huvudkontor i San Francisco.

Några veckor senare var vår produkt uppdaterade med stöd för socket-factory plugins och jag kunde sen bygga klart min lösning, som en dylik plugin.

När jag senare återvände till kunden i Zürich för demonstration och installation av lösningen, valde jag dock att boka in mig på ett mer reguljärt affärshotell. Men, det charmiga Galna-ko hotellet i Zürich glömmer jag aldrig.

Länkar