Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

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

Re: Lars Password Saver Ver.: 2.6 NEUE VERSION!!! Tester ges

  Alt 22. Feb 2008, 00:07
Lars fragte per PN wie sicher sein Safe denn wäre. Ich poste hier mal meine Antwort. Leider habe ich bisher nicht die Zeit gehabt mir das Vorgehen in seinem Safe anzuschauen weswegen ich in meiner Antwort an ihn von einem hypotetischen Passwortsafer ausgehe so wie ich diesen programmieren würde.

Zitat:
wie du vielleicht geshen hast habe ich einen kleinen Password Saver programmiert und wollte dich mal fragen ob das verschlüsselungstechnisch alles sicher genug ist? Zurzeit benutze ich DEC 5.1 oder welche die aktuelle ist und Blowfish! Ist das unsicher oder sicher?
Hi Lars,

das ist unsicherer, man muß aber hinterfragen -> zu welchem Maßstab ?

Angenommen wir haben 10 sehr gute Passwörter, jedes 128 Bit und per Zufall erzeugt. Nun speichern wir diese in einen Safe der mit einem Passwort a 128 Bit und Zufall geschützt ist, dann ist das unsicher. Eigentlich logisch, da der Angreifer nun nur noch ein Passwort knacken muß statt 10 Stück, jedes einzeln.
Diese mathematische, also kryptographisch absolute, Betrachtung zeigt uns das ein Passwort-Safe erstmal als unsicher einzustufen wäre.

Gehen wir von einem Menschen aus. Dieser hat 10 Passwörter, aber alle so schlecht weil er sie sich merken möchte. Man kann sogar davon ausgehen das sich diese 10 Passwörter nur wenig unterscheiden, also im Grunde sich teilweise wiederholen. Man kann auch davon ausgehen das mit diesen 10 Passwörtern viel mehr accounts geschützt werden, also ein Passwort an meherern Stellen benutzt wird. Dann ist jedes einzelne dieser Passwörter im Vergleich zu einem 128 Bit Zufallspasswort schon lächerlich unsicher.

Würde man diese Passwörter in einen Safe speichern der mit einem 128 Bit Zufallspasswort geschützt ist dann macht das die Situation nicht besser. Man kann ja diese 10 schlechten Passwörter in einem fast schon lächerlich wirkenden Bruchteil der Arbeit knacken, im Vergleich zum 128 Bit Zufallspasswort.

Würde man aber einen Safe konstruieren bei dem

1.) alle Passwörter automatisch erzeugt würden und aus 128 Bit Zufall bestehen, und somit durch den Menschen nicht gemerkt werden müssen
2.) dieser Safe mit einem sehr guten und langem menschlichen Passwort geschützt ist (zb. ein dämlicher Spruch mit ca. 56 Buchstaben)

dann wäre das ein guter Kompromis aus menschlicher Schwäche und maschineller Stärke. Man müsste als Angreifer die im Safe gespeicherten Passwörter knacken, was aber auf Grund deren Stärke nicht möglich ist. Sind ja durch die Maschine und echtem Zufall erzeugt worden und somit auch auf ihre Qualität hin optimierbar. Also wird der Angreifer die mit diesen Passwörtern geschützten Accounts nicht angreifen können. Der Angreifer muß nun in den Besitz des Safes kommen und versuchen das Masterpasswort zu knacken. Wenn dieses Passwort sehr gut gewählt wurde und der Mensch sich nur noch dieses eine Passwort merken muß, dann kann der Angreifer auch dieses nicht so einfach knacken. Durch die Automatik des Safes wird der Anwender das Gespür für Sicherheit bekommen und nun für jeden Account ein eigenes Passwort erzeugen lassen, es ist ja jetzt mit par Mausklicks erzeugt und abgespeichert. Auch das erhöht die Sicherheit im Vergleich zu heutigen Passwörtern die durch Menschen gewählt werden.

