¿Cómo puedo saber si mi algoritmo de cifrado es lo suficientemente fuerte?

7

Estoy usando ruby y tengo el siguiente algoritmo de cifrado:

 @@secret_key = Digest::SHA256.hexdigest(key)
 encrypted = Encryptor.encrypt("encrypt this", key: @@secret_key)
 encoded = Base64.encode64(encrypted).encode('utf-8')
 StoreInDB(encoded)

El problema que estoy tratando de resolver: si un pirata informático se apodera de mi base de datos, no podrá realizar ingeniería inversa en la columna 'codificada' almacenada.

¿Esto es lo suficientemente fuerte? Esencialmente, la columna codificada es un user_id.

    
pregunta Kamilski81 06.09.2012 - 00:06
fuente

2 respuestas

2

Bien, primero suena extraño que estás codificando un "id_usuario" (que me suena como un nombre de usuario), lo cual me parece una información relativamente pública, y no una contraseña o algo similar en secreto, pero la pregunta es realmente acerca del cifrado, así que estoy divagando ...

"Bastante fuerte" para cualquier algoritmo de encriptación se evalúa por el tiempo que demorará descifrar el texto sin tener la clave (suponiendo que hayas ocultado tu clave secreta de una buena manera). Ningún algoritmo es "perfecto", excepto el clásico One Time Pad, que es un buen ejemplo académico, pero no tan utilizable en el 99% de los casos, ya que requiere el mismo espacio de claves de tamaño que los datos cifrados, por lo que estará generando constantemente y almacenar una nueva clave, lo que plantea sus propios problemas de seguridad.

Entonces ... cualquier algoritmo realista se considera "suficientemente fuerte" si demorará más en descifrar el material sin la clave de lo que vale la información. Entonces, si la información corresponde a mis planes de almuerzo para mañana, es probable que mi algoritmo de cifrado solo tenga que demorar a un atacante las 24 horas, momento en el que el evento habrá finalizado, y no importa porque no pueda encontrarme Ya no ... pero puede importar por años, si mi almuerzo fue un evento histórico o algo así.

Por lo tanto, los factores de cálculo de craqueo de cifrado incluyen: - ¿Cuáles son las debilidades del algoritmo? Algunos algoritmos pueden tener conjuntos de claves débiles que son más fáciles de descifrar, otros pueden demostrarse que agregan poco valor (algunas formas de DES)

  • ¿Cuál es el tamaño del espacio de la clave? Si todas las claves son igualmente seguras, entonces la forma obvia de descifrar el algoritmo es probar cada clave posible del tamaño dado: cuántas claves es un factor de tamaño de almacenamiento y la naturaleza de cómo se eligen las claves (por ejemplo, los números primos se usan en encriptación asimétrica)

  • ¿Qué tan difícil es probar un descifrado? ¿Cuánto tiempo tomará probar una prueba con una opción clave dada?

Entonces ... en un algoritmo simple, el tiempo para descifrar puede ser:

# of keys in key space X time to test a key

Por lo general, se tiene en cuenta cuántos recursos puede razonablemente esperar que tenga un hacker. Una pequeña organización puede tener 10-50 máquinas. Un estado nación puede tener millones. ¿Cuál es la naturaleza de la amenaza: cuánto poder de cómputo pueden tener razonablemente? No necesariamente asume que está limitado por su poder de compra en Best Buy: si son técnicamente sofisticados, tienen una red de bots masiva y paralela de software malintencionado en máquinas de usuarios inocentes que realizan sus cálculos.

    
respondido por el bethlakshmi 07.09.2012 - 20:52
fuente
9

Cuando la pregunta es:

  

¿Cómo puedo saber si mi algoritmo de cifrado es lo suficientemente fuerte?

entonces la respuesta corta probable es:

  • No es fuerte.
  • Es suficientemente fuerte .
  • Se pierde el punto.

Cuando los criptógrafos profesionales diseñan un algoritmo, siempre asumen que lo que produjeron es débil. No confiarán en ello hasta que haya sido considerado seriamente por sus "criptógrafos" compañeros (que en realidad son sus competidores, y un grupo bastante feroz, aunque generalmente de buen humor). No sería prudente, para un no criptógrafo, ser menos cauteloso que eso.

Su algoritmo es probablemente lo suficientemente fuerte , donde "suficiente" significa "lo suficiente como para no ser el punto más débil de su sistema". Se necesita un esfuerzo especial para hacer que un algoritmo criptográfico sea tan patéticamente débil que los atacantes consideren que vale la pena romperlo por adelantado (un ejemplo es CSS usado en DVD, pero eso es bastante raro).

Su algoritmo probablemente no lo comprenda porque la mayor parte de la seguridad no se trata de la criptografía; Los algoritmos criptográficos cumplen un papel importante, pero con un alcance limitado. Pasé mis días explicando a la gente que el polvo criptográfico mágico que esparcían por todos sus sistemas no es tan mágico como suponían (p. Ej., No, el cifrado de una base de datos SQL no impide que un atacante altere correctamente su contenido al modificar los archivos en el disco). ).

Es posible que su algoritmo (sobre el que no proporciona detalles) sea realmente sólido y cumpla con un punto que sea relevante para su situación. Posible, pero, como muestra la experiencia, no es probable.

    
respondido por el Thomas Pornin 07.09.2012 - 22:28
fuente

Lea otras preguntas en las etiquetas