it-swarm-eu.dev

Wo kann ich Kryptographie / Kryptoanalyse auf die harte Tour lernen, ohne zur Schule zu gehen? Irgendein gutes Buch?

Ich bin nicht so schlecht in Mathematik:

Ich weiß, was p-Liste und p-Kombinationen sind, ich kenne Matrixalgebra, ich weiß, was a XOR ist, ich weiß, wie man erkennt, ob Zahl eine Primzahl ist usw .: Ich bin es nicht Der Programmierer, der Mathe hasst, weil er schlecht darin ist, aber ich habe sowieso keinen Doktortitel.

Ich bin auch kein schlechter Informatiker, zumindest was die allgemeine Informatikkultur betrifft:

Ich kenne C, C++ (beide in der Schule gelernt), Python, etwas Haskell, welche Textcodierung gibt es, wie UNICODE funktioniert, ich weiß, wie eine Datei komprimiert oder verschlüsselt werden kann, welche gängigen Algorithmen es gibt (diffie-hellman, der LZMA-Algorithmus, DES, AES, Serpent, Blowfish, SHA, MD5 ...). Ich habe mich sehr für Kryptografie auf Wikipedia oder anderen Websites interessiert, aber ich glaube nicht, dass Wikipedia mir Kryptografie beibringen kann, ohne Algorithmen zu detaillieren oder ohne Übung. Ich weiß zum Beispiel, was synchrone Kryptographie und was asynchron ist (öffentlicher/privater Schlüssel).

Ich möchte lernen, wie man die beliebtesten Algorithmen richtig und sicher implementiert und wie man sie zuverlässig macht: ein Buch oder gute Tutorials oder Kurse. Ich habe schnell nach Khan Academy gesucht, aber dieses Fach ist nicht trivial und erfordert sowohl Kenntnisse in Mathematik, Informatik und/oder Elektronik.

Ich möchte keine Seiten und Seiten nur der Theorie über die grundlegenden Dinge lesen, die ich möglicherweise bereits kenne oder die für die heutige Kryptographie nicht wirklich relevant sind, wie ein von einem Forscher geschriebenes Papier, nur etwas Praktisches, mit Problemen und Kryptoanalyseproblemen. für Studierende.

Ich habe momentan viel Freizeit, ich bin erst 26 Jahre alt und ich bin sicher, dass ich dieses Zeug lernen kann, nicht nur wegen der Gehaltserhöhung, die es mir bringen kann, sondern auch, weil ich immer von Kryptographie fasziniert war, ohne es wirklich zu verstehen. Ich kann einfach kein gutes Material finden.

39
jokoon

(LZMA ist ein Komprimierungsalgorithmus, nicht kryptografisch.)

Zum Zweck der kryptografischen Algorithmen implementieren Ermittelt die generische Methode den relevanten beschreibenden Standard, greift nach Ihrer Tastatur und versucht es. Die meisten Standards enthalten "Testvektoren", d. H. Beispielwerte, mit denen Sie wissen, ob Ihre Implementierung die richtigen Antworten zurückgibt. An diesem Punkt unterscheiden sich die Dinge, je nachdem, welche Art von Algorithmus Sie in Betracht ziehen.

Symmetrische Kryptographie:

Symmetrische Algorithmen umfassen symmetrische Verschlüsselung, Hash-Funktionen und Nachrichtenauthentifizierungscodes (MAC). Sie müssen nicht viel Mathematik wissen, um damit umzugehen. Das meiste davon handelt von Additionen von 32-Bit- und 64-Bit-Ganzzahlen (das ist modulare Arithmetik mit 2)32 oder 264 als Modul) und bitweise Operationen (XOR, AND ...).

Ein solcher Code wird normalerweise in C ausgeführt. Eine gute Leistung wird erzielt, wenn einige Vorstellungen darüber vorliegen, wie der C-Compiler den Code versteht und in Anweisungen für die CPU übersetzt. Kenntnisse der Versammlung sind nicht unbedingt erforderlich, aber sehr nützlich. Ein wichtiger Parameter ist der Cache-Speicher: Das Abrollen von Schleifen ist normalerweise ein gutes Werkzeug, aber wenn Sie es übertreiben, sinkt die Leistung stark.

