¿Está bien usar firmas digitales como el mecanismo para los correos electrónicos de verificación de cuentas?

1

Estoy implementando la verificación de la cuenta (el usuario se registra, recibe un correo electrónico, sigue el enlace para verificar la dirección de correo electrónico).

Muchos tutoriales que veo implican tener una columna en la tabla de usuarios para una cadena aleatoria, que se genera antes del envío del correo electrónico de verificación, y se incluye en la cadena de consulta del enlace de verificación.

Estoy pensando en usar una clave pública para cifrar la dirección de correo electrónico y adjuntar el resultado a la cadena de consulta. Luego, al recibir una solicitud de verificación, descifre el parámetro de cadena de consulta con una clave privada y compárelo con la dirección de correo electrónico. De esta manera, no hay necesidad de una columna adicional

Sin embargo, soy muy inestable en mi conocimiento de seguridad de la información. ¿Es esta una buena idea? ¿Funcionaría esto? ¿Debo marcar la dirección antes de cifrarla con la clave pública?

    
pregunta Sava B. 04.08.2016 - 06:30
fuente

1 respuesta

0

Está mencionando el cifrado del correo electrónico y su firma digital. Estas son dos cosas diferentes que, aunque ambas pueden usarse en su caso, tienen un resultado práctico diferente: mediante el uso del cifrado, se ocultan los datos cifrados de la vista (la dirección de correo electrónico).

Dicho esto, en teoría, tu esquema debería funcionar bien. En la práctica, sin embargo, me alejaría de tal esquema:

  • La mayoría del algoritmo de cifrado de clave pública (o firma digital) genera grandes resultados: demasiado grande para caber cómodamente en una cadena de consulta. O más bien, podría encajar en el tamaño máximo permitido por la mayoría de los navegadores pero probablemente no en una sola línea de un correo electrónico, lo que será inconveniente para sus usuarios.
  • Su esquema crea un único punto de vulnerabilidad: una vez que la clave privada está comprometida, todas las transacciones futuras se corrompen. Si utiliza el enfoque regular de "clave aleatoria en una tabla de base de datos", no tiene este único punto de falla: un atacante tendría que comprometer la base de datos existente para descifrar el sistema.
  • Su esquema es intercambiar un poco de espacio de base de datos por una gran cantidad de complejidad en su código, aumentando la superficie de ataque y, potencialmente, dejándolo vulnerable a un DOS (ya que la validación de la clave pública no es exactamente tan barata en la CPU y la memoria como una búsqueda de base de datos).

Por lo tanto, a menos que haya un caso de negocio real (por ejemplo, si existe una gran necesidad de poder validar una consulta sin llegar a la base de datos), le sugiero que utilice el enfoque más común.

Me gustaría agregar: en general, me gusta seguir el principio KISS con mi software. Dadas dos formas de lograr el mismo resultado, trato de mantener la que requiere menos código.

    
respondido por el Stephane 04.08.2016 - 08:35
fuente

Lea otras preguntas en las etiquetas