Hay muchos sitios en Internet que requieren información de inicio de sesión, y la única forma de protegerse contra la reutilización de contraseñas es la "promesa" de que las contraseñas se cifran en el servidor, lo que no siempre es cierto.
Entonces, me pregunto, ¿qué tan difícil es crear una página web que muestre las contraseñas en la computadora del cliente (con Javascript), antes de enviarlas al servidor, donde se volverán a codificar? En teoría, esto no brinda ninguna seguridad adicional, pero en la práctica esto puede usarse para proteger contra "sitios corruptos" que no introducen su contraseña en el servidor.
javascript
security
client-relations
hashing
client-side
Martín Fixman
fuente
fuente
clear
, es solo una masturbación matemática en ese momento. Tuve que arreglar un sistema que heredé, que fue diseñado exactamente de la manera en que usted y el OP lo describen, constantemente fue pirateado por adolescentes con Wireshark. Solo lo bloqueamos cuando loREAL
ciframos y ciframos y firmamos todas las cargas útiles desde y hacia el servidor, la manipulación de la cuenta se detuvo y nunca más volvió a ocurrir.Respuestas:
¿Por qué no se usa? Porque es mucho trabajo extra para ganancia cero. Tal sistema no sería más seguro. Incluso podría ser menos seguro porque da la falsa impresión de ser más seguro, lo que lleva a los usuarios a adoptar prácticas menos seguras (como la reutilización de contraseñas, contraseñas de diccionario, etc.).
fuente
¿Cómo te protege esto exactamente? Parece que todo lo que quieres hacer es descifrar la contraseña cifrada que no tiene sentido. Porque la contraseña hash se convertiría en la contraseña.
¿Qué tal no usar la misma contraseña para más de un sitio? La razón por la cual los sitios web tienen la contraseña en teoría es para evitar el acceso a su cuenta si se ven comprometidos. Usar la misma contraseña para múltiples sitios web es simplemente estúpido.
Si usó javascript, todo lo que el "hacker" tendría que hacer es usar el mismo método en las contraseñas hash-hashed. Una vez que tenga la información de hash, es justo el tiempo que toma calcular la contraseña-> mismo hash en la base de datos, lo cual es un factor que impide el acceso a una cuenta.
fuente
Porque agregaría poco o ningún valor. La razón del hash es que si su base de datos es hackeada, el hacker no tendría una lista de contraseñas válidas, solo hashes. Por lo tanto, no podían hacerse pasar por ningún usuario. Su sistema no tiene conocimiento de la contraseña.
Secure proviene de certificados SSL más alguna forma de autenticación. Quiero que mis usuarios proporcionen una contraseña para poder calcular el hash a partir de ella.
Además, el algoritmo de hash estaría en el servidor en un área más segura. Poniéndolo en el cliente, es bastante fácil obtener el código fuente de Javascript, incluso si se trata de archivos de scripts referenciados ocultos.
fuente
La solución es más simple que eso. Certificados de clientes. Creo un certificado de cliente en mi máquina. Cuando me registro en un sitio web, hacemos un apretón de manos con mi certificado de cliente y el certificado del servidor.
No se intercambian contraseñas e incluso si alguien piratea la base de datos, todo lo que tendrá es la clave pública de mi certificado de cliente (que debe ser salado y encriptado por el servidor para un mayor nivel de seguridad).
El certificado del cliente puede almacenarse en una tarjeta inteligente (y cargarse en una bóveda segura en línea con una contraseña maestra).
La belleza de todo es que elimina el concepto de phishing ... nunca ingresas una contraseña en un sitio web, solo estás dando un apretón de manos con ese sitio web. Todo lo que obtienen es su clave pública, que es inútil sin una clave privada. La única susceptibilidad es encontrar una colisión durante un apretón de manos y eso solo funcionaría una vez en un solo sitio web.
Microsoft intentó proporcionar algo así en Windows con Cardspace y luego lo envió como un estándar abierto. OAuth es algo similar, pero depende de una "parte emisora" intermediada. InfoCards por otro lado podría ser auto emitido. Esa es la solución real al problema de la contraseña ... eliminar las contraseñas por completo.
Sin embargo, OAuth es un paso en la dirección correcta.
fuente
la mayoría de las respuestas aquí parecen perder por completo el punto del hash de contraseña del lado del cliente.
el punto no es asegurar el acceso al servidor en el que está iniciando sesión, ya que interceptar un hash no es más seguro que interceptar una contraseña de texto sin formato.
El punto es realmente asegurar la contraseña del usuario , que generalmente es mucho más valiosa que el acceso de inicio de sesión individual del sitio, ya que la mayoría de los usuarios reutilizarán su contraseña para múltiples sitios (no deberían hacerlo, pero la realidad es que lo hacen, por lo que no se debe descartar) )
SSL es ideal para protegerse contra los ataques MITM, pero si una aplicación de inicio de sesión se ve comprometida en el servidor, SSL no protegerá a sus usuarios. Si alguien ha obtenido acceso malicioso a un servidor web, es probable que pueda interceptar las contraseñas en texto sin formato porque, en la mayoría de los casos, las contraseñas solo se cifran mediante un script en el servidor. entonces el atacante puede probar esas contraseñas en otros sitios (generalmente más valiosos) usando nombres de usuario similares.
la seguridad es defensa en profundidad, y el hash del lado del cliente simplemente agrega otra capa. recuerde que si bien proteger el acceso a su propio sitio es importante, proteger el secreto de las contraseñas de sus usuarios es mucho más importante debido a la reutilización de contraseñas en otros sitios.
fuente
Definitivamente es posible, y en realidad no es necesario esperar un sitio web.
Echa un vistazo a SuperGenPass . Es un bookmarklet.
Simplemente reconoce los campos de las contraseñas, concatena lo que escribe con el dominio del sitio web, lo mezcla, lo manipula un poco para obtener solo caracteres "admitidos" en la contraseña, y solo entonces su contraseña cifrada se envía por cable.
Al utilizar el dominio del sitio en el proceso, obtendrá una contraseña única por sitio, incluso si siempre reutiliza la misma contraseña.
No es extremadamente seguro (base64-MD5), pero distribuye perfectamente una implementación basada en sha-2 si lo desea.
El único inconveniente es si el dominio cambia, en cuyo caso tendrá que pedirle al sitio web que restablezca su contraseña porque no podrá recuperarla usted mismo ... Sin embargo, esto no sucede a menudo, así que lo considero un compensación aceptable.
fuente
password
o un SHA-256password
con algo de sal que el cliente conoce, un hombre en el medio adjunto puede capturarla.Me gusta la respuesta de X4u, pero en mi opinión, algo así debería integrarse en el navegador / la especificación html, ya que en este momento es solo la mitad de la respuesta.
Aquí hay un problema que tengo como usuario: no tengo idea de si mi contraseña se va a cambiar en el otro extremo cuando se almacene en la base de datos. Las líneas entre mí y el servidor pueden estar encriptadas, pero no tengo idea de lo que le sucede a mi contraseña una vez que llega al destino; tal vez se almacena como texto sin formato. El administrador de la base de datos puede terminar vendiendo la base de datos y, antes de que se dé cuenta, todo el mundo conoce su contraseña.
La mayoría de los usuarios reutilizan las contraseñas. Gente no técnica porque no conocen mejor. Personal técnico porque una vez que se llega a la 15ª contraseña, la mayoría de las personas no tienen la posibilidad de recordarla a menos que las escriban (lo que todos sabemos también es una mala idea).
Si Chrome o IE o lo que sea que esté usando podría decirme que un cuadro de contraseña se convertirá instantáneamente en el lado del cliente utilizando una sal generada por el servidor y de manera efectiva la contraseña en sí, entonces sabría que como usuario podría reutilizar Una contraseña con menos riesgo. Todavía quiero los canales encriptados, así como no quiero que caiga ningún alero durante la transmisión.
El usuario necesita saber que su contraseña ni siquiera está disponible para ser enviada al servidor, solo el hash. En la actualidad, incluso utilizando la solución X4U, no tienen forma de saber que este es el caso porque no se sabe si esa tecnología está en uso.
fuente
Creo que es un buen método para usar al construir algo como un marco, CMS, software de foro, etc., donde no controlas los servidores en los que podría estar instalado. Es decir, SÍ, siempre debe recomendar el uso de SSL para los inicios de sesión y la actividad de inicio de sesión, pero algunos sitios que usan su framework / cms no lo tendrán, por lo que aún podrían beneficiarse de esto.
Como otros han señalado, el beneficio aquí NO es que un ataque MITM no podría permitir que otra persona inicie sesión en este sitio en particular como usted, sino que ese atacante no podría usar el mismo combo de nombre de usuario / contraseña para inicie sesión posiblemente en docenas de otros sitios en los que pueda tener cuentas.
Tal esquema debería funcionar con una sal aleatoria o con una combinación de sales específicas del sitio y específicas del nombre de usuario, de modo que alguien que obtenga la contraseña no pueda usarla para el mismo nombre de usuario en otros sitios (incluso sitios que usan el mismo esquema de hashing) ), ni contra otros usuarios del sitio que puedan tener la misma contraseña.
Otros han sugerido que los usuarios deben crear contraseñas únicas para cada sitio que usan, o usar administradores de contraseñas. Si bien este es un buen consejo en teoría, todos sabemos que es una locura confiar en el mundo real. El porcentaje de usuarios que hacen cualquiera de estas cosas es pequeño y dudo que eso cambie pronto.
Por lo tanto, un hash de contraseña de JavaScript es lo menos que un desarrollador de framework / cms puede hacer para limitar el daño de alguien que intercepta contraseñas en tránsito (lo cual es fácil en las redes wifi en estos días) si el propietario del sitio y los usuarios finales son negligentes sobre seguridad (que probablemente lo sean).
fuente