iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
Security

看完眼眶濕濕的App開發者慘烈對抗險惡資安環境血與淚的控訴!系列 第 16

Day 016. 什麼都能尬的果汁機 - 雜湊 Hash

雜湊是一種演算法又稱 『雜湊演算法』,屬於在資料中編碼的技術

最主要分為 Hash Function(雜湊函數)和Hash Table(雜湊表)

不過記住最重要的一點,雜湊 Hash 【不是加密】【不是加密】【不是加密】

很重要所以說三次

Hash Function(雜湊函數)

可以把雜湊函數看到一台果汁機,這個果汁機有許多功能按鈕 (md5 , sha1 ,sha256...)

image-20201001125718523

當我們把資料丟進去後,按下按鈕(sah1),經過果汁機打散的結果,得到的結果我們稱為雜湊值 (Hash Value)或 雜湊碼 (Hash Code)

image-20201001130002473

下表為 hash online產生網站 https://www.fileformat.info/tool/hash.htm 執行結果

name value
Original text 羊小咩
Original bytes e7:be:8a:e5:b0:8f:e5:92:a9 (length=9)
MD5 28ebf41c0fd6440ce2a889c048f0d460
SHA-1 8a580166718f2c786e6893e67e0ca11523e4e8bb
SHA-256 8b5ca9a3ec4a108d431aa88938d05343a70289721120f7967f6aa91d66b377db
SHA-512 9eda5bc2825c4329c24e49e4801bdf69468c05556eb48b4c46d163bf3b9207340c8c7cad3969e6902d451bf14407c3174151bba96bd9f346cd6ee8988f1cf08d

下圖為 playground 執行結果

截圖 2020-10-01 下午1.02.32

無論資料輸入長度很短,或超大,打散後輸出的長度都是固定的

image-20201001131919280

Hash Function 特點

  • 輸入的長度無論長短,輸出的長度都相同
  • 輸入一樣的資料,會得到一樣的結果
  • 即使輸入資料非常的相似,輸出值會相差甚遠
  • 輸入不同的資料,即使很低的機率還是會出現得到相同資料,稱為雜湊碰撞(hash collision)
  • 無法從輸出的結果反推回輸入資料

Hash Table(雜湊表)

雜湊表Hash Table 是一種儲存(Key,Value)的資料結構, 可以把Key 想像成檔案名稱, Value 檔案的資料內容,通常運用在資料儲存,及資料庫功能設計

名字 喜歡食物
羊小咩 烤肉
長頸鹿 嫩芽
大象 蘋果

會將某一欄資料,當為主要資料,上表為例會將姓名進行hash ,資料用原始型態儲存

hash 喜歡食物
28ebf41c0fd6440ce2a889c048f0d460 烤肉
537e7b22835c0f1bc29a58475bbcca55 嫩芽
e33d101cae2f9056d5426aea50643430 蘋果

Hash Table(雜湊表)為了效能或空間通常取道 hash 後還會在做除餘做分區,但也不是絕對,依照需求設計及變化

雜湊常用演算法 Algorithm

以下為雜湊 常用演算法,當然其實不只這些,只是列出現在比較常使用的

由於電腦進步,md5字典檔幾乎都已經列舉完了,因此已不建議使用 md5,至少使用sha1 以上的演算法

如果有考慮碰撞問題建議使用sha224 或 sha256以上

  • md5

  • sha

    • sah0
    • sha1
    • sha256
    • sha512

雜湊函式的應用

  • 保護資料

    常用在保護使用者輸入的密碼,就是常聽到的密碼在資料庫有沒以儲存明文

    密碼輸入 abc 採用 hash 運算

    sha1('abc')
    

    實際儲存資料是 a9993e364706816aba3e25717850c26c9cd0d89d

  • 確保傳遞真實的資訊

    在網路傳輸資料時,將傳輸內容進行hash ,伺服器驗證這組 hash code ,確保資料在中間沒有被串改

    這也稱確保訓息完整性(Hash-based message authentication code , 縮寫HMAC)

  • 雜湊表

    在上方以有簡單介紹,主要用途資料使用及儲存,更多用在資料搜索上的設計

  • 傳輸錯誤校正

    在傳輸協議上設計對應的 hash 檢驗,當傳送資料時比對計算hash code 比對不相同時為,傳輸內容有誤

    這又稱 冗餘校驗

  • 檔案比對 (語音/圖片)

    發行的軟體進行雜湊後,並把雜湊碼公布於網站,讓使用者自行比對安裝的為官方出廠沒被竄改過

    也稱為 Checksum

    圖片進行hash 可以快速比對是否相同檔案

    語音 影片,分割為很多小檔案進行hash 後可以進行 搜尋 批配是否有相同的部份

    網路資源發行後進行hash 碼,配合子資源完整性 (Subresource Integrity ,SRI) 避免使用CDN時內容已被串改

    <script src="https://example.com/example-framework.js"
            integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
            crossorigin="anonymous"></script>
    

小知識

有時候我們擔心雜湊遇到字典檔攻擊,我們會將要雜湊的資料加鹽(salt)

原始資料:abc用 hash 運算

sha1('abc')

實際儲存資料是 a9993e364706816aba3e25717850c26c9cd0d89d

可以在hash解密網站 https://www.dcode.fr/sha1-hash 可以發現很容易就查原始資料

image-20201001182329564

加鹽(salt)處理

sha1('abc,salt')

實際儲存資料是 8a0d0d1b0d275ae1041db295336b97542c212b18

發現我們將資料尾端加入 ,salt 即使是一樣的密碼由於加上了 salt 出來的結果也都不一樣

salt 長度位置都可以隨意,沒有限制

小結

先祝大家中秋節快樂 ,大家在烤肉我在寫文(哭)

22137016_762524343949967_8759941857668669442_o

圖片來源 - Machi Dad

雜湊函數有不可逆的特性,因此很常跟著密碼學搭配一起使用

保護資料和資料比對,雜湊函數絕對是少不了的

可以不用深入了解,演算法怎麼運算,只要學會如何使用受益無窮


上一篇
Day 015. 抓包神器 Burp Suite
下一篇
Day 17. 幫訊息申請一個簽證,訊息鑑別碼 MAC
系列文
看完眼眶濕濕的App開發者慘烈對抗險惡資安環境血與淚的控訴!31

尚未有邦友留言

立即登入留言