it-swarm-eu.dev

Warum sollten wir nicht unsere eigenen rollen?

Warum sollten wir keine eigenen Sicherheitssysteme erstellen?

Ich sehe hier viele Fragen zu benutzerdefinierten Krypto- und Sicherheitsmechanismen, insbesondere zum Passwort-Hashing.

In diesem Sinne suche ich nach einer kanonischen Antwort mit den folgenden Eigenschaften:

  • Für einen Neuling leicht zu verstehen.
  • Klar und deutlich in , warum das Rollen Ihrer eigenen eine schlechte Idee ist.
  • Bietet starke Beispiele.

Obligatorisch xkcd.

255
Polynomial

Sie können Ihre eigenen rollen, aber Sie werden wahrscheinlich einen großen Sicherheitsfehler machen, wenn Sie kein Experte für Sicherheit/Kryptographie sind oder Ihr Schema von mehreren Experten analysieren lassen. Ich bin eher bereit, auf ein öffentlich bekanntes Open-Source-Verschlüsselungsschema zu setzen, das für alle sichtbar und analysierbar ist. Mehr Augen bedeuten eher, dass die aktuelle Version keine größeren Sicherheitslücken aufweist, im Gegensatz zu etwas, das von Nicht-Experten intern entwickelt wurde.

Von Phil Zimmermann (PGP-Ersteller) Einführung in die Kryptographie (Seite 54) :

Als ich in den frühen 70ern auf dem College war, entwickelte ich ein meiner Meinung nach brillantes Verschlüsselungsschema. Ein einfacher Pseudozufallszahlenstrom wurde dem Klartextstrom hinzugefügt, um Chiffretext zu erstellen. Dies würde anscheinend jede Frequenzanalyse des Chiffretextes vereiteln und wäre selbst für die einfallsreichsten Geheimdienste der Regierung unknackbar. Ich fühlte mich so selbstgefällig über meine Leistung.

Jahre später entdeckte ich dasselbe Schema in mehreren einführenden Kryptografietexten und Tutorialpapieren. Wie schön. Andere Kryptographen hatten an das gleiche Schema gedacht. Leider wurde das Schema als einfache Hausaufgabe vorgestellt, wie man elementare kryptoanalytische Techniken einsetzt, um es trivial zu knacken. Soviel zu meinem brillanten Schema.

Aus dieser demütigenden Erfahrung habe ich gelernt, wie einfach es ist, bei der Entwicklung eines Verschlüsselungsalgorithmus in ein falsches Sicherheitsgefühl zu geraten. Die meisten Menschen wissen nicht, wie teuflisch schwierig es ist, einen Verschlüsselungsalgorithmus zu entwickeln, der einem längeren und entschlossenen Angriff eines findigen Gegners standhält.

(Diese Frage hat mehr Diskussion über das obige Zitat.)

Wenn Sie nicht von "Don't Roll Your Own [Kryptografie/Sicherheit]" überzeugt sind, sind Sie wahrscheinlich kein Experte und es gibt viele Fehler, die Sie wahrscheinlich machen werden.

