Vem måste du lita på?
Ett företag ska utveckla ett system som erbjuder en tjänst till sina kunder. Tjänsten är att en kund ska kunna lagra sina känsliga data i systemet utan att någon annan än kunden själv kommer åt den. Inte ens företaget som tillhandahåller tjänsten ska komma åt det. Här handlar det inte om att göra det krångligt eller bökigt för företaget att läsa kundens data -- det ska vara omöjligt.
"Kryptering! Kunden har nyckeln och företaget bara krypterade data!", tänker du säkert.
...det finns dock ett problem, gränssnittet mot kunden måste vara via en webbläsare (föga oväntat) och någon separat klient (eller Java-applet) duger inte. För att kunna dekryptera data måste alltså antingen (1) användaren skicka nyckeln till servern så att denna kan dekryptera och sedan skicka det till användaren eller (2) dekrypteringen skötas på klientsidan med till exempel Javascript.
I både (1) och (2) kan systemadministratören komma åt kundens data. I första fallet handlar det helt enkelt om att plocka det mellan att det hämtas och dekrypteras från databasen och att det skickas till krypteringsalgoritmen i TLS. (Det kanske räcker med att sätta DEBUGLEVEL=9 i applikationsservern.) I det andra fallet kan systemadministratören manipulera den (Javscript-)kod som användaren ska använda för att läsa sina data.
Om man ska designa ett system där man inte vill behöva lita på sin systemadministratör (p g a outsourcing till exempel) så har man svåra problem att lösa. Vojne, vojne...
--
Stefan Pettersson
"Kryptering! Kunden har nyckeln och företaget bara krypterade data!", tänker du säkert.
...det finns dock ett problem, gränssnittet mot kunden måste vara via en webbläsare (föga oväntat) och någon separat klient (eller Java-applet) duger inte. För att kunna dekryptera data måste alltså antingen (1) användaren skicka nyckeln till servern så att denna kan dekryptera och sedan skicka det till användaren eller (2) dekrypteringen skötas på klientsidan med till exempel Javascript.
I både (1) och (2) kan systemadministratören komma åt kundens data. I första fallet handlar det helt enkelt om att plocka det mellan att det hämtas och dekrypteras från databasen och att det skickas till krypteringsalgoritmen i TLS. (Det kanske räcker med att sätta DEBUGLEVEL=9 i applikationsservern.) I det andra fallet kan systemadministratören manipulera den (Javscript-)kod som användaren ska använda för att läsa sina data.
Om man ska designa ett system där man inte vill behöva lita på sin systemadministratör (p g a outsourcing till exempel) så har man svåra problem att lösa. Vojne, vojne...
--
Stefan Pettersson
Kommentarer
Trackback