在做jwt實作時會遇到選擇hs256或rs256。
我知道sha256是一種hash的演算法,那hmac+sha256又是什麼?
文章說hmac是對稱金鑰,rsa是不對稱的金鑰,代表hmac+hs256是用hmac這演算法對經過sha256後的結果上鑰匙嗎?
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
若按照這個式子來看,就是先把 base64UrlEncode(header) + "." + base64UrlEncode(payload)
用hash256去hash,再用hmac鎖上的意思?而鑰匙是secret?
很多hmac線上網頁都是hmac+很多hash方法可以選擇,有點被搞混,hmac不能單用嗎?一定要配一個hash演算法?
https://www.biaodianfu.com/hmac.html
這篇其實寫得很詳細了,我粗略介紹一下。
1.因為hash算出來的結果都一樣,所以攻擊方可以使用彩虹表推算出來。
2.因此開發出加鹽,也就是多加入隨機值下去算hash。
3.加鹽的方法可以自己設定,但是加鹽如果太簡單還是有可能被猜出,因此發展出一套標準方法來做加鹽,也就是HMAC。
回到你的問題:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
# 你可以把這句看成這樣的一個函數
HMACSHA256(加密內容, 密鑰)
1.HMAC需要一個密鑰,在這裡就是secret,這是藏在server裡的。
2.HMAC需要搭配hash方法。
這也只是用來做密碼加密用的,當你的資料庫太脆弱被盜取用戶帳密資料表,表裡有個人的密碼欄位內容是
5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5
所謂的彩虹表,就是把所有可能的英文數字排列+字典+常用蠢蛋密碼,做成一個資料表
明碼12345
HASH值是 5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5
一對一一筆一筆生成,那破壞者就能用簡單的方法查到這個人用的密碼,就是12345
那加鹽.....就是網站伺服器端在新建/修改用戶,在存進這密碼前,加上一個SECRET字串,只有主機方知道,不會被外流也不會被駭的地方存放這個字串值...
如 "12345"+"ABCDEFGHIJKLMNOPQRSTUVWXXYY"
SHA256之後的值就是 9D6F68B9C034ECAC34C5511CACF2C9FB669BBF1003E086A4678B59C0263C1302
誰家的彩虹表放的硬碟有那麼大可以存到這種字串的,自己站出來
英文26個字母(不分大小寫),數字10個,一共36個字,如果要存10個字的彩虹表,至少要有
36的10次方=3,656,158,440,062,976筆記錄,一筆50個BYTES好了,少說也是18萬TB(180EB)才有辦法存放....
這投資,真大