Frage

Seit Jahren, vielleicht 10, bin ich von Kryptographie fasziniert. Ich habe ein Buch über XOR-Bit-basierte Verschlüsselung gelesen und bin seitdem begeistert.

Ich denke, es ist fairer zu sagen, dass ich von denen fasziniert bin, die verschiedene Verschlüsselungsmethoden brechen können, aber ich schweife ab.

Auf den Punkt - Welche Methoden verwenden Sie beim Schreiben von Kryptographie? Ist die Verschleierung in der Kryptographie gut?

Ich verwende zwei wichtige XOR-Verschlüsselung, verschiedene Hashing-Techniken (SHA1) auf den Schlüssel und einfache Dinge wie das Umkehr von Saiten hier und da usw.

Ich bin interessiert zu sehen, was andere über eine nicht so ausgesetzte Verschlüsselungsmethode denken und es versuchen, wenn Sie nicht so weit verbreitet werden. Auch - alle Informationen darüber, wie die Profis verschiedene Kryptographie -Techniken "brechen", wären auch interessant.

Um zu verdeutlichen - ich habe keine Lust, dies in einem Produktionscode oder in meinen Code von mir zu verwenden. Ich bin interessant zu lernen, wie es durch das Spielen funktioniert und das Rad nicht neu erfindet. :)

Ian

War es hilfreich?

Lösung

Zu widersprechen, was alle anderen bisher gesagt haben, Tue es! Ja, Ihr Code hat möglicherweise Schwachstellen für Pufferüberlauf und kann langsam, fehlerhaft usw. sein, aber Sie tun dies für SPASS! Ich verstehe den Freizeitvergnügen voll und ganz beim Spielen mit Crypto.

Abgesehen davon basiert die Kryptographie nicht auf Verschleierung (oder sollte es zumindest nicht sein). Gute Krypto wird auch einmal weiter funktionieren Vorabend Hat sich durch Ihren verschleierten Code durchgesetzt und versteht vollständig, was los ist. IE: Viele Zeitungen haben Substitutionscode Rätsel, die die Leser versuchen, das Frühstück zu brechen. Wenn sie anfingen, die gesamte Zeichenfolge umzukehren, wäre es schwieriger, aber Joe Reader könnte sie immer noch brechen, Neve tuohtiw gnieb dlot.

Gute Krypto basiert auf Problemen, von denen angenommen wird, dass sie (noch keine bewährten Afaik) wirklich schwierig sind. Beispiele hierfür sind einzuziehen Primzahlen berücksichtigen, das Protokoll finden, oder wirklich irgendetwas anderes NP-Complete Problem.

Bearbeiten: Snap, keiner davon ist bewiesen NP-Complete. Sie sind alle unbewiesen und doch anders. Hoffentlich siehst du immer noch meinen Punkt: Crypto basiert auf Einwegfunktionen. Das sind Operationen, die leicht zu erledigen sind, aber schwer zu rückgängig machen. IE multiplizieren zwei Zahlen mit den Primfaktoren des Produkts. Guter Fang Tduehr]

Mehr Kraft für Sie, wenn Sie mit einem wirklich coolen Zweig der Mathematik herumgespielt haben. Denken Sie daran, dass Crypto auf schwierigen und nicht komplizierten Dingen basiert. Viele Krypto -Algorithmen, sobald Sie sie wirklich verstanden haben, sind eingehend einfach, funktionieren aber trotzdem, weil sie auf etwas basieren, das schwierig ist und nicht nur Buchstaben umschaltet.

HINWEIS: In einigen Algorithmen werden zusätzliche Macken (wie String Sevesal) hinzugefügt, um Brute zu machen, um sie viel schwieriger zu erzwingen. Ein Teil von mir fühlt mich an, als hätte ich dies irgendwo gelesen, an dem ich referenziert habe Des, aber ich glaube es nicht ... [bearbeiten: Ich hatte Recht, siehe 5. Absatz dieses Artikels als Hinweis auf die Permutationen als nutzlos.

Übrigens: Wenn Sie es noch nie gefunden haben, würde ich das erraten TEE/XTEA/Xxtea Reihe von Algorithmen wären von Interesse.

Andere Tipps

Der beste Rat, den ich Ihnen geben kann, ist: Widerstehen Sie der Versuchung, das Rad neu zu erfinden. Kryptographie ist schwieriger als Sie denken.

Holen Sie sich Bruce Schneiers Buch Angewandte Kryptographie und lies es sorgfältig.

Die richtige Antwort ist, so etwas nicht zu tun. Die beste Methode besteht darin, eine der vielen Kryptographie -Bibliotheken für diesen Zweck auszuwählen und sie in Ihrer Anwendung zu verwenden. Sicherheit durch Dunkelheit funktioniert nie.

Wählen Sie auch die aktuellen Top -Standards für Kryptographiealgorithmen. AES für Verschlüsselung, SHA256 für Hashing. Elgamal für den öffentlichen Schlüssel.

Das Lesen der angewandten Kryptographie ist ebenfalls eine gute Idee. Eine überwiegende Mehrheit des Buches ist jedoch Einzelheiten zu Implementierungen, die Sie für die meisten Anwendungen nicht benötigen.

Bearbeiten: Um die neuen Informationen in der Bearbeitung zu erweitern. Die überwiegende Mehrheit der aktuellen Kryptographie beinhaltet viele komplizierte Mathematik. Sogar die Blockausfälle, die einfach wie alle Arten von Munge von Bits erscheinen, sind gleich.

In diesem Fall lesen Sie dann Applied Cryptography und erhalten Sie dann das Buch Handbuch der angewandten Kryptographie was Sie kostenlos herunterladen können.

Beide haben viele Informationen darüber, was in einen Kryptographie -Algorithmus einfließt. Eine Erklärung für Dinge wie differentielle und lineare Kryptanalyse. Eine andere Ressource ist Citeseer Dies enthält eine Reihe von akademischen Papieren, auf die diese beiden Bücher zum Download bezeichnet werden.

Kryptographie ist ein schwieriges Feld mit einer riesigen akademischen Geschichte, um irgendwohin zu gehen. Aber wenn Sie die Fähigkeiten haben, ist es ziemlich lohnend, wie ich es gefunden habe.

Machen Sie die Übungen hier:

http://www.schneier.com/crypto-gram-9910.html#souwanttobeAcryptograph

Für den Anfang schauen Sie sich das Cube -Angriffspapier an (http://eprint.iacr.org/2008/385) und versuchen Sie, einige Algorithmen damit zu brechen. Nachdem Sie mit dem Brechen kryptografischer Schemata vertraut sind, werden Sie sie besser schaffen.

Was den Produktionscode angeht, werde ich wiederholen, was bereits gesagt wurde: Verwenden Sie einfach das, was auf dem Markt verfügbar ist, da alle Mainstream -Schemata bereits mehrere Runden der Kryptanalyse durchlaufen haben.

Alle oben genannten Ratschläge sind solide. Verschleierung schlecht. Setzen Sie Ihre eigene Krypto nicht in die Produktion, ohne die Öffentlichkeit für eine Weile zuerst aufzunehmen.

Ein paar Dinge, die hinzugefügt werden müssen:

  • Codierung ist nicht Verschlüsselung. Ich habe kürzlich das Authentifizierungssystem einer Website umgangen, da die Entwickler hier missverstanden sind.

  • Erfahren Sie, wie Sie sogar die grundlegendsten Systeme brechen. Sie wären überrascht, wie oft Kenntnisse über einfache Rotations -Chiffren tatsächlich nützlich sind.

  • A^b = C. Sie haben angegeben, dass Sie mit zwei Schlüssel -XOR -Verschlüsselung gearbeitet haben. Überprüfen Sie beim Erstellen eines Kryptosystems immer, dass Ihre Schritte tatsächlich etwas ausführen. In den beiden Taste XOR -Fall verwenden Sie wirklich nur einen anderen Schlüssel.

  • A^a = 0. Xor -Verschlüsselung ist gegen bekannte oder gewählte Klartextangriffe sehr schwach. Wenn Sie alle oder einen Teil des Klartextes kennen, können Sie alle oder einen Teil des Schlüssels erhalten. PlainText ^ Cyphertext = Schlüssel

  • Ein weiteres gutes Buch zum Lesen ist das Codebuch von Simon Singh. Es geht über die Geschichte der Kryptographie und Methoden, um die meisten Kryptosysteme zu brechen, die er abdeckt.

  • Zwei Algorithmen zum Lernen (lernen Sie sie und die Geschichte dahinter):

    • 3DES: Ja, es ist veraltet, aber es ist ein guter Ausgangspunkt, um Festel zu lernen und Cyphers zu blockieren, und es gibt einige gute Lektionen in der Schöpfung von DES. Außerdem ist die Begründung für die verwendete Verschlüsselung, Entschlüsselung und Verschlüsselungsmethode eine gute Sache zu lernen.
    • RSA: Ich werde meinen inneren Mathematik -Geek hier ausstellen. Wahrscheinlich der einfachste Verschlüsselungsalgorithmus, der heute verwendet wird. Methoden zum Brechen sind bekannt (faktor nur den Schlüssel), aber rechnerisch äußerst schwierig. M^d mod n wobei n = p*q (p und q prim) und gcd (d, n) = 1. Ein bisschen Gruppen-/Zahl -Theorie erklärt, warum dies nicht leicht umgekehrt ist, ohne P und Q zu wissen. In meinem Kurs der Nummer Theorie haben wir die Theorie hinter diesem mindestens ein halbes Dutzend Arten bewiesen.

Eine Notiz für Phirephly:

Primfaktorisierung und diskretes Protokoll sind nicht in NP-Vervollständigung oder NP-HART. Sie sind beide in der Komplexität unbekannt. Ich kann mir vorstellen, dass Sie eine anständige Menge an Ruhm erhalten würden, wenn Sie diesen Teil nur herausgefunden haben. Das heißt, der Rest Ihrer Behauptung ist korrekt. Gute Krypto basiert auf Dingen, die leicht zu tun sind, aber ohne den Schlüssel schwer zu rückgängigen.

Verwenden Sie keine hausgemachte Krypto in Produktionsprodukten. Genug gesagt.

NICHT!

Sogar die Experten haben eine sehr schwer zu wissen, ob sie es richtig gemacht haben. Verwenden Sie außerhalb einer Krypto -CS -Klasse einfach den Code anderer Personen. Portcode nur, wenn Sie unbedingt den Rotz mit bekannter guter Code aus ihm herausfinden müssen.

Die meisten Experten sind sich einig, dass Offenheit wertvoller ist als die Verschleierung bei der Entwicklung kryptografischer Methoden und Algorithmen.

Mit anderen Worten, jeder scheint in der Lage zu sein, einen neuen Code zu entwerfen, den jeder brechen kann, außer ihm. Der beste Krypto überlebt den Test, den Algorithmus zu haben, und einige verschlüsselte Nachrichten, die dort rausgebracht werden und die besten Krypto -Hacker versuchen, ihn zu brechen.

Im Allgemeinen sind die meisten Verschmutzungsmethoden und einfaches Hashing (und ich habe einige davon selbst gemacht) sehr leicht zu brechen. Das bedeutet nicht, dass es keinen Spaß macht, mit ihnen zu experimentieren und darüber zu lernen.

Liste der Kryptographiebücher (aus Wikipedia)

Diese Frage fiel mir auf, weil ich gerade neu lese Kryptonomie Von Neal Stephenson, was selbst keine schlechte Übersicht selbst ist, obwohl es ein Roman ist ...

Um alle anderen (für die Nachwelt) zu wiederholen, implementieren Sie niemals Ihre eigene Krypto. Verwenden Sie eine Bibliothek.

Das heißt, hier ist ein Artikel darüber, wie DES implementiert werden kann:

http://scienceblogs.com/goodmath/2008/09/des_encryption_part_1_encrypti.php

Permutation und Rauschen sind für viele Verschlüsselungsalgorithmen von entscheidender Bedeutung. Der Punkt ist nicht so sehr, um Dinge zu verschleiern, sondern um den Prozess Schritte hinzuzufügen, die Brute -Force -Angriffe unpraktisch machen.

Außerdem und lesen und lesen Angewandte Kryptographie. Es ist ein tolles Buch.

Müssen mit anderen Postern zustimmen. Nicht, es sei denn, Sie schreiben ein Papier darüber und müssen etwas recherchieren oder so.

Wenn Sie denken, Sie wissen viel darüber Angewandte Kryptographie Buchen. Ich kenne viel Mathe und dieses Buch hat immer noch meinen Hintern getreten. Sie können von seinem Pseudo-Code aus lesen und analysieren. Das Buch enthält auch eine Menge Referenzen im Rücken, um tiefer zu graben, wenn Sie möchten.

Crypto ist eines dieser Dinge, von denen viele Menschen für sehr cool halten, aber die tatsächliche Mathematik hinter den Konzepten ist jenseits ihres Verständnisses. Ich habe vor langer Zeit entschieden, dass es für mich die mentale Anstrengung nicht wert war, dieses Niveau zu erreichen.

Wenn Sie nur sehen möchten, wie dies erledigt ist (studieren Sie vorhandene Implementierungen in Code), würde ich vorschlagen, einen Blick auf die Crypto ++ Bibliothek Auch wenn Sie normalerweise nicht in C ++ codieren, ist dies eine gute Sicht auf die Themen und Teile der Implementierung der Verschlüsselung.

Bruce hat auch eine gute Liste der Ressourcen Sie können von seiner Seite von seiner Website kommen.

Ich habe in der diesjährigen AUS -Technik an einer Code -Sicherheitssitzung teilgenommen. Als der Moderator (Rocky Heckman) über den AES -Algorithmus in .NET und darüber, wie er ausgewählt wurde, sprach, teilte uns der Moderator (Rocky Heckman) eine der Techniken mit, mit denen die vorherige Verschlüsselung gebrochen worden sei. Jemand hatte es geschafft, eine thermische Bildgebungskamera zu verwenden, um die Wärmesignatur einer CPU aufzuzeichnen, während sie Daten verschlüsselt. Sie konnten diese Aufzeichnung verwenden, um festzustellen, welche Arten von Berechnungen der Chip durchführte, und dann den Algoritm umkehren. Sie hatten viel zu viel Zeit in den Händen, und ich bin ziemlich zuversichtlich, dass ich nie klug genug sein werde, um solche Leute zu schlagen! :(

  • HINWEIS: Ich hoffe aufrichtig, dass ich die Geschichte richtig weitergeleitet habe, wenn nicht - der Fehler ist wahrscheinlich mir, nicht die des erwähnten Moderators.

Es wurde bereits zu Tode geschlagen, dass Sie in einem Produkt keine Home -Grown -Krypto verwenden sollten. Aber ich habe Ihre Frage gelesen und Sie sagen eindeutig, dass Sie es nur zum Spaß tun. Klingt für mich nach dem wahren Geek/Hacker/akademischen Geist. Sie wissen, dass es funktioniert, Sie möchten wissen, warum es funktioniert, und versuchen zu sehen, ob Sie es zum Laufen bringen können.

Ich ermutige das völlig und mache dasselbe mit vielen Programmen, die ich nur zum Spaß geschrieben habe. Ich schlage vor, diesen Beitrag zu lesen (http://rdist.root.org/2008/09/18/dangers-of-amateur-cryptography/) in einem Blog namens "RootLabs". Im Beitrag befinden sich eine Reihe von Links, die Sie sehr interessant finden sollten. Ein Typ, der sich für Mathematik/Krypto mit einem Doktortitel in Informatik interessiert und der für Google arbeitet, beschloss, eine Reihe von Artikeln über Programmierkrypto zu schreiben. Er machte mehrere nicht offene Fehler, auf die der Branchenexperte Nate Lawson hingewiesen wurde.

Ich schlage vor, Sie lesen es. Wenn es Sie nicht dazu ermutigt, es weiter zu versuchen, wird es Ihnen zweifellos immer noch etwas beibringen.

Viel Glück!

Ich stimme damit zu, das Rad nicht neu zu erfinden.

Und denken Sie daran, Sicherheit durch Dunkelheit ist überhaupt keine Sicherheit. Wenn ein Teil Ihrer Sicherheitsmechanismen den Ausdruck "Niemand wird das jemals herausfinden!" Verwenden, ist er nicht sicher. Denken Sie an AES - der Algorithmus ist also öffentlich verfügbar, also alle weiß exakt Wie es funktioniert und doch kann niemand es brechen.

Laut anderen Antworten ist das Erfinden eines Verschlüsselungsschemas definitiv für die Experten, und jedes neue vorgeschlagene Krypto -Programm muss wirklich auf die öffentliche Prüfung zur Verfügung gestellt werden, um eine vernünftige Hoffnung auf Bestätigung und Vertrauen in seine Robustheit zu erhalten. Die Implementierung bestehender Algorithmen und Systeme ist jedoch ein viel praktischeres "zum Spaß" und alle wichtigen Standards haben gute Testvektoren, um die Richtigkeit Ihrer Implementierung zu beweisen.

Trotzdem sind für Produktionslösungen vorhanden brauchen Um ein System selbst zu implementieren.

Ich stimme allen Antworten zu, beide "Schreiben Sie nicht Ihren eigenen Krypto -Algorithmus für die Produktionsgebrauch "und"Hölle ja, mach es für deine eigene Erbauung", aber ich werde an etwas erinnert, von dem ich glaube, dass der ehrwürdige Bruce Schneier oft schreibt:"Es ist einfach für jemanden, etwas zu schaffen, das er selbst nicht brechen kann. "

Die einzige Kryptographie, die ein Nicht -Experten in der Lage sein sollte, richtig zu machen, ist knocheneinfach, einmalige Pad -Chiffren.

CipherTextArray = PlainTextArray ^ KeyArray;

Abgesehen davon muss alles, was es sich lohnt, sich angesehen zu haben (auch für die Erholung), einen hohen Abschluss in Mathematik.

Ich möchte nicht auf korrekte Antworten eingehen, die bereits gegeben wurden (tun Sie es nicht für die Produktion; einfache Umkehrung nicht genug; Verschleierung schlecht; usw.).

Ich möchte nur Kerckoffs Prinzip hinzufügen: "Ein Kryptosystem sollte sicher sein, auch wenn alles über das System außer dem Schlüssel öffentlich bekannt ist."

Während ich dabei bin, werde ich auch Bergofskys Prinzip erwähnen (zitiert von Dan Brown in digitaler Festung): "Wenn ein Computer genügend Schlüssel ausprobiert hat, war es mathematisch garantiert, dass die Sicherheit eines Codes nicht ist, dass es seine Pass hat -Key war unfinder, aber eher, dass die meisten Menschen nicht die Zeit oder Ausrüstung hatten, um es zu versuchen. "
Nur das ist von Natur aus nicht wahr; Dan Brown hat es geschafft.

Reaktion auf Phirephly und Tduehr, auf die Komplexität der Faktorierung:

Es ist leicht zu sehen, dass Factoring in NP und Conp ist. Was wir sehen müssen, ist, dass die Probleme, "angegeben von n und k, mit 1 <p <= k" einen Primfaktor P von n zu finden, und "zeigen, dass kein solcher P existiert" beide in NP (die erste ist die Entscheidungsvariante des Factoring -Problems, der zweite ist die Entscheidungsvariante des Komplements).

Erstes Problem: Bei einer Kandidatenlösung P können wir leicht (dh in der Polynomzeit) prüfen, ob 1 <p <= k und ob p teilt n. Eine Lösung P ist immer kürzer (in der Anzahl der zur Darstellung verwendeten Bits) als N, sodass Factoring in NP ist.

Zweites Problem: Bei einer vollständigen Primfaktorisierung (p_1, ..., p_m) können wir schnell überprüfen, ob ihr Produkt n ist und dass keiner zwischen 1 und k liegt. Wir wissen, dass Primzahlen in P sind, sodass wir die Primalität jedes P_I in der Polynomzeit überprüfen können. Da die kleinste Primzahl 2 ist, gibt es höchstens log_2 (n) Primfaktoren in jeder gültigen Faktorisierung. Jeder Faktor ist kleiner als N, daher verwenden sie höchstens O (N -log (n)) Bits. Wenn N also keinen Primfaktor zwischen 1 und k hat, gibt es einen kurzen (polynomialen) Beweis, der (in der Polynomzeit) schnell verifiziert werden kann.

Faktor ist also in NP und Conp. Wenn es NP-Vervollständigung wäre, würde NP gleichbleiben, was oft als falsch angesehen wird. Man kann dies als Beweis dafür betrachten, dass Factoring in der Tat nicht NP-Vervollständigung ist; Ich würde lieber nur auf einen Beweis warten ;-)

Normalerweise bekomme ich zunächst einen Doktortitel in der Zahlentheorie. Dann mache ich ungefähr ein Jahrzehnt Forschung und verfolge das mit viel Publishing und Peer Review. Was die Techniken angeht, die ich verwende, sind sie verschiedene aus meiner Forschung und der meiner Kollegen. Gelegentlich, wenn ich mitten in der Nacht aufwache, werde ich eine neue Technik entwickeln, sie implementieren, Löcher darin finden (mit Hilfe meiner Anzahl der Theorie und meiner Informatik -Kollegen) und dann von dort aus verfeinern.

Wenn Sie einer Maus einen Algorithmus geben ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top