跳到主要內容

發表文章

目前顯示的是有「密碼學」標籤的文章

【開發智能合約 - 密碼學系列】雜湊(Hash)的背後究竟怎麼「湊」的呢?

圖片來源  - Bucket(桶):雜湊表儲存資料的位置,每一個位置具有唯一識別索引。 - Slot(槽): 每一個Bucket裡面都會存放不同的資料,而假設一筆資料由兩個欄位組成,每一個欄位就是一個Slot(槽)。 - Hash Function(雜湊演算法):計算出雜湊值的一套數學公式,諸如: MD5、SHA…皆是著名的雜湊演算法。 上一篇我們介紹了「 【開發智能合約 - 密碼學系列】編碼(Encode)、雜湊(Hash)、加密(Encrypt)傻傻分不清楚? 」, 相信大家對於編碼、雜湊、加密已經具備基礎的知識了, 那這次就來深入聊聊雜湊(Hash)的內容、相關的演算法、應用場景…。 我們在聊區塊鏈的時候常常會聽到Hash、Hash Function、Hash…, 常常我們都認為Hash就是保障區塊鏈安全的重要算法, 但嚴格來說Hash並不是一一種加密算法, 而是一種資訊檢索, 透過演算法將內容取摘要之後產生的一串不可逆推的雜湊值,也就是這組「雜湊值」被允許公開流傳與網路上, 這也是為什麼我們常常在下載檔案的時候, 會看到MD5值的原因, 因為MD5也是雜湊的一種演算應用, 下載過後透過雜湊值的比對, 就可以確保檔案傳送的過程是沒有被「任意竄改」的, 因為一旦內容遭到竄改, 通常雜湊值的比對就會失敗, 假若不匹配, 我們就可以初步將該檔案判定為異常。 上面那段描述相信大家也看到了一個重點, 就是「不可竄改」的特性,因此也被呼應到區塊鏈的特性。 具有哪些特點? - 產生出來的雜湊值長度固定, 可以用於系統優化, 將大量資料取雜湊又不需要逆推資料的情境。 - 搜尋速度快, 基本上時間複雜度為O(1)。 - 難以偽造, 只要資料一改變, 雜湊值勢必截然不同。 如何運作? 1. 我們都知道計算機的運算基本單元皆為0與1, 因此第一步先將資料化為數值。 2. 接著透過Hash Function取餘數、平均法…等, 得出雜湊位址。 3. 接著在雜湊表的特定位址存放資料。 關於Hash Function 取餘數(Mod) 相除取餘數,Hash Function最基本的演算方式就是相除取餘數的方式,假設有5個Buckets,現有1個值為4的資料,則運算邏輯為: 5 % 4 = 1 中間平方法(Mid-Square) 公式主要為pow(N, 2)取中間幾位數, 舉...

【開發智能合約 - 密碼學系列】編碼(Encode)、雜湊(Hash)、加密(Encrypt)傻傻分不清楚?

  密碼學能夠帶來什麼好處? 雲時代的來臨, 我們過往使用的桌面版應用程式逐漸搬上雲端, 但也帶來了極大的挑戰, 因為一但上雲就代表著需要面臨著四面八方的使用者, 我們並不知道這些使用者是否都是君子, 一個不小心如果出現漏洞就可能被攻擊, 導致系統損壞, 進而影響商譽、營收, 對企業來說是極大的傷害, 為了避免這樣的狀況發生, 資安防禦體系下的「密碼學」就扮演著極其重要的角色, 讓伺服器與客戶之間的溝通具有一層嚴格的防護網, 減少過程中被竊取、破壞的風險,伺服器的資料也能藉由「密碼學」獲得重要的保護效果,, 而「密碼學」也是一門博大精深的技術, 接下來的系列將以最簡單的方式講述密碼學的原理, 讓我們在資安意識抬頭的時代能夠增加一門功夫, 以因應時代需求的發展。 密碼學的「雜湊」與「加密」是區塊鏈發展的重要基石 區塊鏈可以拆解為「區塊」跟「鏈」,「區塊」就是一份份的資料帳本,而「鏈」就是由密碼學的Hash原理串起來的,每一個「區塊」中皆存放目前的Hash值與上一個區塊的Hash值,以此環環相扣連結成鏈。 因此我們才要好好的認識編碼、加密與雜湊的差異,避免名詞造成混淆,而後續的篇章也會深入來潭討雜湊函數的奧秘,讓我們對於區塊鏈的運作原理能夠有更進一步的認識。 編碼(Encode)、雜湊(Hash)、加密(Encrypt)究竟有什麼不同? 「編碼(Encode)」其實離我們很近…,原來電影情節常常出現的「摩斯密碼」成為了最貼切的例子。 相信我們常常看到電影情節中不時就出現「摩斯密碼」的名詞, 而密碼學之中的「編碼」也是類似這樣的概念, 簡單來說就是「資料內容替換成不易閱讀的符號、文字」以獲得保護, 過程中一但資料被擷取也不易閱讀, 是保護門檻中最基本的一項, 但也是最弱的, 因為一但編碼還原表被竊取, 或是使用大家都知道的編碼表, 就很容易進行還原破解。 常見的編碼格式 - URL編碼。 - UTF-8。 - ASCII。 - Unicode。 - Base64。 「雜湊(Hash)」就是碎片化與拼湊的過程 雜湊!雜湊!雜湊!其實並不難理解,簡單來說就是將「大量的資料碎片化之後再拼湊」,因此雜湊出來的結果並不能「逆推」回原文,那這樣帶來什麼好處呢? 試想,我們碎片化之後再拼湊出來的資訊一定是簡化過的,因此對於容量的佔用,資訊的精準度都具有一定的影響力,不論在搜尋或...