El problema en la derivación de clave basada en contraseña (PBKD) es que el atacante puede adivinar la contraseña si esa contraseña es del usuario. Pero en mi caso estoy usando un número largo basado en el sistema (no del usuario) como frase de contraseña. ¿Es esta una manera correcta?
Una contraseña es "una clave secreta que cabe en el cerebro del usuario". El atributo principal de una clave secreta es su secreto, que es una medida de cuánto desconocen los atacantes. En términos generales, los atacantes son (supuestamente) súper inteligentes, por lo que lo único que no saben es la aleatoriedad pura.
El principal problema con contraseñas es que los cerebros humanos no son buenos para almacenar aleatoriedad (también son muy pobres para producir aleatoriedad). Esto es lo que hace que las contraseñas sean débiles: los atacantes pueden intentar encontrar la contraseña a través de "adivinar", lo que básicamente significa probar todas las combinaciones de aleatoriedad compatible con humanos.
PBKDF2, como otras funciones de hashing de contraseña , está pensado para hacer que la debilidad de las contraseñas sea más tolerable, haciendo que cada suposición sea más costosa (tanto para el atacante como para el usuario normal).
Si, en su aplicación, la contraseña no es realmente ingresada por un usuario, sino por una máquina, entonces puede usar una "contraseña" con mucha aleatoriedad (las máquinas son mucho mejores que los humanos para recordar largas secuencias de números aleatorios ), en cuyo punto el hashing de la contraseña puede volverse bastante inútil.
¿La modificación de la clave de cifrado en mi código (por ejemplo, desplazar a la izquierda o desplazar a la derecha la clave) ayuda en la seguridad?
Ayuda tanto como bailar con una tetera en tu cabeza mientras cantas la gloria de Huitzilopochtli te ayudará a adivinar los próximos números de lotería ganadores.
(Si Huitzilopochtli realmente se divierte con tu ritual, puede otorgarte algunos beneficios, pero en realidad no es conocido por su sentido del humor).
¿Qué hay de almacenar la sal en el código (codificación de hardware)?
El salt tiene sentido junto con el hashing de contraseñas: es uno de los métodos por los cuales las contraseñas (que son inherentemente débiles, ver más arriba) pueden ser toleradas. Si sus "contraseñas" no son realmente contraseñas, entonces el hashing y el salt de las contraseñas son irrelevantes.
A la inversa, cuando una sal es relevante , entonces su punto principal y único nunca se reutiliza, la codificación del sal en el código hace exactamente lo contrario.
Por lo tanto, se puede decir que codificar un valor de sal es una mala idea o una muy mala idea, según el contexto.