Quiero autenticar a un cliente de una página web y asegurarme de que sea un usuario en particular.
Digamos que ya acordamos un hash en particular ( SHA256
, en realidad, que creo que es lo suficientemente seguro para esto) y que ambos ya intercambiamos un key
en un archivo a través de un medio confiable.
Este key
es prácticamente un archivo de texto con 2K de letras aleatorias. Lo tengo almacenado en mi servidor, lo tienen almacenado en algún lugar de su computadora.
Estos son los pasos diseñados para autenticar al cliente:
- El servidor genera un
challenge
, una cadena aleatoria de 128 letras. - El servidor envía el
challenge
al navegador del cliente. - El cliente tiene acceso a un campo de entrada donde carga su archivo
key
. - El cliente calcula un
answer
agregandokey
a sus contenidoschallenge
y calcula su hash. - El cliente envía solo el
answer
para estechallenge
en particular. - El servidor compara el
answer
recibido con uno generado localmente y si coinciden, puedo asumir que el cliente es la persona que creo que es.
Supuesto final, el intercambio tanto de challenge
como de answer
a través de la web puede ocurrir a través de un canal inseguro. En realidad, supongamos que sucederá a través de un canal inseguro, es decir, HTTP.
¿Este esquema es seguro?
Si no, ¿cuáles son sus escollos?
En el paso 4, hace una diferencia si calculo el hash como challenge + key
en lugar de key + challenge
. Supongo que esto tiene que ver con el algoritmo hash que elegí, y creo que SHA256 maneja esas cosas bien, pero no soy un experto.
¿Importa mucho si aumento / disminuyo la longitud de key
y challenge
?