The problem in password based key derivation (PBKD) is that the attacker can guess the password if that password is from user. But in my case I am using some long system based number (not from user) as a passphrase. Is this a right way?
Una password è "una chiave segreta che si adatta al cervello dell'utente". L'attributo principale di una chiave segreta è la sua segretezza, che è una misura di quanti attaccanti non lo sanno. In generale, gli aggressori sono (presumibilmente) super-intelligenti, quindi l'unica cosa che non sanno è pura casualità.
Il problema principale con le password è che i cervelli umani non sono bravi a memorizzare la casualità (sono anche molto poveri nel produrre casualità). Questo è ciò che rende deboli le password: gli utenti malintenzionati possono provare a trovare la password attraverso "indovinare", che in pratica significa provare tutte le combinazioni di casualità compatibile con gli umani.
PBKDF2, come altre funzioni di hashing della password , è pensato per rendere più tollerabile la debolezza delle password, rendendo ogni ipotesi più costosa (sia per l'attaccante che per l'utente normale).
Se, nella tua applicazione, la password non è realmente inserita da un utente ma da una macchina, allora puoi usare una "password" con molta casualità (le macchine sono molto meglio degli umani nel ricordare lunghe sequenze di numeri casuali ), a questo punto l'hashing della password potrebbe diventare abbastanza inutile.
Does modifying the encryption key in my code (say like left shifting or right shifting the key) help in security?
Ti aiuta tanto a ballare con una teiera in testa mentre intonando la gloria di Huitzilopochtli ti aiuterà a indovinare i prossimi numeri della lotteria vincente.
(Se Huitzilopochtli è davvero divertito dal tuo rituale, può darti dei benefici, ma non è conosciuto per il suo senso dell'umorismo.)
How about storing the salt in the code (hard coding)?
Il sale ha senso in combinazione con l'hashing della password: è uno dei metodi con cui le password (che sono intrinsecamente deboli, vedi sopra) possono essere tollerate. Se le tue "password" non sono realmente password, l'hashing della password e il sale sono irrilevanti.
Viceversa, quando salt è rilevante, il suo punto principale e unico non deve mai essere riutilizzato: il codice salato nel codice fa esattamente l'opposto.
Quindi, si può dire che l'hardcoding di un valore salt è una cattiva idea o una cattiva idea very , a seconda del contesto.