Säkerhetsfunktioner i Javascript

Javascript har utvecklats från att vara ett enkelt scriptspråk som körs i en webbläsare till att bli ett populärt språk som även används på servrarsidan, i desktopapplikationer och i inbyggda system. Javascript i sig är ett mer kapabelt språk än man kanske tror, och dessutom utvecklas mycket, spännande funktioner till Javascript. Bland annat inom säkerhetsområdet.

Techworld och Slashdot berättar att tyska företaget Recurity Labs har utvecklat en implementation av OpenPGP (RFC 4880) i Javascript. Implementationen, GPG4Browsers är i dag implementerad som en plugin till Google Chrome. Med GPG4Browsers går det bland annat att kryptera, dekryptera och signera, verifiera epost samt importera och exportera certifikat direkt i webbläsaren. GPG4Browsers stödjer de symmetriska kryptona AES, CAST5, DES, Blowfish och Twofish, hashfunktionerna SHA (från SHA-1 tom SHA-512), MD5 och RIPEMD-160. Slutligen stöds även de asymmetriska funktionerna RSA, DSA och El Gamal.

Även om GPG4Bwosers i dag är en plugin finns källkoden tillgänglig. När jag tar en titt på kryptofunktionerna ser jag inga uppenbara beroenden till Chrome, utan det ser ut att vara ren, väkommenterad och troligen portabel kod. För att vara kryptokod är den faktiskt ovanligt väl strukturerad och kommenterad. Ser dock inte ut att vara optimerad för prestanda (mycket loopar och funktionsanrop). Koden är öppen kod enligt LGPL.

Ett annat bibliotek som ger kryptfunktioner i Javascript är Stanford Javascript Crypto Library (SJCL). Detta bibliotek är byggt för att vara litet (kodmässigt och RAM-mässigt), vara enkelt att använda samt använda vettiga grundinställningar. De funktioner som tillhandahålls är AES, SHA-256 samt några olika kryptomoder (CTR, CCM, OCB2). Dessutom finns lösenordsfumktionen PBKDF2. Det skall även finnas en experimentell version som implementerar de asymmetriska funktionerna ECDH och ECDSA. SJCL är licensierad antingen under BSD eller GPLv2. Det finns en testsida för att se att en port av SJCL fungerar. Så här såg det ut när jag testade:

Test av SJCL. Notera prestasiffrorna
Test av SJCL. Notera prestasiffrorna

Den sista länken jag vill peka på är en sida som diskuterar slumptalsgeneratorer i Javascript. Den generator som finns i Javascript (definierad i ECMA-262) är inte den speciellt bra. Den duger speciellt inte i säkerhetsfunktioner. Sidan ovan beskriver de tekniska skälen till kvaliteten hos standardgeneratorn samt presenterar en samling med olika slumptalsgeneratorer med bättre egenskaper. Notera att vi i det här läget pratar om pseudoslumptalsgeneratorer (PRNG). Använder du slumptal mycket i dina Javascript-applikationer kan detta vara en sida värd att lägga en stund på. Den kod som finns är BSD-licensierad.

2 reaktioner på ”Säkerhetsfunktioner i Javascript

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>