learn:backend-dev:記錄或驗證密碼的方法
目錄表
記錄或驗證密碼的方法
在資安領域沒有所謂絕對的安全,你只能不斷提高攻擊者的成本
方法一、Encode
就是換個方式表達資料而已,所以一旦被知道是用什麼 encode 安全性就不復存在。
且現在電腦效能很快,所以列出一堆 decode 的結果並不困難。
所以 不行 。
方法二、Encrypt
因為 server 也要驗證使用者,所以 decrypt 所需的 key 也勢必要存在 server 上,
既然 cracker 連 db access 都拿得到了,拿到 key 也就不是什麼難事。
所以 不行。
方法三、Hash
方法四、Salting (Hash with salt)
salt 是建立是建立密碼時隨機產生的值,把 salt 和 hash 過的值都存進 db,
# hash 過的值 SHA1("PASSWORD" + "h7.@-]%<#L")
因為 hash 過的值夠長夠亂,所以網路上的表根本也不可能有這個字串,也就是無法查表破解。
但其實,cracker 都拿到 db access 了,自然也就拿得到 salt,所以他可以把每個人的 salt & hash 都用自己的電腦進行計算。
但每個人的 salt 都不一樣,所以每個密碼都要重算一次,這對 cracker 沒有好處。
在儲存密碼時至少要加鹽再雜湊,而且隨機產生的 salt 盡量要含有特殊字元
方法五、Salting + hash using Bcrypt
Bcrypt 是一種慢雜湊方法,可以設定迭代次數。
所以要重新建表就更慢更久更困難,這也就意味著更安全。
learn/backend-dev/記錄或驗證密碼的方法.txt · 上一次變更: 2024/12/22 21:17 由 127.0.0.1