¿Por qué se pueden usar las contraseñas para cifrar datos, pero son menos seguras para la autenticación?

3

El software de cifrado a menudo se basa en contraseñas. Incluso si el adversario obtiene su computadora, no pueden obtener los datos sin saber la contraseña, y el uso de fuerza bruta es inviable.

Los sitios web utilizan contraseñas para autenticar a los usuarios. En particular, almacenan un hash de la contraseña del usuario. Si un atacante obtiene acceso al servidor, es difícil pero aún así es factible que el atacante obtenga las contraseñas. Es por eso que los hashes se mantienen en secreto.

¿Por qué es esto? ¿Hay alguna razón por la que el cifrado sea más difícil de romper que los hashes?

    
pregunta PyRulez 02.04.2016 - 05:05
fuente

5 respuestas

7

La respuesta simple es que no es menos fuerte. El cifrado que se basa exclusivamente en contraseñas es tan seguro como un sistema de autenticación basado en contraseñas de arquitectura equivalente.

    
respondido por el Stephen Touset 02.04.2016 - 06:08
fuente
3
  

El software de cifrado a menudo se basa en contraseñas. Incluso si el adversario obtiene su computadora, no pueden obtener los datos sin saber la contraseña, y el uso de fuerza bruta es inviable.

¿Por qué la fuerza bruta no es factible? Esto depende principalmente del diseño del sistema y, por supuesto, de la fortaleza de la contraseña. El texto simple cifrado que fue cifrado con "contraseña" es fácil de "fuerza bruta". Bueno, si incluyes el "ataque del diccionario" cuando preguntas sobre el forzamiento de los brutos de todos modos.

Una vez que haya calculado la clave, debe asumir que el texto cifrado está roto. Casi todos los textos sin formato contienen suficiente estructura para validar que la suposición fue correcta. Por lo general, el protocolo exige que el usuario esté correcto al escribir la contraseña.

  

Los sitios web utilizan contraseñas para autenticar a los usuarios. En particular, almacenan un hash de la contraseña del usuario. Si un atacante obtiene acceso al servidor, es difícil pero aún así es factible que el atacante obtenga las contraseñas. Es por eso que los hashes se mantienen en secreto.

Los hashes generalmente no se mantienen en secreto. No se tratan como contraseñas o claves. No querrás filtrarlos porque es posible adivinar fuera de línea. Pero si puede mantenerlos totalmente en secreto, también puede almacenar las contraseñas y realizar una comparación directa de las contraseñas (con protección contra ataques de canales laterales, por supuesto).

Supongamos que no se supone que estén directamente disponibles como otra capa de seguridad.

  

¿Por qué es esto? ¿Hay alguna razón por la que el cifrado sea más difícil de romper que los hashes?

No lo es. Para el cifrado, el texto cifrado generalmente está disponible directamente para un atacante. No necesita acceder a un servidor específico para comenzar a atacar el texto cifrado. Para los hashes de contraseña, este es el caso.

En otras palabras, le falta la protección que puede proporcionar un servidor endurecido y configurado / programado correctamente.

    
respondido por el Maarten Bodewes 02.04.2016 - 11:21
fuente
2

Creo que en realidad tienes dos preguntas aquí:

  

¿Por qué se pueden usar las contraseñas para cifrar datos, pero son menos seguras para la autenticación?

Realmente no hay una diferencia en la seguridad si encripta todos los datos para un solo usuario con la misma clave de encriptación o si tiene algún tipo de almacenamiento seguro y tiene alguna facilidad segura para autenticar a este único usuario con la misma contraseña que usaría Se han utilizado para el cifrado. Pero esta no suele ser la configuración que tiene en realidad, es decir, el cifrado y la autenticación se utilizan en diferentes escenarios.

  

¿Hay alguna razón por la que el cifrado sea más difícil de romper que los hashes?

No es que el cifrado sea más fuerte que el hash o lo contrario. Pero cifrar un mensaje y validar una contraseña tienen requisitos diferentes . De hecho, el simple uso del cifrado para el almacenamiento de contraseñas lo haría menos seguro y el uso de hashes para el cifrado de datos haría que no pudiera recuperar los datos originales:

  • Cifrado
    Permite descifrar el mensaje. Dado que los hashes son de una sola dirección, no puede usarlos para el cifrado, sino que tiene que usar algoritmos simétricos como AES o asimétricos como RSA. Dado que el principal punto de cifrado es que solo los usuarios seleccionados pueden descifrar el mensaje, el gran problema es proteger la clave que se necesita para descifrar.
  • Validación de contraseña
    Solo valide si el usuario ingresó la contraseña correcta. Lo mejor es hacerlo lo suficientemente seguro para que incluso un compromiso del servidor no revele las contraseñas más seguras. El cifrado funcionaría, pero luego tiene el problema de proteger la clave de descifrado nuevamente, es decir, un único punto de compromiso para todas las contraseñas. Solo mire Desaster de Adobe por qué cifrar las contraseñas es malo. Un hash no tiene este problema. Pero para hacer que la fuerza bruta sea más difícil es mejor agregar sal y hacerlo lo suficientemente lento, consulte Acerca del hash seguro de contraseñas .
