tl; dr - Estás proponiendo un algoritmo de estiramiento de teclas que convierte 128 bits de entrada en una clave mucho más grande. Esto no es tan bueno como simplemente usar una clave mucho más grande del mismo tamaño, aunque no es necesariamente tan débil como los 128 bits de entrada. Dicho esto, su mapa de bits parece muy ordenado, lo que sugiere que es mucho más débil que un mapa de bits generado aleatoriamente.
Según la respuesta de @ Blender , solo estás usando 128 bits para generar la imagen. Supongo que quieres que la imagen en sí cuente como una clave más grande que los 128 bits que pones en el algoritmo que la generó. Y podría .
Específicamente, lo que estás tratando de hacer es crear un algoritmo de estiramiento de teclas que intenta estirar 128 bits de entrada en una clave mucho más grande. Esto no es necesariamente infructuoso, pero hay cosas a tener en cuenta:
-
Un algoritmo de estiramiento de clave puede ser vulnerable a la fuerza bruta de la entrada. Por ejemplo, incluso si alguien no pudiera aplicar ingeniería inversa al algoritmo de generación de imágenes, podrían probar todas las entradas posibles de $ 2 ^ {128} $ para generar todas las imágenes posibles de $ 2 ^ {128} $ y luego probar cada una. Para protegerse de esto, debe asegurarse de que el algoritmo de generación de imágenes sea demasiado costoso para que tal ataque sea factible.
-
Tu imagen se ve lejos de ser aleatoria a escalas locales. Esto es, cualquiera que mire unos pocos píxeles probablemente pueda adivinar los píxeles vecinos con probabilidades de éxito mejores que las aleatorias. Esto significa que el algoritmo no es pseudoaleatorio, incluso contra un atacante que no puede aplicar ingeniería inversa al algoritmo de generación de imágenes.
-
Su imagen se ve muy lejos de ser aleatoria a escala global. Esto es, las formas mostradas tienen una geometría global, más las imágenes desperdician píxeles en un fondo bien educado. Esto debilita significativamente la pseudoaleatoriedad de nuevo, sugiriendo potencialmente que podría ser fácil de romper por completo.
-
No hay ninguna ventaja real en un algoritmo de estiramiento de claves que produce una imagen en lugar de cualquier otra representación de los mismos datos. Por supuesto, la clave estirada se ve bonita como una imagen, pero esa belleza simplemente refleja su debilidad frente a un mapa de bits generado aleatoriamente.
Este sitio web parece generar mapas de bits aleatorios en blanco y negro con dimensiones específicas. Por ejemplo, aquí hay un mapa de bits de $ 250 \ por 250 $ -píxeles:
.
Este mapa de bits es (se supone) aleatorio, ya que un atacante que mira cualquier combinación de sus píxeles no debería tener mejor - probabilidades de adivinar cuál podría ser otro píxel.
¿Cuánta entropía?
Lamentablemente, este sitio no tiene habilitado MathJax, por lo que es difícil responder tu pregunta directamente sin que parezca extraño. Aquí escribiré una respuesta cuando MathJax estuviera disponible.
El conjunto de imágenes RGB generadas aleatoriamente de una longitud y anchura dadas contiene $$ {\ left (n_ \ text {Red} \, n_ \ text {Green} \, n_ \ text {Blue} \ right) } ^ {n_ \ text {ancho} \, n_ \ text {altura}} \, \ text {miembros}
\ , $$ donde:
-
$ n_ \ text {Red} $ es el número de valores posibles para la dimensión " roja " de un píxel;
-
$ n_ \ text {Green} $ es el número de valores posibles para la dimensión " verde " de un píxel;
-
$ n_ \ text {Azul} $ es el número de valores posibles para la dimensión " azul " de un píxel;
-
$ n_ \ text {width} $ es el número de píxeles en el ancho; y
-
$ n_ \ text {length} $ es el número de píxeles en la longitud.
Entonces, dado que la entropía es $ \ log_2 {\ left (n_ \ text {members} \ right)}, $ this'd $$
\ begin {align}
\ left [\ text {entropy} \ right]
&erio; ~ = ~ \ log_2 {\ left (
{\ left (n_ \ text {Red} \, n_ \ text {Green} \, n_ \ text {Blue} \ right)}
^ {n_ \ text {ancho} \, n_ \ text {altura}}
\ right)} \ [5px]
&erio; ~ = ~ {n_ \ text {width} \, n_ \ text {height}} \, \ log_2 {\ left (n_ \ text {Red} \, n_ \ text {Green} \, n_ \ text {Blue} \ Correcto)}
\,. \ end {alinear}
$$
En el caso de una imagen en blanco y negro:
-
$ n_ \ text {Red} = 2, $ ya que hay dos valores posibles para el canal rojo;
-
$ n_ \ text {Verde} = n_ \ text {Azul} = 1, $ ya que los valores de los canales verde y azul se definen para que sean iguales al canal rojo (de modo que todos los píxeles sean negros o blancos) ;
entonces la entropía sería $$
\ left [\ text {entropy} \ right]
~ = ~ {n_ \ text {ancho} \, n_ \ text {altura}} \, \ log_2 {\ left (2 \ times 1 \ times 1 \ right)}
~ = ~ {n_ \ text {ancho} \, n_ \ text {altura}}
\ ,.
$$