FileSender

Veiligheid en stabiliteit staan voorop in dit open-source project voor het Nederlandse onderwijs en onderzoek.

FileSender

In opdracht van SURFnet hebben wij het project FileSender van een aantal nieuwe modules en verbeteringen voorzien. FileSender is een open-source project wat gericht is op gebruikers in het Nederlandse onderwijs en onderzoek. Grote bestanden kunnen gemakkelijk via interne systemen verzonden worden, maar ook gasten kunnen gebruik maken van deze dienst.

Omdat er in het onderwijs en onderzoek met regelmaat gevoelige data verzonden wordt, lag bij ons de vraag om een end-to-end encryptie te ontwikkelen waarmee gebruikers de bestanden versleuteld kunnen verzenden, als ze dit willen. Daarnaast hebben wij ook een zogenaamde automatische ‘buildstraat’ ontwikkeld voor het open-source project.

End-to-end encryptie

Op het vlak van encryptie moesten wij een aantal afwegingen maken. Zo moest de end-to-end encryptie uiteraard stabiel en betrouwbaar zijn, en zonder problemen grote bestanden kunnen decrypten. Omdat Filesender een open source project is, moest echter ook de flexibiliteit behouden blijven om van encryptie-algorithme te wisselen indien dit nodig was. Daarom hebben wij gebruik gemaakt van WebCrypto API. WebCrypto is een encryptie-systeem waarmee in een gecombineerd script meerdere algoritmes ingezet kunnen worden, zoals AES, HMAC en RSA-OAEP.

De encryptiemodule kan worden ingeschakeld indien een gebruiker dit wil. Bij het encrypten moet de gebruiker een wachtwoord meegeven. Dit wachtwoord is de sleutel tot het decrypten van de data. Tijdens het versleutelen wordt de data namelijk in zogenaamde ‘chunks’ van 5 MB gesplitst, en voorzien van een extra regel bytes aan het einde van elke chunk, een ‘checksum’. Deze checksums worden gebruikt ter controle van het ontcijferen. Voor extra veiligheid wordt het wachtwoord met het algoritme SHA-256 gehashed tot een key. Als deze key niet juist is, worden de chunks niet juist ontcijferd en daarmee ook de data niet. Zo kan alleen een gebruiker met het wachtwoord de data ontsleutelen, ook al is het gebruikte algoritme wel bekend.

De encryptiemodule bestaat uit 409 regels geoptimaliseerde code.

Filegrootte

Omdat de browsertechnieken nog niet helemaal up-to-date zijn met wat ons systeem aankan, hebben wij de te encrypten filegrootte beperkt. Browsers moeten namelijk het gehele bestand in hun geheugen plaatsten om de file te decrypten. In de laatste versie van Chrome zit wel de experimentele mogelijkheid om te downloaden bestanden direct te streamen naar de harde schijf in plaats van in het browsergeheugen te plaatsen. Dit zou dus betekenen dat in de toekomst filegrootte geen rol meer speelt. Echter, voor nu ligt de limiet op 250 MB indien de gebruiker encryptie gebruikt.

Automated buildstraat

FileSender is een open source project. Dit houdt in dat programmeurs onafhankelijk van elkaar kunnen bijdragen aan de broncode van FileSender. Echter, dit brengt ook problemen met betrekking tot de stabiliteit en integriteit van de code met zich mee.

Een encryptiemodule die perfect werkt, maar nergens in de browser te activeren is kan nog steeds niet gebruikt worden.

Om hier een kwaliteitscontrole aan toe te voegen hebben wij een geautomatiseerde ‘buildstraat’ ontwikkeld. Voor deze buildstraat maken wij gebruik van TravisCI. TravisCI analyseert het FileSender project en op het moment dat er nieuwe code aan de GIT repository van FileSender toe wordt gevoegd, roept het een scala aan testen op. Zodra deze testen voltooid zijn en elke test geslaagd is, krijgt de nieuwe code het groene licht en wordt het definitief toegevoegd aan de broncode.

De door TravisCI aangeroepen tests zijn ruwweg te verdelen in twee groepen: 1. Backend tests. Dit zijn unit tests die elke functie in de broncode testen. 2. Frontend tests in Saucelabs (Selenium tests). Deze tests simuleren een browser, en klikken kunstmatig elke knop of optie aan die er te kiezen is. Hiervoor hebben wij handmatig de gewenste output per test geprogrammeerd.

De combinatie van front- en backend tests maakt dat de volledige code niet alleen op werking, maar ook op daadwerkelijke bruikbaarheid wordt getest. Een encryptiemodule die namelijk perfect werkt, maar nergens in de browser te activeren is kan nog steeds niet gebruikt worden. Met TravisCI kunnen we dergelijke problemen ondervangen en is het FileSender project dus verzekerd van stabiele code.