respondido por el Steffen Ullrich 02.04.2016 - 09:54
fuente
1

Funciones criptográficas de hash

Antes de discutir las diferencias entre hash y cifrado, es importante establecer algunas reglas para las llamadas funciones criptográficas de hash . Hay dos requisitos para que una función hash H sea una función criptográfica hash:

  1. Resistente a colisiones : dado un valor x , no existe un algoritmo mejor que la suposición aleatoria de fuerza bruta para encontrar una y tal que H ( x) = H (y)
  2. Pre-ocultación de imagen : dado un gran espacio de mensajes (piense en el conjunto de todas las cadenas de longitud 1-30), dado que H (m) no debería haber un algoritmo mejor que adivinanzas aleatorias para derivar m . Es decir. hashing es unidireccional .

Hashing

Imaginemos un escenario en el que hay un sitio web bob.com y una usuario Alice que desea configurar una cuenta e iniciar sesión. El flujo sería algo como esto:

  • El usuario Alice visita bob.com y crea una cuenta. Alice envía un formulario al sitio que incluye su nombre de usuario y contraseña deseados.
  • bob.com recibe el formulario y almacena en su base de datos una nueva fila para el nuevo usuario alice . Como mencionó, el sitio no almacenará la contraseña de Alice en la base de datos directamente, para evitar que la información se filtre debido a violaciones, por lo que bob.com almacena un hash de contraseña con sal. Esto simplemente significa que almacena un número aleatorio, el "sal", y el hash de la contraseña de Alice concatenada con el número aleatorio, utilizando alguna función de hash criptográfica H .

Ahora, un flujo de inicio de sesión:

  • Alicia intenta iniciar sesión en el sitio. Ella escribe su contraseña P en el formulario de inicio de sesión y hace clic en enviar.
  • bob.com recibe P , busca la sal de Alicia S y la contraseña de hash h , y realiza una comprobación utilizando la función hash H para confirmar que H (P + S) = h . Si lo hace, entonces la contraseña enviada por Alice fue correcta y el inicio de sesión continúa. De lo contrario, rechazamos el intento de inicio de sesión.

Tenga en cuenta que si bien no perdemos la información de la contraseña de Alice, no está en una forma que sea directamente utilizable. Podemos usar la información de hash como un verificador , pero no podemos reproducir la contraseña P por un capricho a menos que Alice la escriba. Específicamente, si intentáramos y adivináramos la contraseña P del hash dado h y salt S , entonces no tenemos una mejor Algoritmo que adivinación aleatoria, como lo garantiza la función criptográfica hash.

Cifrado

El cifrado tiene la dificultad añadida sobre el hashing de requerir que se realice una operación inversa para encontrar los datos originales, llamados descifrado . Al descifrar, el usuario debe proporcionar alguna forma de clave de descifrado, dibujada (pseudo) aleatoriamente desde un espacio de clave grande (piense en todas las cadenas de 1024 bits). Ahora, uno de los requisitos del esquema de cifrado es que no debería poder adivinar la clave dado el texto cifrado (es decir, el mensaje cifrado) a tiempo sublineal en el tamaño del espacio de claves. Este análisis es similar al análisis de hashing anterior y, de hecho, notará que tanto en el hashing como en el cifrado, la dificultad en el descifrado se deriva completamente de la longitud de la clave que usa (o en el caso de hashing, el tamaño del espacio de mensaje de donde viene tu mensaje).

Por supuesto, esto supone un algoritmo de cifrado de sonido, como AES o similar, y no tiene en cuenta los problemas de protocolo. Los protocolos defectuosos son mucho más fáciles de romper, en gran parte porque le dan un "atajo" para probar todo el espacio de teclas, por ejemplo, eche un vistazo a esto respuesta sobre 3DES en SO .

    
respondido por el a10y 02.04.2016 - 06:30
fuente
-1

TL; DR: El cifrado puede ser más difícil de descifrar porque es posible que no conozca el texto simple para verificar que encontró la clave de cifrado correcta y que el cifrado puede requerirle convierta la clave con algoritmos costosos similares a los utilizados para la autenticación más el cifrado real.

