昨天在聊到JWT的組成時有提到要將header跟payload做「雜湊」產生signature。
那到底雜湊是什麼呢?跟加密一樣嗎?
今天來了解一下!
加密指的是:
將明文資訊改變為難以讀取的密文內容,使之不可讀的過程。
-- 加密
我覺得加密很像是把東西加上一把鎖,有鑰匙就可以進去資料的裡面。
加密的特性:
加密演算法一般可以分為兩類
重點在於這個被加密的資料是還需要被指定的對象閱讀的,所以適合用在資料傳輸中。
當我們提到雜湊時,其實是指說,將一些資料輸入到雜湊演算法,並取得經過雜湊演算法而有的新資料。
是一種從任何一種資料中建立小的數字「指紋」的方法。雜湊函式把訊息或資料壓縮成摘要,使得資料量變小,將資料的格式固定下來。該函式將資料打亂混合,重新建立一個叫做雜湊值(hash values,hash codes,hash sums,或hashes)的指紋。
-- 維基百科
雜湊有幾個特性:
總而言之,有些資料是不必還原的,我們僅需要透過這些資料的「特徵」以確認資料有沒有被改變。
是一種雜湊演算法,輸入不固定長度後,可以產出固定128-bits雜湊值。
在90年代時被廣泛運用,不過在2009年,有人用了一種碰撞演算法,可以在一般電腦執行數秒即可完成的複雜度之下完成碰撞。
故2011年,此演算法在RFC6151中被禁止用作金鑰雜湊訊息鑑別碼。
除此之外,他的危險來自於:
是一系列雜湊演算法的統稱,包括SHA-0, SHA-1, SHA-2(是SHA-224, SHA-256...SHA-512的統稱), SHA-3等。
根據資料,目前SHA-0已經淘汰, 而SHA-1也已經被列為弱安全性,目前較常使用的是SHA-256。
可以說是專門用於密碼的慢雜湊演算法,除了可以加鹽來抵抗彩虹表攻擊外,因為他可以保證加密的速度落在一個特定範圍內,所以可以延長攻擊方的加密速度,讓暴力搜尋變得比較容易被防禦。
記憶體依賴的雜湊演算法,目前常用於區塊鏈。
大致了解演算法的種類,對於什麼情境常用到的演算法可以有些認識了。
有時候其實也是會混合使用的,比如說,可能會先將資料加密,再將資料做雜湊給對方一個雜湊值以驗證資料有沒有經過竄改等等,都是一些常用的作法。
有一個資料裡提到的結論蠻好的,引用一下:
在資安領域沒有所謂絕對的安全,你只能不斷提高攻擊者的成本,當那個成本高到攻擊者無法負荷時(像是破解一個密碼要租超級電腦連續計算十年),那就可以說是足夠安全了XD
-- 聽說不能用明文存密碼,那到底該怎麼存?
此文章同步發表於部落格,歡迎來逛逛~
[資料結構] 雜湊 (Hash)
[Security] 雜湊不是加密,雜湊不是加密,雜湊不是加密。
基礎密碼學(對稱式與非對稱式加密技術)
先用md5,再用sha1,这样密码会安全一点吗?
scrypt演算法的前世今生(從零開始學區塊鏈 192)
聽說不能用明文存密碼,那到底該怎麼存?