Kryptographie #1 - Symmetrische Verschlüsselungsverfahren
Symmetrische Verschlüsselungsverfahren
Bei einem symmetrische Verschlüsselungsverfahren wird der Klartext mithilfe eines Schlüssels in ein Chiffrat verschlüsselt. Mithilfe dieses Schlüssels kann das Chiffrat wieder entschlüsselt werden.
Symmetrische Verschlüsselungsverfahren lassen sich in zwei Klassen unterteilen:
Stromchiffren
(jedes Bit wird einzelnd verschlüsselt)Blockchiffren
(es werden immer mehrere Bits zusammen verschlüsselt)
Stromchiffre
Meistens wird ein XOR verfahren verwendet.
Dies sieht folgend aus:
kodieren:
Text 00101010101111000
Schlüssel 01111011101101010
Chiffrat 01010001000010010
und dekodieren:
Chiffrat 01010001000010010
Schlüssel 01111011101101010
Text 00101010101111000
Python
from Crypto.Cipher import XOR
sender = XOR.new("Pas")
chiffrat =sender.encrypt("geheimer Text")
print (chiffrat)
empfänger = XOR.new("Pas")
Klartext = empfänger.decrypt(chiffrat)
print(Klartext)
Über die Methode new
wird eine neue Chiffre mit angegebenen Schlüssel erzeugt.
Diese lässt sich mit den Methoden encrypt
und decrypt
zum Verschlüsseln und Entschlüsseln von Daten verwenden.
Ausgabe:
b'7\x04\x1b5\x08\x1e5\x13S\x04\x04\x0b$'
b'geheimer Text'
Das AES verfahren ist
Blockchiffre
Das AES verfahren ist einer der Sichersten Verschlüsselungsverfaren, aber auch dort gibt es verschiedene Verfahren.
Ich zeige das ECB und CBC Verfahren anhand verschlüsselter Bilder.
Das unverschlüsselte Bild:
Als erstes wird ECB angewand. Die Datenblöcke werden unabhängig voneinander verschlüsselt.
Der Pinguin ist noch erkennbar.
Anschließend wird CBC angewand.
Dabe wird jeder Datenblock mit dem voranliegenden verrechnet.
Nun erkennt man keinen Pinguin mehr. Dieses Verfahren ist sicherer.
Python
from Crypto.Cipher import AES
chiffre = AES.new("PasswortPasswort",AES.MODE_CBC,"ABCDEFGHabcdefgh")
chiffrat =chiffre.encrypt("Ein normaler nicht geheimer Text")
print (chiffrat)
#Klartext = empfänger.decrypt(chiffrat)
chiffre = AES.new("PasswortPasswort",AES.MODE_CBC,"ABCDEFGHabcdefgh")
text = chiffre.decrypt(chiffrat)
print (text)
Das Programm ist im Aufbau ähnlich.
Der größte Unterschied ist chiffre = AES.new("PasswortPasswort",AES.MODE_CBC,"ABCDEFGHabcdefgh")
.
Es werden nun noch den CBC modus ausgewählt und ein Startblock festgelegt. Das Passwort und der Startblock müssen 16 Zeichen lang sein.
Ausgabe
b'\x0e<\xfaq\x18\xac\xc67}\xaa\x1e\xae\xd2`x\xbbL_\x82\xab\xebH\xc7iYk\x16V\x9a\xe9\x0bX'
b'Ein normaler nicht geheimer Text'
Für den tieferen Einblick in die Kryptographie habe ich vorgestern meine Kryptographie-Reihe gestartet...
Schaut sie euch gerne mal an, und seit gespannt, wie die oben genannten Algorithmen so ganz genau funktionieren ^^
https://steemit.com/kryptographie/@technotroll/einleitung-and-klassische-kryptographie