Scrittura del mio algoritmo di crittografia [chiuso]

51

Attualmente sto studiando informatica all'università (college britannico, non università) e il corso mi annoia a morte. Sto codificando da un po 'ormai principalmente nei linguaggi OO come C # e Java, ma spesso mi annoio e mi arrendo rapidamente perché la maggior parte è roba noiosa dell'interfaccia utente che odio fare, i progetti che ho in mente raramente hanno molto da fare con la progettazione del codice e la creazione di algoritmi. Voglio iniziare a scrivere i miei algoritmi e iniziare ad allontanarmi dal lato della facilità di utilizzo e iniziare a imparare cose che mi interessano, ovvero crittografia e compressione. Voglio scrivere il mio algoritmo di crittografia, per crittografare i byte di un file o una stringa. Ho alcune domande:

  • Dove dovrei iniziare con questo, Quali libri / materiali sono raccomandati per iniziare con la crittografia?
  • Ho bisogno di una conoscenza approfondita della crittografia per iniziare su base algoritmo?
  • C # sarà OK per mettere in pratica un algoritmo di crittografia?

Qualsiasi aiuto sarebbe apprezzato sinceramente. Voglio iniziare a scrivere codice, quindi quando si tratta di applicare a uni, ho qualcosa da mostrare per tutte le mie affermazioni audaci sulla mia applicazione!

    
posta Confuto 22.11.2015 - 16:15
fonte

9 risposte

138

Naturalmente puoi iniziare in piccolo e implementare i tuoi algoritmi. Tuttavia, non presume che forniscano sicurezza oltre l'offuscamento .

La cosa difficile quando si parla di crittografia è trovare i motivi per cui qualcosa in realtà è sicuro. Non sarai in grado di decidere che entro pochi mesi e se ti senti come se fossi in quel punto, probabilmente hai torto.

È molto più facile trovare ragioni per cui le cose non sono sicure delle ragioni per cui sono sicure, quindi se vuoi iniziare da qualche parte, sviluppa i tuoi algoritmi fino a quando pensi che siano sicuri e poi cerca di scoprire perché non lo sono e trova i modi per attaccarli.

La maggior parte degli errori viene commessa quando si implementano algoritmi. Quindi, se vuoi ottenere un lavoro ben pagato, potresti imparare come implementare correttamente quella roba.

Suggerirei di iniziare a implementare qualcosa come AES e di continuare con diverse modalità operative come CBC o CCM e scoprire perché la casualità è importante. Continuare con SHA-2 e HMAC e procedere alla crittografia asimmetrica. Controlla sempre cosa hanno fatto gli altri e perché l'hanno fatto e dai uno sguardo speciale agli attacchi ai canali laterali e al modo in cui vengono eseguiti. Se sei a quel punto troverai il modo per andare avanti.

Il riferimento all'inizio è "HAC", che è liberamente disponibile online: link

[Edit] Un suggerimento da JRsz che non deve essere sepolto nei commenti. Un buon libro per principianti: link

    
risposta data 22.11.2015 - 17:59
fonte
37

Coursera

Ecco i miei 2 centesimi:

Partecipa alla lezione online di Coursera Cryptography:

La lezione dura sei settimane. Ogni settimana ci sono diversi video di lezioni, un quiz graduale e un incarico di programmazione opzionale. (E questi incarichi implicano l'implementazione di parti crittografiche.)

Alla fine delle sei settimane c'è un test.

Se vuoi essere sfidato, allora questa è la strada giusta da percorrere. è un sacco di lavoro. Ti suggerisco di pianificare più di 10 ore ogni settimana. Altro se vuoi fare anche l'incarico di programmazione.

( Modifica: ecco un sommario per una precedente esecuzione di questa classe . )

Chiarimento: gli incarichi di programmazione sono proprio lì per generare una comprensione più profonda dell'argomento. Sono esplicitamente NON qualcosa che sei destinato a rilasciare in natura.
Al contrario: il "Non lo implementa mai da solo!" viene ripetuto ancora e ancora. (E senza dare troppo lontano: ogni volta che "Implementa semplicemente te stesso!" è in uno dei test a scelta multipla, allora è sbagliato.)

    
risposta data 22.11.2015 - 17:56
fonte
21

Inizia rompendo, non costruendo il tuo. C'è un numero preoccupante di post di scambio di oggetti da parte di persone che hanno scritto i propri algoritmi. Dai un'occhiata in giro e scopri cosa c'è di sbagliato in loro. (Non guardare le risposte postate.) [Le buone ricerche includono "È sicuro?" E "Cosa c'è di sbagliato in questo algoritmo".]

Solo quando hai trovato problemi nel lavoro di altre persone dovresti passare al tentativo di implementare gli algoritmi di altre persone. (Il commento di @ stackzofztuff su Coursera non è male - se ricordo, Dan Boneh inizia in quel modo, con più struttura di quella che spunta qui.)

    
risposta data 22.11.2015 - 18:17
fonte
13

La Crittografia applicata di Bruce Schneier è una lettura obbligata se vuoi iniziare a studiare questo campo. Sono sorpreso che nessuno lo abbia suggerito prima.

E sì, hai bisogno di sapere molto sulla crittografia anche prima di provare a far girare i tuoi algoritmi per divertimento. Non pensate nemmeno di usarli per problemi del mondo reale, però - c'è già un sacco di cattiva crittografia intorno.

Riguardo alla programmazione, evitare linguaggi proprietari come la peste. Suggerirei C, o anche C ++.

    
risposta data 23.11.2015 - 10:56
fonte
10

Un buon inizio sarebbe implementare algoritmi esistenti e imparare come funzionano in profondità. Ad esempio, l'algoritmo one-time pad è facile da imparare e implementare e studiare i suoi punti di forza e di debolezza ti consentirà di iniziare. Ti farà anche comodo con il tipo di bit-twiddling che è importante nella crittografia. Fare una ricerca per "one-time pad" ti farà iniziare.

    
risposta data 22.11.2015 - 16:36
fonte
6

Basta accaparrarsi le grandi risposte che sono qui, con qualcosa di diverso.

Se si presuppone che il proprio algoritmo v1 sarà insicuro e terribile e il vostro v100 sarà solo leggermente migliore, ma ugualmente insicuro. (così come la tua v1000)

Tenendo presente questa ipotesi, puoi imparare molto risolvendo i problemi che la crittografia ha bisogno di risolvere per diventare la scienza che è oggi. cioè reinventando la ruota.

Personalmente trovo che reinventare la ruota sia un modo eccellente per imparare un compito complesso. Ti dà qualcosa da risolvere. Se questo è il tuo problema, ci sono meno cose che sono più difficili da risolvere rispetto alla crittografia.

In questo modo, puoi andare all'Università e dire, beh, ho progettato il mio algoritmo di crittografia come strumento per imparare a risolvere problemi difficili. Alla v50 l'algoritmo fa schifo, ma queste sono le lezioni che ho imparato, le soluzioni che ho trovato, ed è così che vengono risolte nel mondo reale.

C'è una grande differenza tra dire che ho scritto un protocollo di crittografia "buono" e dire che ho scritto un protocollo che è quasi certamente molto debole ma lo scopo non era quello di creare un protocollo sicuro. Personalmente avrei un sacco di rispetto per qualcuno che ha detto il secondo. (Preferirei annuire al primo - e mostrargli velocemente la porta)

    
risposta data 23.11.2015 - 22:47
fonte
3

È possibile implementare algoritmi di crittografia già esistenti, ma la progettazione del proprio algoritmo di crittografia è una delle questioni più complesse che è possibile affrontare. Per un'introduzione generale mi raccomando questo canale: o il libro "Crittografia Understanding" di Christoph Paar e Jan Pelzl ( link ). Presumo si sta puntando ad algoritmi simmetrici e vi Consiglierei di iniziare a leggere un sacco di teorie su di loro, ciò che è sicuro, è stato è non sicuro (historicle) ed esplicitamente come hanno stato attuale degli algoritmi d'arte hanno fatto il loro modo di quello che sono (come è stato sviluppato AES, scelto, ecc.)

Incontrerai molti problemi matematici quando gestisci diversi modelli di attaccanti, anche nella parte simmetrica. La crittografia asimmetrica è basata prevalentemente sui problemi mathematicle e ci sono alcuni attacchi molto difficile che sono molto potenti contro la crittografia asimmetrica.

La linea di fondo è non sviluppare i tuoi algoritmi, a meno che tu non abbia molti anni di esperienza e abbia molta familiarità con l'argomento (tutte le parti di esso). Implementazione di alcuni di loro è comunque una buona idea, ma se siete alla ricerca di un qualche tipo di progetto Perché non si scrive un programma che utilizza algoritmi già esistenti e decifra alcuni dati per voi. Avrai abbastanza problemi per affrontarlo, perché un algoritmo sicuro non è affatto una garanzia per la crittografia sicura. Diverse modalità operative saranno importanti su questo argomento e su altri problemi.

    
risposta data 22.11.2015 - 21:42
fonte
2

Potresti seguire il suggerimento di Scott Wilson sul pad One-Time, ma con dati casuali reali. Puoi ad es. considera il rumore dalla webcam del computer. Lascia che la webcam scatti alcune foto di una scena statica, converta le immagini in immagini in virgola mobile a 32 bit, normalizzi le immagini alla stessa luminosità, prendi la media e quindi sottrai una delle immagini dalla media. Se si associano valori di pixel negativi a 0 e valori di pixel positivi a 1, si hanno quasi dei bit perfettamente casuali, che non sono correlati quando i pixel non sono troppo vicini. Applicando l'algoritmo di von Neumann a coppie di bit presi da pixel distanti:

(0,1) --- > 0

(1,0) --- > 1

(0,0) e (1,1) sono scartati

produrrà bit casuali perfetti con 0 e 1 aventi esattamente il 50% di probabilità.

    
risposta data 23.11.2015 - 07:25
fonte
2

Vai avanti, scrivi un algoritmo ma alla fine dai un compito a uno dei tuoi amici / compagni che si occupano regolarmente della crittografia; dì loro di interrompere la crittografia se possibile.

Noterai che saranno in grado di romperlo nel giro di pochi minuti e rimarrai stupito pensando a quante scappatoie ci sono che ha dato il gioco alle persone con una conoscenza della crittografia estesa em> (per qoute le tue parole)

Questo è esattamente quello che è successo a me quando stavo imparando a programmare molto tempo fa e volevo sfidare alcuni ragazzi che erano intelligenti in queste cose e ho fallito miseramente. Tanto da poter decifrare persino il messaggio stampato su un foglio usando solo la mente e le capacità.

Certamente puoi scriverne uno e perfezionarlo nel tempo, ma in nessun modo può essere sicuro in qualsiasi momento presto contro le persone con quella conoscenza.

Questo sarà un buon punto di partenza (o forse anche un punto di arresto) nella tua ricerca per scrivere il tuo algoritmo:)

    
risposta data 23.11.2015 - 08:15
fonte

Leggi altre domande sui tag