Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#18

Re: Suche AES Verschlüsselungskomponente

  Alt 30. Nov 2007, 08:43
Zitat:
Es wäre doch dann Jacke wie Hose ob ich nun ECB, CBC, CFB, CTR oder OFB nehme, oder?
Ich bin da sehr verwirrt, denn ECB & CBC füllen ihre Blocks auf, wenn sie zu wenig Text haben, aber denoch denke ich, sollten alle ein identisches Ergebniss liefern oder irre ich mich da?

1.) warum gibt es verschiedene Modis wenn sie Jacke wie Hose sind ?
2.) Du meinst damit das Padding, ein leidiges Thema da es dafür fast keine Standards gibt, erst so langsam werden welche entwickelt.

DEC "padded" immer wenn es geht und durchgeführt werden muß. Sobald du also eine Nachricht verschlüsselst die nicht exakt ein Mehrfaches der Blockgröße ist wird ein "Padding" versucht. Ist ein Modus ausgewählt in dem man nicht "padden" kann, wie cmECB gibts ne Fehlermeldung. Wird versucht nach einem "Padding" einen weiteren Datenblock zu verschlüsseln gibts ebenfalls eine Fehlermeldung, da auch dies nich geht. Möchte man also zb. 2 Datenblöcke so verschlüsseln als wären sie 1 Datenblock dan muß der erste Datenblock ein Mehrfaches der Blockgröße in der Länge betragen. DEC's Objekte enthalten einen internen Status, zb. ist der Cipher initialisiert, hat er ein Passwort bekommen, wurde der letzte Datenblock gepaddet ?
Allerdings wird beim "Padding" im DEC keine Nachrichtenexpansion durchgeführt, sprich zusätzliche Dummmybyte angehangen, sondern der Ciphermodi in 8 Bit Modi gewechselt. Padding mit Nachrichtenexpansion kann unsicher sein, da es dem Angreifer Möglichkeiten bietet.

Bei den Modis kann man erstmal in 3 Arten unterscheiden

cmECB -> Electronic Code Book, sollte nur benutzt werden bei Zufallsdaten oder als Basis anderer Ciphermodis.
cmCBC8 usw. -> arbeiten auf 1 Bytes Feedbackregistergröße, dh. ein 16 Bytes Blockcipher muß 16mal einen Block verschlüsseln
cmCBCx usw. -> arbeiten auf x Bytes Blockgröße, dh. ein 16 Bytes Blockcipher verschlüsselt den Block nur einmalig

Die cm???8 Modis benutzt man bei kurzen und sehr sicher zu haltenen Nachrichten. Sie haben den Vorteil das sie ohne Padding auskommen und 1 Datenbyte quasi Blockgröße mal verschlüsseln.
Die cm???x Modis benutzt man wenn man Speed braucht.

cmCBC/cmCTS usw. benutzen kein Cipher Text Stealing sondern eine Änderung des Ciphermodis als Padding. In beiden Fällen wird also die nachricht nicht um zusätzliche Bytes expandiert, sondern Length(Output) = Length(Input). Frühere DEC Versionen benutzten auch Cipher Text Stealing, aber dieses Verfahren ist unsicher besonders bei Nachrchten < Blockgröße. Deshab benutzt DEC jetzt ein Wechsel des Ciphermodis für den letzten Datenblock < Blockgröße vom cmCBCx zb. in den cmCBC8 Modi, also von Blockgröße auf Bytesgröße. Die letzten X Datenbytes werden also bei einem 16 Bytes Cipher auch 16 mal verschlüsselt, jedes im Versastz von 1 Byte.
Du musst dir das so vorstellen: cm???8 Modis verschlüsseln das 16 Bytes Feedback Register eines 16 Bytes breiten Ciphers == Blockgröße 16 bytes. Dann verküpfen sie zb. das 1. Byte diese Feedbackregisters mit den 1. Byte der Daten. Danach wird das Feedbackregister erneut verschlüsselt und das 2. datenbyte mit den Feedback Register verschlüsselt. Das Feedback Register arbeitet wie ein langes Shiftregister, wird also reihum um 1 Bytes pro Schritt rotiert. Das 2. Datenbyte wird also defakto mit dem 2. Byte des Feedbackregisters verknüpft allerdings wird das Feedbackregster aber durch den Cipher immer rotiert verschlüsselt. Zusätzlich, je nach Modi, werden die Daten aber auch noch nach oder vor oder beides mit den unverschlüsselten oder verschlüsselten Daten verknüpft. Verknüpfungsfunktion ist XOR.
Diese Vorgehensweise als "Padding" fügt keine virtuellen und bekannten/festen Datenbytes der Nachricht hinzu oder stielt diese Daten aus dem Vorgängerblock der eventuell bei sehr kurzen Machrichten garnicht vorhanden ist -> als Padding und Cipher Text Stealing. Sie ist damit sicherer als die anderen beiden Verfahren und hat denoch den Vorteil das die Nachrichtengröße sich nicht verändert. Eventuell kann es aber an dieser Stelle zu Inkompatibilitätenn zu anderen Implementierungen kommen. Die neueren Verfahren und Standards gehen aber immmer mehr zu diesem Verfahren über.

cmCTS/cmCFS sind Modis die ich entwickelt habe. Sie entsprechen dabei cmCBC/cmOFB allerdings mit doppelter Verknüpfung des interen Feedback registers VOR und NACH der Verschlüsselung eines Datenblockes. Sie sind damit der Fähigkeit der Selbst-Synchronisierung bei fehlerhaften Datenübertragungen beraubt. Das heist, es sind Alles oder Nichts Entschlüsselungsmodis, oder eben Modis die die Datenintegrität der datenübertragung sicherstellen. Wird mit ihnen eine CMAC -> Cipher.CalcMAC als Prüfsumme berechnet so kann man sicher sein das bei falscher Prüfsumme beim Entschlüsseln die Daten fehlerhaft oder manipuliert übertragen wurden.

Den Modi wählst du mit Cipher.Mode := cm???; aus, aber bitte noch bevor du mit .Init() den Cipher initialisierst !!
cmCBCx/cmECBx/cmCFB8/cmOFB8 sind Standard. cmCTS?,cmCFS? sind prohibitär von mir entwickelt und doppelt-Feedback-Modis, also Alles oder Nichts Verschlüsselungen und damit sicherer.

Gruß Hagen
  Mit Zitat antworten Zitat