Rolling your own crypto [closed]

1

So che di solito questo è di solito disapprovato, ma supponendo che si debba eseguire il proprio codice di crittografia (completamente da solo o con un piccolo gruppo di amici, senza possibilità di revisione tra pari), cosa si può fare per rendere l'algoritmo personalizzato il più sicuro possibile (o meglio, per mantenere il pericolo di usarlo al minimo)? Allo stesso modo, cosa faresti per qualcosa come una funzione di hash per rendere la probabilità che abbia qualche collisione banale o un attacco di preimage il più basso possibile?

Capisco che non ci sarebbe modo di approcciare la sicurezza di algoritmi come AES, e non ho intenzione di usare algoritmi personalizzati per qualcosa di importante, ma ho pensato che sarebbe stato informativo pensare a quali sarebbero state le migliori pratiche per rolling your own cryptosystem se lo facessi.

    
posta DEP 02.05.2018 - 17:17
fonte

3 risposte

5

Risposta modificata

In generale, potresti iniziare basando il tuo cifrario (principalmente rilevante per i cifrari asimmetrici) su un problema noto noto. Potresti voler fare prove matematiche verificando che il tuo cifrario abbia le proprietà desiderate e spezzarlo, in effetti, richiede la risoluzione del noto problema difficile. Quale tipo di problemi scegliere è stato spiegato più su Crypto SE . Creando queste prove matematiche, ti assicurerai che il tuo cifrario non sia facilmente irrintracciabile direttamente.

Il prossimo passo potrebbe essere quello di guardare i canali laterali. In particolare gli attacchi temporali. Se il tuo cifrario impiega una quantità di tempo diversa per input e chiavi diversi, potresti voler aggiungere almeno del codice per far sì che richieda sempre la stessa quantità di tempo o semplicemente aggiunga una quantità di tempo casuale in attesa attiva.

Ci sono molti altri canali secondari e considerazioni che un codice ampiamente usato deve prendere in considerazione, ma questo dovrebbe iniziare. Naturalmente, rendere tutte queste prove matematiche è molto difficile e anche in questo caso, non ti dà alcuna garanzia che il codice non possa essere infranto. Anche se il cifrario è sicuro da solo, in combinazione con altri primitivi crittografici, potrebbe rivelarsi facilmente infrangibile. Ecco perché rotolare la tua cripto è un grande tabù. Riuscire a farlo bene è molto difficile e non scoprirai che hai fatto qualcosa di sbagliato fino a quando qualcuno non lo rompe, o se sei sfortunato, nemmeno dopo.

    
risposta data 02.05.2018 - 17:26
fonte
2

Disclaimer obbligatorio.

veramente non dovrebbe essere il tuo.

Non è come una normale programmazione, in cui puoi reinventare la tua ruota con una forma o un colore diverso.

Ogni piccolo dettaglio può introdurre un punto debole di cui non sei nemmeno a conoscenza e che può interrompere completamente il tuo schema.

Poiché la tua abilità nel progettare crypto è (comprensibilmente) bassa, la probabilità è alta. Più sensibili sono i dati che affidi al tuo schema, o più a lungo lo usi, più alto è l'impatto.

Alta probabilità + alto impatto - > ad alto rischio.

Neanche i crittografi professionisti inventano schemi e li usano subito.

Inoltre, anche i buoni algoritmi possono essere implementati male. Ancora una volta, implementare algoritmi (anche buoni algoritmi) è qualcosa che non dovresti fare, a meno che non sia davvero necessario. Se non altro, inventare i propri algoritmi è addirittura (di gran lunga) meno necessario.

Non mettere questa roba in produzione, punto.

Non usare questa roba per le informazioni che ti interessano, periodo.

Detto questo, se vuoi progettare qualcosa solo a scopo didattico , il consiglio di @ PeterHarmann è valido.

Ho intenzione di espandere un po 'gli algoritmi simmetrici.

La maggior parte dei codici a blocchi si basa su uno dei due approcci, SPN o Feistere reti . Scegline uno.

Se utilizzi SPN, il numero del round può essere relativamente basso, ma ricorda che hai bisogno di una P-box piuttosto grande.

Devi anche progettare un modo per ottenere il tasto rotondo.

Ora arriva la parte divertente ... rompila!

Non disegno crypto, ma se dovessi, per qualsiasi ragione improbabile, controllerei che lo schema sia ragionevolmente sicuro almeno contro la crittoanalisi lineare e differenziale.

Non è un gioco da ragazzi, ma lo stai facendo a scopo di apprendimento, giusto?

    
risposta data 03.05.2018 - 19:09
fonte
0

Ci sono determinati attributi di cui i cifrari hanno bisogno. La proprietà di indistinguibilità del testo cifrato dice che le coppie di output di un cifrario non possono essere distinguibili l'una dall'altra. Quindi esegui test sulle uscite, confrontandole.

Un'altra proprietà è quella di diffusione: una modifica di un bit all'ingresso di un codice a blocchi dovrebbe avere un effetto a catena che si traduce in una variazione media del 50% dei bit nell'output. Questo dovrebbe essere testabile.

Utilizza il test fuzz sugli input per fornire una varietà di campioni da confrontare.

In sostanza, ciò che stai cercando sono tutti gli attributi che rendono sicuri i cifrari e cercano di trovare modi per scrivere test contro quelli.

Successivamente, segui questo con gli attacchi. Quali sono i classici attacchi a cifrari simili ai tuoi? Inizia con attacchi rotondi ridotti e impara quanti round occorrerà per diffondere adeguatamente il tuo testo cifrato. Comprendi come funziona la tua diffusione, e struttura i tuoi round e mescola di conseguenza.

E come tutti gli altri qui, mi sento in dovere di concludere con la legge di Shneier : "Chiunque, dal più amatoriale senza cloro al miglior crittografo, può creare un algoritmo che lui stesso non può rompere". Questo non è solo un gruppo di web amatori che ti dicono di non tirare il tuo; questo è uno dei più eminenti crittografi del pianeta che ricorda ad altri crittografi di talento di non tirare il proprio. Ascolta il suo avvertimento.

    
risposta data 06.05.2018 - 05:36
fonte

Leggi altre domande sui tag