En primer lugar, esto hace NO mejora la seguridad de su aplicación (suponiendo que es una aplicación web).
Use SSL (O realmente TLS, que comúnmente se llama SSL), no es realmente caro (Mida el tiempo que está utilizando para encontrar formas de multiplicarlo con salario mínimo, comprar un certificado gana casi siempre).
El porqué de esto es simple. TLS resuelve un problema (cuando se usa con certificados comprados, no autofirmados) que es bastante grande en criptografía: ¿cómo sé que el servidor con el que estoy hablando es el servidor con el que creo que estoy hablando? Los certificados TLS son una forma de decir: "Yo, la autoridad de certificación, en la que confía su navegador, certifica que el sitio web en [url] tiene esta clave pública, con la clave privada correspondiente, que (clave privada) solo el servidor conoce, mira Firmé mi firma en todo el documento, si alguien lo alteró puede ver ".
Sin TLS, cualquier encriptado no tiene sentido, porque si me siento a tu lado en una cafetería, puedo hacer que tu laptop/teléfono inteligente piense que soy el servidor y MiTM (Hombre en el Medio). Con TLS, su computadora portátil/teléfono inteligente gritará "CONEXIÓN INESTIMABLE", porque no tengo un certificado firmado por la autoridad de certificación que coincida con su sitio. (Cifrado vs. Autenticación).
responsabilidad: los usuarios tienden a hacer clic a través de estas advertencias: "Lo que no es de confianza conexión sólo quiero mis fotos de gatitos Añadir ExcepciónHaga clicConfirmarHaga clic YAY gatitos?!?!"
Sin embargo, si usted realmente no quiere comprar un certificado, siendo NO aplicar lado del cliente JavaScript hash (y el uso de la biblioteca de Standford (SJCL) para que, NUNCA IMPLEMENTAR CRYPTO MISMO).
¿Por qué? Contraseña reutilización! puedo robar su cookie de sesión (que me permite fingir a su servidor que yo soy tú) sin HTTPS fácilmente (ver Firesheep). sin embargo, si se agrega un javascript a su página de inicio de sesión, que, antes de enviar, hashes su contraseña (use SHA256, o mejor aún, use SHA256, envíele una clave pública que haya generado y luego cifre hash la contraseña con eso, no puede usar sal con esto), y luego envía el pase hash/encriptado palabra al servidor. REHASH el hash en el servidor con una sal y compararlo con lo que se almacena en su base de datos (almacenar la contraseña de esta manera:
(SHA256(SHA256(password)+salt))
(guardar la sal como texto sin formato en la base de datos también)). Y enviar la contraseña de la siguiente manera:
RSA_With_Public_Key(SHA256(password))
y comprobar su contraseña así:
if SHA256(RSA_With_Private_Key(SHA256(sent_password))+salt_for_username) == stored_pass: login = ok
Porque, SI alguien está oliendo su cliente, que será capaz de iniciar una sesión a su cliente (sesión secuestro) pero van a NUNCA ver la contraseña en texto plano (a menos que alteran su Javascript, sin embargo, un hacker starbucks probablemente no sabe howto/estar interesado en esto.) Así que van a tener acceso a su aplicación web, pero no a su correo electrónico/facebook/etc. (para lo cual sus usuarios probablemente usarán la misma contraseña). (La dirección de correo electrónico será su nombre de usuario o se encontrará en su perfil/configuración en su aplicación web).
Estaba pensando en hash de la contraseña en el cliente, pero sólo por lo que puede estar seguro de la contraseña del cliente nunca existe como texto en el lado del servidor, lo que significa que pueden sentirse más tranquilos al saber que no sé su real contraseña, o no puede renunciar fácilmente si está comprometida. ¿estoy loco? – Cyclone
simplemente para la corrección, ya que estamos hablando de seguridad, y MD5 se mencionó en el PO: [. Uno siempre debe usar una sal al cifrar una contraseña] (http: // stackoverflow.com/questions/420843/how-do-password-salt-help-against-a-rainbow-table-attack) Usar MD5 sin sal plana es simplemente marginalmente mejor que almacenar contraseñas de texto claro en su base de datos. – sffc
@Cyclone Hashing SÓLO en el lado del cliente es definitivamente una mala idea, ya que si el atacante conoce de alguna manera el hash, puede usarlo para iniciar sesión como si conociera la contraseña, evitando el código hash del lado del cliente. – Teejay