Si los datos cifrados o las contraseñas son más difíciles de obtener depende de qué se cifró con qué algoritmo y cómo se almacenan las contraseñas para la autenticación.

Las contraseñas generalmente no se almacenan como texto sin formato legible para la autenticación, sino que se convierten a hashes o se compaginan con funciones hash criptográficas unidireccionales para que no pueda inferir la contraseña.

Idealmente, la única forma de obtener la contraseña original es forzarla bruscamente mediante el hashing de todas las contraseñas posibles o probables (tal vez basadas en reglas o diccionarios) y compararlas con el hash dado.

Además, es bueno si también requiere muchos recursos (tiempo de computación y / o memoria) para obtener el hash de la contraseña del texto sin formato, por lo que no es factible adivinar.

Dicho esto, el cifrado en sí mismo consiste en un paso de derivación de clave y un paso de cifrado reversible.

La derivación de clave transforma una clave definida por el usuario en una clave que se utiliza para el cifrado. La clave se puede denotar como una contraseña.

Sin embargo, en el contexto de cifrado, las contraseñas a menudo se denominan frases de contraseña porque es más probable que use no solo una palabra, sino un texto más largo para cifrar, mientras que las contraseñas de autenticación tienden a ser más cortas para los históricos y prácticos. razones: los usa mucho más frecuentemente en la mayoría de los casos, y los sistemas UNIX o Linux más antiguos e incluso Amazon, por ejemplo, contraseñas restringidas a 8 caracteres hace algunos años.

Como alternativa, muy a menudo encontrarás que clave es un término que se usa con más frecuencia para el secreto que se usa para cifrar los datos porque es más independiente de la estructura del secreto.

En el caso más simple, la clave se usa tal como está para cifrar los datos (piense en el cifrado Vigenère). Sin embargo, para mayor seguridad, las contraseñas a menudo se convierten en hashes al igual que para la autenticación. Esto se llama derivación clave. Las funciones de derivación de claves también se pueden usar para generar hashes de contraseña para la autenticación.

Otra razón para no usar contraseñas directamente para el cifrado es que muchos algoritmos de cifrado modernos requieren claves de longitud fija, generalmente porque están basadas en bloques (la clave no necesariamente tiene que coincidir con el tamaño del bloque, por ejemplo, AES-256 que utiliza bloques de 128 bits con claves de 256 bits).

Muchos algoritmos de cifrado no utilizan la clave especificada por el usuario ni nada derivado de ella para el cifrado: derivan una "clave de cifrado clave" del secreto del usuario que se utiliza para cifrar una clave de datos que en realidad se utiliza para cifrar los datos.

Lo ideal es que la clave de datos sea una secuencia de datos aleatoria que no se pueda relacionar con el usuario, el sistema, los datos de texto sin formato o cualquier cosa , lo que significa que no puede deducir el secreto del usuario en este momento. La clave de datos puede cifrarse con algoritmos criptográficos asimétricos lentos, como RSA.

La combinación del cifrado asimétrico con algoritmos simétricos se denomina cifrado híbrido o un sistema criptográfico híbrido y puede permitir que cualquier persona cifre datos mientras restringe el descifrado a un pequeño conjunto de usuarios.

Otro beneficio de usar este enfoque indirecto es que puede cifrar la clave de datos con múltiples claves de usuario para que todos los usuarios puedan acceder a la clave cifrada, y simplemente puede cambiar una clave de usuario sin necesidad de volver a cifrar los datos reales.

Al final, el cifrado produce un texto cifrado que se parece idealmente a datos completamente aleatorios con una entropía máxima y no da pistas sobre la clave definida por el usuario original o el texto sin formato.

Esto implica que hay tantos plaintexts plausibles que podrían cifrarse para producir el mismo texto cifrado, por lo que, a menos que sepa qué se cifró, no puede verificar que encontró la clave correcta & combinación de texto simple cuando intenta descifrar el cifrado.

Sin embargo, esto puede verse frustrado por sumas de comprobación, compendios y firmas del texto simple que le permiten verificar si su suposición fue correcta.

Entonces, a menos que el algoritmo de cifrado sea incorrecto o la derivación de la clave sea significativamente inferior a la utilizada para la autenticación de contraseña con la que se compara, o si sabe algo sobre la clave de cifrado o el texto simple, el cifrado es mucho más difícil de descifrar como hay más pasos involucrados y un bazillion de entradas plausibles.

    
respondido por el Archimedix 02.04.2016 - 07:30
fuente

Lea otras preguntas en las etiquetas