it-swarm.it

Dove posso imparare la crittografia / crittoanalisi nel modo più duro, senza andare a scuola? Qualche buon libro?

Non sono così cattivo in matematica:

So cosa sono p-list e p-combinazioni, conosco l'algebra di matrice, so cosa è un XOR è, so come dire se il numero è un numero primo, ecc.: Non lo sono il programmatore che odia la matematica perché non è bravo, ma non ho un dottorato comunque.

Non sono neanche male alle scienze informatiche, almeno in termini di cultura informatica generale:

Conosco C, C++ (entrambi imparati a scuola), Python, alcuni haskell, quali codifiche di testo sono là fuori, come funziona UNICODE, so come un file può essere compresso o crittografato, quali algoritmi comuni sono là fuori (diffie-hellman, l'algoritmo LZMA, DES, AES, Serpent, Blowfish, SHA, MD5 ...). Mi sono molto interessato alla crittografia su Wikipedia o altri siti Web, ma non credo che Wikipedia possa insegnarmi la crittografia senza algoritmi dettagliati o senza pratica; per esempio, so cos'è la crittografia sincrona e cosa è asincrona (chiave pubblica/privata).

Mi piacerebbe imparare come implementare correttamente e in modo sicuro gli algoritmi più popolari e come renderli affidabili: un libro o buoni tutorial o corsi. Ho rapidamente cercato su Khan Academy, ma questa materia non è banale e richiede entrambe le conoscenze in matematica, informatica e/o elettronica.

Non voglio leggere pagine e pagine di sole teorie sulle cose di base che potrei già sapere o che potrebbero non essere realmente rilevanti per la crittografia odierna, come un articolo scritto da un ricercatore, solo qualcosa di pratico, con problemi e problemi di crittoanalisi, per studenti.

Al momento ho molto tempo libero, ho solo 26 anni e sono sicuro di poter imparare queste cose, non solo per l'aumento di paga che può portarmi, ma anche perché sono sempre stato affascinato dalla crittografia senza comprenderla, Non riesco proprio a trovare del buon materiale.

39
jokoon

(LZMA è un algoritmo di compressione, non crittografico.)

Ai fini di implementazione algoritmi crittografici, il metodo generico sta ottenendo lo standard descrittivo pertinente, afferrando la tastiera e provando. La maggior parte degli standard include "vettori di test", ovvero valori di esempio che consentono di sapere se l'implementazione restituisce le risposte corrette. A quel punto, le cose differiscono, a seconda del tipo di algoritmo che stai prendendo in considerazione.

Crittografia simmetrica:

Gli algoritmi simmetrici coprono la crittografia simmetrica, le funzioni hash e i codici di autenticazione dei messaggi (MAC). Non è necessario conoscere molta matematica per gestirle; la maggior parte riguarda aggiunte di numeri interi a 32 e 64 bit (che è l'aritmetica modulare, con 232 o 264 come modulo) e operazioni bit a bit (XOR, AND ...).

Tale codice viene solitamente eseguito in C. Buone prestazioni si ottengono con alcune nozioni su come il compilatore C comprenderà e tradurrà il codice in istruzioni per la CPU; la conoscenza dell'Assemblea non è strettamente obbligatoria, ma piuttosto utile. Un parametro importante è la memoria cache: lo srotolamento dei loop è di solito un buon strumento, ma se esageri, le prestazioni diminuiscono drasticamente.

Suggerisco di iniziare implementando le classiche funzioni hash (la famiglia SHA, descritte in FIPS 180- ) e cercando di renderle veloci. Come punto di confronto, prendi OpenSSL e usa lo strumento da riga di comando openssl speed Per vedere che tipo di prestazioni possono essere ottenute (questo strumento è già incluso in qualsiasi distribuzione Linux decente, e funziona anche su Windows e MacOS). Ad esempio, sul mio 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

ciò significa che OpenSSL include un'implementazione SHA-256 ottimizzata a mano in Assembly, che raggiunge 146 MB/s durante l'elaborazione di messaggi da 8 kB. Sulla stessa macchina, un'implementazione C pura dovrebbe arrivare ad almeno 130 MB/s.

Per un esempio di come le funzioni di hash sono implementate in C e Java e di come la velocità di hashing può essere misurata in modo significativo, vedere sphlib .

Successivamente, puoi provare la crittografia simmetrica, in particolare AES ( FIPS 197 ). Aiuta un po 'a sapere cos'è un campo finito della caratteristica 2, ma lo standard è abbastanza chiaro da guidarti attraverso un'implementazione superficiale. Quindi, prova a ottimizzare le cose. OpenSSL può fungere da punto di confronto e trarre ispirazione dai implementazioni AES di Brian Gladman . Per quanto riguarda la sicurezza, vi è stata una certa preoccupazione su quali informazioni dipendenti dalla chiave potrebbero essere trapelate attraverso l'uso di tabelle di ricerca nell'implementazione (provare a cercare "attacco di temporizzazione della cache AES"); cercare di riprodurre quel tipo di attacco è un ottimo esercizio (attenzione, non è facile, ma se riesci a dimostrarlo in condizioni di laboratorio, avrai imparato molto su come funzionano le implementazioni crittografiche).

Crittografia asimmetrica:

La crittografia asimmetrica riguarda gli algoritmi che coinvolgono più di una parte. Ciò include la crittografia asimmetrica (RSA, ElGamal), lo scambio di chiavi (Diffie-Hellman) e le firme digitali (di nuovo RSA, DSA ...). I contenuti matematici sono molto più grandi lì e l'ottimizzazione è un argomento molto più ampio rispetto alla crittografia simmetrica, perché ci sono diversi modi per implementare ciascun algoritmo, invece di un singolo percorso di implementazione "ovvio".

Un buon riferimento è Guida alla crittografia della curva ellittica . Sebbene si tratti principalmente di curve ellittiche, include un trattamento generale dell'implementazione di operazioni in campi finiti, e succede così che questo è il capitolo di esempio che può essere scaricato gratuitamente dall'URL collegato sopra. Quindi prendilo e leggilo ora. Un altro riferimento indispensabile è Handbook of Applied Cryptography , che può essere scaricato liberamente; il capitolo 14, in particolare, riguarda un'attuazione efficiente.

RSA è abbastanza semplice ed è adeguatamente descritto in PKCS # 1 . Ci sono possibili attacchi temporali su RSA, che sono contrastati dal mascheramento (sì, questo è un documento "scritto da un ricercatore", ma in materia di crittografia, i ricercatori sono le persone che capiscono cosa sta succedendo su). Se hai la cognizione dell'aritmetica modulare, puoi provare a implementare DSA ( FIPS 186- ). Diffie-Hellman è matematicamente semplice (non ha bisogno di altro per implementare DSA) ma il suo standard descrittivo (ANSI X9.42) non è scaricabile gratuitamente.

Le curve ellittiche sono un popolare rimpiazzo futuro per l'aritmetica modulare; Le varianti EC di DSA e Diffie-Hellman sono più veloci e ritenute più sicure con chiavi pubbliche più brevi. Ma questa è più matematica. Anche in questo caso, la Guida alla crittografia della curva ellittica è il riferimento indispensabile.

Esistono altri tipi di algoritmi di crittografia asimmetrica, ad es. il McEliece cryptosystem (crittografia asimmetrica; esiste una variante per le firme descritte da Niederreiter ) e algoritmi basati sulla riduzione del reticolo . Ma non beneficiano (ancora) degli standard pubblicati che si occupano dei dettagli di implementazione e non ci sono così tante implementazioni esistenti da confrontare. Faresti meglio a iniziare con RSA e DSA.

Cryptanalysis:

La crittoanalisi utilizza una dose di matematica molto più elevata rispetto all'implementazione.

Per la crittografia simmetrica, i due strumenti principali sono la crittoanalisi differenziale e lineare; vedi questo tutorial .

Il mio percorso verso la crittografia è iniziato implementando DES, e quindi implementando la crittoanalisi lineare di Matsui su una versione ridotta di DES (8 round anziché 16). DES è descritto in FIPS 46- , che è ufficialmente ritirato, ma ancora disponibile. Da DES può essere definito Triple-DES (tre istanze DES, con tre chiavi distinte, quella centrale utilizzata nella direzione "decrittazione") e vengono pubblicati vettori di prova per Triple-DES (noto anche come "TDES", "3DES" o talvolta "DES", che è probabilmente confuso).

Per gli algoritmi asimmetrici, la crittoanalisi implica principalmente di lavorare sulla struttura matematica delle chiavi, ad es. provando a fattore grandi numeri interi non primi al fine di rompere le varianti RSA. La matematica qui va dal non banale al totalmente inimmaginabile, quindi questa potrebbe essere una curva di apprendimento troppo ripida per iniziare la crittografia cercando di rompere RSA ...

46
Thomas Pornin

Due cose, davvero:

  1. Prendi un buon libro. La "crittografia applicata" di Bruce Schneier è adeguata.
  2. Scopri gli strumenti di "openssl" e impara ad usarli.

La cosa più importante da imparare sulla criptovaluta è l'umiltà. Non vuoi mai creare una nuova soluzione un problema: vuoi copiare nel miglior modo possibile le soluzioni che sono state ben testate da altri. La maggior parte dei guasti alle criptovalute sono dovuti a persone che hanno un'idea brillante, pensando di poter apportare alcune ottimizzazioni per migliorare una soluzione esistente. Sono solo gli estremamente umili che alla fine riescono a trovare nuovi modi di fare le cose.

La lezione successiva è che hai disimparato i tuoi pregiudizi che hai ottenuto dalla TV e dai film, in cui un hacker si siede a un computer e rompe la crittografia. Questi non sono correlati alla criptovaluta o una drammatizzazione di ciò che accade davvero. Ad esempio, il film "Sneaker" è una drammatizzazione di ciò che accadrebbe se qualcuno sviluppasse un chip in grado di fattorizzare numeri interi di grandi dimensioni.

La cosa più difficile nell'apprendimento della crittografia è distinguere tra i concetti tecnici necessari per comprendere il campo in generale e quelli di cui avrai bisogno solo quando sei specializzato in un'area ristretta. Prendi, ad esempio, il post più votato sopra. Devi capire la differenza tra un algoritmo "simmetrico" rispetto a un algoritmo "asimmetrico" rispetto a un "hash", ma quando l'autore di quel post dice "Aiuta un po 'a sapere cos'è un campo finito della caratteristica 2", Non sarei d'accordo: è significativo solo per i dottorandi che ricercano la criptovaluta, non per il resto di noi che vogliono semplicemente capire come usarlo correttamente.

Un buon modo per guadare i dettagli tecnici è quello di scegliere un obiettivo e lavorare all'indietro. Ad esempio, oggi, Apple ha aggiornato il sistema operativo iPhone/iPad alla versione 4.3.5 per correggere un bug nella convalida delle catene di certificati X.509. Comprendere il problema e perché hanno dovuto risolvere è esattamente il genere di cose di cui stai discutendo nel tuo post originale. Scopri cos'è un certificato X.509, quali sono le catene e perché devono essere convalidati e perché, in caso contrario, un hacker che utilizza un uno strumento come "sslsniff" può sconfiggere la crittografia. Una volta compreso tutto ciò, avrai raggiunto gran parte del tuo obiettivo che descrivi nel tuo post originale.

Un altro esempio è un post sul blog sulla verifica della chiave di Comodo Hacker

Ancora una volta, scopri cosa ha fatto l'hacker Comodo (creato certificati firmati per Google e Yahoo), come funziona la revoca dei certificati e come utilizzare gli strumenti per convalidare quel certificato. Lo consiglio come un buon post perché è un buon punto di partenza per l'utilizzo degli strumenti 'openssl', che sono standard nel nostro settore.

In bocca al lupo!

10

Registrati per Stanford online classe di crittografia che inizierà il prossimo gennaio. È gratuito, online, include sia la teoria (lezioni video e quiz) sia la pratica (compiti di programmazione), ti permette di lavorare secondo i tuoi ritmi e otterrai una dichiarazione di realizzazione se ci riuscirai. Dati i vari echi che ho avuto durante la precedente sessione dei corsi online di Stanford, mi iscrivo sicuramente a questa lezione (oltre a quella sulla sicurezza informatica).

  • Dal lato della teoria:

Principi di progettazione ingegneristica di crittografia e applicazioni pratiche di Niels Ferguson e Bruce Schneier. Il libro vuole essere un aggiornamento della venerabile crittografia applicata, gli autori sono ben noti nel settore e le recensioni sono buone.

  • Per quanto riguarda la pratica:

Puoi dare un'occhiata a varie competizioni di hacking/sicurezza CTF (Capture The Flag). Includono generalmente sfide di crittografia. Sono divertenti e ti portano fuori dalla tua zona di comfort per risolvere i problemi in un tempo limitato. Ecco un buon CTFs Calendar . Inoltre, guarda alcuni commenti sui precedenti CTF, ne ho trovati molti molto educativi e ben spiegati.

10
kroosec

Per algoritmi crittografici:

Stinson's Cryptography: Theory and Practice

passa attraverso la matematica di molti algoritmi crittografici in un modo che li renderebbe abbastanza facili da implementare, se è quello che volevi fare.

Anche Applied Cryptography di Scheiner è un libro di spicco sull'argomento. Probabilmente si sovrappone parecchio ma con alcuni algoritmi diversi.

Per quanto riguarda un libro che ti dice esplicitamente come implementarli, non ho nulla. Commercialmente, questi non sono sempre implementati nel software ed è un settore abbastanza di nicchia. Dal punto di vista del gioco, direi di prendere un libro che spiega l'algoritmo, implementarlo e confrontare i tuoi risultati con una libreria comunemente usata per lo stesso algoritmo.

Allo stesso modo, non ho nulla sulla crittoanalisi, anche se sospetto che se scegli un algoritmo e google per cose come "debolezza" e "chiavi deboli" troverai alcuni documenti interessanti e altre informazioni. L'ultima volta che ho dovuto scrivere un articolo su qualcosa del genere (10 anni + fa) è essenzialmente quello che ho fatto ...

6
bethlakshmi

Raccomando Engineering di crittografia: principi di progettazione e applicazioni pratiche . È il libro perfetto per te. Descrive come progettare e implementare i cryptosystems, dal punto di vista di un progettista e implementatore di sistemi. È un libro molto pragmatico, con una prospettiva derivata dagli anni di esperienza degli autori. La parola "ingegneria" nel titolo è davvero adatta. Penso che lo troverai una risorsa inestimabile che ti aiuterà a dare la priorità a cosa dovresti spendere la maggior parte della tua energia preoccupandoti, cosa può andare storto e come assicurarti che quelle cose brutte non ti accadano.

4
D.W.

Vorrei anche aggiungere che dai un'occhiata a Matasano crypto sfide dato che hai già alcune capacità di programmazione.

Dal loro sito Web:

QUANTO CRIPTO DEVO SAPERE? Nessuna. Questo è il punto.

COSA DEVO SAPERE? Ti consigliamo di essere in grado di programmare con competenza in qualsiasi lingua. Abbiamo ricevuto comunicazioni in C, C++, Python, Ruby, Perl, Visual Basic, X86 Assembly, Haskell e LISP.

Tutte le loro sfide si basano sulle vulnerabilità di criptovaluta del mondo reale, quindi dovresti imparare cose carine risolvendole.

3
ack__

Se desideri una comprensione della teoria della crittografia, scritta in un modo accessibile ai professionisti, prova "Introduzione alla crittografia moderna" di Katz e Lindell.

3
user432944

Imparare la crittografia da zero a volte può sembrare una cosa difficile ma se hai le risorse giuste ti piacerà moltissimo. I seguenti sono i miei siti preferiti per iniziare oggi a imparare la crittografia.

  1. Impara la crittografia a Kifanga per principianti completi a livelli più avanzati.
  2. Crittografia pratica è davvero buono per gli articoli di crittoanalisi
  3. Learncryptography è ottimo per le funzioni hash
0
chris pete