Max Großmanns Website

Was denken Sie?

# Verschlüsselung

Verschlüsselung ist wichtig, wenn man vertrauliche Daten weitergeben will und absolut sicher sein möchte, dass nur der andere den Klartext erhält. Es gilt Kerckhoffs' Prinzip: nicht der Algorithmus, sondern der Schlüssel soll geheim sein. Das gegenteilige Prinzip nennt sich security through obscurity - ein umstrittenes und nicht zu empfehlendes Unsicherheitssystem, welches die Geheimhaltungslast ernorm erhöht. Offene Algorithmen statt offenen Schlüsseln!

Vor einigen Monaten begann ich die Entwicklung an einem einfachen Kryptosystem, bei dem ein einziger Schlüssel für Ver- und Entschlüsselung reichte. Doch rasch wurden die ersten Mängel bekannt: die Buchstabenhäufigkeit machte dem einfachen Suchen-und-Ersetzen-System zu schaffen. Somit ließ sich der verschlüsselte Text ohne großes Federlesen entschlüsseln, ohne im Besitz des Schlüssels zu sein.

Es gibt jedoch einen Mittelweg, der die Vorteile der symmetrischen Verschlüsselung und Umgehen der Buchstabenhäufigkeit bietet: eine Verschiebung indem zwei Zeichen (namentlich das Schlüsselzeichen und das Textzeichen) miteinander verschmolzen werden. Somit werden viele neue Zeichen vereinigt, die am Ende base64-kodiert werden, um eine kompatible Weitergabe zu ermöglichen. Der Text ist verschlüsselt und je nach Länge des Schlüssels auch unknackbar. Im Prinzip wird jeder Buchstabe des Klartextes mit einem Buchstaben des Geheimschlüssels vermischt (genauer gesagt werden die ASCII-Entsprechungen addiert). Somit entsteht ein neues Zeichen, das als verschlüsselt gelten kann. Bei der Entschlüsselung geht es genau verkehrt herum. Wir subtrahieren vom Geheimzeichen den Schlüsselzeichenwert. Sodann erhalten wir den Klartext Buchstabe für Buchstabe.

Beachten Sie, dass der Schlüssel stets mindestens so lang wie der Klartext sein sollte.

Formel: Sicherheit = s^l
s = Anzahl~theoretisch~benutzbarer~Buchstaben, l = Schlüssellänge

Auf dieser Seite finden Sie den Algorithmus in einem PHP-Script sowie ein Formular zum Live-Testen.

# Testen

Schlüssel:
Text:

# Script

# crypt.php (Aufruf)

<?php
/*
Copyright (c) 2010 <Max Großmann>

Permission is hereby granted, free of charge,
to any person obtaining a copy of this software
and associated documentation files (the "Software"),
to deal in the Software without restriction,
including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to
whom the Software is furnished to do so, subject to the
following conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/

function _crypt($str,$key) {
    
$rep ceil(strlen($str)/strlen($key));
    
$nky substr(str_repeat($key,$rep),0,strlen($str));
    
$chy str_split($nky,1);
    
$chs str_split($str,1);
    
$nff "";

    foreach (
$chs as $i=>$char) {
        
$n chr(ord($char)+ord($chy[$i]));
        
$nff .= $n;
    }

    
$nff base64_encode($nff);

    return 
$nff;
}

echo 
_crypt("The quick brown fox...","abc");
?>

# decrypt.php (Aufruf)

<?php
/*
Copyright (c) 2010 <Max Großmann>

Permission is hereby granted, free of charge,
to any person obtaining a copy of this software
and associated documentation files (the "Software"),
to deal in the Software without restriction,
including without limitation the rights to use, copy,
modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to
whom the Software is furnished to do so, subject to the
following conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/

function _decrypt($str,$key) {
    
$str base64_decode($str);
    
$rep ceil(strlen($str)/strlen($key));
    
$nky substr(str_repeat($key,$rep),0,strlen($str));
    
$chy str_split($nky,1);
    
$chs str_split($str,1);
    
$nff "";

    foreach (
$chs as $i=>$char) {
        
$n chr(ord($char)-ord($chy[$i]));
        
$nff .= $n;
    }

    return 
$nff;
}

echo 
_decrypt("tcrIgdPYysXOgcTV0NnRgcjS2ZCRjw==","abc");
?>