Diese Webseite benutzt ein sog. Session Cookie. Dies ist für die Funktion der Seite unumgänglich! Weitere Informationen | Cookie erlauben

Sicheres Mailformular mit OpenPGP

Die Seite Störkind ist ja von Haus aus per SSL verschlüsselt. Auch der Mailserver von ELinOX verschlüsselt auf dem Weg alle Mails. Trotzdem sind e-Mails dadurch nur auf dem Transportweg geschützt und das auch nur, wenn der empfangende Provider auch SSL-Verschlüsselung zwischen Servern und zum Client unterstützt und der Empfänger die Mails über eine SSL gesicherte Verbindung abruft.

Wer sicher gehen möchte, nutzt PGP verschlüsselte Mails. Normale Mails sind wie Postkarten. Jeder der sie in die Hand bekommt, kann sie lesen. Mit PGP verschlüsselte Mails sind wie Briefe in einem Tresor. Jeder kann sich den Tresor ansehen, aber an den Brief im Inneren kommt man nur mit dem richtigen Schlüssel.

Ich habe nun eine gute Javascriptbibliothek gefunden, mit der man Formulardaten im Browser (also beim Benutzer auf dem Rechner) verschlüsseln kann. Das ganze habe ich dann in das Kontaktformular auf Störkind eingebunden.

Besucher können nun Ihren Text vor dem Versenden mit meinem Öffentlichen Schlüssel verschlüsseln. Zum Entschlüsseln dieser Nachricht ist neben meinem privaten Schlüssel auch meine Passphrase nötig. Somit kann niemand anderes den Inhalt der Mail lesen, selbst, wenn er auf dem Weg der Mail darauf Zugriff erlangt.

Für alle, die das "Nachbauen" wollen, stelle ich den Code hier gern zur Verfügung.

Im HTML Formular muss eingestellt werden, wie und wohin es gesendet werden soll. Außerdem muss der eigene Public-Key in das Form integriert werden. Ein entschlüsseln von so verschlüsselten Mails ist dann nur noch mit dem Private-Key und der Passphrase möglich!!

Ich habe bewusst eine Variante gewählt, die einen extra Button benutzt um die Formulardaten zu verschlüsseln, damit der Code einfach in fast jedes beliebige Script einzufügen ist. Das Script, welches die Formulardaten zur Weiterverarbeitung erhält, bekommt so ausschließlich den verschlüsselten Inhalt übermittelt. Diese Lösung ist also auch sehr gut für Shared-Hostings geeignet, wo man nicht genau weiß wer alles Zugriff auf den Server und die entsprechenden Logfiles hat.

Die komplette Verschlüsselung findet auf dem Rechner des Benutzers statt.

Viel Spaß beim ausprobieren ...

Quellen: https://openpgpjs.org/

Javascript Code

<script src="javascript/PGPJS/openpgp.min.js"></script>

<script>

$('#Encrypt').on('click', function(e) {

// Ein paar Variablen vorbereiten
var options, encrypted;

//Den Text aus dem Form holen
var Formdata = $("textarea[name='text']").val();

// Aus dem Form den Public Key holen ... funktioniert so besser als ihn hier in eine Variable zu packen.
var pubkey = $('#Mailform').data('pgpkey');

// Nun die Options mit den Werten füllen.
// Daten aus der Variable "Formdata" verarbeiten und mit dem Key "pubkey" verschlüsseln.
options = {
data: Formdata,
publicKeys: openpgp.key.readArmored(pubkey).keys,
};


// Mit dem Public Key die Daten aus dem Textfeld verschlüsseln
openpgp.encrypt(options).then(function(ciphertext) {
encrypted = ciphertext.data;

// Verschlüsselte Daten in das Textfeld schreiben
$("textarea[name='text']").val(encrypted);

});
});

</script>

HTML Code

<form action="https://www.stoerkind.de/" method="post" enctype="multipart/form-data" name="Mailform" id="Mailform" data-pgpkey="-----BEGIN PGP PUBLIC KEY BLOCK-----
......
......
......
......
-----END PGP PUBLIC KEY BLOCK-----">
<input name="mail" type="email" id="mail" placeholder="Deine e-Mailadresse" value=""/>
<textarea name="text" rows="10" id="text" placeholder="Deine Nachricht"></textarea>
<p>Achtung! Die Nachricht kann vor dem Versenden mit OpenPGP verschlüsselt werden. Änderungen an der Nachricht sind dann nicht mehr möglich!</p>
<input name="Encrypt" ID="Encrypt" type="Button" value="Text mit OpenPGP verschlüsseln!" class="warning button"/>
<input name="Submit" ID="Submit" type="submit" value="Nachricht Absenden" class="success button"/>
</form>
 
Zurück nach oben
www.stoerkind.de - Neues aus der Muddastadt!
Kontakt | Impressum