跳到主要內容

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

 

密碼學能夠帶來什麼好處?

雲時代的來臨, 我們過往使用的桌面版應用程式逐漸搬上雲端, 但也帶來了極大的挑戰, 因為一但上雲就代表著需要面臨著四面八方的使用者, 我們並不知道這些使用者是否都是君子, 一個不小心如果出現漏洞就可能被攻擊, 導致系統損壞, 進而影響商譽、營收, 對企業來說是極大的傷害, 為了避免這樣的狀況發生, 資安防禦體系下的「密碼學」就扮演著極其重要的角色, 讓伺服器與客戶之間的溝通具有一層嚴格的防護網, 減少過程中被竊取、破壞的風險,伺服器的資料也能藉由「密碼學」獲得重要的保護效果,, 而「密碼學」也是一門博大精深的技術, 接下來的系列將以最簡單的方式講述密碼學的原理, 讓我們在資安意識抬頭的時代能夠增加一門功夫, 以因應時代需求的發展。

密碼學的「雜湊」與「加密」是區塊鏈發展的重要基石

區塊鏈可以拆解為「區塊」跟「鏈」,「區塊」就是一份份的資料帳本,而「鏈」就是由密碼學的Hash原理串起來的,每一個「區塊」中皆存放目前的Hash值與上一個區塊的Hash值,以此環環相扣連結成鏈。

因此我們才要好好的認識編碼、加密與雜湊的差異,避免名詞造成混淆,而後續的篇章也會深入來潭討雜湊函數的奧秘,讓我們對於區塊鏈的運作原理能夠有更進一步的認識。

編碼(Encode)、雜湊(Hash)、加密(Encrypt)究竟有什麼不同?

「編碼(Encode)」其實離我們很近…,原來電影情節常常出現的「摩斯密碼」成為了最貼切的例子。

相信我們常常看到電影情節中不時就出現「摩斯密碼」的名詞, 而密碼學之中的「編碼」也是類似這樣的概念, 簡單來說就是「資料內容替換成不易閱讀的符號、文字」以獲得保護, 過程中一但資料被擷取也不易閱讀, 是保護門檻中最基本的一項, 但也是最弱的, 因為一但編碼還原表被竊取, 或是使用大家都知道的編碼表, 就很容易進行還原破解。

常見的編碼格式

- URL編碼。
- UTF-8。
- ASCII。
- Unicode。
- Base64。

「雜湊(Hash)」就是碎片化與拼湊的過程

雜湊!雜湊!雜湊!其實並不難理解,簡單來說就是將「大量的資料碎片化之後再拼湊」,因此雜湊出來的結果並不能「逆推」回原文,那這樣帶來什麼好處呢? 試想,我們碎片化之後再拼湊出來的資訊一定是簡化過的,因此對於容量的佔用,資訊的精準度都具有一定的影響力,不論在搜尋或者比對時都能夠更加的快速,最重要的一點就是雜湊的結果是「不可逆推」的,故此常常用在密碼的儲存。

不過看似簡單,實際上背後的邏輯並不簡單,往後的篇章會針對雜湊進行更深入的介紹,這邊主要先介紹概念,讓大家對於「雜湊」具有基本的認識就好。

優點

- 搜尋資料前無需排序。
- 輸出皆為固定長度,不會佔用額外空間。
- 不可逆推,保密性高。
- 搜尋速度非常快,時間複雜度約O(1)。

缺點

- 不可逆推是雙面刃,就密碼管理來說,忘記密碼就等於要重新設定密碼了。
- 碰撞容易被拿來攻擊,只要駭客能夠推敲出不同雜湊值,但比對結果相同,就容易猜測原始資料,因此雜湊的演算法選用也非常重要。

「加密(Encryption)」為你重要的東西上一道鎖吧

重要書信不應該任何人都能翻閱,我們需要加點密文進行傳遞…。

加密是區塊鏈中非常關鍵的一環,除了「雜湊(Hash)」算法之外,加密(Encryption)演算法也扮演著非常重要的角色,其中「鑰匙」更是重中之重,依據加密的類型又可以區分為「對稱式加密」與「非對稱式加密」,這兩個概念也非常的有趣,「一把鑰匙」與「兩把鑰匙」的應用場景及安全程度也有所不同,我們這次就簡單的帶一下概念,深入的各種對稱/非對稱演算法會在後續的篇章逐一探討。

對稱式加密

以保險箱為例,「加鎖」與「解鎖」都必須是「同一把🔑 鑰匙」,此為「對稱式加密」非常容易理解,常見的演算法有「AES、DES、3DES…」,這種方式雖然得到了一定程度的安全性保障,但加鎖的一方必須要將「🔑 鑰匙」傳遞給另一方,另一方才能解鎖,但傳遞的過程就很容易讓這把「🔑鑰匙」暴露在被竊取的風險。