Bleibt nur noch die Fragestellung wie der Safe programmtechnisch diese Passwörter im Safe schützt. Da kann man einiges falsch machen. Als erstes müsste jedes Passwort im Safe durch einen echten Zufallssalt xor'verküpft werden. Danach wird der Zufallssalt und das Passwort verschlüsselt, beide Werte bestehen aus Zufall und so entsteht quasi ein Random-Orakel-Model. Jedes der so verschlüsselten Passwörter sollte die gleiche Anzahl an Bytes haben. Zb. der Safe kann mit Passwörtern mit maximaler Länge von 256 Bytes arbeiten. Dann müssen auch bei kürzeren Passwörtern immer diese 256 Bytes + der 256 bytes Zufallssalt verschlüsselt werden. Somit elimiert man aus Sicht eines Angreifers das Erraten der Länge eines Passwortes. Als nächstes wird jeder dieser Passwort-Datensätze separat verschlüsselt, mit dem Masterkey umgewandelt per KDF + Zufallssalt in einen Sessionkey. Das wird in der DB gespeichert zusammen mit dem Namen/Info/Bezeichnung des Passwortes. Es ist also falsch alle Passwörter in einer Datei zu speichern und diese in einem Rutsch zu ver-/entschlüsseln !!
Als weiteres würde ich in meinem Passwort-Safe, wenn ich einen programmieren würde, einen Cipheralgo. benutzen wie AES oder noch besser einen polymorphen Cipher wie meinen PMC. Ein Polymorpher Cipher hat keine feste Verschlüsselungsfunktion so wie beim AES. Sondern diese "Verschlüsselungsfunktion" ist variabel, also polymorph, und hängt direkt vom benutzten Passwort und den geschützten Daten ab. Wenn man also mit einem PMC Daten verschlüsselt so kann ein Angreifer zwar die Software des Passwort-Safes analysieren das nützt ihm aber nichts. Denn nur mit dem korrekten Passwort wird die richtige Verschlüsselungsfunktion kompiliert die die Daten auch wieder entschlüsseln kann. Stelle es dir so vor: Wir nehmen AES + Blowfisch + Twofisch + IDEA. Nun erzeugen wir mit dem Passwort als Startwert=Seed eine Zufallsfunktion. Diese erzeugt einen Bitstrom der vom Passwort abhängig ist. Nun produzieren wir ein Byte und diese dient als Index in unsere 4 ausgewählten Verschlüselungsalgorithmen. Diese sind natürlich auch initialisert. An Hand dieses Bytes wählen wir den zu benutzenden Algo. aus mit dem wir 1 Datenbyte verschlüsseln. Nun mein Polmorpher Cipher arbeitet aber anders. Er erzeugt einen Passwort abhängigen hoch komplexen Bitstrom und benutzt diesen Bitstrom um einen Maschinencode zu erzeugen, quasi wie ein pseudozufälliger Kompiler. Der PMC erzeugt nun einen Maschnencode der zb. 256Kb groß ist. Mit diesem Maschinencode wird nun ein Datenbyte verschlüsselt. Dann wird erneut ein Maschinencode kompiliert mit Hilfe des pseudozufälligen Bitstromes, es entsteht ein neuer 256Kb großer Maschinencode. Das geht dann für 256 Bytes an Daten also 256 mal. 256 * 256kb=64Mb an Code beträgt also unser eigentlicher Verschlüsselungscode und das Masterpasswort ist quasi der Bauplan. Stell es dir so vor: Du hast ein Haustürschloß ohne innere spezifischer Mechanik. Nun schiebt man diesem Schloß einen Schlüssel rein, dieser stellt den Bauplan dar. Das Schloß baut dann seine Innereien nach diesem Bauplan erst fertig.

Würde ein Angreifer nun versuchen eine Maschine zu konstruieren die diesen Safe nachbaut so hätte der Angreifer aber immer noch nicht den kompletten Bauplan zur Verfügung. Erst mit dem exakt richtigen Passwort wäre der Bauplan vollständig und man könnte die Daten entschlüsseln. Also muss der Angreifer jeden der möglichen Baupläne durchprobieren und dazu muß er in jedem Falle die 64Mb an Code jedesmal erneut kompilieren. Somit verhindert man damit die Möglichkeit schnell eine Brute Force Attacke machen zu können. Man verhindert die Parallelization der Brute Force Attacke. Wenn man jedem Chinesen im Fernseher einen DES-Cracking-Chip einbauen würde so könnte die Chinesische Regierung jeden beliebigen 64Bit-DES-Schlüssel in par Sekunden nur durch probieren knacken. Auch andere Cipher wie AES mit festen und bekanntem Algorithmus kann man so parallelizieren, aber einen PMC der für 256 Bytes erst einen 64Mb Code kompiliert kann man damit nicht knacken so einfach knacken da der eigentliche Code variabel ist. Man muß also den Compiler paralelizieren und der Compilationsprocess benasprucht Resourcen im Vergleich zu einem festen Cipher wie AES den man zb. in FPGA-Hardware direkt programmieren könnte.

Also für einen Passwortsafe der auf reiner Software basiert würde ich nur sowas benutzen.

Man kann zusätzlich noch eine Kombination von Masterpasswort benutzen das aus Eingabeedit + Maustastenfeld + eine Datei auf dem Rechner besteht. Der Anwender gibt im Edit einen Teil des Passwortes ein. Danach kommt ein Tastenfeld mit Buttons deren Bedeutungen sich jedesmal verändern, so wie eine Telefontastatur nur das sich die Zahlen darauf jedesmal anders anordnen. Die Zahlen/Buchstaben auf dieser Tastatur bestehen aus Bitmaps, die Controls dürfen nicht identifizierbar sein für Spysoftware. Und danach wählt der User eine Datei auf dem Rechner aus. Bei diesem Verfahren ist es wirklich schwer per Trojaner noch was zu machen. Theoretisch müsste ein Angreifer also auch alle Dateien auf einem Rechner samt Passwortsafe stehlen. Denoch kann sich ein Trojaner gezielt auf diese Methoden einstellen, das geht bei einem ansich ungeschützen System niemals zu vermeiden.

