使用者工具

網站工具


learn:backend-dev:記錄或驗證密碼的方法

記錄或驗證密碼的方法

在資安領域沒有所謂絕對的安全,你只能不斷提高攻擊者的成本

方法一、Encode

就是換個方式表達資料而已,所以一旦被知道是用什麼 encode 安全性就不復存在。

且現在電腦效能很快,所以列出一堆 decode 的結果並不困難。

所以 不行


方法二、Encrypt

因為 server 也要驗證使用者,所以 decrypt 所需的 key 也勢必要存在 server 上,

既然 cracker 連 db access 都拿得到了,拿到 key 也就不是什麼難事。

所以 不行


方法三、Hash

hash 不可逆,所以感覺好像可行。

但因為現在電腦運算速度很快,且網路上也有很多建好的表(如 md5hashing

直接把 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 · 上一次變更: 2022/06/24 10:14 由 admin_wi1d5ky

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki