『壹』 使用非對稱加密及解密的過程詳解
前面我們知道對稱加密是對一份文件進行加密,且對應的只有一個密碼?例如:A有一份文件,她使用對稱加密演算法加密後希望發給B,那麼密碼肯定也要一起交給B!這中間就會出現安全隱患,如果密碼被第三方L嗅探到並截取,那麼加密的文件就赤裸裸的出現在L的面前。
如果A有很多文件需要加密並發送給很多人!那麼就會生成很多的密鑰,這么多的密鑰保管就成了一個很棘手的問題,況且還要把密鑰發給不同的人!這無疑增添了很多的風險!
如何能改善這種安全性不高的加密演算法,數學家們發現了另一種加密方式。稱之為《非對稱加密》asymmetric encryption。非對稱加密演算法需要兩個密鑰【公開密鑰】(publickey)和【私有密鑰】(privatekey)。下面簡稱【公匙】、【私匙】
【公鑰】與【私鑰】是一對,如果使用公開密匙對數據進行加密,那麼只有對應的私有密匙才能解密;相反,如果使用私有密匙對數據進行加密,那麼只有對應的公開密匙進行解密。因加密解密使用的是兩種不同的密匙,所以這種演算法稱之為【非對稱加密演算法】。
在使用非對稱加密前,A和B先各自生成一對公匙和私匙,然後把各自的公匙交給對方,並把自己的私匙妥善保管!如圖所示:
在A給B發送信息之前,首先使用B發給A的公匙對信息進行加密處理,然後發送給B,B在收到密文之後,使用自己的私匙解密;B在給A回復信息時,先使用A發來的公匙對回復信息加密,然後發出,A收到密文後使用自己的私匙解密即可!如圖所示:
『貳』 關於RSA中公鑰和私鑰的具體使用情況區分
公鑰和私鑰在一些銀行系統、第三方支付系統SDK中經常會遇到,剛接觸公鑰私鑰的朋友們估計很難區分兩者的區別。
RSA公鑰和私鑰是什麼?
首先來說,RSA是一種非對稱加密演算法,它是由三位數學家(Rivest、Shamir、Adleman)設計出來的。非對稱加密是相對於對稱加密而言的。對稱加密演算法是指加密解密使用的是同一個秘鑰,而非對稱加密是由兩個密鑰(公鑰、私鑰)來進行加密解密的,由此可見非對稱加密安全性更高。
公鑰顧名思義就是公開的密鑰會發放給多個持有人,而私鑰是私有密碼往往只有一個持有人。
公私鑰特性
公鑰和私鑰都可用於加密和解密
公鑰和私鑰都可以用於加解密操作,用公鑰加密的數據只能由對應的私鑰解密,反之亦然。雖說兩者都可用於加密,但是不同場景使用不同的密鑰來加密,規則如下:
1、私鑰用於簽名、公鑰用於驗簽
簽名和加密作用不同,簽名並不是為了保密,而是為了保證這個簽名是由特定的某個人簽名的,而不是被其它人偽造的簽名,所以私鑰的私有性就適合用在簽名用途上。
私鑰簽名後,只能由對應的公鑰解密,公鑰又是公開的(很多人可持有),所以這些人拿著公鑰來解密,解密成功後就能判斷出是持有私鑰的人做的簽名,驗證了身份合法性。
2、公鑰用於加密、私鑰用於解密,這才能起到加密作用
因為公鑰是公開的,很多人可以持有公鑰。若用私鑰加密,那所有持有公鑰的人都可以進行解密,這是不安全的!
若用公鑰加密,那隻能由私鑰解密,而私鑰是私有不公開的,只能由特定的私鑰持有人解密,保證的數據的安全性。
『叄』 非對稱加密演算法
非對稱加密演算法就是用兩個密鑰加密解密的演算法。
加密的傳輸過程分為兩部分,一部分為 身份認證 ,用戶鑒別這個用戶的真偽;另外一部分為 數據加密 ,用於數據的保密。這兩部分功能都需要用到非對稱加密技術。
首先是身份認證,通訊的數據可以這樣進行處理,將用戶的信息(用戶名、密碼等)用該用戶的私鑰進行加密,然後再進行傳輸,而在伺服器端會保存此用戶的公鑰,用此用戶的公鑰對傳過來的信息進行解密,就可以得到正確的明文,這樣就完成了一次安全的網路通訊。
通訊過程的示例如下圖所示,Alice用自己的私鑰對明文進行加密後傳輸到伺服器,伺服器上的用戶(例如Bob)擁有很多用戶的公鑰,因此使用Alice的公鑰對密文進行解密,如果密鑰正確的話,就可以解密出明文,也就完成了對Alice的身份認證。
然後是數據加密,數據加密和數據認證正好相反,使用接收方的公鑰對數據進行加密,傳輸的過程中,即使數據被黑客截獲,也無法使用這些密文,接收方收到密文後,用自己的私鑰對密文進行解密,從而完成了一次數據的加密傳輸。
通訊過程的示例如下圖所示,Alice需要發給Bob一段加密的信息,因此Alice就用Bob的公鑰對明文進行加密後傳輸給Bob,Bob收到信息後,使用自己的私鑰對密文進行解密,就可以解密出明文,也就完成了對Alice的發來密文的解密過程。
公鑰用於加密、私鑰用於解密,這才能起到加密作用
因為公鑰是公開的,很多人可以持有公鑰。若用私鑰加密,那所有持有公鑰的人都可以進行解密,這是不安全的!
若用公鑰加密,那隻能由私鑰解密,而私鑰是私有不公開的,只能由特定的私鑰持有人解密,保證的數據的安全性。
但是有另一種密鑰使用場景- 簽名和驗簽 :
私鑰用於簽名、公鑰用於驗簽
簽名和加密作用不同,簽名並不是為了保密,而是為了保證這個簽名是由特定的某個人簽名的,而不是被其它人偽造的簽名,所以私鑰的私有性就適合用在簽名用途上。
私鑰簽名後,只能由對應的公鑰解密,公鑰又是公開的(很多人可持有),所以這些人拿著公鑰來解密,解密成功後就能判斷出是持有私鑰的人做的簽名,驗證了身份合法性。
所以我理解,簽名和驗證簽就是身份認證的過程。
『肆』 公鑰、私鑰、哈希、加密演算法基礎概念
生活中我們對文件要簽名,簽名的字跡每個人不一樣,確保了獨特性,當然這還會有模仿,那麼對於重要文件再加蓋個手印,指紋是獨一無二的,保證了這份文件是我們個人所簽署的。
那麼在區塊鏈世界裡,對應的就是數字簽名,數字簽名涉及到公鑰、私鑰、哈希、加密演算法這些基礎概念。
首先加密演算法分為對稱加密演算法、非對稱加密演算法、哈希函數加密演算法三類。
所謂非對稱加密演算法,是指加密和解密用到的公鑰和私鑰是不同的,非對稱加密演算法依賴於求解一數學問題困難而驗證一數學問題簡單。
非對稱加密系統,加密的稱為公鑰,解密的稱為私鑰,公鑰加密,私鑰解密、私鑰簽名,公鑰驗證。
比特幣加密演算法一共有兩類:非對稱加密演算法(橢圓曲線加密演算法)和哈希演算法(SHA256,RIMPED160演算法)
舉一個例子來說明這個加密的過程:A給B發一個文件,B怎麼知道他接收的文件是A發的原始文件?
A可以這樣做,先對文件進行摘要處理(又稱Hash,常見的哈希演算法有MD5、SHA等)得到一串摘要信息,然後用自己的私鑰將摘要信息加密同文件發給B,B收到加密串和文件後,再用A的公鑰來解密加密串,得到原始文件的摘要信息,與此同時,對接收到的文件進行摘要處理,然後兩個摘要信息進行對比,如果自己算出的摘要信息與收到的摘要信息一致,說明文件是A發過來的原始文件,沒有被篡改。否則,就是被改過的。
數字簽名有兩個作用:
一是能確定消息確實是由發送方簽名並發出來的;
二是數字簽名能確定消息的完整性。
私鑰用來創建一個數字簽名,公鑰用來讓其他人核對私人密鑰,
而數字簽名做為一個媒介,證明你擁有密碼,同時並不要求你將密碼展示出來。
以下為概念的定義:
哈希(Hash):
二進制輸入數據的一種數字指紋。
它是一種函數,通過它可以把任何數字或者字元串輸入轉化成一個固定長度的輸出,它是單向輸出,即非常難通過反向推導出輸入值。
舉一個簡單的哈希函數的例子,比如數字17202的平方根是131.15639519291463,通過一個簡單的哈希函數的輸出,它給出這個計算結果的後面幾位小數,如後幾位的9291463,通過結果9291463我們幾乎不可能推算出它是哪個輸入值的輸出。
現代加密哈希比如像SHA-256,比上面這個例子要復雜的多,相應它的安全性也更高,哈希用於指代這樣一個函數的輸出值。
私鑰(Private key):
用來解鎖對應(錢包)地址的一串字元,例如+。
公鑰(Public keycryptography):
加密系統是一種加密手段,它的每一個私鑰都有一個相對應的公鑰,從公鑰我們不能推算出私鑰,並且被用其中一個密鑰加密了的數據,可以被另外一個相對應的密鑰解密。這套系統使得你可以先公布一個公鑰給所有人,然後所有人就可以發送加密後的信息給你,而不需要預先交換密鑰。
數字簽名(Digital signature):
Digital signature數字簽名是這樣一個東西,它可以被附著在一條消息後面,證明這條消息的發送者就是和某個公鑰相對應的一個私鑰的所有人,同時可以保證私鑰的秘密性。某人在檢查簽名的時候,將會使用公鑰來解密被加密了的哈希值(譯者註:這個哈希值是數據通過哈希運算得到的),並檢查結果是否和這條信息的哈希值相吻合。如果信息被改動過,或者私鑰是錯誤的話,哈希值就不會匹配。在比特幣網路以外的世界,簽名常常用於驗證信息發送者的身份 – 人們公布他們自己的公鑰,然後發送可以被公鑰所驗證的,已經通過私鑰加密過的信息。
加密演算法(encryption algorithm):
是一個函數,它使用一個加密鑰匙,把一條信息轉化成一串不可閱讀的看似隨機的字元串,這個流程是不可逆的,除非是知道私鑰匙的人來操作。加密使得私密數據通過公共的網際網路傳輸的時候不需要冒嚴重的被第三方知道傳輸的內容的風險。
哈希演算法的大致加密流程
1、對原文進行補充和分割處理(一般分給為多個512位的文本,並進一步分割為16個32位的整數)。
2、初始化哈希值(一般分割為多個32位整數,例如SHA256就是256位的哈希值分解成8個32位整數)。
3、對哈希值進行計算(依賴於不同演算法進行不同輪數的計算,每個512位文本都要經過這些輪數的計算)。
區塊鏈中每一個數據塊中包含了一次網路交易的信息,產生相關聯數據塊所使用的就是非對稱加密技術。非對密加密技術的作用是驗證信息的有效性和生成下一個區塊,區塊鏈上網路交易的信息是公開透明的,但是用戶的身份信息是被高度加密的,只有經過用戶授權,區塊鏈才能得到該身份信息,從而保證了數據的安生性和個人信息的隱私性。
公鑰和私鑰在非對稱加密機制里是成對存在的,公鑰和私鑰可以去相互驗證對方,那麼在比特幣的世界裡面,我們可以把地址理解為公鑰,可以把簽名、輸密碼的過程理解為私鑰的簽名。
每個礦工在拿到一筆轉賬交易時候都可以驗證公鑰和私鑰到底是不是匹配的,如果他們是匹配的,這筆交易就是合法的,這樣每一個人只需要保管好TA自己的私鑰,知道自己的比特幣地址和對方的比特幣地址就能夠安全的將比特幣進行轉賬,不需要一個中心化的機構來驗證對方發的比特幣是不是真的。
『伍』 sm2加密演算法為什麼要驗證公鑰
SM2是國家密碼管理局於2010年12月17日發布的橢圓曲線公鑰密碼演算法。公鑰密碼演算法屬於非對稱加密演算法,常見的非對稱加密演算法還有:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。
非對稱加密演算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰相輔相成成對使用,如果用公鑰對數據進行加密,只能用對應的私鑰才能解密,反之亦然。因為具備這種獨特的加解密特性,非對稱加密演算法不僅可實現數據的加密傳輸,還能對數據進行簽名和驗簽。
『陸』 什麼是非對稱加密
MD5
\PGP這類的都屬於非對稱加密.就是加密簡單,解密(破解)困難.
『柒』 非對稱加密演算法 (RSA、DSA)概述
非對稱加密演算法系列文章,推薦閱讀順序:
非對稱加密需要兩個密鑰:公鑰 (publickey) 和私鑰 (privatekey)。公鑰和私鑰是一對,如果用公鑰對數據加密,那麼只能用對應的私鑰解密。如果用私鑰對數據加密,只能用對應的公鑰進行解密。因為加密和解密用的是不同的密鑰,所以稱為非對稱加密。
對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
『捌』 非對稱加密中的公私鑰究竟是如何工作的
一直以來,對於加解密這塊接觸的非常少,遇到問題也只能咨詢同事,尷尬的是越解釋越糊塗,考慮到網路安全和數據加密也是微服務開發中的一個重要環節,同時為了盡可能弄明白加解密這塊,遂將一些有用的思考整理下來,分享給大家。
在加解密的領域中,非對稱加密(Asymmetric Cryptographic Algorithm)已經滲入到網路交互的各個環節中了,我們都知道其中主流的RSA加密演算法包含一對公私鑰(Public Key & Private Key),但他們究竟是如何一起工作的?
下面會用微服務對接為例子來解釋公私鑰的交互過程。
正如在圖中看到的,在服務雙方對接之前,雙方需要交換各自的公鑰,這樣Service A就會有:
下面開始交互過程。
這里解釋一下,「數據簽名/加簽」其實就是用自己的私鑰去給數據Hash做一層加密,對方在收到數據簽名的時候,可以使用對方的公鑰來解密這個簽名,就會得到來自對方的數據Hash,緊接著用自己的私鑰解密出數據並Hash,來比較兩個Hash數據看是否一致來確認是否有被第三方篡改。
在Service B收到Service A的請求後,它需要先使用B_private.key 來解密Data得到明文數據,然後使用A_public.key來驗證簽名,對比簽名中的Hash和自己手上的數據Hash是否一致,這就是Service B中的驗簽流程。
在驗簽和解密通過後,它就可以繼續走自己的業務邏輯了。
對於Service B往Service A發送請求,和上面的流程一樣只是流程方向反過來了。