Ich schlage vor, zunächst die klassischen Hash-Funktionen (die in FIPS 180- beschriebene SHA -Familie) zu implementieren und zu versuchen, sie schnell zu machen. Holen Sie sich als Vergleichspunkt OpenSSL und verwenden Sie das Befehlszeilentool openssl speed, Um zu sehen, welche Leistung erzielt werden kann (dieses Tool ist bereits in jeder anständigen Linux-Distribution enthalten, und zwar) funktioniert auch unter Windows und MacOS). Zum Beispiel auf meinem PC:

$ openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 4842590 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 2820288 sha256's in 2.99s
Doing sha256 for 3s on 256 size blocks: 1262067 sha256's in 2.99s
Doing sha256 for 3s on 1024 size blocks: 395563 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 53564 sha256's in 3.00s
OpenSSL 0.9.8o 01 Jun 2010
built on: Wed Feb 23 00:47:27 UTC 2011
options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) blowfish(ptr2) 
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN
-DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int
-DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
sha256           25827.15k    60367.37k   108056.57k   135018.84k   146265.43k

dies bedeutet, dass OpenSSL eine in Assembly von Hand optimierte SHA-256-Implementierung enthält, die bei der Verarbeitung von 8-kB-Nachrichten 146 MB/s erreicht. Auf demselben Computer sollte eine reine C-Implementierung mindestens 130 MB/s erreichen.

Ein Beispiel dafür, wie Hash-Funktionen in C und Java implementiert sind und wie die Hash-Geschwindigkeit auf sinnvolle Weise gemessen werden kann, finden Sie unter sphlib .

Anschließend können Sie eine symmetrische Verschlüsselung versuchen, insbesondere die AES ( FIPS 197 ). Es hilft ein wenig zu wissen, was ein endliches Feld von Merkmal 2 ist, aber der Standard ist klar genug, um Sie durch eine oberflächliche Implementierung zu führen. Versuchen Sie dann, die Dinge zu optimieren. OpenSSL kann als Vergleichspunkt dienen und sich von den AES-Implementierungen von Brian Gladman inspirieren lassen. In Bezug auf die Sicherheit gab es einige Bedenken, welche schlüsselabhängigen Informationen durch die Verwendung von Nachschlagetabellen in der Implementierung verloren gehen könnten (versuchen Sie, nach "AES-Cache-Timing-Angriff" zu suchen). Der Versuch, diese Art von Angriff zu reproduzieren, ist eine sehr gute Übung (wohlgemerkt, es ist nicht einfach, aber wenn es Ihnen gelingt, sie unter Laborbedingungen zu demonstrieren, haben Sie viel über die Funktionsweise kryptografischer Implementierungen gelernt).

Asymmetrische Kryptographie:

Bei der asymmetrischen Kryptographie geht es um Algorithmen, an denen mehr als eine Partei beteiligt ist. Dies umfasst asymmetrische Verschlüsselung (RSA, ElGamal), Schlüsselaustausch (Diffie-Hellman) und digitale Signaturen (wieder RSA, DSA ...). Die mathematischen Inhalte sind dort viel größer, und die Optimierung ist ein viel umfassenderes Thema als bei der symmetrischen Kryptographie, da es mehrere Möglichkeiten gibt, jeden Algorithmus anstelle eines einzelnen "offensichtlichen" Implementierungspfads zu implementieren.

Eine gute Referenz ist das Leitfaden zur Kryptographie mit elliptischen Kurven . Obwohl es sich hauptsächlich um elliptische Kurven handelt, enthält es eine allgemeine Beschreibung der Implementierung von Operationen in endlichen Feldern. Daher ist dies das Beispielkapitel, das kostenlos unter der oben verlinkten URL heruntergeladen werden kann. Also hol es dir und lies es jetzt. Eine weitere unverzichtbare Referenz ist das Handbuch für angewandte Kryptographie , das kostenlos heruntergeladen werden kann; In Kapitel 14 geht es insbesondere um eine effiziente Umsetzung.

