<div dir="auto"><span style="font-family:sans-serif;font-size:18.048px">> NIST also recommends another layer of protection using a keyed hash with a secret key:</span><br style="font-family:sans-serif;font-size:18.048px"><br style="font-family:sans-serif;font-size:18.048px"><font face="sans-serif"><span style="font-size:20.7552px">If you are going to make a salt secret and store it in an HSM, why not just encrypt the password and avoid all this costly memory hard hashing?</span></font><div dir="auto"><font face="sans-serif"><span style="font-size:20.7552px"><br></span></font></div><div dir="auto"><font face="sans-serif"><span style="font-size:23.8685px">Salts were never supposed to be secrets, they exist to increase the cost of offline attacks, by preventing the use of precomputed rainbow tables.</span></font></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif">Arguably with GPU based attacks, they are only adding a small increase in work, linear in the number of passwords to be cracked, if they are stored alongside the hashed password. </span><br></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif">But again, if you have a good secret,  can you not just encrypt...?</span></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif">Regards </span></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-size:23.8685px;font-family:sans-serif">Matt </span></div></div>