Re: Re: Re: Suche Hilfe für Jugendforschtprojekt - C++

Stefan Hegselmann stefanhegselmann at gmx.de
Thu Mar 31 23:44:22 CEST 2011


Hier eine Version ohne angehängte Datei. Die andere muss erst vom Moderator geprüft werden.


Schon schickt man die Mail richtig, prasseln nur so die Antworten, danke schonmal.

Am 31.03.2011 17:57, schrieb Jan Seiffert:
> Am 31. März 2011 17:34 schrieb Stefan Hegselmann <stefanhegselmann at gmx.de>:
>>> Die Frage ist also: Wer hat Lust, mal einen Stapel Patches zu
>>> schreiben, damit die Software läuft und vielleicht (GUI) auch für
>>> einen Anwender entspannt zu nutzen ist?
>> Es ist keine Rede von einem "Stapel Patches". Das Programm und die GUI funktionieren. Vielleicht zum Verständnis was ich meine: Z.B. hätte ein erfahrener C++ Programmierer gesehen, dass man srand() anstatt von einem einfachen rand() verwenden sollte, wenn man zumindest einigermaßen zufällige Werte braucht. Ich glaube, dass sich von solchen "Flüchtigkeitsfehlern", die garnicht so stark auffallen, unter Umständen noch weiter im Sourcecode befinden.
>
>
> Und da geht das schon los...
> Dafuer muss der erfahrene Programmierer erstmal wissen fuer was die
> Zufallszahl benutzt werden soll.
> Da du was von verschluesseln sagtest:
> Keine der normalen rand()/srand()/random()/srandom() funktionen
> sollten dafuer genutzt werden.
>
> Nimm entweder was von openssl oder bau dir den random number generator
> nach ANSI X9.31 [1].
> Das heist 32 Byte random aus /dev/urandom holen, aus 16 byte einen AES
> schluessel machen, mit den anderen 16 byte den CTR startwert setzen
> und das ganze immer wieder mit sich selbst im AES-CTR mode
> verschluesseln, womit wir wieder bei openssl waeren um AES zu
> bekommen.
>
> Oder einen der ganzen anderen tollen Zufallszahlen Generatoren.
>
> [1] http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
>

Zack! Danke für die Info, aber sowas meine ich halt. Von solchen kleinen Verbesserungen befinden sich bestimmt noch welche im Code, die ich einfach ausbügeln möchte. Und letzendlich habe ich am Programm nicht zuu viel geändert...


Am 31.03.2011 18:15, schrieb Jan-Benedict Glaw:
> On Thu, 2011-03-31 17:34:29 +0200, Stefan Hegselmann <stefanhegselmann at gmx.de> wrote:
>>> Die Frage ist also: Wer hat Lust, mal einen Stapel Patches zu
>>> schreiben, damit die Software läuft und vielleicht (GUI) auch für
>>> einen Anwender entspannt zu nutzen ist?
>> Es ist keine Rede von einem "Stapel Patches". Das Programm und die
>> GUI funktionieren. Vielleicht zum Verständnis was ich meine: Z.B.
>> hätte ein erfahrener C++ Programmierer gesehen, dass man srand()
>> anstatt von einem einfachen rand() verwenden sollte, wenn man
>> zumindest einigermaßen zufällige Werte braucht. Ich glaube, dass
>> sich von solchen "Flüchtigkeitsfehlern", die garnicht so stark
>> auffallen, unter Umständen noch weiter im Sourcecode befinden.
>
> Naja, läuft auf 'nen Code Review hinaus :)  Zufallszahlen würd' ich
> optimalerweise allerdings nicht aus der libc nehmen, sondern eher die
> libgcrype zulinken.
>

Gut ihr habt mich überzeugt. Die Zufallszahlen kommen nochmal ran!!
Codereview hört sich so professionell und teuer an ;D. Dazu später mehr...

