Open Source im professionellen Einsatz
Linux-Magazin 09/2013
© feverpitched, 123RF.com

© feverpitched, 123RF.com

HTML 5 zwischen Verschlüsselung und DRM

Schlüssel fürs Web

,

Im Rahmen von HTML 5 erhalten Webbrowser die Fähigkeit, Inhalte zu verschlüsseln. Das Sicherheitsfeature hat sich nun zum Politikum entwickelt, denn die Anbieter von digitalen Inhalten möchten es für Digital Rights Management (DRM) verwenden. Hier ein freier Blick auf die Technik.

786

Die modernen Webtechnologien, die HTML 5 zusammenfasst, stehen eigentlich für Offenheit. Sie ermöglichen Webanwendungen in HTML, Javascript und CSS, die ohne proprietäre Fremdkörper wie Adobe Flash oder Microsoft Silverlight auskommen. Doch ausgerechnet aus der HTML-5-Ecke sehen die Verfechter des offenen Web nun eine neue Gefahr heraufziehen.

Im Zuge der Verschlüsselungsfunktionen in HTML 5 möchten Anbieter, zum Beispiel der Online-Filmverleih Netflix oder die britische Rundfunkanstalt BBC, Digital Rights Management (DRM) für digitale Inhalte umsetzen. Netflix bezeichnet den Kopierschutz als "HTML 5 Premium Video Extensions" [1] und die BBC sieht es als gerechtfertigt an, ihre Sendungen nur den britischen Gebührenzahlern zugänglich zu machen [2]. Der passende Vorschlag beim Standardisierungsgremium W3C heißt Encrypted Media Extensions (EME) und befindet sich im Entwurfsstadium [3].

Technisch fußt das geplante DRM auf der künftigen Fähigkeit von Webbrowsern, Anwendungsdaten mit Hilfe von Javascript zu ver- und entschlüsseln. Die Programmierschnittstelle dafür ist im Web Cryptography API [4] spezifiziert, das ebenfalls als Entwurf beim W3C liegt. Ergänzend zur Transportsicherung per HTTPS lassen sich damit Anwendungsdaten verschlüsseln, etwa vor dem Speichern in der Cloud oder vor ihrer Übertragung mittels Websockets oder Web RTC.

Polyfills

Die Implementierung des Web Cryptography API im Chrome-Browser [5] sowie im Mozilla Firefox [6] hat bereits begonnen. Bis die Browser die volle Unterstützung mitbringen, dienen so genannte Polyfills dazu, einzelne Features nachzurüsten. Bei diesen – nach einer beliebten britischen Spachtelmasse benannten – Browser-Ausbesserungen handelt es sich um Javascript-Bibliotheken, die ein Webbrowser bei Bedarf aus dem WWW lädt.

Dazu zählt auch Polycrypt [7], das zwar einen älteren Entwurf des Web Cryptography API implementiert, sich aber gut zu Demonstrationzwecken eignet. Seine Lizenz ist unklar, es steht aber im Web zur kostenlosen Verwendung bereit. Der Entwickler bindet Polycrypt wie jede andere Javascript-Datei in ein HTML-Dokument ein. Damit das Polyfill funktioniert, muss er das HTML-Dokument über einen Webserver laden. Abbildung 1 zeigt Polycrypt im Einsatz auf der Javascript-Konsole des Browsers.

Abbildung 1: Die Konsole im Browser Chrome wertet mit Polycrypt den Aufruf encrypt("abc") aus.

Eine weitere Implementierung ist Webcrypto von Netflix [8]. Im Unterschied zu Polycrypt ist es aber keine Javascript-Bibliothek, sondern ein nativ kompiliertes Browser-Plugin für Google Chrome.

Symmetrische Verschlüsselung

Zum Schutz von Anwendungsdaten in einer Cloud ist das symmetrische Verschlüsselungsverfahren AES [9] geeignet. Listing 1 zeigt seine Verwendung zusammen mit dem Web Cryptography API. Zeile 1 speichert einen (im Listing gekürzten) Schlüssel zum Ver- und Entschlüsseln von Anwendungsdaten in der Variablen »encRawKey« als hexadezimale Zahlenfolge ab. Die Variable »encAlg« in den Zeilen 2 bis 9 speichert ein Konfigurationsobjekt.

Listing 1

