Suche // Search:

26.04.2011

RC4-Verschlüsselung mit Salts
//
RC4 encryption with salts

Zum Verschlüsseln von Formularen gibt es bei Adobe schon diverse Möglichkeiten, die auch sehr sicher sind.
Aber, mit all den erforderlichen Zertifkaten und Digitalen ID's ist das alles irgenwie auch zu kompliziert und eben auch teuer.
Unternehmen mögen das in Kauf nehmen. Aber der kleine Mann?

Also ist wieder Selbermachen angesagt.
Dieses Beispiel zeigt ein Formular mit mehreren Feldern die alle in einem Rutsch mittels RC4-Algorithmus und eines Passwortes verschlüsselt werden können.
Nun wäre das mit einem Klartext-Passwort ja nicht sonderlich sicher, daher wird das Ganze mit ordentlich vielen Skripten verschleiert, aber der Reihe nach.

Um das Klartext-Passwort unleserlich zu machen, wird dieses durch verschiedene Hash-Algorithmen (MD4, MD5 und SHA-512) geschickt.
Gestärkt wird dieser Vorgang durch das sogenannte Salting.
Hierbei wird der erzeugte Hashwert mit einem weiteren, beliebigen Hashwerte aus einer  Liste mit hunderten anderer Hashwerte verändert und dann nochmal gehasht.
Die Liste mit den Hashwerten wird erst bei Bedarf erzeugt, muss also nicht schon vorab in das Formular geskriptet werden.
Die Technik dafür hat John Brinkman kürzlich in seinem Blog beschrieben.
Sie verwendet das Extras-Objekt, das das Erstellen, Speichern und Löschen von Werten zur Laufzeit erlaubt.
Eine unglaublich nützliche Sache das!

Nachdem der finale Hashwert erstellt wurde, wird dieser zusammen mit dem RC4-Algorithmus eingesetzt, um die Werte alle Formularfelder zum verschlüsseln.

Damit die Daten auch wieder entschlüsselt werden können, wird das gehashte Passwort gespeichert, nicht aber der finale Hashwert, der wird erst wieder berechnet und mit dem Hashwert der Benutzereingabe verglichen.
Stimmt dieser überein werden alle Felder wieder entschlüsselt und die Liste mit den Hashwerten verworfen, da sie nicht mehr gebraucht wird.

Beim nächsten Verschlüsseln wird die Hash-Liste komplett neu erstellt.
Da dafür ein Zeitstempel verwendet wird, sind die Hashwerte der Liste jedes mal anders, was die Liste relativ einzigartig macht.
Dadurch werden auch die Daten immer anders verschlüsselt, auch wenn immer dasselbe Passwort verwendet wird.


Adobe already offers methods to encrypt forms, which are surely secure.
But, with all those certifactes and digital ID's this is even complicated and expensive.
This possibly is not problem for companies. But for the regular people, isn't it?

So, Do-It-Yourself is the order of the day.
This example shows a form with several form fields which are encrypted through the RC4-algorithm and a password in one go.
Well, in this scenario a cleartext-password wouldn't be very secure, so we use several scripts to make it stronger and securer.
But one by one.

To make the cleartext password unreadable it passes different hash-algorithms (MD4, MD5 and SHA-512).
It also get's strenghtened by the so called Salting.
Thereby the hash is combined with another, arbitraty hash from a list with hundreds of hashed
before it is hashed once again.
The hash list is only generated as needed, so it's not neccessary to script it already into the form before.
A technique to do this was described by John Brinkman only recently in his Blog.
It uses the extras object which allows the creation, storage and deletion of values at runtime.
An incredible useful thing!

After the final hash was created it's used together with RC4 to encrypt the form fields.

To be able to decrypt the fields later, the hashed keyword is stored but not the final hash.
It will be created again in front of the decryption and checked against the hashed users input.
If they match the fields get decrypted and the hash list is deleted, because it is no longer needed.

Only during the next encryption the hash list is generated again.
Because there is a time stamp used, the hashes in the list are always totally different which make the list relatively unique.
So the encrypted data will allway look different, even if the same keyword is used again and again.


Ver-/Entschlüsselung aller Formularfelder
//
En-/Decryption of all form fields


Beispiel-Formular
//
Example form
https://workspaces.acrobat.com/app.html#d=tdqsAP*XogjhpJO4aZZ5Wg