RSA ist einfach genug und wird in PKCS # 1 angemessen beschrieben. Es gibt mögliche Timing-Angriffe auf RSA, denen durch Maskierung entgegengewirkt wird (ja, dies ist ein Artikel, der "von einem Forscher geschrieben" wurde, aber im Bereich der Kryptographie sind Forscher die Menschen, die verstehen, was los ist auf). Wenn Sie sich mit modularer Arithmetik auskennen, können Sie versuchen, DSA ( FIPS 186- ) zu implementieren. Diffie-Hellman ist mathematisch einfach (es benötigt nichts mehr als zur Implementierung von DSA erforderlich), aber sein Beschreibungsstandard (ANSI X9.42) kann nicht kostenlos heruntergeladen werden.

Elliptische Kurven sind ein beliebter zukünftiger Ersatz für modulare Arithmetik. EC-Varianten von DSA und Diffie-Hellman sind schneller und werden mit kürzeren öffentlichen Schlüsseln als sicherer angesehen. Aber das ist mehr Mathematik. Auch hier ist der Leitfaden zur Kryptographie mit elliptischen Kurven das Muss.

Es gibt andere Arten von asymmetrischen Kryptographiealgorithmen, z. das McEliece Kryptosystem (asymmetrische Verschlüsselung; es gibt eine Variante für Signaturen, beschrieben durch Niederreiter ) und Algorithmen basierend auf Gitterreduktion . Sie profitieren jedoch (noch) nicht von veröffentlichten Standards, die sich um die Implementierungsdetails kümmern, und es gibt nicht so viele vorhandene Implementierungen, mit denen sie verglichen werden können. Beginnen Sie besser mit RSA und DSA.

Kryptoanalyse:

Die Kryptoanalyse verwendet eine viel höhere Dosis Mathematik als die Implementierung.

Für die symmetrische Kryptographie sind die beiden Hauptwerkzeuge die differentielle und die lineare Kryptoanalyse. siehe dieses Tutorial .

Mein eigener Weg zur Kryptographie begann mit der Implementierung von DES und anschließend mit der Implementierung von Matsuis linearer Kryptoanalyse auf einer reduzierten Version von DES (8 statt 16 Runden). DES ist in FIPS 46- beschrieben, das offiziell zurückgezogen wird, aber noch verfügbar ist. Aus DES kann Triple-DES definiert werden (drei DES Instanzen mit drei unterschiedlichen Schlüsseln, wobei der mittlere in "Entschlüsselungsrichtung" verwendet wird) und es werden Testvektoren veröffentlicht für Triple-DES (auch bekannt als "TDES", "3DES" oder manchmal "DES", was wohl verwirrend ist).

Bei asymmetrischen Algorithmen umfasst die Kryptoanalyse hauptsächlich das Arbeiten an der mathematischen Struktur der Schlüssel, z. durch den Versuch Faktor große Nicht-Primzahlen, um RSA-Varianten zu brechen. Die Mathematik reicht hier von nicht trivial bis völlig unvorstellbar, daher könnte dies eine zu steile Lernkurve sein, um mit der Kryptographie zu beginnen, indem versucht wird, RSA zu brechen ...

46
Thomas Pornin

Zwei Dinge wirklich:

  1. Hol dir ein gutes Buch. Bruce Schneiers "Angewandte Kryptographie" ist ausreichend.
  2. Lernen Sie die 'openssl'-Tools kennen und lernen Sie, sie zu verwenden.

Das Wichtigste, was man über Krypto lernen muss, ist Demut. Sie möchten niemals eine neue Lösung für ein Problem erstellen - Sie möchten die von anderen getesteten Lösungen so gut wie möglich kopieren. Die meisten Kryptofehler sind darauf zurückzuführen, dass Menschen eine gute Idee haben und glauben, sie könnten Optimierungen vornehmen, um eine vorhandene Lösung zu verbessern. Es ist nur den extrem Demütigen, die es schließlich schaffen, neue Wege zu finden, Dinge zu tun.

