¿Es seguro revelar la contraseña encriptada AES?

5

Por favor, corríjame si alguna de mis declaraciones es incorrecta.

Probablemente sea una mejor práctica no mostrar ningún indicio de la contraseña.

Sin embargo, las contraseñas encriptadas AES por sí mismas no se pueden usar para descifrar la contraseña o encontrar la clave; El ataque de texto simple conocido no funciona con AES. Esto significa que revelar la contraseña cifrada realmente no daña nada.

Entonces, ¿es seguro revelar contraseñas encriptadas AES en aplicaciones web?

    
pregunta Harry Cho 15.04.2016 - 01:41
fuente

2 respuestas

9

Respuesta principal

En resumen, tiene toda la razón con su primer supuesto:

  

Probablemente sea una mejor práctica no mostrar ningún indicio de la contraseña.

Sin embargo, hay algunos problemas con el resto de tu pregunta:

  • No desea cifrar las contraseñas.

    Por lo general, es decir, al menos.

    schroeder pregunta correctamente en los comentarios

      

    Pregunta paralela: ¿por qué las contraseñas están cifradas y no están truncadas?

    La cosa es: si cifras las contraseñas en lugar de hacerlas con hash, siempre puedes descifrarlas y usarlas. Generalmente, la clave para el descifrado tiene que estar en algún lugar de la aplicación para que los datos sean de alguna utilidad.

    Por lo tanto, si alguien robó los datos de su aplicación, lo que no es tan infrecuente (y el motivo habitual por el que aparecen las credenciales en haveibeenpwned ) - que alguien tiene todas las contraseñas en texto claro.

    Por lo tanto, por lo general, usted desea cifrar las contraseñas: hay Q & amp bien recibidos Como aquí sobre cómo funciona eso.

  • No desea utilizar AES normal

    Si utiliza AES simple, la misma contraseña se cifra al mismo texto cifrado.

    Si alguien tiene acceso a todos los textos cifrados, es probable que el análisis estadístico revele el texto sin formato de al menos un texto cifrado, y todas las cuentas con esa contraseña se infringen automáticamente.

    Un ejemplo: si sabe que la contraseña utilizada con mayor frecuencia es cucumber , siga adelante y busque el texto cifrado que aparece con mayor frecuencia; es probable que el texto simple sea cucumber .

    Además, esto restringe las contraseñas de sus usuarios al tamaño de bloque. Esto podría no ser lo que usted (o sus usuarios) quieren.

  • Desea proporcionar la menor cantidad de información posible.

    Incluso enumerar públicamente los hashes adecuados de las contraseñas de los usuarios sería una muy mala idea, ya que, una vez más, Schroeder ya escribió en los comentarios:

      

    Otra pregunta: ¿qué quieres decir con "seguro"? Es posible forzar el descifrado de una cadena cifrada.

  • El cifrado de contraseñas es básicamente un delito de texto simple, de acuerdo con las Preguntas frecuentes de los delincuentes de texto simple

      
    1. ¡Pero el sitio dice que almacenan mi contraseña de forma segura usando [algo]!

           

      Tu contraseña es tuya. Es el medio por el cual te identificas en un sitio. Si un sitio puede saber cuál es su contraseña después de que se la haya dado, cualquiera puede saber cuál es su contraseña (piratas informáticos, empleados descontentos, personas que se tropiezan con ella por accidente, etc.).

    2.   

Nota al margen

Si bien AES con un modo de operación razonable no es vulnerable a ataques conocidos de texto simple (creo que lo que tenía en mente era "Sé que mi contraseña, puedo extrapolar la clave y saber todas las contraseñas"), usar AES simple como se dijo antes, aumenta las posibilidades de que un atacante gane en un modelo de CPA .

Que es básicamente lo que tienes, dado que un usuario puede cambiar su contraseña.

    
respondido por el Tobi Nary 15.04.2016 - 09:52
fuente
-2

No, no lo es.

Si bien es el propósito del cifrado, para proteger los datos dentro del cifrado (¡siempre que la clave sea segura!), existe una vulnerabilidad muy clara, a la que las contraseñas son especialmente vulnerables a:

Una cadena de entrada dada, encriptada con AES, siempre dará la misma salida.

Esto significa que, si dos usuarios tienen las mismas contraseñas y una está comprometida, la otra también está comprometida automáticamente.

Como ejemplo, digamos que establezco mi contraseña a la contraseña más común: "contraseña". Me sale la cadena cifrada AES. Luego lo cambio a "123456" y obtengo esta cadena cifrada. Gradualmente me abro camino a través de las 10,000 contraseñas principales, generando 10,000 cadenas cifradas (y sus contraseñas no cifradas). No tengo idea de qué clave se usó.

Ahora, voy a otro usuario aleatorio. Existe un 90% de posibilidades de que pueda buscar su contraseña encriptada AES en mi tabla de arco iris, momento en el que puedo ver exactamente cuál es su contraseña.

Los hashes de contraseña también son vulnerables a esto. Esta es la razón por la sal & los pimientos se utilizan normalmente.

Además, para contraseñas más largas, si el primer bloque (16-32 caracteres) de la entrada coincide, entonces el primer bloque de la salida también coincidirá. Entonces, si la contraseña es "Mi nombre de inicio de sesión es AMADANON Inc.", y la contraseña de otra persona es "Mi nombre de inicio de sesión es Harry Cho", y mi contraseña está comprometida, entonces también se conocen los primeros 16 caracteres de su contraseña.

Si bien estos problemas se pueden solucionar, también hay un problema mayor: si alguien obtiene la clave AES, todas las contraseñas son de texto simple. Las claves AES son, inevitablemente, almacenadas muy cerca de las contraseñas encriptadas (en la misma máquina). debe aceptar que, si el malware entra en un servidor con la clave AES y las contraseñas cifradas de AES, están comprometidas.

La única razón para almacenar una contraseña encriptada AES, es en el lado del cliente, si no tiene control del lado del servidor. NUNCA haga esto en el servidor: use un buen hash estándar de una biblioteca estándar, con sal y pimienta.

Si está escribiendo el cliente y el servidor, NO use contraseñas en absoluto. En este punto, no está autentificando un usuario, sino una máquina. Para autenticar una máquina, las contraseñas son la herramienta incorrecta. En su lugar, use la clave pública criptográfica - TLS, por ejemplo, con la autenticación del cliente - nuevamente, ya hay bibliotecas escritas para usted. Si también quiere autenticar al usuario, coloque una contraseña en la clave privada. La clave pública criptográfica tiene las ventajas de que el secreto nunca viaja a través de la red, y el servidor no sabe qué es; Usted prueba que lo tiene sin dárselo al servidor.

    
respondido por el AMADANON Inc. 15.04.2016 - 05:57
fuente

Lea otras preguntas en las etiquetas