>>> Hilfreich wär' es, wenn Du dazu erstmal das
>>> SVN/SVN/GIT/hg/...-Repo irgendwo öffentlich hinstellen würdest.
>>> Helfen kann man wohl nur, wenn die Sourcen auf dem Tisch liegen.
>>> Und vielleicht etwas mehr Detail-Infos, als man von der Webseite
>>> bekommt.
>> Ich wüsste gerne wer unseren Sourcecode hat. Also wer interesse hat
>> melden, dann bekommt er/sie eine Einladung zu unserem SVN-Server.
>>
>> Also nochmal: Keiner soll hier mein Prorgamm schreiben bzw.
>> überhaupt was daran ändern. Vielleicht gibt es ja garnichts zu
>> verbessern. Nur würde ich mich sicherer damit fühlen, wenn jemand
>> Erfahrenes mit mir den Code nochmal durchgehen könnte.
>
> Na dann mal los. Allerdings vermute ich, daß Du mehr Reviewer findest,
> wenn die Sourcen zugänglich sind. Denn letztlich ist das
> Arbeitsleistung, die entweer der Öffentlichkeit zugänglich sein
> sollte, oder als Leistung einem Projekt gegenüber erbracht wird. Dann
> kostet das :)

Am 31.03.2011 19:51, schrieb Nico Bredenbals:
> Nebenbei solltest du vielleicht überlegen ob du den Quelltext nicht
> doch offen stellst
> (lesend natürlich). Gerade Crypto-Tools sind closed source zumindest fragwürdig,
> darüber hinaus aber auch in aller Regel leicht zu brechen, eben aufgrund der von
> dir gebrachten Einwände.
>
> Schönen Gruß,
> Nico

Erstmal vorneweg: Daumen hoch für open source, aaaber ich bin unsicher was unsere Juroren dazu sagen, dass wir unser Projekt-Herzstück in alle Welt rausballlern. Ich würde immer noch ein nettes Treffen mit einem von euch präferieren ;-).  Das die Source von einem Verschlüsselungsprogramm allen zugänglich sein sollte steht außer Frage.

Geld gibts bei uns leider nischt -.-'