Die nächste Lektion ist, dass Sie Ihre Vorurteile, die Sie durch Fernsehen und Filme bekommen haben, verlernt haben, wo sich ein Hacker an einen Computer setzt und Krypto bricht. Diese haben entweder nichts mit Krypto zu tun oder eine Dramatisierung dessen, was wirklich vor sich geht. Zum Beispiel ist der Film "Sneaker" eine Dramatisierung dessen, was passieren würde, wenn jemand einen Chip entwickeln würde, der große ganze Zahlen berücksichtigen könnte.

Das Schwierigste beim Erlernen von Krypto ist es, zwischen den technischen Konzepten zu unterscheiden, die zum Verständnis des Fachgebiets im Allgemeinen erforderlich sind, und denen, die Sie nur benötigen, wenn Sie sich auf einen engen Bereich spezialisiert haben. Nehmen Sie zum Beispiel den oben bewerteten hoch bewerteten Beitrag. Sie müssen den Unterschied zwischen einem "symmetrischen" Algorithmus und einem "asymmetrischen" Algorithmus gegenüber einem "Hash" verstehen, aber wenn der Autor dieses Beitrags sagt "Es hilft ein bisschen zu wissen, was ein endliches Feld von Merkmal 2 ist", Ich würde nicht zustimmen: Es ist nur für Doktoranden von Bedeutung, die Krypto erforschen, nicht für den Rest von uns, die einfach nur herausfinden wollen, wie man es richtig verwendet.

Ein guter Weg, um durch die technischen Details zu waten, besteht darin, ein Ziel auszuwählen und rückwärts zu arbeiten. Zum Beispiel hat heute Apple das iPhone/iPad-Betriebssystem auf Version 4.3.5 aktualisiert, um einen Fehler bei der Validierung von X.509-Zertifikatketten zu beheben. Das Problem verstehen und warum sie behoben werden mussten Es ist genau die Art von Dingen, die Sie in Ihrem ursprünglichen Beitrag besprechen. Finden Sie heraus, was ein X.509-Zertifikat ist, was die Ketten sind und warum sie validiert werden müssen und warum, wenn Sie dies nicht tun, ein Hacker, der a verwendet Tools wie 'sslsniff' können die Verschlüsselung aufheben. Wenn Sie das alles vollständig verstanden haben, haben Sie einen Großteil Ihres Ziels erreicht, das Sie in Ihrem ursprünglichen Beitrag beschrieben haben.

Ein weiteres Beispiel ist ein Blog-Beitrag zur Überprüfung des Comodo-Hacker-Schlüssels

Erfahren Sie erneut, was der Comodo-Hacker getan hat (signierte Zertifikate für Google und Yahoo erstellt), wie die Sperrung von Zertifikaten funktioniert und wie Sie die Tools zum Überprüfen dieses Zertifikats verwenden. Ich schlage es als guten Beitrag vor, da es ein guter Ausgangspunkt für die Verwendung der in unserer Branche üblichen 'openssl'-Tools ist.

Viel Glück!

10

Registrieren Sie sich für Stanfords Online Kryptographie-Kurs , der im nächsten Januar beginnt. Es ist kostenlos, online und beinhaltet sowohl Theorie (Videovorträge und Quiz) als auch Praxis (Programmieraufgaben). Sie können in Ihrem eigenen Tempo arbeiten und erhalten eine Leistungsbeschreibung, wenn Sie Erfolg haben. Angesichts der verschiedenen Echos, die ich in Stanfords früheren Online-Kursen erhalten habe, melde ich mich definitiv für diesen Kurs an (sowie für den Kurs für Computersicherheit).

  • Auf der theoretischen Seite:

Konstruktionsprinzipien und praktische Anwendungen der Kryptographie von Niels Ferguson und Bruce Schneier. Das Buch soll ein Update der ehrwürdigen angewandten Kryptographie sein, die Autoren sind auf diesem Gebiet bekannt und die Rezensionen sind gut.

  • Auf der Übungsseite:

