Hallo,
Möchte man die Integrität von Daten überprüfen und eine absichtliche
Manipulation sicher erkennen, so muss den Nutzdaten eine kryptografisch
sichere Prüfsumme angehängt werden ein Message Authentication Code
(MAC). Würde man eine gewöhnliche lineare CRC-Prüfsumme mitsenden,
könnte jeder die Nutzdaten manipulieren und selbst wider eine korrekte
Prüfsumme anhängen. Soweit ist mir klar, warum eine CRC-Prüfsumme
kryptografisch nicht sicher ist.
Nun stelle ich mir aber die Frage, was passiert, wenn die Daten
zusätzlich verschlüsselt werden? Angenommen man berechnet eine
gewöhnliche CRC-Prüfsumme vom Klartext, hängt diese dem Klartext an und
chiffriert dann den erhaltenen Datensatz. Ein Angreifer sieht so weder
die Prüfsumme, noch kann er die Daten so verändern, dass beim Empfänger
nach dem Dechiffrieren die Prüfsumme korrekt ist. Im Prinzip würde es
genügen, die CRC-Prüfsumme vom Klartext zu berechnen, die Nutzdaten zu
chiffrieren und an den Chiffretext die vorher berechnete Prüfsumme
anzuhängen. Auch so sollte es einem Angreifer nicht möglich sein, die
chiffrierten Daten zu ändern und eine korrekte neue Prüfsumme zu
generieren, da die Prüfsumme ja vom Klartext und nicht vom Chiffretext
berechnet wurde.
Ist eine derartige Nutzung der CRC-Prüfsumme dennoch nicht
kryptografisch sicher, wenn ja warum?
Besten Dank im Voraus,
Roland.
Roland schrieb:> Möchte man die Integrität von Daten überprüfen und eine absichtliche> Manipulation sicher erkennen, so muss den Nutzdaten eine kryptografisch> sichere Prüfsumme angehängt werden ein Message Authentication Code> (MAC).
Och, ich mach das immer so, dass ich die Daten manipuliere, und eine
neue dazu passende MAC anhänge. :P
Roland schrieb:> Ist eine derartige Nutzung der CRC-Prüfsumme dennoch nicht> kryptografisch sicher, wenn ja warum?
verschlüsselte Daten zu ändern ist ja kein Problem, das kann man einfach
so machen, nur weiß man halt nicht was wirklich rauskommt.
Da die CRC meist recht kurz ist, kann man Angreifer einfach probieren.
Irgendwann wird es eventuell mal stimmen.
Wenn man noch mit CBC (o. ä.) arbeitet wird es recht sicher. Aber man
hat immer noch nicht den Vorteil einer echten Signatur, das man weis von
wem die Nachricht ist.
Detlef Kunz schrieb:> Und erklär mal was DU under einer kryptografisch sicheren> CRC-Prüfsumme verstehst.> CRC-Prüfsummen sind nur eine kleine Untermenge der Prüfsummen.
steht sogar im wiki
[...]
Obwohl eine herkömmliche Prüfsumme nützlich ist, um vor unbeabsichtigten
Änderungen zu schützen, bietet sie keine Sicherheit gegenüber
beabsichtigen Datenänderungen (Manipulation), da sie trivial zu umgehen
ist. Es ist deshalb oft notwendig, anstelle eines einfachen
Prüfsummenverfahrens kryptografisch stärkere Algorithmen, wie
Einweg-Hash-Funktionen (z. B. den Secure Hash Algorithm), zu verwenden.
Diese stellen weiterhin die Grundlage elektronischer Unterschriften dar.
[...]
Warum dann überhaupt noch die Prüfsumme?
Die Frage ist, was willst du erreichen?
Eine kryptografische Prüfsumme erfüllt diverse Eigenschaften, aber die
Sicherheit hängt auch von der Nutzung ab.
Wenn du den gesamten Text sowieso verschlüsseln willst ist die Prüfsumme
(ob nun ebenfalls verschlüsselt oder nicht) auch egal. Hängt die CRC
einfach unverschlüselt hinten drann, so kann man eben einen Text
erzeugen welcher für diese CRC gültig ist. Darum gehts ja. Bei einer
krypt. Hashfunktion wäre das nicht möglich.
Aber was bringt es? Der Empfänger möchte decodieren und sieht nur Müll.
Du solltest also erstmal definieren was du willst. Was willst du
schützen?
Signatur mittels Hashfunktion macht ja nur Sinn, wenn man den
eigentlichen Text unverschlüsselt überträgt und nur den Hashwert mit dem
privaten Schlüssel des Absenders verschlüsselt (Signiert). Ist der Text
sowieso verschlüsselt fällt die Notwendigkeit dafür meist weg.
Roland schrieb:> Ist eine derartige Nutzung der CRC-Prüfsumme dennoch nicht> kryptografisch sicher, wenn ja warum?
Sicher ja aber kryptografisch unsinnig.
Ist Deine Verschlüsselung "sicher", dann muss der Klartext nicht mehr
gegen beabsichtigte Manipulation gesichert werden.
Ist Deine Verschlüsselung nicht sicher, dann kann ein Angreifer die
Nachricht entschlüsseln -> ändern -> neue Prüfsumme berechnen ->
verschlüsseln -> weiterleiten.
Bezüglich der Datenintegrität (Bitfehler) hättest Du prinzipiell recht.
Aber dann musst Du auch sicherstellen, dass die beschädigte,
verschlüsselte Nachricht (die ja den Fehler hätte) immer noch korrekt
entschlüsselt werden kann.
Hth
Grüße
Andreas
cyblord ---- schrieb:> Wenn du den gesamten Text sowieso verschlüsseln willst ist die Prüfsumme> (ob nun ebenfalls verschlüsselt oder nicht) auch egal
wie kommst du darauf? eine nur weil man den Text nicht lesen kann, kann
man die Nachricht genauso Manipulieren (nur sieht man nicht was
rauskommt)
Eine Prüfsumme braucht man auch bei Verschlüsselung!
Andreas H. schrieb:> Ist Deine Verschlüsselung "sicher", dann muss der Klartext nicht mehr> gegen beabsichtigte Manipulation gesichert werden.
doch muss er. Woher soll man denn sonst erkennen das nicht geändert
wurden ist?
Peter II schrieb:> cyblord ---- schrieb:>> Wenn du den gesamten Text sowieso verschlüsseln willst ist die Prüfsumme>> (ob nun ebenfalls verschlüsselt oder nicht) auch egal>> wie kommst du darauf? eine nur weil man den Text nicht lesen kann, kann> man die Nachricht genauso Manipulieren (nur sieht man nicht was> rauskommt)>> Eine Prüfsumme braucht man auch bei Verschlüsselung!
Ich sagte auch nicht dass man sie nicht braucht, sondern dass es egal
ist ob verschlüsselt oder nicht. Lern lesen Bub.
Für die Datenintegrität mag man sie brauchen, für die Sicherheit gegen
Manipulation nicht. Weil das verschlüsseln des Textes hierfür bereits
ausreicht.
> doch muss er. Woher soll man denn sonst erkennen das nicht geändert> wurden ist?
Weil nur Müll beim dekodieren rauskommt. Daran erkennt man es. Eine
sinnvolle Veränderung kann ein Angreifer nicht durchführen wenn
verschlüsselt.
Andreas H. schrieb:> Bezüglich der Datenintegrität (Bitfehler) hättest Du prinzipiell recht.> Aber dann musst Du auch sicherstellen, dass die beschädigte,> verschlüsselte Nachricht (die ja den Fehler hätte) immer noch korrekt> entschlüsselt werden kann.
Wie würde ich diese Korrektheit ohne Prüfsumme erkennen?
Nach meinem Verständniss wird ab dem Bitfehler Müll dekodiert und die
Hoffnung besteht, dass dann die Müll-Checksumme nicht zufällig richtig
ist.
cyblord ---- schrieb:> Weil das verschlüsseln des Textes hierfür bereits> ausreicht.
Welcher Text ist nun richtig:
"Anzahl der Angreifer: 10"
oder
"Anzahl der Angreifer: 99"
>> doch muss er. Woher soll man denn sonst erkennen das nicht geändert>> wurden ist?> Weil nur Müll beim dekodieren rauskommt.
dann ändere Doch einfach mal das letzte Zeichen einer Verschlüsslung,
diese hat nur Auswirkung auf das ende von Text. Damit muss man die
Manipulation nicht immer erkennen.
> Daran erkennt man es. Eine> sinnvolle Veränderung kann ein Angreifer nicht durchführen wenn> verschlüsselt.
doch kann er.
cyblord ---- schrieb:> Weil das verschlüsseln des Textes hierfür bereits> ausreicht.
Hier noch ein extrem Beispiel:
verschlüssle doch mal eine Binäre Zahl. (also 4byte)
Dann manipuliere die Verschlüsselten Daten, und du wirst sehen das immer
irgendeine Zahl rauskomme. Wie willst du jetzt erkennen welche die
"echte" ist?
Peter II schrieb:> "Anzahl der Angreifer: 10"> oder> "Anzahl der Angreifer: 99">> Daran erkennt man es. Eine>> sinnvolle Veränderung kann ein Angreifer nicht durchführen wenn>> verschlüsselt.> doch kann er.
Dann erklär mal wie du aus der "10" eine "99" machst wenn der Text
verschlüsselt ist und du den Schlüssel nicht kennst.
Ein Angreifer kann den Text nur kürzen oder verstümmeln. Ja.
cyblord ---- schrieb:> Dann erklär mal wie du aus der "10" eine "99" machst wenn der Text> verschlüsselt ist und du den Schlüssel nicht kennst.
mit einen Editor. Der punkt ist, das es nicht sicher ist. Wenn ich
10.000 Verssuche habe dann schaffe ich das. Nur weil es etwas schwerer
ist, sollte man sich nicht darauf verlassen.
Peter II schrieb:> cyblord ---- schrieb:>> Dann erklär mal wie du aus der "10" eine "99" machst wenn der Text>> verschlüsselt ist und du den Schlüssel nicht kennst.>> mit einen Editor. Der punkt ist, das es nicht sicher ist. Wenn ich> 10.000 Verssuche habe dann schaffe ich das. Nur weil es etwas schwerer> ist, sollte man sich nicht darauf verlassen.
Humbug. Dann könntest du genauso gut den Text so manipulieren dass die
krypt. Hashsumme wieder passt und die Veränderung nicht aufällt. Das ist
genauso schwer wie das manipulieren des verschlüsselten Textes. Beides
ist "computationally infeasible" und damit sicher.
Für trival kleine Klartexte ist jede Verschlüsselung angreifbar.
Vielen Dank für die zahlreichen Antworten!
Es ist klar, dass bei beabsichtigter Manipulation oder bei
Übertragungsfehlern nach dem Entschlüsseln der Klartext komplett
fehlerhaft ist, allerdings muss dieser Umstand ja auch erst irgendwie
erkannt werden.
cyblord ---- schrieb:> Wenn du den gesamten Text sowieso verschlüsseln willst ist die Prüfsumme> (ob nun ebenfalls verschlüsselt oder nicht) auch egal. Hängt die CRC> einfach unverschlüselt hinten drann, so kann man eben einen Text> erzeugen welcher für diese CRC gültig ist. Darum gehts ja. Bei einer> krypt. Hashfunktion wäre das nicht möglich.
Ja, man kann einen beliebigen Chiffretext erzeugen, der zur Prüfsumme
passt. Aber die Prüfsumme wurde bei den echten Daten ja aus dem Klartext
berechnet und die kennt der Angreifer nicht.
cyblord ---- schrieb:> Humbug.
dann sag doch mal wie du an 4byte die eine Zahl darstellen, erkennen
willst das sie manipuliert ist?
0x12345678
oder
0x04737432
welche Zahl wurde verändert?
Roland schrieb:> Ja, man kann einen beliebigen Chiffretext erzeugen, der zur Prüfsumme> passt. Aber die Prüfsumme wurde bei den echten Daten ja aus dem Klartext> berechnet und die kennt der Angreifer nicht.
Ja aber der Angreifer kann dir einen Datenblock unterjubeln für den du
eine korrekte Prüfsumme berechnest. Die Frage ist, darf das sein oder
nicht.
Darum die Frage: Was willst du genau schützen?
Um es mal kurz zu machen:
Deine Idee, die CRC mit zu verschlüsseln ist in diesem Fall sicher am
besten und sollte sicher sein.
Okay, verstehe.
Im konkreten geht es darum, die Daten die zu einem Bootloader gesendet
werden zu verschlüsseln. Hier spielt im Prinzip eine Absicherung gegen
absichtliche Manipulation keine Rolle und es würde eine gewöhnliche
angehängte CRC-Prüfsumme vom Chiffretext genügen.
Ich habe nur eben schon öfters gelesen, dass für die Erkennung einer
Manipulation ein MAC erforderlich ist, wobei mir eben nicht so klar
wurde, ob das ausschließlich für unverschlüsselte Übertragung gilt, oder
generell, da eben bei verschlüsselter Übertragung eine mitverschlüsselte
CRC-Prüfsumme ebenso die Integrität der Daten sichern sollte.
Roland schrieb:> Ich habe nur eben schon öfters gelesen, dass für die Erkennung einer> Manipulation ein MAC erforderlich ist,
Der Unterschied ist: eine simple Prüfsumme schützt vor zufälliger
Datenveränderung durch Störungen auf dem Übertragungsweg, ein Angreifer
kann jedoch nach erfolgter Manipulation einfach die Prüfsumme wieder
passend hinbiegen, das andere (MAC oder Signatur) schützt zusätzlich
auch vor absichtlichen (böswilligen) Veränderungen indem es jeglichen
Versuch die Prüfsumme im Nachhinein gezielt wieder passend zu machen
vereitelt.
Am einfachsten machst Du es in Deinem Falle so daß Du eine ausreichend
lange Prüfsumme an die Daten anhängst und dann erst verschlüsselst
(Daten mitsamt Prüfsumme). Danach wird es unmöglich sein die Daten so
zu verändern daß sie danach noch als gültig erkannt werden, weder
versehentlich noch absichtlich, und schon gar nicht in irgendeiner
sinnvollen [dem Angreifer nützlichen] Art und Weise.
Bernd K. schrieb:> Am einfachsten machst Du es in Deinem Falle so daß Du eine ausreichend> lange Prüfsumme an die Daten anhängst und dann erst verschlüsselst> (Daten mitsamt Prüfsumme). Danach wird es unmöglich sein die Daten so> zu verändern daß sie danach noch als gültig erkannt werden, weder> versehentlich noch absichtlich, und schon gar nicht in irgendeiner> sinnvollen [dem Angreifer nützlichen] Art und Weise.
Genau. Das war mein Plan. Ohne jetzt zu erörtern wie Sinnvoll es für
diese Anwendung im Speziellen ist, inwiefern unterscheidet sich dieses
Verfahren in punkto Manipulationssicherheit nun von einem MAC den man an
die Verschlüsselten Daten anhängt (Berechnet anhand des Klartextes oder
anhand des Chiffretextes. Oder den man zuerst berechnet und dann
mitverschlüsselt)?
Bernd K. schrieb:> Am einfachsten machst Du es in Deinem Falle so daß Du eine ausreichend> lange Prüfsumme an die Daten anhängst und dann erst verschlüsselst> (Daten mitsamt Prüfsumme).
Wenn es nur darum geht, den Urheber eindeutig zu identifizieren, ist es
nicht erforderlich, die Daten zu verschlüsseln. Es reicht aus, den
Hashcode zu verschlüsseln.
Roland schrieb:> inwiefern unterscheidet sich dieses> Verfahren in punkto Manipulationssicherheit nun von einem MAC
Aus dem Bauch raus: kein Unterschied (bei gleicher Hash-Funktion und
gleich langem Schlüssel). Bin aber kein Kryptograph und kanns auch nicht
beweisen, also lieber noch mal ne zweite Meinung einholen.
A. K. schrieb:> Wenn es nur darum geht, den Urheber eindeutig zu identifizieren, ist es> nicht erforderlich, die Daten zu verschlüsseln.
Wenn ichs richtig gelesen habe will er Firmware-Updates verschlüsseln
(und manipulierte solche abweisen).
Roland schrieb:> inwiefern unterscheidet sich dieses> Verfahren in punkto Manipulationssicherheit nun von einem MAC den man an> die Verschlüsselten Daten anhängt
Kryptografische Signaturen sind asymmetrische Verfahren. Der Hashcode
wird mit den privaten Schlüssel verschlüsselt und dann zusammen mit den
Daten übermitteln. Der öffentliche Schlüssel des Absenders entschlüsselt
den Hashcode und erlaubt die Verifizierung der Daten. Da dem Empfnger
nur der öffentliche Schlüssel bekannt ist, lässt sich aus der dem
Empfänger bekannten Information kein Paket schnüren, dass dieser
akzeptieren würde.
Vereinfacht gesagt verwendet ein MAC hingegen ein symmetrisches
Verfahren, grob vergleichbar zur DES oder AES Verschlüsselung, in dem
beide Seiten den gleichen geheimen Schlüssel verwenden. Somit ist dem
Empfänger der geheime Schlüssel bekannt. Dem Empfänger ist es also
möglich, falsche Daten mit korrektem MAC zu erzeugen. Somit ist das
Verfahren nur sicher, wenn der Empfänger seine Information geheim halten
kann - im Fall vom Bootloader also dessen Code.
Kleiner Tipp. Da gibts ein Buch namens "Handbook of Applied
Cryptography" da wird das alles erklärt.
http://cacr.uwaterloo.ca/hac/
Aber falls irgendwie möglich, verwende eine Bibliothek. Es ist sehr
wahrscheinlich, dass Du dumme Anfängerfehler machen wirst. Die macht
leider so ziemlich jeder am Anfang.
Bernd K. schrieb:> Wenn ichs richtig gelesen habe will er Firmware-Updates verschlüsseln> (und manipulierte solche abweisen).
Ich hatte es so verstanden, dass er manipulierte Firmware ablehnen will.
Nicht aber, sie dass er die Binärdaten der Firmware geheim halten will.
Andernfalls wäre die Diskussion über Prüfsummen oder MACs sinnlos.
Es ist vom prinzipiellen Verfahren her irrelevant, ob es sich um
Botschaften handelt, oder um Firmware für einen Bootloader. Der
Bootloader ist schlicht der Empfänger einer Botschaft, die ihn auf
unsicherem Weg erreicht.
Soll hingegen die Firmware selbst geheim gehalten werden, dann läuft es
ganz banal auf Verschlüsselung der Firmware hinaus, ob symmetrisch oder
asymmetrisch.
Roland schrieb:> Im konkreten geht es darum, die Daten die zu einem Bootloader gesendet> werden zu verschlüsseln. Hier spielt im Prinzip eine Absicherung gegen> absichtliche Manipulation keine Rolle und es würde eine gewöhnliche> angehängte CRC-Prüfsumme vom Chiffretext genügen.
Das ist so ziemlich das Gegenteil der ursprünglichen Fragestellung. :-)
> Ich habe nur eben schon öfters gelesen, dass für die Erkennung einer> Manipulation ein MAC erforderlich ist,
MACs begegnet man m.E. dort, wo öffentliche Botschaften authentifiziert
werden müssen. Nicht aber bei ohnehin geheimen Botschaften.
Bei verschlüsselten Daten muss es nur möglich sein, eine korrekte
Entschlüsselung zu erkennen. Dafür reicht es auch aus, in den Plaintext
(Code) vorneweg "Dies ist meine geheime Firmware" zu schreiben und zu
verifizieren.
Bernd K. schrieb:> Aus dem Bauch raus: kein Unterschied (bei gleicher Hash-Funktion und> gleich langem Schlüssel). Bin aber kein Kryptograph und kanns auch nicht> beweisen, also lieber noch mal ne zweite Meinung einholen.
Okay, danke. Ist klar das die Länge der Prüfsumme gleich sein muss, um
überhaupt einen Vergleich anstellen zu können, stimmt.
Christian Berger schrieb:> Aber falls irgendwie möglich, verwende eine Bibliothek. Es ist sehr> wahrscheinlich, dass Du dumme Anfängerfehler machen wirst. Die macht> leider so ziemlich jeder am Anfang.
An welche Fehler denkst Du da zuerst?
---
Also dienen MACs in erster Linie dazu, unverschlüsselte Nachrichten
gegen Manipulation zu sichern und spiele bei Verschlüsselten Nachrichten
eine untergeordnete Rolle?
Ja, das hatte ich anfangs vor, einfach am Ende der Nachricht eine
bekannte Identifikatiossequenz mitzusenden. Nur wenn die Daten weder
Übertragungsfehler aufweisen noch manipuliert wurden können sie korrekt
dechiffriert werden und die bekannte Kennung kann erkannt werden.
Allerdings ist der verwendete Blockchiffremodus CBC ja
selbstsynchronisierend, wodurch eine Identifikatiossequenz am Ende der
Nachricht keine Auskunft über die Korrektheit der gesamten Nachricht
liefert. Es müsste in jedem einzelnen Chiffreblock eine Identifikation
eingepflügt werden, was die Redundanz merklich erhöht.
Roland schrieb:> Also dienen MACs in erster Linie dazu, unverschlüsselte Nachrichten> gegen Manipulation zu sichern
Man kann zur Integritätskontrolle natürlich auch einen MAC verwenden.
Bin grad einem CCM Modus begegnet, der das wohl elegant kombiniert.
Ich frag mich freilich, wie weit du damit wirklich gehen willst.
Immerhin unterscheiden sich kleinere Firmware-Updates üblicherweise nur
wenig vom Vorgänger, was völlig andere Risiken mitbringt als in den
sonst üblichen Einsatzbereichen von Kryptographie. Weshalb man sich dann
lieber gleich mit echten Kryptologen zusammen setzen sollte. Wenn man es
wirklich ernst meint.
Sich mit einem Kryptologen darüber zu unterhalten, ist bestimmt die
beste Option.
Aufgrund Deiner Aussage, dass es bei verschlüsselten Daten genügt, zu
erkennen ob die Entschlüsselung erfolgreich war, habe ich mir überlegt,
ob eine Prüfsumme überhaupt nötig ist. Wenn man eine Blockchiffre im
CBC-Modus betreibt, dann entspricht der letzte Chiffreblock ja dem MAC
des Klartextes. Der Empfänger bekommt den chiffrierten Datenstrom und
entschlüsselt diesen wider mit dem CBC-Modus. Nun weiß der Empfänger ja
nicht, ob der Chiffretext Übertragungsfehler beinhaltet oder Manipuliert
wurde, weshalb auch vom rekonstruierten Klartext nicht bekannt ist, ob
dieser korrekt ist. Nun könnte der Empfänger aber selbst den eben
erhaltenen Klartext selbst wider mittels CBC verschlüsseln, wovon der
letzte Block ja wider der MAC des Klartextes ist. Vergleicht er nun den
eben selbst berechneten letzten Chiffretextblock mit dem zuvor
Empfangenen letzten Chiffretextblock, sollte ja nur dann kein
Unterschied feststellbar sein, wenn der übertragene Chiffretext nicht
geändert wurde.
Wäre das ein gangbarer Weg um die Integrität der Daten festzustellen
oder unzuverlässig?
Roland schrieb:> Im Prinzip würde es> genügen, die CRC-Prüfsumme vom Klartext zu berechnen, die Nutzdaten zu> chiffrieren und an den Chiffretext die vorher berechnete Prüfsumme> anzuhängen. Auch so sollte es einem Angreifer nicht möglich sein, die> chiffrierten Daten zu ändern und eine korrekte neue Prüfsumme zu> generieren, da die Prüfsumme ja vom Klartext und nicht vom Chiffretext> berechnet wurde.>> Ist eine derartige Nutzung der CRC-Prüfsumme dennoch nicht> kryptografisch sicher, wenn ja warum?
Hallo. Ich denke, diese Variante ist nicht kryptografisch sicher. Ein
Grundsatz in der Kryptografie ist es, einem Angreifer keine
Informationen zu geben. In dem Fall hier wären die Prüfsummen des
Klartextes vorhanden, was mir nicht gefallen würde, wenn ich es mit der
Verschlüsselung ernst meine.
Eine bessere Methode wäre es, zuerst zu verschlüsseln, und dann auf den
verschlüsselten Text eine MAC wie zb SHA256 anzuwenden. Der umgekehrte
Weg kann unter Umständen unsicher sein. Da bin ich aber auch nicht drin
- man sieht, Kryptografie hat viele Tücken, an die ein Anfänger
garantiert nicht denkt.
Deswegen unbedingt mit einem Kryptologen sprechen, wenn es euch wirklich
wichtig ist mit der Sicherheit.
Gruß
Roland schrieb:> Aufgrund Deiner Aussage, dass es bei verschlüsselten Daten genügt, zu> erkennen ob die Entschlüsselung erfolgreich war, habe ich mir überlegt,> ob eine Prüfsumme überhaupt nötig ist. Wenn man eine Blockchiffre im> CBC-Modus betreibt, dann entspricht der letzte Chiffreblock ja dem MAC> des Klartextes. Der Empfänger bekommt den chiffrierten Datenstrom und> entschlüsselt diesen wider mit dem CBC-Modus.> Wäre das ein gangbarer Weg um die Integrität der Daten festzustellen> oder unzuverlässig?
Das ist prinzipiell möglich und nennt sich CBC-MAC. Womit du dann doch
eine Prüfsumme hast :-)
Aber bitte bedenken, dass du dafür zwei Schlüssel brauchst. Einen für
die Verschlüsselung der Blöcke, und abschließend einen, mit dem das
Ergebnis "verschlüsselt" wird und dadurch zu deiner MAC wird.
Roland schrieb:> Christian Berger schrieb:>> Aber falls irgendwie möglich, verwende eine Bibliothek. Es ist sehr>> wahrscheinlich, dass Du dumme Anfängerfehler machen wirst. Die macht>> leider so ziemlich jeder am Anfang.>> An welche Fehler denkst Du da zuerst?
Naja, also Du hast ja scheinbar die Idee, dass es eine Prüfsumme gibt,
die man nicht nachrechnen kann. Die gibt es nicht. Du könntest jetzt zum
Beispiel annehmen, dass es in Deiner Situation reicht, einfach eine
gewöhnliche Prüfsumme zu nehmen, und dann einfach ein Geheimnis an Deine
Daten dran zu hängen. Das kann, wenn Du das Geheimnis wirklich geheim
halten kannst, ausreichen, aber nur wenn Du eine kryptographisch sichere
Prüfsumme verwendest. Das sind Prüfsummen wie SHA-2. Und Du gehst davon
aus, dass das Geheimnis wirklich geheim bleibt.
Um wirklich zu wissen was Du brauchst musst Du Dein Problem genau
untersuchen. Wenn Du zum Beispiel kein Geheimnis sicher bei Sender und
Empfänger speichern kannst, brauchst Du zum Beispiel Public Key
Kryptographie. Und die wird wirklich schwierig. Da musst Du dann mit
sehr langen Zahlen rechnen, Du brauchst guten Zufall, und du wirst
erleben, dass Dir Dein Compiler Schwierigkeiten macht.
Ein typischer nicht trivialer Fehler der mir auffällt ist zum Beispiel
folgendes:
Du berechnest eine Prüfsumme beim Empfänger und vergleichst Die mit
einer übertragenen Prüfsumme. Wenn Du Dumm warst, wie zum Beispiel
Nintendo, so nimmst Du zum Vergleich strncmp her. Der Angreifer kann
dann provozieren, dass bei beiden Hashes als erstes Byte eine 0 steht.
Dazu braucht er 256 Versuche. War der Programmierer minimal schlauer, so
verwendet er memcmp. Das hält nicht an der ersten 0, dafür aber am
ersten unterschiedlichen Datenwort. Sprich Du kannst an Hand der
Laufzeit der Prüfroutine sehen, wie viele Datenworte Du richtig hast.
Auf einem 8-Bit Rechner vereinfacht sich das Problem dann auf n*256
Versuche. Dann kann es sein, dass der Rechner Informationen über die
Schlüssel über die Versorgungsspannung leckt, usw...
Kryptographie ist schwierig, das kann man nicht mal eben in 2 Tagen
lernen. Gute Kryptographie erkennst Du daran, dass die Macher am
skeptischsten über ihre Sicherheit sind.
cyblord ---- schrieb:>> doch muss er. Woher soll man denn sonst erkennen das nicht geändert>> wurden ist?> Weil nur Müll beim dekodieren rauskommt.
Damit das funktioniert, muss deine Nachricht so viel Redundanz
enthalten, dass du Müll von echten Nachrichten unterscheiden kannst.
Vielen Dank für die Anworten.
Ein gemeinsamer Schlüssel für die Chiffrierung kann vorab ausgetauscht
werden und sollte zumindest auf einfachem Wege nicht auszulesen sein.
Insofern soll das ganze auf einer symmetrischen Blockciffre beruhen.
Seitenkanalangriffe auf den Empfänger sind natürlich ein Thema für sich
und ein berechtigter Einwand, dass womöglich der Schlüssel auf diese
Weise extrahiert werden kann. Ja, das ist wohl ein gutes Beispiel,
welche Tücken es bei der realen Umsetzung gibt.
xy schrieb:> Das ist prinzipiell möglich und nennt sich CBC-MAC. Womit du dann doch> eine Prüfsumme hast :-)> Aber bitte bedenken, dass du dafür zwei Schlüssel brauchst. Einen für> die Verschlüsselung der Blöcke, und abschließend einen, mit dem das> Ergebnis "verschlüsselt" wird und dadurch zu deiner MAC wird.
Genau darauf zielt meine Frage ab. Eine Möglichkeit, den MAC einer
Nachricht zu bilden ist ja das CBC-MAC-Verfahren, wo der letzte Block
der CBC-Kette dem MAC entspricht. Möchte man nun zusätzlich die Daten
verschlüsseln, gibt es drei Möglichkeiten:
1) MAC vom Klartext berechnen, Klartext verschlüsseln und den MAC
anhängen
2) Klartext verschlüsseln, MAC vom Chiffretext berechnen und anhängen
3) MAC vom Klartext berechnen und an den Klartext anhängen, beides
gemeinsam Verschlüsseln.
Bei der ersten Methode ist mir klar, dass man zwei unterschiedliche
Schlüssel benötigt, weil ansonsten ja der angehängte MAC gleich dem
letzten Chiffreblock wäre und keine Mehrinformation liefern würde.
Bei den letzten beiden Methoden ist mir nicht klar, warum man
unterschiedliche Schlüssel benötigt, da der MAC ja entweder mit
verschlüsselt wurde, oder trotz gleichem Schlüssel anders aussieht als
der letzte Chiffreblock, da er ja vom Chiffretext gebildet wurde.
Weiteres frage ich mich eben, ob man überhaupt eine dieser drei Methoden
benötigt, wenn man beabsichtigt, eine Blockverschlüsselung zu nutzen.
Wenn mit einer Blockverschlüsselung im CBC-Modus verschlüsselt wird,
dann ist der Chiffretext eigentlich sicher (abhängig von der
Blockchiffre) da der CBC-Modus ja die Diffusion deutlich verbessert.
Zusätzlich zum nun erzeugten Chiffretext enthält der letzt Block ja nun
automatisch einen MAC der Nachricht, der beim Empfänger verifiziert
werden kann. Muss dennoch eine der oben genannten Methoden genutzt
werden, auch wenn die Verschlüsselung selbst auf dem CBC-Modus beruht?
Ja, der Angreifer weiß so praktisch den MAC des Klartextes, aber diesen
weiß er genauso, wenn Methode 1 benutzt wird.
Bernd K. schrieb:> Am einfachsten machst Du es in Deinem Falle so daß Du eine ausreichend> lange Prüfsumme an die Daten anhängst und dann erst verschlüsselst> (Daten mitsamt Prüfsumme). Danach wird es unmöglich sein die Daten so> zu verändern daß sie danach noch als gültig erkannt werden, weder> versehentlich noch absichtlich, und schon gar nicht in irgendeiner> sinnvollen [dem Angreifer nützlichen] Art und Weise.
Das ist ohne genauere Betrachtung der Eigenschaften der Prüfsumme und
der Verschlüsselung bestenfalls Glückssache.
Zum Vergleich: die IEEE hatte damals bei der Festlegung der
WLAN-Verschlüsselung (WEP) kein Glück.
(Ein CRC kombiniert mit einer Stromverschlüsselung ist leicht
manipulierbar:
https://de.wikipedia.org/wiki/Wired_Equivalent_Privacy#CRC32_als_Message_Authentication_Code_.28MAC.29)
Wenn man nachprüfen will, ob die Daten manipuliert worden, nimmt man
einen entsprechend sicheren Hash (MAC). Wenn der MAC ebenfalls
manipulationsanfällig ist (z.B. weil man ihn zusammen mit den Daten
überträgt), braucht man einen keyed hash, d.h. einen Hash, den man nur
mit Kenntnis eines Geheimnisses (Schlüssel) korrekt berechnen kann. Am
einfachsten bekommt man den mittels HMAC
(https://en.wikipedia.org/wiki/Hash-based_message_authentication_code).
Nosnibor schrieb:> Wenn der MAC ebenfalls> manipulationsanfällig ist (z.B. weil man ihn zusammen mit den Daten> überträgt), braucht man einen keyed hash, d.h. einen Hash, den man nur> mit Kenntnis eines Geheimnisses (Schlüssel) korrekt berechnen kann.
Genau das schlug ich auch vor (oder meinte ich vorzuschlagen) mit
"ausreichend lange Prüfsumme", ich hätte vielleicht schreiben sollen
krypotographisch sichere Prüfsumme.
Also nochmal was ich meinte:
* kryptographisch sicheren Hash über Plaintext berechnen
* Hash an Plaintext anhängen
* Obiges Ergebnis (Plaintext + Hash) verschlüsseln
Dieses Verfahren wird dann folgende Eigenschaften aufweisen:
* Einsicht in den Plaintext und gezielte Manipulation desselben ohne
Kenntnis des Schlüssels nicht möglich
* Manipulation macht außerdem eine Neuberechnung des Hash notwendig
* Hash kann ohne Kenntnis des Schlüssels nicht berechnet werden da
hierfür Entschlüsselung und anschließende Verschlüsselung notwendig
wäre.
=> Manipulation und Neuberechnung des Hash ohne Kenntnis des Schlüssels
nicht möglich
Ich habe nun mal versucht, das ganze Szenarion, also Berechnen der
Prüfsumme, verschlüsseln, einfaches manipulieren der Daten,
entschlüsseln, erneutes Berechnen der Prüfsumme und verifizieren der
Prüfsumme mittels eines kleinen PC-Programms zu simmulieren. Dabei habe
ich die Prüfsumme mit dem CBC-MAC-Verfahren berechnet und die
Verschlüsselung im CBC-Modus betrieben und die drei möglichen
Betriebsarten durchgespielt.
Wird der CBC-MAC vom Klartext berechnet, der Klartext im CBC-Modus
verschlüsselt und der MAC an die Nachricht angehängt, so sind die Daten
bei Verwendung des gleichen Schlüssels für die CBC-MAC-Bildung und die
CBC-Verschlüsselung wie beschrieben und erwartet nicht gesichert, da die
CBC-MAC-Bildung die Entschlüsselung beim Empfänger praktisch nur wider
rückgängig macht und so auch bei geändertem Chiffetext zum selben
ursprünglichen MAC führt.
Selbes gilt, wenn der CBC-MAC vom Klartext berechnet, an den Klartext
angehängt und beides mit dem selben Schlüssel im CBC-Modus chiffriert
wird. Auch hier macht die CBC-MAC-Bildung beim Empfänger die
dechiffrierung rückgängig und der berechnete MAC ist immer gleich dem
originalen.
Soweit eigentlich so, wie es das Lehrbuch sagt.
Verschlüsselt man jedoch zurest die Daten mittels CBC-Modus und
berechnet dann vom Chiffretext den CBC-MAC mit dem selben Schlüssel,
dann ändert sich der beim Empfänger rückberechnete MAC, sobald die
übertragenen Daten geändert wurden. Das ist soweit auch nachvollziehbar,
da der CBC-MAC bei der Berechnung nochmals verschlüsselt, praktisch der
Klartext zweimal chiffriert wird und beim Empfänger ja vor der
Dechiffrierung der MAC berechnet wird, also keine Invertierung der
Dechiffrierung stattfindet.
Ob das Berechnen des CBC-MAC von den zuvor verschlüsselten Daten mit dem
selben Schlüssel nun kryptografisch sicher ist, dass kann ich freilich
nicht sagen. Ich wollte eben nur testen, ob es generell nicht möglich
ist, die Daten zu sichern, wenn man für CBC und den CBC-MAC den selben
Schlüssel nutzt, da die Erklärungen die ich gefunden habe, nicht
zwischen den drei möglichen Betriebsarten von CBC mit CBC-MAC
unterscheiden.
Bernd K. schrieb:> * kryptographisch sicheren Hash über Plaintext berechnen> * Hash an Plaintext anhängen> * Obiges Ergebnis (Plaintext + Hash) verschlüsseln
Sieht gut aus, da stimme ich dir zu.
Plaintext+Hash sorgt dafür, daß Veränderung auffliegt, wenn der Hash
nicht entsprechend korrigiert wird. Verschlüsselung sorgt dafür, daß der
Angreifer nur noch blind im Plaintext herumstochern kann, aber nicht so
gezielt manipulieren, daß der Hash wieder stimmt.
Ich sehe keinen konkreten Angriffspunkt. Aber den haben mehrere Dutzend
Experten bei WEP auch nicht gesehen.
Die Gemeinsamkeit zu WEP sehe ich darin, daß ein kryptographischer
Mechanismus (Verschlüsselung) dazu verwendet wird, einen anderen (Hash)
aufzuwerten. Und das sieht mir einfach zu sehr nach selbstgebasteltem
pimp-my-crypto aus, als daß ich dem vertrauen könnte. Weil eben
irgendwelche an sich nebensächlichen Eigenschaften der beteiligten
Algorithmen miteinander wechselwirken können.
Verschlüsselung ist eben nur so definiert, daß der Angreifer den
Klartext nicht rekonstruieren kann. Was bei Manipulation passiert… tja,
das hängt von Algorithmus und Modus ab, keine Garantie. Z.B. ist
Stromverschlüsselung (also auch counter mode) anfällig gegen Bitkippen
(wenn ich das 37. Bit des Schlüsseltextes invertiere, ist nach dem
Entschlüsseln das 37. Bit des Klartextes invertiert). Oder ECB: da kann
man Copy'n'Paste mit den Blöcken spielen. Und Hashes haben auch ihren
klar definierten Nutzen. Wenn man mehr damit machen will, kann man seine
Überraschungen erleben ("Verlängerung" von Hashes z.B., also daß jemand
aus dem Hash einer nur teilweise bekannten Nachricht den passenden Hash
einer verlängerten Nachricht berechnet).
Hier ist eben ein keyed hash gesucht (naja, 'ne richtige Signatur wäre
schöner, aber häufig hat man die Rechenleistung nicht und kommt auch
ohne aus), und die Kryptographie bietet so etwas an, ohne daß man mit
Eigenkontruktionen Schiffbruch riskieren muß. Verschlüsseln kann man ja
hinterher immer noch; das ist dann unabhängig vom Manipulationsschutz
und kann ihn nicht stören.
Man sollte das Szenario nicht gänzlich ignorieren.
Bei Firmware stehen dem Angreifer typischerweise nur einige wenige
Versionen der Datei zur Verfügung, die jeweils eine nicht weiter
runterbrechbare Dateneinheit darstellen. Die dafür aber in weiten Teilen
identischen Plaintext haben.
Das ist eine deutlich andere Ausgangslage als in vielen anderen für
Verschlüsselung typischen Szenarien, in denen man meist sehr viel mehr
kleinere Dateneinheiten zur Analyse zur Verfügung hat.