1. 程式人生 > >白話hash和數字簽名,保證你看得懂(從零開始學區塊鏈 195)

白話hash和數字簽名,保證你看得懂(從零開始學區塊鏈 195)

最近有朋友在後臺問為啥最近老介紹hash相關文章,其實hash演算法在資訊保安中非常重要,尤其是作為數字簽名中非常重要的一環,今天就來詳細把這個事情講清楚白話hash

可能以前的文章講得不夠簡單,hash演算法其實就是將一段非常長的資料通過hash變換為一個固定長度相對較短的資料,簡稱“摘要”,你可以理解成把一本書通過hash變成一段很短的話,演算法最關鍵的要點是,哪怕你改動了這本書裡面的一個標點符號,hash後的摘要都會改變。(累死我了,我發現說大白話講技術問題挺難的)

以MD5這種hash演算法為例,他可以將任意長度的資料變成128位的雜湊值,所謂任意長度的意思就是你的資料可以是一篇文章,一部電影,或者只是一個字母,哪怕是個空字串,下面這個就是MD5一個空字串後的值:

MD5("")= d41d8cd98f00b204e9800998ecf8427e

這個例子只是說明hash可以將任意長度的資料變為一個固定長度的值,演算法的精妙在於這個值對於不同的資料還是不一樣的,如果不同的資料生成的hash值一樣,就是有名的“hash碰撞了”

其實hash適合於比較大的資料做摘要,不能作為加密使用,很多誤傳為MD5加密,也有人稱之為單向加密,就是指不能通過hash後的值不能推導原來的資料,這種說法不夠嚴密,比如很多網站喜歡將使用者的密碼經過MD5變換後儲存,主要防止資料庫洩露後直接檢視使用者的密碼,真正密碼比對時對使用者輸入的密碼進行md5變換然後和儲存的md5值比較

從密碼學上講加密過程都要對應解密過程,即可以通過密文還原明文,所以以上的密碼保護方法不是嚴格意義上的資料加密解密。

對於以上方法,一般採用md5字典進行暴力解密,只需要對原有的密碼字典進行MD5變換,然後進行字典比對,不會增加太多的計算複雜度,比如你看到d41d8cd98f00b204e9800998ecf8427e這個值就知道代表的是一個空字串。

白話不對稱加密

所謂不對稱加密,是對於對稱加密而言的,傳統的對稱加密只有一個祕鑰(你可以理解為密碼),你用這個祕鑰加密,別人也用這個祕鑰解密,這裡面有個弊端就是,你把解密的密碼告訴別人時,比如發簡訊、發微信,這時候回受到中間人攻擊,簡單舉例說就是運營商等會看到你發的密碼,然後你們之間的通訊資料就被解開。

後來英國人搞出來不對稱加密,它包含兩個成對的金鑰,這裡面有個概念一定要搞清楚,這個兩個成對的祕鑰是同時生成的,數學上存在一定關係,並沒有嚴格意義上的哪一個必須是公鑰,哪一個必須是私鑰,你公佈出去的那個就是公鑰,你保留的那個就是私鑰,看你高興。

需要注意的時,不同的演算法在設計時,為了保障效率公鑰會採用固定值生成,比如RSA演算法建議公鑰的運算e1取值為3或65537(從理論上說迭代猜中的機率更大),所以在實際應用中最好按照推薦選擇保留自己的私鑰

另外一個概念來了,這是很多人對於後期數字簽名比較容易搞蒙圈的地方,首先我們要知道對於不對稱加密一個重要特點就是:公鑰加密的資料私鑰可以解密,私鑰加密的資料公鑰可以解密,記住這句話後面的數字簽名原理你就能搞清楚。

白話數字簽名

前面講了不對稱加密,現在你有了一個可以公佈出去的公鑰的,公鑰的作用就是公佈出去,如果對方想給你發信息,他就可以可以用你的公鑰進行資料加密然後發給你,你用你的私鑰解密資料,即便是中間人截獲你的公鑰也沒用。如果你想給對方發加密資訊,那麼就反過來需要知道對方的公鑰即可。所以不對稱加密最重要的就是保護你的私鑰,這就是我們常說的使用不對稱演算法進行加密資料傳輸。

那麼數字簽名又是什麼呢,其實也很簡單了,大白話來講也是一個加密解密過程,就是將資料用你的私鑰進行加密,然後把明文和密文都發給對方,對方用你的公鑰對密文進行解密,然後比對解密後的明文是不是一樣,這樣就證明這個資料沒有被第三方篡改,的確是你書寫的

