Realmente me gusta el primer enfoque en general.
- es simple de entender e implementar
- es seguro (que yo sepa)
- Es un enfoque común que he visto en el pasado
Una cosa que no veo mencionada sobre el primero que debe tener en cuenta, la marca de tiempo utilizada para codificar el token debe tener una caducidad TTL que sea extremadamente corta (como 1 segundo) para que verifique que el mensaje no se envió con el misma marca de tiempo y token de un mensaje 12 horas antes; obviamente se calcularía como legítimo pero no lo es en este caso.
Si estas son las dos únicas opciones que está considerando, me gustaría asegurarme de que también haya analizado otros enfoques, ya que hay muchos. Más de lo que voy a enumerar, de hecho. Estos son algunos enfoques de autenticación comunes que vale la pena estudiar solo para ver si se ajustan mejor a su propósito, y si nada más entenderlos puede darle algunas ideas para ayudar a ajustar cualquier enfoque que elija.
Tenga en cuenta que no soy un experto en seguridad.
OAuth / Federated
En este enfoque, usted tiene un garante de terceros donde el código consumidor solicita el token / cert / qué tiene de ellos y se lo pasa a usted, en este punto, todo lo que necesita hacer es preguntarle a la tercera parte si la clave que le dieron es legítimo
Pro:
- Basados en estándares
- Otros encontrarán problemas en los sistemas de otras personas para que descubras si ocurre la inseguridad
- Necesitará mucho menos trabajo de autenticación
Estafa:
- Debe tratar con un administrador de terceros y su API, o crear y alojar su propio "tercero" para segregar la autenticación de su servicio principal.
- Para muchos servicios exagerados, pero conceptualmente vale la pena considerar
Certificados asincrónicos
Aquí haría que sus clientes encripten sus comunicaciones con un certificado público que haya compartido con ellos cuando crearon un usuario. Por su parte, descifraría utilizando la clave privada asociada con su usuario. En general, iniciaría la comunicación con una respuesta de desafío para mostrar que pueden cifrar / descifrar como espera identificarlos como quienes dicen ser. Aunque son posibles enfoques "sincrónicos" que no utilizan la respuesta al desafío, tienen un poco menos de seguridad y algunos problemas de sincronización de tiempo que pueden hacerlos más complicados.
de Novell (sí, lo sé, ¿ Novell ? ¿En serio?)
Los tokens usan una variable como base para generar la contraseña de un solo uso. Esta variable se llama el desafío. Los dos métodos principales para determinar la variable utilizada para generar la contraseña son asíncronos o síncronos.
Con el método asíncrono o desafío-respuesta, el software del servidor envía al token un desafío externo, una variable generada aleatoriamente, para que el dispositivo del token lo cifre. El token utiliza esta variable de desafío, el algoritmo de cifrado y el secreto compartido para generar la respuesta: la contraseña correctamente cifrada.
Con el método sincrónico, el token y el servidor determinan internamente la variable de desafío utilizada para generar la contraseña. Una combinación de contador de tiempo, contador de eventos o contador de tiempo y eventos dentro de cada dispositivo se utiliza como base para la variable de desafío. Debido a que el token y el servidor determinan de forma separada e interna la variable de desafío de sus propios contadores, es muy importante que sus contadores de tiempo y los contadores de eventos permanezcan sincronizados. Debido a que es muy fácil que el servidor y el token se desincronicen, la mayoría de las implementaciones permiten cierta cantidad de deriva entre los contadores. Por lo general, se utiliza un pequeño rango o ventana de estos valores de contador para calcular la contraseña. Sin embargo, si el token y el servidor no se sincronizan más allá de esta ventana,
Pro:
- Los certificados tienen raíces CA que los hacen confiables y difíciles de falsificar.
- Existen instalaciones estándar en los sistemas operativos para administrar y mantener las tiendas de certificados fácilmente
- Enfoque bien estudiado, mucha información disponible al respecto
- El vencimiento junto con una variedad de otras cosas son instalaciones incorporadas de certificados estándar, generalmente son robustas
Estafa:
- Los certificados pueden ser difíciles de trabajar mediante programación
- Dependiendo de si necesita una CA externa, puede no ser gratis
- Es posible que necesite mantener almacenes de certificados manualmente para garantizar que se configuren las confianzas raíz esperadas
NTLM
No se ría, si este es un servicio más pequeño o solo interno y está en un entorno Windows, no hay nada de malo en usar la autenticación NTLM estándar para garantizar el acceso. Especialmente si está trabajando con IIS, este es sin duda el enfoque más simple. Fácil de mantener y configurar también en un web.config.
Pro:
- Extremadamente fácil de configurar, implementar y mantener
Estafa:
- Interoperabilidad mínima
- No es suficiente para la autenticación pública
Nonces
Cuando trabaja con nonces en su enfoque de autenticación, proporciona un método para obtener un nonce en el servicio. Este método devuelve una cadena o pieza de datos arbitraria única ("un nonce") en cada solicitud. Cada solicitud a otros métodos ahora requiere que se recupere un nonce y se use en el algoritmo criptográfico para la solicitud. El valor aquí es que el servidor realiza un seguimiento de los nonces utilizados, y nunca permite la reutilización de un nonce, esto evita completamente los ataques de repetición porque una vez que se realiza una solicitud con un nonce, una solicitud con ese nonce nunca se puede volver a hacer. A medida que se solicitan nonces, se agregan a una lista de nonces disponibles, a medida que se usan se mueven de la lista disponible a la lista usada.
Pro:
- Frustra los ataques de repetición bastante bien
- No del todo difícil de implementar o entender
Estafa:
- Requiere que los clientes realicen dos solicitudes para cada solicitud (aunque puede reducirse al requerir nonces solo para ciertas solicitudes)
- Requiere la gestión de nonces, que debe ser transaccional
- Afecta negativamente el rendimiento al requerir las solicitudes adicionales de nonces (la transaccionalidad aumenta aún más el costo de los recursos de trabajar con nonces)