Si prega di criticare il mio schema di crittografia per un microcontrollore molto piccolo [chiuso]

0

Sono nuovo qui e non un esperto di crittografia; ma ho usato la libreria di crittografia per un po '. La mia azienda sta lavorando su un piccolo dispositivo hardware. È alimentato da un microcontrollore, quindi la memoria è un problema che dobbiamo affrontare. Quindi abbiamo deciso di elaborare il nostro schema di crittografia durante l'invio di messaggi ai dispositivi. Questo è ciò che stiamo progettando di fare.

  1. La distribuzione delle chiavi non è un problema dato che fisicamente aggiorna il segreto condiviso quasi tutti i giorni e non è memorizzato sul dispositivo stesso.
  2. Per la chiave di crittografia. Il segreto condiviso è concatenato con un numero casuale reale molto grande (utilizzato come IV), quindi viene applicata una funzione hash x numero di volte per ottenere una chiave a lunghezza fissa per il primo blocco di dati.
  3. Per crittografare il successivo blocco di dati, un nuovo vettore è derivato dal numero di blocco e dall'IV. Una nuova chiave viene quindi generata come in 2 solo per questo blocco di dati. Quindi ogni blocco di dati ha la sua chiave.
  4. Sappiamo che alcune funzioni di hash sono costose, ma la velocità non è un problema qui poiché il dispositivo è lento per cominciare.

Quindi questo è ciò che abbiamo trovato e apprezzeremo i tuoi commenti.

Modifica: dopo ulteriori ricerche. Ho scoperto che quello che ho descritto è solo la modalità CTR qui? Quindi andrò con un'implementazione esistente. Qualche raccomandazione su una biblioteca? Ho anche sentito che alcune persone hanno affermato di aver riscontrato problemi di piattaforma incrociata tra iOS e Android. Qualche commento su questo?

    
posta user2600798 24.04.2015 - 15:55
fonte

3 risposte

6

Bene, per uno, la descrizione del tuo schema non è una descrizione dello schema. Questa è solo una raccolta di intenti vaghi. La descrizione di uno schema crittografico deve essere tale che, leggendo solo la descrizione, potrei scrivere un'implementazione indipendente che interagisce con la tua. Una buona descrizione è simile a questo . O che .

Inoltre, nella tua descrizione, in realtà non dici come tu, sai, crittografa le cose. Sembri alludere a qualche schema di derivazione chiave da cui ottieni "vettori" che sembrano dipendere dal segreto condiviso, ma non dai dati stessi. Ciò che questi vettori fanno e come i dati vengono crittografati e decifrati non è chiaro.

In ogni caso, progettare il proprio algoritmo crittografico è una cattiva idea per il motivo principale per cui è estremamente difficile trovare un algoritmo sicuro. La maggior parte della formazione in crittografia consiste nel comprendere proprio questo: fare un algoritmo sicuro è un'impresa difficile. La ragione concettuale per questo è che non esiste un test per la sicurezza. Il meglio che possiamo fare è scrivere una specifica completa e dettagliata (includendo un'implementazione di riferimento, vettori di test e una motivazione logica per perché potrebbe essere sicuro) e poi inviarla a un gruppo di crittografi e lascia che provino a trovare difetti. Ci vogliono dozzine di crittografi e diversi anni di impegno. Questo è il motivo per cui questo tipo di lavoro viene svolto attraverso "concorsi" organizzati come è stato fatto per AES .

Una domanda su dieci righe su security.SE non può essere considerata un'alternativa ragionevole.

Inoltre, la maggior parte delle situazioni che garantiscono la crittografia (per garantire la riservatezza dei dati) ha bisogno anche di qualcosa per garantire integrità , perché gli attaccanti sono male , non giocano "secondo le regole ", e potrebbe cercare di alterare i dati in transito, possibilmente per apprendere informazioni sui dati e le chiavi in base a come si comportano i sistemi quando si affrontano i dati modificati. L'integrità è ottenuta mediante l'utilizzo di un MAC . La combinazione di crittografia e MAC in modo sicuro è più difficile di quanto sembri , quindi, anche in questo caso, è un lavoro per i crittografi basati sulla competizione (le solite soluzioni raccomandate sono GCM e EAX , ma esiste, in effetti, un competizione per ottenere qualcosa di meglio).

E quando hai un buon protocollo (un assembly sicuro di algoritmi sicuri) che dovrebbe soddisfare i tuoi bisogni, allora non hai ancora finito; devi ancora ottenere un'implementazione che sia corretta, robusta, efficiente e (in modo cruciale) non perda informazioni. Gli attacchi di canale laterale possono essere particolarmente letali per codice imprudente nei sistemi embedded. Ancora una volta, questa è una questione di scienza e anche molta abilità, che non può essere improvvisata.

Per riassumere, hai bisogno, almeno, di un serio aiuto da un crittografo professionista (no, non sono a noleggio al momento). A meno che non ci si trovi in un caso in cui i dati che si desidera proteggere non siano interessanti, il che garantisce la massima sicurezza: nulla protegge i dati più che rendere i dati così noiosi e inutili che nessuno in realtà si preoccupa di provare ad accedervi.

    
risposta data 24.04.2015 - 16:20
fonte
2

In generale, le due migliori regole che regolano la creazione dello schema di crittografia quando si cerca sicurezza affidabile e non solo "sicurezza folcloristica" sono:

Regola 1: in genere non è necessario eseguire la propria crittografia

Regola 2: se hai bisogno di eseguire la tua crittografia, fai riferimento immediatamente alla regola 1.

Se alla fine, per qualche ragione, hai bisogno di eseguire la tua crittografia che sopraffa le due regole precedenti, quindi ottenere assistenza professionale per questo. Potrebbe essere costoso, ma la crittografia è una questione complessa che richiede un'elevata conoscenza tecnica e questo ha un prezzo.

Questa citazione di Bruce Schneier è sempre una buona cosa da ricordare: " Chiunque può inventare un algoritmo di crittografia che loro stessi non possono rompere, è molto più difficile inventarne uno che nessun altro può rompere ".

    
risposta data 24.04.2015 - 16:18
fonte
0

È basato su uno schema esistente. se sì cosa?

Non posso essere certo di quanto sia difficile il tuo schema per rompere con la tua descrizione.

Come regola generale, il rollover del proprio codice anziché utilizzare le librerie esistenti è generalmente scoraggiato dal momento che le probabilità di commettere errori sono elevate.

Cercare di inventare il proprio algoritmo è molto peggio ed è quasi universalmente una cattiva idea. È quasi certo di essere insicuro se questo è uno schema che ti sei appena inventato.

Ci sono librerie disponibili per dispositivi con poca memoria, ci sono anche le librerie crittografiche disponibili per arduino. Se la sicurezza è effettivamente importante, prova a utilizzare una libreria esistente.

    
risposta data 24.04.2015 - 16:21
fonte

Leggi altre domande sui tag