La crittografia dell'immagine basata su pixel è sicura?

-4

Ho crittografato un'immagine utilizzando il metodo di crittografia dei pixel. Ho appena usato un'immagine bmp per quello. Quello che ho fatto è che ho recuperato ogni valore di pixel dall'immagine e ho ottenuto il valore del valore di rosso, verde e blu individualmente e lo ho XOR con un valore pseudo casuale. Per la generazione di numeri pseudo casuali ho usato SecureRandom con l'algoritmo SHA1PRNG. Il valore di seme impostato per generare i numeri casuali è ottenuto dalla password che forniamo.

La descrizione dettagliata del codice e dell'output è disponibile in zone4java

La mia domanda è: quanto tempo ci vorrà a qualsiasi utilità, se disponibile, per decodificare l'immagine senza conoscere la password? Questo tipo di metodi di crittografia è sicuro?

Nota. Se la mia domanda è in fase di downvoting, commenta il motivo.

    
posta Maximin 17.03.2013 - 07:34
fonte

2 risposte

1

La crittografia dei pixel in una bitmap mediante xor-ing con l'output di un codice di flusso è in linea di principio ok, ma ci sono molti avvertimenti:

  1. Non crittografate le dimensioni dell'immagine o dei metadati.
  2. Come con tutti gli stream-ciphers, non devi mai riutilizzare una chiave (o coppia chiave-nonce). Nel tuo caso questo significa che non devi mai riutilizzare un seme.

    Altrimenti ottieni un blocco per molti, che fa schifo. Quindi hai bisogno di un modo per includere un nonce.

  3. SHA1PRNG non è la scelta migliore per un codice stream. Il problema più grande è che l'implementazione potrebbe cambiare tra diverse versioni. Credo che sia successo su Android, rompendo alcune applicazioni.

    Dovresti utilizzare un codice stream definito, come AES in modalità CTR, non un PRNG.

  4. Poiché utilizzi la crittografia basata su password, hai bisogno di un KDF basato su password, come PBKDF2 con iterazioni e sale sufficienti. Consiglio di utilizzare un sale casuale da 16 byte.

    L'uso di un sali unici qui porta a chiavi univoche per il cifrario, quindi non è più necessario il nonce che ho menzionato nel passaggio 2. In effetti il sale è il nonce.

risposta data 17.03.2013 - 10:05
fonte
2

La prima immagine è di Tux, la mascotte di Linux. La seconda immagine è di Tux, criptata in modalità ECB (più o meno quello che stai tentando). Il terzo è di Tux, crittografato in modalità CBC. Il problema con il secondo approccio e il tuo è che i valori dei pixel identici crittografano lo stesso valore nel testo cifrato. Pertanto, anche se il colore di ciascun pixel è protetto, il modello sottostante è facilmente visibile.

Fai un favore a te stesso e non tirare la tua cripta. Usa qualcosa di consolidato come AES in modalità CBC o (idealmente) in modalità GCM. E crittografa il flusso di byte intero in una volta sola, piuttosto che cercare di essere intelligente e criptare pixel per pixel.

    
risposta data 17.03.2013 - 07:44
fonte

Leggi altre domande sui tag