tl; dr - stai proponendo un algoritmo di allungamento della chiave che trasforma 128 bit di input in una chiave molto più grande. Questo non è buono come semplicemente usando una chiave molto più grande della stessa dimensione, anche se non è necessariamente debole come i 128 bit di input. Detto questo, la tua bitmap sembra molto ordinata, il che suggerisce strongmente che è molto più debole di una bitmap generata casualmente.
In base alla risposta di Blender , stai utilizzando solo 128 bit per generare l'immagine. Immagino che tu voglia che l'immagine stessa contenga una chiave più grande dei 128 bit che hai inserito nell'algoritmo che l'ha generata. E potrebbe .
In particolare, quello che stai cercando di fare è creare un algoritmo di allungamento della chiave che tenti di estendere 128 bit di inserire in una chiave molto più grande. Questo non è necessariamente infruttuoso, ma ci sono cose di cui essere a conoscenza:
-
Un algoritmo di allungamento della chiave può essere vulnerabile alla forza bruta dell'input. Ad esempio, anche se qualcuno non fosse in grado di decodificare l'algoritmo di generazione di immagini, potrebbe provare tutti i possibili input $ 2 ^ {128} $ per generare tutte le possibili $ 2 ^ {128} $ di immagini possibili, quindi provare ciascuna. Per evitare questo, è necessario assicurarsi che l'algoritmo di generazione di immagini sia troppo costoso per un tale attacco sia fattibile.
-
L'immagine sembra lontana dalle scale locali a caso. Cioè, chiunque ne guardi alcuni pixel può probabilmente indovinare i pixel vicini con probabilità di successo migliori del random. Ciò significa che l'algoritmo non è pseudo-casuale, anche contro un utente malintenzionato che non può decodificare l'algoritmo di generazione di immagini.
-
La tua immagine sembra lontana dalla casualità su scala globale. Questo è, le forme visualizzate hanno geometria globale, più le immagini sprecano pixel su uno sfondo ben educato. Ciò indebolisce significativamente la pseudo-casualità di nuovo, suggerendo potenzialmente che potrebbe essere facile da interrompere completamente.
-
Non c'è alcun vantaggio reale in un algoritmo di allungamento chiave che produce un'immagine rispetto a qualsiasi altra rappresentazione degli stessi dati. Certo, la chiave allungata sembra carina come un'immagine, ma quella bellezza riflette semplicemente la sua debolezza rispetto a una bitmap generata casualmente.
Questo sito sembra generare bitmap in bianco e nero casuali con dimensioni specificate. Ad esempio, ecco una bitmap $ 250 \ times 250 $ -pixel:
.
Questa bitmap è (dovrebbe essere) casuale in quanto un attaccante che osserva una qualsiasi combinazione dei suoi pixel non dovrebbe avere una migliore più o meno probabilità di indovinare quale potrebbe essere un altro pixel.
Quanta entropia?
Sfortunatamente questo sito non ha MathJax abilitato, quindi è difficile rispondere direttamente alla tua domanda senza sembrare strana. Qui scriverò una risposta come se MathJax fosse disponibile.
L'insieme di immagini RGB generate casualmente di una data lunghezza e larghezza contiene $$ {\ left (n_ \ text {Red} \, n_ \ text {Green} \, n_ \ text {Blue} \ right) } ^ {n_ \ text {width} \, n_ \ text {height}} \, \ text {members}
\ , $$ dove:
-
$ n_ \ text {Red} $ è il numero di valori possibili per la dimensione " rosso " di un pixel;
-
$ n_ \ text {Verde} $ è il numero di valori possibili per la dimensione " verde " di un pixel;
-
$ n_ \ text {Blue} $ è il numero di valori possibili per la dimensione " blu " di un pixel;
-
$ n_ \ text {width} $ è il numero di pixel nella larghezza; e
-
$ n_ \ text {length} $ è il numero di pixel nella lunghezza.
Allora poiché entropy è $ \ log_2 {\ left (n_ \ text {members} \ right)}, $ this'd be $$
\ Begin {align}
\ left [\ text {entropy} \ right]
& ~ = ~ \ log_2 {\ left (
{\ left (n_ \ testo {rosso} \, n_ \ testo {verde} \, n_ \ testo {blu} \ destra)}
^ {n_ \ text {width} \, n_ \ text {height}}
\ right)} \ [5px]
& ~ = ~ {n_ \ text {larghezza} \, n_ \ testo {altezza}} \, \ log_2 {\ sinistra (n_ \ testo {rosso} \, n_ \ testo {verde} \, n_ \ testo {blu} \ destra)}
\. \ End {align}
$$
Nel caso di un'immagine in bianco e nero:
-
$ n_ \ text {rosso} = 2, $ poiché ci sono due possibili valori per il canale rosso;
-
$ n_ \ testo {verde} = n_ \ testo {blu} = 1, $ poiché i valori dei canali verde e blu sono definiti per uguagliare il canale rosso (in modo tale che tutti i pixel siano neri o bianchi ;
quindi l'entropia sarà $$
\ left [\ text {entropy} \ right]
~ = ~ {n_ \ text {width} \, n_ \ text {height}} \, \ log_2 {\ left (2 \ times 1 \ times 1 \ right)}
~ = ~ {n_ \ text {width} \, n_ \ text {height}}
\ ,.
$$