Actualmente estoy creando un servicio web en enlace similar a enlace que debería ayudar a los usuarios a obtener código LaTeX a partir de fórmulas dibujadas. Es parte de mi tesis de licenciatura y uno de los objetivos principales de este proyecto es facilitar la investigación en el campo del reconocimiento de escritura a mano en línea. Eso significa que quiero compartir todos los datos que obtengo de los usuarios.
La forma más fácil de hacerlo sería simplemente volcar la base de datos. De esta manera, podría hacer mi copia de respaldo y un volcado para los investigadores en un solo paso.
Solo hay dos partes en las que vacilo en compartirlo con el público tan pronto como otros usuarios utilicen mi sistema: direcciones de correo electrónico y contraseñas.
Contraseñas
La contraseña se almacena con hash y con sal (esto significa que almaceno md5($userpass.$salt)
y $salt
que es una cadena aleatoria de 8 caracteres con caracteres de A-Za-z0-9
- se genera la sal para cada usuario). ¿Es eso suficiente para que esté bien hacer esto público?
La parte principal de la pregunta es sobre la dirección de correo electrónico: en este momento, la almaceno como texto sin formato. Pero estoy pensando en almacenar un hash de la dirección de correo electrónico solamente. Este hash no se pudo eliminar, porque mi función de inicio de sesión funciona de la siguiente manera:
El usuario ingresa $email
y $password
. Ambos se envían como texto plano al servidor. Entonces el servidor hace (como pseudocódigo):
$pwdb, $salt = query(SELECT password, salt FROM users WHERE email = :email)
if (md5($password.$salt) == $pwdb) {
Logged in
} else {
Wrong password
}
Direcciones de correo electrónico
No importa si :email
es $email
o md5($email)
o md5($email.$applicationwide_random_str)
. Pero no puedo crear una nueva sal para cada usuario sin tener que pasar por cada uno de ellos (lo que probablemente no sería tan malo cuando creo que nunca tendré más de 10,000 usuarios).
Preguntas
- ¿Cuánto tiempo tomaría "deshacer" un correo electrónico (por ejemplo,
[email protected]
o[email protected]
) que tiene un sal aleatorio de 8 caracteres adjuntos (por ejemplo,FHCJ81ru
) con hardware "estándar" (< $ 1000) cuando ¿No conoces la cadena al azar? ¿Es cuestión de segundos, minutos, horas o días? - ¿Es malo si la gente puede hacer eso? Quiero decir, también podrían simplemente enviar correos electrónicos y ver lo que reciben. En mi servicio, no hay muchos datos personales involucrados:
- símbolos y fórmulas manuscritos
- eventualmente se entregó
- eventualmente cuando / donde la persona aprendió a escribir
- eventualmente el idioma del usuario
- ¿Por qué no hay servicio hash en la dirección de correo electrónico? (ok, no sé si no hay servicios que lo hagan, pero nunca he leído eso: las contraseñas de hashing son comunes, pero las direcciones de correo electrónico de hashing? Nunca escuché eso).
- ¿Es una buena idea codificar los correos electrónicos si desea utilizar el correo electrónico solo si el usuario ha perdido su contraseña e iniciar sesión? (Pensé en usar OpenID, pero la mayoría de las personas no saben qué es)