Ist Ihre Anwendung robust gegen:

  • Timing Attacks . Zum Beispiel, bis zu den Nanosekunden brauchen vollständig fehlerhafte Schlüssel und teilweise fehlerhafte Schlüssel insgesamt die gleiche Zeit, um zu versagen? Andernfalls können diese Zeitinformationen genutzt werden, um den richtigen Schlüssel/das richtige Passwort zu finden.

  • Trivial Brute Force Attacks ; Dies kann beispielsweise innerhalb von Sekunden bis Jahren geschehen (wenn Sie befürchten, dass es innerhalb weniger Jahre kaputt geht). Vielleicht ist Ihre Vorstellung von Sicherheit eine Chance von 1 zu einer Milliarde (1 000 000 000), einzudringen (was ist, wenn jemand mit einem Bot-Netz es ein paar Milliarden Mal versucht?). Meine Idee ist es, etwas wie 1 in ~ 2 anzustreben128 (34 000 000 000 000 000 000 000 000 000 000), was ungefähr zehn Millionen Milliarden Milliarden Mal sicherer ist und völlig außerhalb des Bereichs liegt, in dem Sie Ihren Weg erraten können.

  • Parallele Angriffe auf Benutzerkonten; Beispielsweise können Sie Kennwörter mit dem gleichen (oder schlimmer noch nicht) "Salt" für alle Kennwort-Hashes in der Datenbank hashen, wie dies bei den durchgesickerten LinkedIn -Hashes der Fall war.

  • Greife ein bestimmtes Konto einfach an. Möglicherweise gab es mit jedem einfach gehashten Passwort (z. B. MD5/SHA1/SHA2) ein eindeutiges zufälliges Salz, aber da Sie Milliarden möglicher Passwörter für jeden Hash pro Sekunde ausprobieren können, kann dies bei Verwendung gängiger Passwortlisten, Wörterbuchangriffe usw. der Fall sein Nehmen Sie sich nur Sekunden Zeit, um die meisten Konten zu knacken. Verwenden Sie starke kryptografische Hashes wie bcrypt oder PBKDF2, um regelmäßige Hashes um einen geeigneten Faktor (normalerweise 10) zu vermeiden oder zu verstärken(3-8)).

  • Angriffe auf erratene/schwache "Zufallszahlen". Vielleicht verwenden Sie microtime/MT-Rand oder zu wenig Informationen, um die Pseudozufallszahl wie Debian OpenSSL hat dies vor einigen Jahren getan zu setzen.

  • Angriffe, die den Schutz umgehen. Möglicherweise haben Sie in der Webanwendung eine clientseitige Hashing-/Eingabevalidierung durchgeführt, und dies wurde vom Benutzer umgangen, der die Skripte geändert hat. Oder Sie haben eine lokale Anwendung, die der Client in einer virtuellen Maschine ausführen oder zerlegen möchte, um sie zurückzuentwickeln, den Speicher zu ändern oder auf andere Weise zu betrügen.

  • Andere Angriffe, einschließlich (aber nicht der Versuch, eine vollständige Liste zu sein) CSRF , XSS =, SQL-Injection , Netzwerk-Abhören, Wiederholungsangriffe , Man in the Middle-Angriffe , Pufferüberläufe usw. Bester Schutz sehr schnell zusammengefasst.

    • CSRF: Erfordert zufällig generierte CSRF-Token für POST Aktionen; XSS: Überprüfen/entziehen Sie nicht vertrauenswürdige Benutzereingaben immer, bevor Sie sie in die Datenbank eingeben und dem Benutzer/Browser anzeigen.
    • SQLi: Verwenden Sie immer gebundene Parameter und begrenzen Sie, wie viele Ergebnisse zurückgegeben werden.
    • Abhören: Verschlüsseln des sensiblen Netzwerkverkehrs.
    • Wiederholung: Fügen Sie jeder Transaktion eindeutige einmalige Nonces hinzu.
    • MitM: Web of Trust/Wie zuletzt besuchte Site/Zertifikat von vertrauenswürdiger Zertifizierungsstelle ausgestellt.
    • Pufferüberläufe: sichere Programmiersprache/Bibliotheken/ausführbarer Speicherplatzschutz/etc).

Sie sind nur so stark wie Ihr schwächstes ausnutzbares Glied. Auch nur weil Sie kein eigenes Schema erstellen, bedeutet dies nicht, dass Ihr Schema sicher ist. Es ist sehr wahrscheinlich, dass die Person, die das erstellt hat, was Sie eingeführt haben, kein Experte oder ein ansonsten schwaches Schema war.

233
dr jimbob