>> Der scheinbar hundertprozentige Schutz, wie er z.T. von Anbietern
>> von Webservern und lokaler Datenverschlüsselung suggeriert wird,
>> hält dem ambitionierten Hacker und erst recht dem bösartigen Cracker
>> in der Regel nicht lange stand.  Woran liegt das? Als das zugrunde
>> liegende Problem erachten wir, dass alle aktuellen Lösungen zur
>> Verschlüsselung von Daten eine Passworteingabe durch den Benutzer
>> voraussetzen.Zudem fällt es vielen Menschen im Alltagsleben schwer,
>> sich ein sicheres Passwort auszudenken und zu merken.  Aufgrund
>> dieser Tatsachen konnten Angriffsmethoden stark spezialisiert werden.
>> So sind über die Jahre mehrere ausgefeilte Techniken wie z.B. ein
>> Wortlistenangriff oder Keylogger entstanden, die sogar den besten
>> Schutz unbrauchbar machen, da letztere noch vor der Kodierung das
>> Passwort mitschreiben. Wir wollen einen Ansatz der Datensicherung
>> entwickeln, der gegen derartige passwortspezialisierte Angriffe immun
>> ist. Die Grundidee besteht darin, die zu schützende Datei mit Hilfe
>> sich nicht ändernder Daten, wie z.B. Video-, Musik- und
>> Fotobibliotheken, zu verschleiern.  Von Daten solchen stabilen Typs,
>> für die eine derartige Anwendung in Frage käme, befinden sich 300
>> Gigabyte allein auf unserem Arbeitscomputer, von externen Inhalten
>> einmal abgesehen.  Im Folgenden wird für die zu versteckende
>> Quelldatei der Name „Savedatei“, für die Daten des stabilen Typs,
>> die zum Verschlüsseln benötigt werden, der Name „Bufferdateien“ und
>> für die verschlüsselte Form der Savedatei der Name „Keydatei“
>> benutzt. Identische Bytesequenzen in Saveund Bufferdatei heißen
>> „Cluster“.  Unser Ansatz sieht vor, dass wir in der Save- und
>> Bufferdatei nach allen bestehenden Clustern suchen. Indem die Cluster
>> in der Savedatei durch ihre Adressen in der Bufferdatei ersetzt
>> werden, wird die Keydatei gebildet. Diese beinhaltet statt des
>> ursprünglichen Inhalts Adressen. Ohne das genaue Wissen um die
>> „richtige“ Bufferdatei sind keine Rückschlüsse auf den ehemaligen
>> Inhalt zu ziehen. Damit realisiert man eine Datensicherung ohne
>> Passwort. So ist es z.B. möglich, sensible Daten mit Hilfe der
>> Urlaubsfotos zu verstecken.
>
> Informatiktechnisch gesprochen wollt Ihr also den Klartext
> _komprimieren_, indem Ihr statt eines gängigen huffman coding
> Fragmente vorhandener Date(ie)n nutzt.
>
> Das Wissen von "Password" wird durch das Wissen von "Dateiname",
> "Dateinamen" oder "Basis-Verzeichnis für Date(ie)n" ersetzt.
>
> Beispiel:
> =========
> Zu verschlüsselnder Text ("Save"): "Hallo Welt"
> Verschleierungsdatei A ("Buffer"): "...und er rief: "Hallo Leute!""
>                                                      ~~~~~~
> Verschleierungsdatei B ("Buffer)": "Neues Weltkulturerbe eingeweiht"
>                                           ~~~~
> Verschlüsseltes Ergebnis ("Key"):  "A18-23,B7-10"
>
>
> Hab' ich das richtig verstanden?
>
> Das impliziert ersteinmal, daß man von den Positionsangaben die
> Mindest-Dateigröße ableiten kann; wenn man die "Key"-Datei hat, kann
> man für jede "Buffer"-Komponente, die man vorfindet, eine
> Mindest-Dateigröße ermitteln, da jeder "Buffer" ja vermutlich mehrfach
> genutzt wird.

Dazu haben wir das sogenannte "Zeigerhiding" entwickelt. Dabei wird die Bufferdateigröße beliebig oft aufaddiert und beim Entschlüsseln per Modulo extrahiert. (Siehe Arbeit)

> Außerdem muß ja letztlich eine sinnvolle Datei (Text, Bild, ...) dabei
> herauskommen, heißt also, daß man insbesondere typischerweise mit den
> ersten (wenigen) Clustern einen Datei-Anfang zusammengebaut bekommen
> muß, der die magic bytes des Datei-Anfangs eines gängigen Datei-Typs
> entsprechen sollte--oder plain text ist.

Es kommt keine sinvolle Datei dabei raus.

> Aus den Angaben der "Key"-Datei erhält man zudem bytegenau die Größe
> der "Save"-Datei. Ein potentieller Angreifer bekommt damit schon eine
> ganze Menge an Informationen an die Hand gegeben.
>

Savedateigröße gibt es nicht!

> Habt Ihr eine Risiko-Abschätzung gemacht, um das Verfahren mit
> alteingesessener Verschlüsselung zu vergleichen? Letztlich scheint es
> ja darauf hinauszulaufen, daß das Password, was die Key-Generierung
> bei einer Verschlüsselung befüttern würde, durch das Wissen um einen
> Dateinamen ersetzt wird. Was, wenn (im schlechtesten Fall) der
> "Save"-Text vollständig in einem Buffer enthalten ist und in der
> "Key"-Datei somit nur ein "Cluster" steht? (Beispiel: Viele
> Raw-Dateien von Digital-Kameras enthalten ein brauchbares JPEG, das
> man speichern kann. Sollte das gespeicherte JPEG verschlüsselt werden,
> würde vielleicht das JPEG in der RAW-Datei gefunden werden, sodaß der
> Angreifer damit erfährt, daß das Geheimnis irgendwo ___im Klartext___
> auf dem Rechnerliegt.)
>

Ja haben wir gemacht. Natürlich gibts es Nachteile, aber es ist eine Forschungsarbeit. Clustergrößen sind 2-9 Bytes.  So wird niemals alles durch alles referenziert. Alles sehr oberflächlich, aber Hut ab, dass du es schon so gut verstanden hast. Ich hänge mal die ganze schriftliche Arbeit an, dann kannste nen wenig stöbern (Hoffe das klappt mit der  Mailinglist)

>> Rein mathematisch ist die Chance, Cluster zu finden, extrem gering,
>> was gegen eine praktische Anwendung spricht. Bei unseren
>> anfänglichen Tests stellten wir jedoch im Gegensatz zur Theorie
>> fest, dass identische Datensequenzen relativ erfolgreich gefunden
>> werden können. Durch diese ersten Ergebnisse motiviert, haben wir
>> das Programm „Puzzlr“ entwickelt, welches wir im Folgenden weiter
>> erläutern werden.
>
> Gering? Im schlechtesten Fall kannst Du mit einer 256 Bytes großen
> Datei, die alle Bytes von 0x00 bis 0xff enthält, _alles_ auf dem
> skizzierten Weg verschüsseln. Die Cluster sind dann zwar ggf. nur
> jeweils ein Byte lang, aber hey, es würd' gehen :)  Auf die Nase fiele
> man maximal, wenn dummerweise ein Byte im Savetext auftaucht, daß sich
> _nirgends_ in den Buffer-Daten findet.

Siehe Arbeit.

>
>> Zum jetzigen Zeitpunkt liegt eine größtenteils funktionsfähige
>> Ausführung des Programms vor, die seit dem Einreichen dieser Arbeit
>> zur Regionalrunde um folgende Funktionen ergänzt wurde:
>> Sprungtabellen zum schnelleren Suchen von Clustern, Verschleiern der
>
> Zu erschlagen mit Rainbow-Tabellen.

Schau ich mir gleich mal an. Wir haben auch schon Begriffe wie Succinct und Suffix Index bekommen, aber da diese nicht perfekt geeignet sind (glaube ich zumindest), wollte ich bei Selbstausgedachten Dingen bleiben. Dann weiß ich auch wobei ich bin.

>> Adressen um Rückschlüsse auf die Bufferdateien zu minimieren und ein
>> verbesserter Algorithmus zum Wählen der besten Kombination von
>> Clustern.Bei der Präsentation wurden uns neue, vor allem schnellere
>
> Wie werden die Adressen "verschleiert"? Und: eine "optimale"
> Cluster-Nutzung kann (wie oben anhand des Raw-Datei-Beispiels) das
> Gegenteil dessen sein, was man möchte :)
>
>> Möglichkeiten aufgezeigt gleiche Fragmente zu finden, welche wir bis
>> zum Landeswettbewerb implementieren wollen. Weiterhin soll die
>> Stabilität des Programms – einschließlich der grafischen Version –
>> soweit verbessert werden, dass wir unsere
>> Verschlüsselungsmöglichkeit einem breiten Spektrum von
>> Computernutzern zugänglich machen können, um so auch in Zukunft ein
>> hohes Maß an Sicherheit zu gewährleisten.
>
> Hier solltet Ihr, wenn möglich, auf jeden Fall nochmal tüchtig in die
> Mathematik gehen und durchrechnen, wie die Angriffsmöglichkeiten
> aussehen.
>