現在hash演算法的重要性要出來了,如果你傳送的資料非常短,比如“我愛你”“我恨你”這些很短的句子,你是用不到hash演算法的,你只需要用你私鑰加密這些短句,然後把  “我愛你”連同加密後的資料比如"@#@#%",一起發過去,對方用你的公鑰解開一看果然是“我愛你”,證明沒有被篡改,如果解開一看是“我恨你”,就說明在傳輸過程被中間人篡改了。

如果你發的是一大段文字,比如萬字情書什麼的,你也可以使用剛才的方法進行簽名,那麼你就要傳送很長一段的密文和明文給對方驗證,這明顯是浪費資源的。

第一節說過,你終於可以使用hash演算法,hash演算法就是可以把很長的資料摘要成很短的一段資料,比如採用MD5後只有128位,現在你就可以使用MD5摘要你的萬字情書了,得到一個128位的摘要,然後你使用你的私鑰對這個128摘要進行加密,這個過程就叫做數字簽名,所以數字簽名是兩個過程,先對資料進行hash摘要,然後對摘要進行私鑰加密。

然後你只需要把你的情書和私鑰加密後的摘要發給對方就行了,這明顯減少了傳輸量,也讓簽名變得專業了(呵呵)。對方收到你的情書和加密摘要後,只需要對情書同樣進行一次hash運算,得到一個128位資料,然後用你的公鑰解密你發過來的摘要,如果這兩個資料一樣就證明這篇情書裡面一個標點符號都沒有改變,如果不一樣,就證明資料在傳輸過程中被人篡改過,不是你所寫,這個過程就叫做驗證簽名。

現在你明白hash演算法的重要性了吧,簡而言之,如果hash演算法被攻破,中間人可以篡改你的資料,並保證篡改過的資料有一樣的hash值,那麼數字簽名的基石就被動搖了

注:還有一種數字信封技術,可以讓傳遞明文和簽名更加安全,其實原理都差不多,明白加密原理後,你自己都能想出來這些所謂的數字信封、數字信箋、數字包裹一類的看似高大上的名詞

關於本文

本來這篇文章是寫給我那三天不打上房揭瓦的媳婦的,適合初學者看,熟悉這方面知識的朋友可以看延閱讀;另外,喜歡就關注吧,您可以轉發到群和朋友圈中讓更多人瞭解,您的支援和鼓勵是我最大的動力

640?wx_fmt=jpeg
長按關注,觸控未來

延伸閱讀

相關推薦

白話hash數字簽名保證開始區塊 195

最近有朋友在後臺問為啥最近老介紹hash相關文章,其實hash演算法在資訊保安中非常重要,尤其是

挖礦之旅!Python開始建立區塊!提供原始碼哦!月薪十萬

環境準備 確保已經安裝Python3.6+, pip , Flask, requests,安裝方法: pip install Flask==0.12.2 requests==2.18.4 同時還需要一個HTTP客戶端,比如Postman,cURL或其它客戶端。參考

完此文再不區塊算我輸用Python開始建立區塊

如果你還沒有聽說過 3 點鐘區塊鏈群,說明你還不是鏈圈的人;如果你還沒有加入 3 點鐘區塊鏈群,

安卓混合開發——原生JavaH5互動保證

** 在Android開發中,越來越多的商業專案使用了Android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那麼簡單,有時候還需要本地Java程式碼與HTML中的JavaScript進行互動,Android也對互動做了很好的封裝,所以很容易實現例如:點選網頁中的按鈕An

[jvm解析系列][十四]動態代理裝飾模式原始碼深入理解裝飾模式動態代理的區別。

不知道大家知不知道設計模式中有一種叫做裝飾,舉一個簡單的例子。 一天一個年輕領導小王講話:咳咳,我們一定要xxx抓緊xxxx學習xxx的精神!好,今天的會議結束! 然後有一個老領導李同志接過來說:那個我在補充兩點,個別同志xxx,一定要注意xxx。好散會。 然後另一天小王同

decimal這個資料型別的用法保證

                        筆者在網上搜了好

開始 Web 之 JS 高級apply與callbind閉包沙箱

master 操作 console 概念 釋放 分享圖片 成功 num 命名沖突 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

