JSPaste / Backend

JSPaste Backend (API)
European Union Public License 1.2
4 stars 1 forks source link

Password salting support #150

Closed inetol closed 2 weeks ago

inetol commented 1 month ago

Closes #148

Mrgaton commented 1 month ago

Salt no deveria ser aleatorio por cada hash? como el iv en aes

inetol commented 1 month ago

Sí, pero no tengo base de datos para almacenar los salts todavía por eso lo he hecho de esta forma.

Mrgaton commented 1 month ago

No hay necesidad de hacer eso puedes hacer lo mismo que con aes, generar el salt y almacenarlo al final del salt

Mrgaton commented 1 month ago

Luego cuando lo verifiques sacas los últimos bytes y ese es el hash

inetol commented 1 month ago

La gracia de tener el salt es no almacenarlo en el mismo documento donde se encriptan los datos porque entonces no sirve para nada, si se llegase a obtener una copia en crudo del documento (directamente de la carpeta de documents) el salt estaría a simple vista

Mrgaton commented 1 month ago

Para eso necesitarian aceso a los archivos del servidor y si lo tienen es tan facil como copiar si no .env

inetol commented 1 month ago

Los .env se pueden blindar ya usando los secrets de Docker/Podman o algún otro sistema como AWS Secrets Manager. El problema son los documentos que almacenan los hashes porque son vulnerables a rainbow tables y revelan la reutilización de contraseñas/secretos, si se llega a filtrar algún documento en crudo desde un endpoint, volumen (o en un futuro S3) los datos y contraseñas quedan vulnerables.

La solución de almacenar un salt global en el .env ya no me parece tan buena idea (porque revela la reutilización de contraseñas) y prefiero esperar cuando esté listo la base de datos para retomar este PR.

Mrgaton commented 1 month ago

Las Rainbow tables no sirven para nada si el salt es aleatorio cada vez, y el salt se podría añadir al final del hash como en aes que al final hay un Contact del buffer encriptado más el IV

Mrgaton commented 1 month ago

Si quieres pruebo a implementarlo de esa forma y vemos.

inetol commented 1 month ago

O sea si está bien eso, aunque no protege de todos los casos.

Lo que veo es que si alguien pone de contraseña "a" este seguiría pudiéndose saber con un ataque de diccionario o fuerza bruta porque solo tendrías que extraer el salt del hash y empezar a comparar. Para darle más utilidad al salt lo que suelo hacer es almacenarlo en otro sitio, así si alguien tuviese el fichero en crudo del documento no solo necesitarías saber la contraseña, sino saber también el propio salt, ya luego depende el nivel de paranoia de cada uno complicar a niveles poco sanos este proceso.

Mrgaton commented 1 month ago

Lo que tu pides aparte del salt es un hmac que hay si que deveria ser un secret para .env, el salt esta echo solo para que con el mismo input puedan haber multiples outputs

Mrgaton commented 1 month ago

Lo malo de esto es que todos los documentos que hayan sido creados con contraseña no se podran acceder nunca jamas

Mrgaton commented 1 month ago

Si algo no os gusta decirlo y lo intento cambiar.