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.