非對稱式加密

上述的「對稱式加密」存在著一個問題, 就是非常重要的「🔑鑰匙」要如何遞送給對方以及傳遞過程的風險, 因此才衍生了一個非常有趣的加密方式「非對稱式加密」, 由接收方產生兩把鑰匙, 自己保留密鑰(Private Key), 另一把公鑰(Public Key)就可以交給其他人, 只要對方是使用公鑰(Public Key)進行加密的話, 就只有擁有私鑰(Private Key)的人才能進行解密, 過程中就算被擷取也無法進行破解, 因此保證傳輸過程的安全性, 這是非對稱式加密的一種概念, 通常是用公鑰(Public Key)加密, 使用私鑰(Private Key)解密, 當然也有反向的情境, 那就是數位簽章, 也是後面章節會進行深入探討的一環。

至於稱為「非對稱加解密」還有另外一個原因是公鑰進行加密就不能使用公鑰解密, 私鑰進行加密就不能使用私鑰解密, 聽起來很繞口令對吧! 其實簡單來說就是加/解密必須是非對等的,因此才稱為「非對稱加解密」。

但「非對稱式加解密」難道就沒有風險了嗎? 試想,我們的公鑰通常會公開流通於網路上,那麼過程中假若被有心人士攔截之後,替換成有心人士偽造的公鑰,那麼傳送方在不疑有他的狀況下,會使用那把公鑰將內容進行加密傳遞,但此時資料也會流過有心人士手上,因為該資料是經由偽造的公鑰所加密,也就意味著只有那把偽造的私鑰能夠解密,因此傳送方的資訊就輕鬆的被有心人士給截走了,故而衍生後面的第三方認證機構、數位簽章…等強化機制,我們後續也會針對這些部分詳細講解。

結語

我們常常被艱澀難懂的名詞阻礙了學習的動力,原來每個名詞會被命名都是有其背後的涵義,我們只要稍微花點時間,用心去理解設計的原理就能夠很快的將這些難懂的名詞烙印在腦海中,這次的篇章學習到密碼學重要的三個容易搞混的名詞,讓我們先具有一定基礎之後,後續的密碼學相關文章相信會更加容易理解與學習。

📚 更多關於Solidity的文章請看這裡…

--------------------------------------------------------------------------------

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 - 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

資源參考

- https://zh.wikipedia.org/zh-tw/百分号编码
- https://ithelp.ithome.com.tw/articles/10273568
-https://www.dottedsign.com/zh-tw/blog/product/what-is-digital-signature

留言

這個網誌中的熱門文章

java西元民國轉換_各種不同格式

C#資料庫操作(新增、修改、刪除、查詢)

【Excel好好玩】 自己的資產自己管!善用Google Sheet來幫我們評估貸款

這次介紹的主題是關於Excel的貸款還款計畫試算,我們人生中總會遇到需要大筆金額的花費,但當資金不夠時就得進行貸款,而貸款之前如果我們能夠審慎評估,並分析自己的還款能力之後在進行凍作,相信風險會小很多,因此就自己動動手來使用Google Sheet進行試算吧! 基本資料 ● 貸款總額: 1000000 ● 貸款期數: 84月 ● 年利率: 2.11% ● 月利率: 0.18% P.S 月利率 = 年利率 / 12 重要函式 PMT : 這是Google Sheet內建的重要年金計算公式,我們可以善用這個公式來計算固定利率及期數的固定攤還本息。因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 動手做 首先我們在Excel表上列出我們的基本資料 圖片來源 其中月利率的部分就使用公式「=B4/12」 接著我們填上第一列的期數跟餘額 圖片來源 =B2 =B3 使用關鍵PMT函數來計算本息的部分 因為PMT函式計算出的結果為負數,所以前面加上-號轉成正數。 -PMT(貸款利率(月利率), 貸款期數, 貸款總額) =-PMT($B$5,$B$3,$B$2) 圖片來源 計算利息 利息 = 貸款餘額 x 月利率 =B8*$B$5 圖片來源 計算本金 本金 = 本息 - 利息 =C8-D8 圖片來源 製作第二列餘額的部分 餘額的部分 = 上一期的餘額 - 上一期的本金 圖片來源 接著拖曳該兩列往下拉,即可查看每一期的利息與本金 圖片來源 結語 雖然市面上已經有很多貸款銀行都提供了試算功能,但如果我們想要進一步管理自己的資產時,就需要將每一期的金額給計算出來,因此才會將公式運用在Excel表,讓我們的資產管理表能夠結合負債,進一步評估我們理財行動的下一步,希望這樣的經驗可以幫助到正在理財道路上打拼的夥伴,讓我們透過有效的管理,幫助荷包長大吧! 喜歡撰寫文章的你,不妨來了解一下: Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入? 歡迎加入一起練習寫作,賺取知識,累積財富!