Sie können einen Blick auf verschiedene CTF-Hacking-/Sicherheitswettbewerbe (Capture The Flag) werfen. Sie umfassen im Allgemeinen Kryptographie-Herausforderungen. Sie machen Spaß und bringen Sie aus Ihrer Komfortzone, um die Probleme innerhalb einer begrenzten Zeit zu lösen. Hier ist ein guter CTFs Kalender . Schauen Sie sich auch einige Artikel früherer CTFs an, ich fand viele sehr lehrreich und gut erklärt.

10
kroosec

Für Krypto-Algorithmen:

Stinsons Kryptographie: Theorie und Praxis

geht die Mathematik vieler Krypto-Algorithmen so durch, dass sie ziemlich einfach zu implementieren sind, wenn Sie dies möchten.

Scheiners Angewandte Kryptographie ist auch ein führendes Buch zu diesem Thema. Wahrscheinlich überlappt sich einiges, aber mit einigen unterschiedlichen Algorithmen.

Soweit ein Buch, das Ihnen ausdrücklich erklärt, wie man sie umsetzt, habe ich nichts. Kommerziell sind diese nicht immer in Software implementiert, und es ist eine ziemlich Nischenbranche. Aus der Perspektive des Herumspielens würde ich sagen, dass Sie ein Buch erhalten, in dem der Algorithmus erklärt, implementiert und Ihr Ergebnis mit einer häufig verwendeten Bibliothek für denselben Algorithmus verglichen wird.

Ebenso habe ich nichts über Kryptoanalyse, obwohl ich vermute, dass Sie einige interessante Artikel und andere Informationen finden, wenn Sie einen Algorithmus auswählen und nach Dingen wie "Schwäche in" und "schwachen Schlüsseln" googeln. Das letzte Mal, als ich eine Arbeit über so etwas schreiben musste (vor über 10 Jahren), habe ich im Wesentlichen das getan ...

6
bethlakshmi

Ich empfehle Cryptography Engineering: Konstruktionsprinzipien und praktische Anwendungen . Es ist das perfekte Buch für Sie. Es wird beschrieben, wie Kryptosysteme aus der Sicht eines Systemdesigners und -implementierers entworfen und implementiert werden. Es ist ein sehr pragmatisches Buch mit einer Perspektive, die sich aus der jahrelangen Erfahrung der Autoren ergibt. Das Wort "Engineering" im Titel ist wirklich passend. Ich denke, Sie werden feststellen, dass es eine unschätzbare Ressource ist, die Ihnen dabei hilft, Prioritäten zu setzen, worüber Sie den größten Teil Ihrer Energie aufwenden sollten, worüber Sie sich Sorgen machen können, was schief gehen kann und wie Sie sicherstellen können, dass Ihnen diese schlechten Dinge nicht passieren.

4
D.W.

Ich möchte auch hinzufügen, dass Sie sich Matasano Crypto Challenges ansehen, da Sie bereits einige Programmierkenntnisse haben.

Von ihrer Website:

WIE VIEL CRYPTO MUSS ICH WISSEN? Keiner. Das ist der Punkt.

WAS MUSS ICH WISSEN? Sie möchten in der Lage sein, in jeder Sprache kompetent zu codieren. Wir haben Einsendungen in C, C++, Python, Ruby, Perl, Visual Basic, X86 Assembly, Haskell und LISP erhalten.

Alle ihre Herausforderungen basieren auf realen Krypto-Schwachstellen. Sie sollten also lernen, wie man diese Probleme löst.

3
ack__

Wenn Sie die Theorie der Kryptographie verstehen möchten, die für Praktiker zugänglich ist, versuchen Sie "Einführung in die moderne Kryptographie" von Katz und Lindell.

3
user432944

Das Erlernen der Kryptographie von Grund auf kann sich manchmal schwierig anfühlen, aber wenn Sie über die richtigen Ressourcen verfügen, werden Sie es lieben. Im Folgenden sind meine Lieblingsseiten aufgeführt, auf denen Sie heute mit dem Erlernen der Kryptografie beginnen können.

  1. Kryptographie in Kifanga lernen für Anfänger bis Fortgeschrittene.
  2. Praktische Kryptographie ist wirklich gut für Kryptoanalyse-Artikel
  3. Learncryptography eignet sich hervorragend für Hash-Funktionen
0
chris pete