Auf der Suche nach guten kleinen Umsetzung DES
Ich bin auf der Suche nach einem guten permissive-Lizenz (BSD/MIT-oder PD) DES-Implementierung in C, mit einem minimalen Laufzeit-Speicherverbrauch (d.h. minimale Anzahl von lese-schreib-Speicher, und vorzugsweise kleiner code/Tabelle Größe zu). Geschwindigkeit ist nicht ein Problem; in der Tat, in mancher Hinsicht langsamer ist besser, denn es bietet einige natürlichen Schutz gegen brute-force-login-versuche.
Allen traditionellen Implementierungen, die ich gesehen habe tun faul/Laufzeit Initialisierung von großen Tabellen, die ist, was ich versuche zu vermeiden. Ich würde gerne die Tabellen in static const
Daten in binary -, und in der Tat dies ist, was ich Teils gehackt auf eine Umsetzung habe ich jetzt, aber ich Frage mich, ob es irgendwelche bestehenden Implementierungen, die einen besseren job machen, um die Größe der Tabellen auf Kosten der performance, so dass der binäre ist nicht so groß (~50kb der Tabellen).
Hinweis: ja, DES nervt. Die bestimmungsgemäße Ingebrauchnahme der Fall ist für die Umsetzung der crypt
Funktion für den Umgang mit klassischen Passwort-logins.
- Gibt es einen Grund, Sie wirklich wollen, um die Nutzung DES heute nicht mehr modernen algorithmen? Und was wollen Sie tun, wirklich alles verschlüsseln, oder die Implementierung einer hash-Funktion oder ähnliches auf Basis DES (wie Ihre Erwähnung von "brute-force-login" zeigt)?
- Dies ist vermutlich für die Implementierung der POSIX -
crypt(3)
Funktion? Wenn ja, sollten Sie wahrscheinlich fügen Sie diesem Zusammenhang auf die Frage. - Ja, werde ich hinzufügen, dass.
- Der Grund, warum der lookup-Tabellen verwendet werden, ist für die Geschwindigkeit. Haben Sie wollen zu optimieren für kleine Speicherbedarf, oder was? EDIT: Tatsächlich, ja, Sie haben erwähnt, dass, ich nicht zu Lesen.
- Mein Verständnis ist, dass die sbox Tabellen notwendig sind und es schwierig oder unmöglich zu optimieren, aber das wird die permutation, die Tabellen sind nur Optimierungen für die Geschwindigkeit. Vielleicht sollte ich einfach RTF besser, genau herauszufinden, was Sie gewohnt sind, und ersetzen Sie die Tabelle lookups mit code zu tun, was Sie tun.
- Warum gehst du nicht einfach nehmen
crypt
von BSD selbst? - Der code, den ich jetzt verwende ist indirekt abgeleitet von BSD
crypt
, aber es hat die Probleme, die ich in der Frage beschriebenen (~50k von Lesen-schreiben-Tabellen, von denen die meisten unnötig). - Sorry, ich bin immer noch nicht verkauft, die auf Ihrem DES ... müssen traditionelle
crypt
mit DES ist in sich leicht gebrochen, mit brute-force durch alle welche können Ihre gespeicherten (gehashte) Passwörter. Tun Sie wirklich brauchen, um zu gestatten, die Anmeldung mit bereits vorhandenen gespeicherten Passwort-Tabellen? Wenn nicht, besser, verwenden moderne algorithmen wie bcrypt oder PBKDF-2 mit einem geeigneten Faktor Arbeit. (Scrypt ist auch widerstandsfähiger gegen brute-force, aber möglicherweise nicht für Ihre "low-memory" - Anforderung.) - Ich Stimme den anderen algorithmen sind "besser", aber Sie sind nutzlos, hier im Sinne von nicht-treffen-Kompatibilität braucht. Hashes sind nicht zugänglich und so ist die einzige Schwäche DES
crypt
ist die Tatsache, dass nur 8 bytes des Passworts sind signifikant.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beispiel mit MIT-Lizenz und die version von libtomcrypt ist völlig kostenlos für alle Zwecke.
Die erste version scheint zu tun, lazy-Initialisierung der Tabellen, in der Erwägung, dass Sie statisch sind consts in der libtomcrypt. Aber libtomcrypt scheint Ihnen eine Zusammenstellung Flagge für Geschwindigkeit vs. Größe, es gibt eine
#ifndef LTC_SMALL_CODE
vor der größeren Tabellen, vielleicht kann Ihr problem lösen?0x800000>>i
?!)Den source-code-Abschnitt aus der Angewandten Kryptographie hat links zu einer großen Zahl von des-Implementierungen - ich habe noch nicht angeschaut, Sie alle, aber es gibt eine gute chance, dass zumindest einer von Ihnen Ihren Bedürfnissen entspricht.