這30個以太坊開發示例成為80萬都挖不走的區塊人才!

2018年已過了大半,幣圈跌跌蕩蕩,而鏈圈的人在等待鳳凰涅槃,熊市專心做技術,牛市才能一展身手、衝破雲霄! 本文主要告訴你,如何成為一名優秀的以太坊開發者! 如果你是以太坊開發者中的“老司機”,請直接看最後一部分:30個為你量身定做的挑戰示例! 如果你是以太坊

ABC一體機plus版橫空出世此時的“浪潮牌”AI嗎?

過去的一年多以來,我們發現,浪潮在百度的場子上頻頻亮相…… 去年9月,在帝都上演的百度雲智峰會上,浪潮與百度共同釋出了ABC 一體機,雙方還就一體機在金融、電信、氣象等行業的普及應用方面“交換了眼神兒”,意志堅定地攜手共推傳統行業智慧化升級這件大事兒。 剛剛進入2018年,在GPU

開始產品第六篇:更強大的測試自動化測試效能測試

本篇為【從零開始學產品】系列課第1章第5節 歡迎到公眾號選單欄,獲取產品經理課程更多資料     “測試就是拿點滑鼠在電腦上瞎點,或者是用手機隨便戳幾下麼?” “不,是有計劃有意圖的測試,比如說,邊界測試,隨機測試,端到端測試等等。

開始產品第五篇:三個環境開發、測試線上

本篇為【從零開始學產品】系列課第1章第4節 歡迎到公眾號選單欄,獲取產品經理課程更多資料     上節課我們說到了,Bug的生命週期,而只有在測試環境和線上環境發現的Bug,才會被稱之為Bug。 倒底什麼是測試環境,什麼是線上環境,

微信小程式名:的專屬簡歷微信可直接搜尋出來檢視前端如何一個人基礎開發完整的小程式專案包括後臺視覺化資料庫。

微信小程式名:你的專屬簡歷(微信可直接搜尋出來檢視),教你前端如何一個人從零基礎開發完整的小程式專案,包括後臺視覺化資料庫。該專案實現了個人簡歷的增刪改查以及展示和轉發分享,以及收藏他人簡歷和檢視,還有最近瀏覽過的簡歷。 教程: GitHub:https://github.com/sus

開始caffe:mnist手寫數字識別網路結構模型超引數檔案的原始碼閱讀

下面為網路結構模型 %網路結構模型 name: "LeNet" #網路的名字"LeNet" layer { #定義一個層 name: "mnist" #層的名字"mnist" type:

開始 Web 之 JS 高階apply與callbind閉包沙箱

一、apply 和 call 方法 apply 和 call 都可以改變呼叫其的函式或方法中的 this 指向。 不同的是傳入引數時,apply 有兩個引數,第二個引數是陣列;call 從第二個引數開始是呼叫其的函式的所有引數。 使用方法: 1、apply的使用語法: 函式名.apply(物件,[引數1

開始Swift》學習筆記Day 55——使用try?try!差別

移動設計 ani ecb pcl mva fde 成了 lms 官方 原創文章。歡迎轉載。轉載請註明:關東升的博客 在使用try進行錯誤處理的時候,常常會看到try後面跟有問號(?)或感嘆號(!),他們有什麽差別呢?1.使用try? try?會將錯誤轉換為可選值,當調

開始Kotlin-類對象5

int 文件中 cls 間接 main dcl this 調用 定義類 從零開始學Kotlin基礎篇系列文章 定義一個類 定義一個類,使用關鍵字class聲明,後面跟類名(不使用new) class demo5 {//定義一個類,使用關鍵字class聲明,後面跟類名

開始 Web 之 DOMDOM的概念對標簽操作

關註 1.5 pan 什麽 tin p標簽 nod text == 大家好,這裏是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關註。在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,

開始 Web 之 BOMoffsetscroll變速動畫函數

樣式 清理 java mar dde sof mov har width 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:

雲計算開始雲計算的應用領域

box 中心 開始 三層 發展 有意思 ice dropbox 網絡架構 雲計算這個名詞來自於Google,而最早的雲計算產品來自於Amazon。有意思的是,Google在2006年正式提出雲計算這個名詞的時候,Amazon的雲計算產品AWS(Amazon Web Serv

開始 Web 之 JS 高級原型原型的繼承

console 多少 程序 cat hub inf 當前 構造函數 調用 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園: