¿Cuál sería el tamaño de la clave para una imagen utilizada como clave?

25

Estoy trabajando en un sistema criptográfico que utiliza imágenes en color como claves para el cifrado. Estoy tratando de adivinar cuál es el tamaño de la clave de mi sistema criptográfico para encontrar la viabilidad de un ataque de fuerza bruta. Mi sistema de cifrado utiliza imágenes RGB de cualquier tamaño M x N.

La imagen también es generada por un atractor caótico que es sensible a los valores iniciales, por lo que cada imagen generada es diferente. Estas imágenes son un ejemplo:

No he encontrado un documento que intente hacer el mismo cálculo todavía. ¿Alguna idea de cuál es el tamaño de la clave?

    
pregunta Daniel Esteban Ladino Torres 05.11.2018 - 21:52
fuente

6 respuestas

101

Su edición más reciente indica que sus imágenes se generan de manera procesal, por lo que el tamaño de su clave estará limitado por la cantidad de estado requerida para generar una imagen. El suyo parece estar parametrizado por cuatro puntos flotantes para las condiciones iniciales (y la imagen de salida fija) tamaño, ubicación de la cámara, ubicación de luz puntual, condiciones de convergencia, etc.).

Esos 128 bits de estado se transformarán en una imagen mediante un algoritmo que depende únicamente de su estado proporcionado, por lo que su "clave" de imagen no puede contener más de 128 bits de información. De hecho, creo que clases enteras de valores iniciales producen salidas idénticas (por ejemplo, cuando los cuatro flotadores son extremadamente pequeños), por lo que el tamaño de la "clave" de la imagen será estrictamente inferior a 128 bits.

Realmente no hay ningún beneficio en tocar los 128 bits de estado al convertirlo en una imagen (y luego de alguna manera volver) si solo reduce el tamaño de la clave al hacerlo.

    
respondido por el Blender 06.11.2018 - 01:10
fuente
23

Una imagen es demasiado grande para usarla como clave de cifrado directamente, querrá ejecutarla a través de un KDF primero.

También depende completamente de la imagen si tendrá suficiente entropía para ser útil. Podría tener una imagen de 1000x1000 que sea de color blanco sólido, pero sería inútil como clave ya que no contiene entropía. Las imágenes de las cámaras tienden a tener una buena cantidad de entropía en los bits más bajos, por lo que podría estar bien, pero los usuarios deberían comprender que no cualquier imagen es una buena clave.

En general, las imágenes como claves no son una gran idea. Por lo general, las fotografías se toman para compartirlas y las claves son algo que no desea mostrar a todos. Usar una imagen como clave también me suena como si pudiera confiar en la seguridad a través de la oscuridad (es decir, solo usas una imagen de los miles que tienes en tu computadora, pero eso es efectivamente una entropía muy baja, probablemente de menos de 20 bits, a menos que tengas un número increíble de imágenes).

Siéntase libre de continuar desarrollando esto por el bien del aprendizaje, pero hasta que tenga un mejor conocimiento de la criptografía, es mejor dejar este tipo de cosas a los expertos (consulte ¿Por qué no deberíamos rodar los nuestros? ).

    
respondido por el AndrolGenhald 05.11.2018 - 22:13
fuente
10

Cualquier sistema de cifrado debe tener claves con tamaños de clave en 128, 192 y 256 bit-of-entropy niveles de seguridad.

Entonces, la pregunta vuelve a usted: ¿de dónde vienen estas imágenes y cuánta entropía contienen? Si son flujos de bits completamente aleatorios que se interpretan como una imagen, entonces (ignorando la pérdida de entropía de los códecs de compresión con pérdida), obtiene log_base2(256x256x256) = 24 bits of entropy per pixel , por lo que necesitará 6/8/11 píxeles respectivamente para el 128/192 / Fortalezas de seguridad de 256 bits.

Si no estás generando imágenes completamente aleatorias y, en cambio, permites que las personas usen, por ejemplo, fotos, entonces no tengo idea de cómo comenzarías a estimar la cantidad de entropía en una de esas.

Conclusión: el uso de imágenes como material clave parece algo realmente extraño y entra en conflicto con la práctica común de que el material clave sea datos completamente aleatorios de un RNG de fuerza criptográfica.

Además, a partir de la información de su pregunta, no estoy convencido de que la fuerza bruta sea el ataque por el que debe preocuparse; Me preocuparía más el ataque "obtener acceso a su computadora portátil y probar cada imagen de su disco duro".

    
respondido por el Mike Ounsworth 05.11.2018 - 22:05
fuente
7

Por las imágenes puedo decir que el tamaño de tu clave es significativamente menor que el tamaño de las imágenes (porque de lo contrario la mayoría se vería como estática de colores aleatorios).

Su tamaño de clave es menor o igual que el logaritmo base 2 del número total de imágenes diferentes que puede generar su programa de captador caótico. *

Esa es otra manera de decir que el tamaño de su clave es menor o igual a (probablemente menor que) la cantidad de bits que se necesita para especificar todas las entradas de su programa de atractores caóticos.

Si hash la imagen y utilizas el hash como clave de cifrado, el tamaño de tu clave es igual o menor que el tamaño del hash.

* Ese es su tamaño de clave exacto si su algoritmo de cifrado es algo así como "XORO cada bit de la imagen con el bit correspondiente del texto simple" (no use ese algoritmo para secretos importantes, por cierto, porque partes del mensaje se cubren por las áreas grises en sus imágenes podría ser súper fácil de descifrar).

    
respondido por el Robyn 06.11.2018 - 01:15
fuente
3

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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}} \ ,. $$

    
respondido por el Nat 08.11.2018 - 16:43
fuente
0

Por lo tanto, si puede superar los problemas iniciales relacionados con un tamaño de clave demasiado pequeño y demasiada pérdida, y usar KDF después, hay un beneficio de usar estas claves para la autenticación, después de todo.

La generación de esas cosas debe durar para siempre en relación con un hash tradicional, por lo que si los parámetros iniciales se tratan como una contraseña, los tiempos de ataque de las contraseñas serán lentos.

Pero hay maneras más fáciles de conseguir eso. bcrypt() y los amigos escalan bien.

    
respondido por el Joshua 08.11.2018 - 01:21
fuente

Lea otras preguntas en las etiquetas