Come iniziare a scrivere software crittografico [chiuso]

35

Questa è solo una domanda accademica, non ho intenzione di scrivere il mio software crittografico.

Ogni volta che qualcuno fa la domanda "Come faccio a scrivere la mia Crypto?" la risposta è no.

Attualmente sto studiando informatica e non vi è alcun corso offerto dall'università che sembra essere utile. Ci sono alcuni corsi offerti dal dipartimento di matematica che potrebbero condurre a una carriera di ricerca negli algoritmi crittografici, ma nulla sull'implementazione degli algoritmi e sull'evitare attacchi ai canali laterali. Ma ovviamente ci sono alcune persone che scrivono buoni criptati.

Sta solo leggendo delle vulnerabilità e ricordando di non fare la stessa cosa? O da dove viene la conoscenza necessaria?

    
posta Christian Vögl 15.07.2015 - 13:41
fonte

2 risposte

29

Per lo più, sì, si tratta di scrivere codice e di non fare nulla di male. Al suo interno, il processo di scrittura crittografico è in realtà una combinazione di comprensione e conoscenza aggiornata .

Per scrivere il codice crittografico, devi sapere come il codice che scrivi viene tradotto in assembly, quindi codice macchina, quindi segnali elettrici; può aiutare ad avere alcune nozioni su come funziona un transistor. Non devi avere per svilupparsi in assemblea, ma devi essere in grado di pensare a cosa diventa il tuo codice. Osservare l'output dell'assieme dal compilatore (supponendo che si lavori in C o qualcosa di simile) è molto istruttivo.

Il punto di questa conoscenza è che oggigiorno gli attacchi più alla moda riguardano i canali laterali , che si nutrono di sottili differenze in tempo di esecuzione o modello di accesso alla memoria o consumo di energia del codice. I linguaggi di programmazione hanno lo scopo di fornire una visione astratta che nasconda tutti questi dettagli; il criptatore di successo è uno che può annullare quell'astrazione nella sua testa mentre scrive il codice. Un cripto codificatore deve padroneggiare il suo linguaggio di programmazione al punto da poter scrivere il compilatore stesso (non che lo farà, deve essere in grado di farlo).

Quindi devi mantenerti aggiornato con tutti i vettori di attacco conosciuti, il che significa tenere traccia di tutte le scoperte su quell'argomento. Sperimentalmente, trovo che questo stesso sito (security.SE) e le sconfinate divergenze degli utenti della chatroom sia un buon metodo per raccogliere alcune informazioni - tuttavia, una volta che sai che esiste un potenziale attacco, devi scavare un po ' , compresa la lettura di articoli accademici e abstract, che richiede, ovviamente, abilità nella lettura di articoli accademici (il tipo di competenze che acquisisci quando fai un dottorato di ricerca).

Un'implementazione crittografica può essere considerata valida solo nella misura in cui può essere esaminata, quindi, indipendentemente dal modo in cui la si scrive, è comunque necessario documentarla pesantemente. La sicurezza non può essere testata , quindi un codice può essere considerato sicuro solo se può essere completamente compreso. L'onere della prova sta sulle spalle dello sviluppatore: non è sufficiente che nessuno abbia trovato un modo per infrangere il codice (ancora); lo sviluppatore deve dimostrare esplicitamente perché il suo codice va bene.

Tutto ciò riguarda l'implementazione di un algoritmo standardizzato esistente. Ad esempio, stai scrivendo un codice RSA . Lo standard è molto specifico su dove ogni bit dovrebbe andare, quindi il tuo lavoro è "solo" per realizzare un'implementazione robusta che non perda informazioni sulla chiave o sui dati crittografati (che in pratica significa usare accecamento casuale o codice a tempo costante con un modello di accesso alla memoria fisso). Quando si considerano dispositivi embedded con un alimentatore esterno controllato dagli hacker (ad es. Smart card), il problema diventa molto più complesso e può essere definito solo come "ricerca di alto livello" (e i fornitori di smart card impiegano ricercatori di alto livello esattamente per quella ragione). Per piattaforme di software più banali, questo è eseguibile da un programmatore solitario, a condizione di padroneggiare i suoi strumenti e di sapere come utilizzare la ricerca accademica.

Progettare i propri algoritmi, o i propri protocolli (un protocollo può essere definito come un insieme di algoritmi), è un'altra lattina di worm. Uno grande.

Non sono sicuro se sia possibile riassumere tutte le conoscenze richieste per una buona crittografia come una serie di regole insegnabili. Tuttavia, alcune persone stanno provando . Quel sito Web potrebbe non essere la risposta definitiva, ma almeno contiene molti buoni consigli e indicazioni e può almeno servire da elenco di cose da tenere d'occhio. Non provare a scrivere codice crittografico a livello di produzione fino a quando non riesci a leggere le regole di codifica e almeno a capire quali sono i problemi elencati è, da dove viene, come potrebbe essere sfruttato e perché dovresti occupartene (o meno) nel tuo contesto specifico.

In definitiva, le abilità con una buona crittografia sono basate su esperienza , quindi il meglio che puoi fare a tale riguardo è iniziare scrivendo alcune implementazioni tu stesso, quindi confrontarle con altre implementazioni e vedere in quali aspetti loro differiscono e perché. Le funzioni di hash come famiglia SHA sono un buon punto di partenza.

    
risposta data 15.07.2015 - 15:23
fonte
3

non rispondi esattamente alla tua domanda ma: Penso che la cosa più importante di non eseguire la tua crittografia non è che alcune altre persone siano più competenti (anche se è probabilmente vero) ma soprattutto che ogni volta che fai qualcosa puoi commettere degli errori (essere bravi o no cambia questo).

Un modulo più corretto dovrebbe essere non eseguire non revisionato crypto .

La scrittura di crypto non dovrebbe essere diversa dalla scrittura di altri codici critici, ma non dovresti avere fiducia nel tuo codice prima che fosse rivisto. La qualità del processo di revisione è ciò che ti dà fiducia in un codice crittografico, per questo motivo la nuova fantastica crittografia rivoluzionaria non è una cosa che la gente usa e le persone preferiscono aspettare che la nuova tecnologia sia stata rivista prima di usarla.

Quando scrivi il tuo processo di revisione crittografica è come se pensassi davvero che funzionasse e roger leggesse l'intero codice una volta senza trovare alcuna vulnerabilità, quindi è sicuro.

su come apprendere su crypto:

  • leggi la ricerca accademica riguardante la crittografia
  • alcune università offrono corso (probabilmente puoi trovare corso online)
  • leggere e comprendere (come questo accade non solo il fatto) vulnerabilità nota
risposta data 15.07.2015 - 14:04
fonte

Leggi altre domande sui tag