Verschlüsselung von Anwendungsdaten

01 var encRawKey =  "4ea1...b2bf";
02 var encAlg = {
03   name : "AES-GCM",
04   params : {
05     iv : hex2bin("534aea17"),
06     additionalData: hex2bin("534aea17"),
07     tagLength: 128
08   }
09 };
10 function encrypt(text) {
11   polycrypt.importKey("raw", hex2bin(encRawKey)).oncomplete = function(e) {
12     var key = e.target.result;
13     polycrypt.encrypt(encAlg, key, str2bin(text)).oncomplete = function(e) {
14       var cipher = e.target.result;
15       polycrypt.decrypt(encAlg, key, cipher).oncomplete = function(e) {
16         console.log("encrypted: "+bin2str(cipher));
17         console.log("decrypted: "+bin2str(e.target.result));
18       };
19     };
20   };
21 }

Dieses wählt im Feld »name« den AES-Algorithmus im Betriebsmodus GCM mit dem Initialisierungsvektor aus »iv« und der Benutzerkennung aus » additionalData« für die Verschlüsselung per »encrypt()« (Zeile 13) und die Entschlüsselung mit »decrypt()« (Zeile 15).

Die Werte für den Initialisierungsvektor und die Benutzerkennung muss der Programmierer als Bytefolge angeben. Die Konvertierung übernimmt die Funktion »hex2bin()« . Innerhalb der Encrypt-Funktion importiert Zeile 11 mit »polycrypt.importKey()« den Schlüssel aus Zeile 1. Die Formatangabe »raw« im Aufruf erfordert es, den Schlüssel in eine Bytefolge umzuwandeln.

Die Funktion »importKey()« führt der Browser genauso wie die API-Methoden Encrypt, Decrypt, Generatekey, Sign oder Verify asynchron aus. Im Erfolgsfall ruft er für alle Methoden die angegebene Rückruffunktion zum Ereignis »oncomplete« auf. Die Zeilen 11 bis 20 zeigen diese Rückruffunktion. Sie verwendet den importierten Schlüssel in der Variablen »key« im Encrypt-Aufruf (Zeile 13) zum Verschlüsseln.

Im Aufruf von Decrypt (Zeile 15) dient er zum Entschlüsseln der Nachricht aus der Variablen »text« (Zeile 10). Die ver- und die entschlüsselte Nachricht konvertiert »bin2str()« vor der Ausgabe auf die Konsole in eine lesbare Zeichenkette (Zeilen 16, 17). Abbildung 1 zeigt das symmetrische Verschlüsseln im Einsatz.

Zum Schutz von Anwendungsdaten beim Übertragen mittels Websockets oder Web RTC eignet sich das asymmetrische Verschlüsselungsverfahren RSA [10]. Im Gegensatz zu einem symmetrischen Verfahren verwendet RSA ein Schlüsselpaar. Die beiden Kommunikationspartner verwenden den jeweils fremden öffentlichen Schlüssel zum Verschlüsseln und ihren eigenen privaten Schlüssel zum Entschlüsseln einer Nachricht.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Netflix nutzt offenbar HTML 5 und DRM

    Netflix bietet seinen Service nun nicht mehr nur über Silverlight, sondern auch über HTML 5 an und verwendet dabei offenbar ein DRM-Modul.

  • HTML 5 offline

    Ein Offlinespeicher im Browser und ein Schuss HTML-5-Akrobatik ergeben interaktive Webanwendungen, die auch dann noch funktionieren, wenn die Internetverbindung abreißt. Als Kür zaubert das folgende Beispiel ein GUI, das auf Desktops wie Smartphones eine gute Figur macht.

  • Netflix-Support in Ubuntu

    Netflix soll unter Ubuntu schon bald nativ im Browser laufen. Zum Einsatz soll dabei Chrome mit DRM-Support kommen.

  • React

    Vom Unternehmen Facebook kommt das quelloffene Javascript-Framework React, das Weboberflächen geschickt mit Datenschätzen verknüpft. Insbesondere die Renderfunktion macht sich dabei nützlich.

  • Meteor

    Javascript sowohl im Browser als auch auf dem Server: Das Webframework Meteor verspricht Anwendungen aus einem Guss, die sich dank vieler fertiger Pakete rasch programmieren lassen.

comments powered by Disqus

Ausgabe 06/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.