Alles vorausgesetzt man muß in Software arbeiten. Wenn man aber auch kryptographische Hardware anwenden darf dann gehts bei weitem sicherer. Dann benutzt man eine programmierbare SmartCard deren Elektronik einbruchsicher ist. Dann dürfen aber die darin gespeicherten und erzeugten Passwörter nicht diese SmartCard verlassen. Dh. jedesmal wenn man Daten ver-/entschlüsseln möchte muß man das der SmartCard überlassen.

Wichtig ist aber eines: traue niemals einem Passwortsafe dessen Source du nicht kennst und bei dem du nicht sicher sein kannst das die mitgelieferte Source auch die Basis der EXE darstellt.

Ich würde also so vorgehen:

1.) Safe erzeugt immer 192Bit lange zufällige Passwörter
2.) diese Passwörter werden per MIME64 in Text umgewandelt -> 192*4/3==256/8==32 Buchstaben lang, wenn der User sie benötigt.
3.) vor der Verschlüsselung wird ein 192 Bit Zufallswert erzeugt
4.) das Passwort wird damit xor'verknüpft
5.) dieser Salt + xor'verknüpftes Passwort = 384/8=48 Bytes werden verschlüsselt, Random-Orakel-Modell
6.) als Sessionkey dafür wird ein 192Bit Zufallssalt und eine KDF (Schlüsselableitungsfunktion die mit einem Hash arbeitet, hash muß mindestens 192 Bit breit sein) und das Masterpasswort benutzt
7.) der 192 Bit Sessionkeysalt + die 384 Bits an verschlüsselten Daten werden gespeichert als Password-Record = 576 Bits = 72 Bytes.
8.) zu diesem Datensatz kommt nun noch die Info/Bezeichnung etc.pp. hinzu, wenn diese Verschlüsselt sein soll dann muß sie separat verschlüsselt werden, nicht mit den Passwortdaten zusammen, ganz wichtig !!
9.) das Masterpasswort setzt sich zusammen aus mehreren Faktoren -> siehe Mehrfaktorsysteme. Also zb. Passwortedit und 8 Ziffern per Maustastatur gewählt und eine Datei auf der HD. Das Masterpasswort sollte so circa. 58 Buchstaben enthalten, entspricht einem 128Bit Binärpasswort
10.) der komplette Safe samt Software befindet sich auf einem USB-Speicherstick der immer wie ein Schlüssel getragen wird
11.) als Verschlüsselungsalgo. entweder AES oder besser noch ein PMC. Wichtig ist auch das der Verschl.Algo. eine Blockgröße von zb. 384 Bits hat. Das heist unser Passwort+XOR-Salt passt direkt in einen Block des Cipher-Algos. rein. Diese 384Bits bietet AES leider nicht, man kann aber tricksen.
12.) als Ciphermode einen Modus nehmen der möglichst ein sehr kleines Feedback-Register benutzt. Zb. cmCFS8 ist gut geeignet, benutzt 8 Bit als Feedback. Das bedeutet das zb. AES pro Datenbyte insgesamt 16 mal verschlüsselt. Noch besser wäre ein 1 Bit Feedbackmodus. Das würde bedeuten das man mit AES einen Datenblock a 384 Bit pro Bit 128 mal AES drüber laufen lassen würde.
13.) fordert der User nun nach einem Schlüssel im Safe so wird er diesen über dessen Namen aus der Datenbank auswählen und nur dieser Passwort-Record wird entschlüsselt, niemals die komplette Datenbank.
14.) Das Masterpasswort könnte im protected Storage Bereich des Windowssystem zur Laufzeit ziwschengespeichert werden. Gegen einen guten Trojaner/Rootkit ist auf einem unsicheren System eh kein Kraut gewachsen. Somit muß der User nur eimalig das Masterpasswort eingeben pro Session. Das sollte aber im GUI konfigurierbar sein.
15.) Das Program kann verschiedene Passwortcontainer verwalten, natürlich jeder mit anderem Masterkey

So das wären die Mindestvoraussetzungen für einen Passwortsafe wie ich ihn programmieren würde. Auf Anti-Cracking-Tricks sollte verzichtet werden. Ein unsicheres Betriebsystem kann nicht per Tricks sicherer gemacht werden. Ansonsten könnte man noch durch komplexere mathematisch kryptographische Verfahren einiges verbessern. Zb. über ein Secret Sharing könnte man die Passwörter noch besser schützen. Oder ein Teil des Masterkeys stammt aus einer Bilddatei in die per Steganographie die zusätzlichen zufälligen Passwortbits eingebettet wurden.

Gruß Hagen
  Mit Zitat antworten Zitat