iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
1
Security

資訊安全大補帖系列 第 9

資安補帖─Day9─Hash 雜湊函數

前言

今天談談什麼是Hash 雜湊函數~
想補充關於hash的CTF題目。

社團經驗談

  • 社團需要有認同感才能延續
  • 團隊能力
    • 了解團隊的重要性
      • 不是單方面奮戰
      • 每一個人都很重要
      • 顧及每一個人的心理感受
      • 每一個人都有要負責的事項
    • 擔任總召/領導者的目的
      • 負責規劃完善一個活動?
        • 思考總召、領導人的意義
      • 讓所有參與人達到資訊對等
        • 思考如何達到資訊對等?
      • 擔綱大任
        • 不是把所有事情都攔在自己身上
        • 不是覺得別人做得不好,自己可以做全部的事情
        • 而是學著分配任務
      • 每一個人都可以擔任領導者
        • 也因為擔任所以學習
    • 責任感

      可以沒有能力,但是不能沒有責任感~JAYHOM

      • 每一個人都是社團的一份子
      • 身為幹部就有責任
        • 希望這個社團好
          • 而職位只是剛好一個頭銜
            • 而這個頭銜剛好有先一定要做的事情罷了
              • 然後要把事情做完做好
      • 因為責任感而讓自己壓力很大
        • 了解自己壓力來自哪裡
        • 如何改善
          • 發出求救訊號
            • 大家都很好溝通
            • 不要不說出來
              • 沒有人是自己的蛔蟲
              • 所以別人不知道自己的想法─很正常
            • 提出解決辦法
              • 事情太多->延期
              • 負擔太重->請大家一起分擔
              • 等等方法...
      • 找尋抒發壓力的管道
        • 開會不是抒發壓力
        • 開會只對事,不對人

正文

雜湊函式

關於雜湊函數

  1. 數學函數轉換數字輸入值成另一種壓縮的數值。
  2. 輸入到hash function內的數值為任意長度但數出的長度為固定數列。

如何利用雜湊函數驗證資料完整性

  1. 雜湊函數的特性如下:
    • 相同的資料,進入雜湊函數內會產生相同的雜湊值。
    • 輸入資料微小改變,導致輸出不可區分性改變,稱為雪崩效應(avalanche effect)
  2. 根據特性可以利用雜湊值來驗證資料是否正確,假設今天A分別傳了「APPLE」、「d0be2dc421be4fcd0172e5afceea3970e2f3d940」給B,B可以在SHA1雜湊函數輸入明文「apple」得到「d0be2dc421be4fcd0172e5afceea3970e2f3d940」,與A傳來的雜湊值相同,可以知道此資料沒有被竄改。

如何利用雜湊函數只讓預期接收者可以確認資料完整性

  我們利用公鑰、私鑰來確認資料的完整性,假設A傳送訊息給B時,先將明文透過雜湊函數得到雜湊值再利用自己的私鑰加密,將自己的明文以及加密完的值傳給B方,B方為了確認資料是否有被竄改過,先將加密完的值利用A方的公鑰解密可以得到明文的雜湊值。自己也有得到明文,將此明文放入雜湊函數得到雜湊值,查看兩值(明文進入雜湊函數的雜湊值以及利用公鑰解密的雜湊值)是否相同,如果相同表示資料安全,如果不同表示明文資料可能遭到竄改。
  如果兩個值都相同就可以確定訊息安全,即使我們在傳輸的過程中被中間人所攔截,中間人雖然利用A方的公鑰訊息,但是無法將要竄改的訊息偽裝成A所發送的訊息,因為需要使用到A的私鑰才可以加密。

協定驗證資料完整性和讓預期接收者確認資料完整性

  我們利用非對稱式加密演算法的公鑰和私鑰來確認雙方的身分,再利用對稱式加密演算法之密碼作為傳送資料加密的方式,結合了對稱式加密與非對稱式加密演算法的優點。

  • SSL運行步驟如下:
    1. 客戶端傳送連線訊息(支援的SSL版本、加密演算法、演算法等)給伺服器
    2. 伺服器回應信號(確定本次通訊採用的SSL版本和加密套件)給客戶端
    3. 伺服器傳送數位憑證及公鑰給客戶端
    4. 客戶端傳送客戶之公鑰給伺服器
    5. 伺服器傳送一組對稱式密碼給客戶端
    6. 雙方開始使用該對稱式密碼互相傳資料

參考資料

練習Python中的hash函數使用

  • Intro to Hashing
    • Linux底下可以使用md5sum,sha256sum
      • $ printf "Hello, world!" | md5sum
        6cd3556deb0da54bca060b4c39479839 -
      • $ printf "Hello, world!" | sha256sum
        315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3 -
    • Python2 可以使用hashlib
      In [1]: import hashlib
      
      In [2]: hashlib.md5('Hello, world!').hexdigest()
      Out[2]: '6cd3556deb0da54bca060b4c39479839'
      
      In [3]: hashlib.sha256('Hello, world!').hexdigest()
      Out[3]: '315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3'
      
      • 如果是Python3請在字串前面加上b
        • hashlib.md5(b'id0-rsa.pub').hexdigest()

上一篇
資安補帖─Day8─Web Security
下一篇
資安補帖─Day10─簡單CTF套路工具使用
系列文
資訊安全大補帖53

尚未有邦友留言

立即登入留言