In meiner Gegend gibt es ein Haus mit einem wirklich schönen Deck vor dem Familienzimmer im zweiten Stock. Es sieht gut aus, bis Sie darunter gehen und sehen, wie es gebaut wurde. Es scheint, dass der Hausbesitzer entschieden hat, dass er einem Bauunternehmer oder Architekten kein großes Geld zahlen muss, um ihm zu sagen, wie man ein Deck baut. Er hat es selbst gebaut und es sieht aus wie ein chaotisches Spinnennetz von 2x4 darunter. Es [~ # ~] wahrscheinlich [~ # ~] wird in Ordnung sein. Persönlich würde ich bei einem solchen Amateur-Baujob lieber kein Leib und Leben riskieren.

Ich denke, wenn Sie einen Algorithmus für die Verschlüsselung entwickeln möchten, sollten Sie dies tun und eine gute Zeit damit haben. Ich würde nicht empfehlen, Ihre Online-Kontoauszüge damit zu verbergen, aber wenn Sie die Liebesbriefe Ihrer Freundin auf Ihrem Heimcomputer verschlüsseln möchten, sollte dies in Ordnung sein - vorausgesetzt, Ihre Frau ist keine Kryptoanalytikerin.

In „The American Black Chamber“ * gibt es eine Geschichte über die Entwicklung eigener Chiffren durch die Marine. Die Marine würde ihr neues Kryptosystem zeigen, zufrieden mit sich selbst, und Yardley, der Armeeanalyst, würde den Code sofort brechen und erklären, was sie falsch gemacht hatten. Sie würden anbieten, den Code zu beheben, aber Yardley wies darauf hin, dass sie zwar bestimmte Schwachstellen beheben könnten, aber ohne ein solides Verständnis immer ein Problem haben würden. Ihr System war an sich fehlerhaft. Es ist ein bisschen wie ein undichtes Dach zu flicken. Sie können für immer flicken, aber das Wasser wird immer noch seinen Weg finden. Wenn Sie nicht nass werden möchten, muss das Dach von jemandem gebaut werden, der mehr als nur ein wenig über Dächer weiß.

Habe ich Ihnen jemals von der Do-it-yourself-Gehirnoperation erzählt, die ich an meiner verstorbenen Schwiegermutter durchgeführt habe? Alles ging gut, bis sie ging und starb. Im Ernst, nur wenige von uns würden einem Amateurarzt unsere Gesundheit anvertrauen. Möchten Sie Amateur-Software wirklich Ihre Geheimnisse anvertrauen? Ich gebe es nur ungern zu, aber ich kaufe alle paar Monate einen Lottoschein. Ich gehe davon aus, dass ich verlieren werde, aber die potenzielle Auszahlung ist enorm. Ich kann die Chancen spielen und vielleicht werde ich vorne rauskommen. Wenn ich es nicht tue, habe ich kein Geld mehr. Warum die Chancen auf Verschlüsselung spielen? Die Auszahlung ist nicht da.

Grüße,/Bob Bryan

  • Empfohlen: Herbert O. Yardley, „The American Black Chamber“ - Ein Buch, das heute genauso interessant ist wie 1931. „Die American Black Chamber war voller guter Geschichten, die gut erzählt wurden, sowie offener Beschreibungen von Yardleys Erfolgen in Kryptoanalyse. Es war 1932 ein Bestseller - sowohl im Ausland als auch im Inland. “ Von NSA: Pearl Harbor Review - Die schwarze Kammer
63
Bob Bryan

Bruce Scheier schrieb im Jahr 1998:

Jeder, vom ahnungslosesten Amateur bis zum besten Kryptographen, kann einen Algorithmus erstellen, den er selbst nicht brechen kann. Es ist nicht einmal schwer. Was schwierig ist, ist die Erstellung eines Algorithmus, den auch nach Jahren der Analyse niemand sonst brechen kann. Und der einzige Weg, dies zu beweisen, besteht darin, den Algorithmus jahrelangen Analysen durch die besten Kryptographen zu unterziehen.

Cory Doctorow nannte dieses Konzept "Schneier's Law" in einer 2004 Rede :

Jede Person kann ein Sicherheitssystem erfinden, das so clever ist, dass sie sich nicht vorstellen kann, wie sie es brechen kann.

Als Folge this , wieder von Schneier:

Wenn Ihnen jemand ein Sicherheitssystem gibt und sagt: "Ich glaube, das ist sicher", müssen Sie zuerst fragen: "Wer zum Teufel sind Sie?" Zeigen Sie mir, was Sie gebrochen haben, um zu demonstrieren, dass Ihre Behauptung der Systemsicherheit etwas bedeutet.

Phil Zimmerman schrieb auch in seinen Original PGP Papers :

Als ich Anfang der siebziger Jahre auf dem College war, entwickelte ich ein meiner Meinung nach brillantes Verschlüsselungsschema. Ein einfacher Pseudozufallszahlenstrom wurde dem Klartextstrom hinzugefügt, um Chiffretext zu erstellen. Dies würde anscheinend jede Frequenzanalyse des Chiffretextes vereiteln und wäre selbst für die einfallsreichsten Geheimdienste der Regierung unknackbar. Ich fühlte mich so selbstgefällig über meine Leistung. Also schwanzsicher.

Jahre später entdeckte ich dasselbe Schema in mehreren einführenden Kryptografietexten und Tutorialpapieren. Wie schön. Andere Kryptographen hatten an das gleiche Schema gedacht. Leider wurde das Schema als einfache Hausaufgabe vorgestellt, wie man elementare kryptoanalytische Techniken einsetzt, um es trivial zu knacken. Soviel zu meinem brillanten Schema.

59
tylerl

Der ursprüngliche Beitrag fragte nach einem Beispiel:

Das Babington Plot ist eine gute Geschichte eines schlechten Kryptosystems, das Probleme verursacht. Mary Queen of Scots wurde von ihrer Cousine Queen Elizabeth I inhaftiert und kommunizierte mit Menschen von außen über verschlüsselte Briefe. Das Alphabet wurde durch ein Kryptoalphabet aus Kringeln, gekreuzten Kreisen und Dreiecken mit zusätzlichen Buchstaben für gebräuchliche Buchstaben wie e, t, i und o ersetzt, sodass die Bedeutung von Buchstaben durch Frequenzanalyse nicht schnell gefunden werden konnte. Sie fügten auch einige Nullzeichen hinzu, die bei der Entschlüsselung ignoriert wurden, um Analysten abzuwerfen. Das Problem war, dass die Königin in der Person von Thomas Phelippes einen sehr kompetenten Kryptoanalytiker in ihrem Stab hatte, der die Nachrichten entschlüsseln konnte, als sie abgefangen wurden.

Im weiteren Verlauf machte Mary eine Verschwörung, um zu fliehen und den Thron zu übernehmen. Als die Agenten der Königin den letzten Brief von Mary abfingen, bevor sie ihn weitergaben, fügten sie einen verschlüsselten Satz hinzu, in dem sie nach den Namen der an der Verschwörung Beteiligten fragten, "damit sie angemessen belohnt werden können". Marys Korrespondent antwortete pflichtbewusst und die Agenten der Königin ließen alle Beteiligten hinrichten.

Als meine Kinder klein waren, schickte ich ihnen Kryptogramme zum Mittagessen (mit einem Schlüssel (unter Verwendung einer Vernam-Chiffre)). Im Allgemeinen waren es Witze, aber sie waren nie von Bedeutung. In einem solchen Fall ist es in Ordnung, sich selbst zu rollen. Wenn Sie planen, die Königin von England (oder den Schah des Iran oder die sich langsam reformierende Schläger-Demokratie in Myanmar) zu stürzen, würde ich vorschlagen, dass Sie sicherstellen, dass das, was Sie verwenden, nicht einfach entschlüsselt werden kann. Wie Bruce Schneier sagte , jeder kann ein Kryptosystem entwickeln, das er nicht entschlüsseln kann, aber es ist schwieriger, eines zu finden, das niemand sonst entschlüsseln kann.

45
Bob Bryan

Ich werde ein Beispiel für etwas geben, das hier passiert ist, wo ich arbeite. Ein Mitarbeiter von mir war für die Entwicklung eines Passwortspeichersystems (lange Geschichte, fragen Sie nicht) für Unternehmens-FTP-Konten verantwortlich. Ich wurde gebeten zu übernehmen, und das erste, was ich sah, war:

public string Encrypt(string rawText)
{
    // homebrew code here
}
public string Decrypt(string encrypted)
{
    // homebrew code here
}

Ich habe sie sofort herausgerissen und durch Standardaufrufe in kryptografischen Bibliotheken ersetzt - und als ich befragt wurde, antwortete ich:

"Sie nie rollen Ihre eigene Verschlüsselungsroutine."

Mein Kollege hat mich stundenlang bekämpft. Er hatte viel Zeit damit verbracht, es perfekt zu machen, so dass ein Angreifer möglicherweise keine Möglichkeit hatte, es zu brechen . Einmal sagten sie sogar: "Dies ist sicherer als AES256, weil niemand weiß, wie es funktioniert."

Zu diesem Zeitpunkt wusste ich zwei Dinge:

  • Mein Kollege war ein perfektes Beispiel für den Mahn-Krüger-Effekt (mangelndes Wissen über ein Thema, wodurch es wahrscheinlicher wird, dass seine eigenen Fähigkeiten überschätzt werden).
  • Mein Kollege musste korrigiert werden. Nicht nur, weil sie "falsch" waren, sondern weil sie für die Architektur von anderen Systemen verantwortlich waren, und ich wollte nicht, dass sie die Verschlüsselung für das Selbstbrauen beibehalten.

Also habe ich den Code beiseite gelegt. Stattdessen habe ich versucht, die Routine durch einfaches Aufrufen der Encrypt () -Funktion und Untersuchen der Ausgabe zu brechen. Ich bin ein Neuling - ich bin kein Kryptoanalytiker - aber ich habe nur 4 Stunden gebraucht. Ich demonstrierte ihnen den Riss, führte sie durch meine Schritte und wiederholte: Rollen Sie niemals Ihre eigene Verschlüsselung. Hoffentlich nehmen sie es sich zu Herzen und tun es nie wieder.

Es läuft also darauf hinaus:

  1. Wie sicher Sie von der Sicherheit Ihrer Verschlüsselung sind, hat nein Einfluss darauf, wie sicher sie tatsächlich ist.
  2. Rollen Sie niemals Ihre eigene Verschlüsselung (kann nicht oft genug wiederholt werden ...)
13
Kevin

In der Kryptographie gibt es nicht nur einen Gegner, der Sie so angreift, wie Sie es erwarten. Dies macht es schwierig, darüber nachzudenken, weil man an absolut ALLES denken muss.

Aber wirklich, niemand kann möglicherweise jeden möglichen Gegner überlisten. Das Beste, was wir tun können, ist, unser allgemeines Wissen und die vorhandene Forschung so weit wie möglich zu nutzen und kleine Schritte zu unternehmen, um von dort aus Angriffsvektor für Angriffsvektor aufzubauen.

Auf diese Weise werden viele Probleme am Rande menschlicher Fähigkeiten angegangen, sei es Forschung in der Physik oder Schachspielen auf höchstem Niveau.

In diesen Bereichen können Sie auch ignorieren, woran andere arbeiten, und Ihre eigenen Strategien und Theorien entwickeln. Wenn Sie Ihren ersten erfahrenen Gegner treffen, werden Sie vom Stand der Technik auf mehr Arten ausgelöscht, als Sie zählen können.

TL; DR
Menschen sind zu dumm, um Kryptographie alleine zu machen.

13
mschwaig

Es ist im Allgemeinen unmöglich zu garantieren, dass jemand, der ein Kryptosystem entwirft, das Unternehmen, für das es erstellt wurde, nicht verlässt und sein Wissen über dieses Design zum Nachteil seines früheren Arbeitgebers nutzt, es sei denn, er entwirft das Kryptosystem so, dass es eines gibt Ein solches Wissen, das ein Gegner erwerben kann, könnte unbrauchbar werden.

Wenn man ein Kryptosystem hat, das selbst gegen Angreifer sicher ist, die alles außer einem Schlüssel wissen, und man den Schlüssel in einen neuen zufällig generierten Wert ändert, ist das System gegen alle Angreifer sicher, die den neuen Schlüssel nicht haben. Selbst wenn die Angreifer genügend Informationen hätten, um das System zu gefährden, bevor der Schlüssel geändert wurde, könnten sie das System danach nicht mehr beschädigen.

Wenn ein System nicht ungewöhnlich wertvolle Daten schützen muss, ist es wahrscheinlich nicht allzu schwierig, ein Kryptosystem so zu entwerfen, dass es ohne Insiderwissen die Kosten für das Knacken eines jeden Wertes übersteigt, der dadurch erzielt werden könnte. Nicht weil das Entwerfen einer guten Krypto einfach ist, sondern weil die meisten Systeme nicht dazu verwendet werden, etwas zu schützen, das für einen Angreifer von großem Wert wäre (selbst wenn ein erfahrener Kryptograf ein System in 58 Minuten leicht beschädigen könnte, wäre das nicht viel ein Risiko, es sei denn, der Wert solcher Informationen für einen Angreifer würde die Zeitkosten des Kryptographen übersteigen.

Es ist jedoch viel schwieriger, ein System so zu gestalten, dass es gegenüber Personen mit Insiderdaten robust gemacht werden kann, und es gibt nur sehr wenige Personen mit ausreichendem Fachwissen, um ein System zu entwerfen, das durch Ändern eines Schlüssels robust gemacht werden kann Jemand, der sowohl über umfassende Kenntnisse des Designs als auch über Kenntnisse in Kryptographie verfügt. Ein kryptografischer Experte ohne Insiderwissen muss möglicherweise nach Hunderten oder Tausenden potenzieller Fehler suchen, die ein Designer hätte machen können, aber Insiderwissen kann es dieser Person ermöglichen, einen Fehler sofort zu identifizieren und auszunutzen.

1
supercat

Rollen Sie Ihre eigene Krypto und werfen Sie sie dann weg.

Wie Crypto Fails ausruft, ist es etwas hart zu sagen, dass Sie überhaupt keinen Crypto-Code schreiben können. Das Hauptproblem besteht darin, diesen Code nicht überall zu verwenden (in freigegebener Software).

Sie sollten es auf jeden Fall ausprobieren und als Lernerfahrung nutzen. Noch besser, wenn Sie mit einem Kryptoanalytiker befreundet sind und dessen Feedback zu dem erhalten, was Sie geschrieben haben. Wenn sie ihr Salz wert sind, werden sie Ihnen auch sagen, dass Sie den Code nicht im wirklichen Leben verwenden sollen, aber sie sollten in der Lage sein, Ihnen einige Informationen zu geben, die Ihnen helfen, zu lernen und zu wachsen.

0
NH.