Zeiger sind gotos der Datenstrukturseite
Prof. Dr.-Ing. M. Nagl
Zeiger sind gotos der Datenstrukturseite
Prof. Dr.-Ing. M. Nagl
Mich fragte mal jemand, wieso man mit md5 "verschlüsselte" Passwörter nicht wieder entschlüsseln kann. Dies liegt daran, dass md5 eine Einwegfunktion ist, d.h. eine Funktion, die sich nicht umkehren lässt. Es gibt unendlich viele Funktionsargumente, aber nur eine beschränkte (wenn auch sehr große) Anzahl an Funktionswerten bzw. Bildern. md5 verschlüsselt nämlich nicht, er bildet nur eine Prüfsumme.
Klingt vielleicht auf den ersten Blick verwirrend, ist aber eigentlich ganz einfach. Ich versuche im Folgenden, den Sachverhalt mit einem Beispiel zu verdeutlichen. (Mit der Thematik Vertraute finden sicherlich einige Dinge, die im Detail nicht ganz stimmen; für einen ersten Einstieg in die Materie halte ich es jedoch für verschmerzbar, wenn gewisse Details nicht 100%ig auf den realen Fall übertragbar sind.)
Man stelle sich vor, seine Bankkarten-PIN laute 4711 (entspricht dem Passwort eines Benutzers). Damit sich diese bei der Übertragung vom Geldautomat (entspricht dem Eingabeformular im Browser) zum zentralen Bankserver (entspricht dem Server einer Internetseite) nicht abfängen lässt, wird eine md5-Ähnliche Funktion auf die PIN angewandt, beispielsweise quersumme(4711) = 13. Der zentrale Server überprüft nun, ob die übertragene 13 gleich der Quersumme der gespeicherten PIN 4711 ist.
Wenn nun ein böser Bub die Übertragung anzapft und die Prüfsumme 13 abfängt, so ist es ihm möglich, diese Prüfesumme zu verwenden, um an diesem Automaten Geld abzuheben. Es ist ihm jedoch nicht möglich, daraus auf die geheime PIN zu schließen. Diese kann nämlich nicht nur 4711, sondern bspw. auch 9400 oder 1237 lauten. Es ist nicht möglich, aus der Quersumme auf die ursprüngliche Zahl zu schließen!
Ähnlich verhält es sich auch beim md5-Algorithmus, einmal angewandt kann die Eingabe nicht wieder entschlüsselt werden.
Es ist jedoch möglich, md5 zu knacken, bspw. mittels Brute-Force-Angriffs. Dies bedeutet, dass alle möglichen Eingaben durchprobiert werden, bis man Erfolg hat. Man erhält dadurch (nach einer unter Umständen sehr langen Zeit) ein Argument, für das md5 den selben Funktionswert zurück gibt wie beim "korrekten" Passwort. Abhängen vom gewählten Passwort ist die Chance mehr oder weniger klein, dass es sich dabei um das ursprüngliche Passwort handeln. Ohne weitere Informationen (bspw. Kontext-Informationen) ist es jedoch nicht möglich festzustellen, ob das erhaltende Argument tatsächlich das Passwort des Nutzers ist.
Mit einem kleinen Trick kann man die Sicherheit von md5 oder anderer Hashing-Algorithmen wie SHA-1 jedoch erhöhen: mit sogenannten Salts. Dies ist ein für jede Anwendung spezifischer Wert, der zusätzlich zum Argument übergeben wird. Dadurch ist es einem Angreifer, selbst wenn er einen Hash (Funktionswert) oder gar ein mögliches Argument besitzt, nicht möglich, auf mehr als eine Seite zuzugreifen.
Auf mein obiges Beispiels von Geldautomaten bezogen: Stellen wir uns vor, wir haben zwei Geldautomaten, Automat 1 und Automat 2 mit jeweils passendem Server dazu. Gebe ich meine PIN an Automat 1 ein, so berechnet dieser nicht quersumme(PIN), sondern quersumme(PIN+1); Automat 2 analog dazu quersumme(PIN+2). Lautet die PIN 4711, so berechnet Automat 1 quersumme(4712) = 14. Der böse Bub fängt nun die übertragene 14 ab und schließt, den quersumme-Algorithmus vor Augen, auf eine mögliche PIN 1238. Mit dieser versucht er nun, bei Automat 2 Geld abzuheben was jedoch scheitert, denn quersumme(1238+2) = 7, jedoch quersumme(4711+2) = 15. Der Angreifer muss nun also nicht nur Automat 1 belauschen, sondern zusätzlich rausfinden, welchen Salt Automat 1 verwendet, anschließend Automat 2 belauschen, dessen Salt herausfinden und anschließend versuchen, die gesammelten Ergebnisse so zu verwursten, dass er gültige PINs für die Automaten berechnen kann.
Während dies bei der Quersumme noch relativ einfach möglich ist wird es mit zunehmender Komplexität der Algorithmen immer schwieriger.
Je nach Anwendungsfall reicht md5, besser jedoch md5+Salt. Wer mehr Sicherheit benötigt, sollte SHA-1(+Salt) verwenden oder weitere Stufen, bspw. SHA-256(+Salt).
..
Soeben wurde GTK+ 2.11.0 veröffentlicht und gibt einen ersten Einblick auf das, was uns mit GTK+ 2.12 erwarten wird. Und ich muss sagen: da sind einige Highlights dabei! Hier nun eine Zusammenfassung mit Screenshots:
… erhält der durchschnittliche Deutsche Internetbenutzer laut einer Studie. Schön wär’s! Argh, ich wäre schon froh, wenn ich nur 100 Spam-Mails pro Tag kriege. Allein in den paar Sekunden, in denen ich diesen Beitrag schreibe, sind schon wieder mehrere Mails im Filter gelandet. Alle Spammer an die Wand! Bitte.
Im aktuellen phpMagazin (2.2007) wird mein Artikel "Übersetzers Liebling" veröffentlicht, in dem ich die Vorteile, die man durch die Verwendung des php-Moduls gettext bzw. Danilo Å egans php-gettext erfährt, beschreibe. Es wird erklärt, wie man eine php-Anwendung übersetzbar macht und wie man die einem zur Verfügung stehenden Funktionen zu verwenden hat. Zum besseren Verständnis wird alles zusätzlich durch komplette Beispiele erläutert. Mein dort erwähnter Patch für php-gettext befindet sich hier.
Kommentare und Anregungen können gerne hier in meinem Blog hinterlassen werden; ich werde versuchen sie im kommenden Teil zu berücksichtigen.
Les Cowboys Fringants – Un P’tit Tour
Beim Dreck-Store ist der Name wohl Programm. Nachdem ich mich daran gewöhnt hatte, dass mein überteuerter ogg-Player öfter als mir lieb ist abstürzt, versagte meine externe USB-Festplatte ihren Dienst. Dann fiel mir auf, dass ihr Netzteil ungewöhnlich heiß wird, und eine Recherche im Internet machte mir dann klar, dass mich das nicht mehr wundern sollte:
(einmal kurz am Kabel gewackelt, und tadaa, Qualität made in Fernost)
Das Netzteil trägt wohl CE- (*lach*) und GS-Siegel zu Unrecht, diverse Quellen berichten, es bestehe Brandgefahr. Wunderbar, also den Support angeschrieben, und nach nur zweieinhalb Wochen kam ein professionell verpacktes, neues und hoffentlich ungefährliches Netzteil ohne Entschuldigungsschreiben per Post:
(so sieht ein liebevoll verpacktes "Paket" mit c/o-Absender aus)
Und ich komme endlich wieder an meine Daten.
Ich habe gestern Nacht testweise Mozilla Thunderbird gestartet, mit nur einer guten und drei (!) Spam-Mails gefüttert und heute Morgen 98 Mails abgerufen. Thunderbird erkannte 87 Mails als Spam. 100% korrekt.
Der Spamfilter von Evolution hat bei mir noch nie funktioniert, obwohl ich neben dem Spam-Assassin- auch das Bogofilter-Plugin ausprobiert habe. Als ich dann aber Evolution über ein Terminal startete merkte ich, dass aufgrund eines Konflikts das Anti-Spam-Plugin nicht geladen werden konnte. Die Lösung ist einfach:
Wenn man das Bogofilter-Plugin verwenden möchte, die Datei /usr/lib/evolution/2.6/plugins/org-gnome-sa-junk-plugin.eplug löschen, umbenennen oder verschieben. Möchte man das Spam-Assassin-Plugin benutzen, so verfahre man entsprechend mit der Datei /usr/lib/evolution/2.6/plugins/org-gnome-bf-junk-plugin.eplug.
Et voilà, nachdem ich Bogofilter mit 2000 guten und 5000 Spam-Mails gefüttert habe, hatte ich auch heute morgen mit Evolution keine einzige der 87 Spam-Mails im Posteingang. Perfekt!
Nein, nicht ganz. Leider werden erkannte Spam-Mails nicht als "ungelesen" angezeigt, was die händische Kontrolle erschwert. Hat jemand ‘ne Ahnung, woran das liegt? Die Filteregel »Wenn "Unerwünscht-Test" ist "Nachricht ist unerwünscht", dann "Status nicht setzen": "Gelesen"« hat geholfen :)
Heute Mittag habe ich die letzten Zeichenketten übersetzt, sodass GNOME auch in Version 2.16 wieder komplett auf Deutsch verfügbar sein wird. Ich freue mich besonders, dass ich mich dieses Mal bei gleich sieben Leuten bedanken kann.
Beni Goll (Alacarte), Christian Kintner (u.A. Evolution und Dasher), Hendrik Brandt (u.A. Orca), Jens Seidel (Korrekturlesen), Jochen Skulj (u.A. Tomboy und gEdit), Johannes Schmid (Gnome-Power-Manager) und Michael Kanis (Bug-Buddy, Gnome-Keyring): vielen Dank für eure Mithilfe, alleine hätte ich die Übersetzung kaum fertigstellen können! Es wäre toll, wenn ihr weiterhin am Ball bleibt und eure gesammelte Erfahrung in weitere Übersetzungen steckt, falls ihr mal wieder ein paar freie Minuten habt.
Es gibt noch viele zu übersetzende Programme, wen es also in den Fingern juckt, mal etwas für GNOME zu tun: mein Aufruf gilt noch immer, meldet euch bei Interesse doch einfach auf der Mailingliste.
Beck – Lonesome Tears
Und es schaut dank Inspiration bei famfamfam super aus, oder?
(Nicht meckern, dass ich abgekupfert habe, ist nur eine rein private Seite)
Unter Windows haben mich die "Ihre Festplatte ist voll, leeren Sie doch mal den Papierkorb"-Hinweise genervt, ist doch logisch und unnötig zu erwähnen. Eben bekam ich unter GNOME den Hinweis, das meine Platte zu 99% voll ist, und da fiel mir der Tipp von Microsoft wieder ein.
$ df -h | grep home
/dev/hda4 41G 40G 991M 99% /home
Und nach dem Säubern des Spam-Ordners und dem Löschen von Evolutions Müll-Ordner:
$ df -h | grep home
/dev/hda4 41G 40G 1,5G 97% /home
500MB Spam? Wow.