Siehe Arbeit.

Am 31.03.2011 19:51, schrieb Nico Bredenbals:
> Hi,
>
> Also gerade die mathematische Seite würde mich da auch interessieren,
> mit allen Einwänden die JBG gerade schon gebracht hat.
>
> Ich würde dir vielleicht mal ein einführendes Cryptobuch nahelegen.
> Ich Empfehle:
>
> Introduction to modern Cryptography von Jonathan Katz & Yehuda Lindell.
>
> Das ist vielleicht etwas mit Kanonen auf Spatzen geschossen, weil es
> sich vor allem um weiterführende Verfahren dreht, aber ich denke eine
> theoretische
> Einführung aller Shannon Theorem, Caesar / Vigenere Cipher + Beispielangriffe
> bildet ne sehr gute fundierte Grundlage um die Sicherheit zu analysieren.
> Gibts sicherlich auch in jeder gut sortierten (Uni) Bibliothek.
> [...]
>
> Schönen Gruß,
> Nico
Danke für den Tipp. Wenn ich Zeit finde, werde ich mir das mal geben...


Hoffe ich habe alles richtig beantwortet. Das ist ja bei diesen Mailinglisten etwas schwerer ^^. Danke nochmal für das rege Interesse.
Ich hänge mal unsere schriftliche Arbeit an und hoffe das gibt keine Probleme.

Was ich nicht will (Worst-Case): Wir gewinnen und dann kommt irgendwer her und meint die LUG OWL hätte unsere Arbeit geschrieben. Wenn es soweit kommt warnt mich...

mfg Stefan

-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de



More information about the Linux mailing list