公鑰加密、數字簽名、訊息認證
網路安全的幾個問題
一、網路是開放的,在上面要傳送一段內容,隨時可能被其他人攔截看到,因此需要加密。
最初想到的是對稱加密,可以通過同一個金鑰加密,也可以通過同一個金鑰解密。(比如加密字串,加密時每個字元ASCII碼同時加2,解密時ASCII同時減2,在這裡金鑰就是2,而ASCII的操作稱作加密解密演算法,加密前的字串稱為明文,加密後的字串稱為密文)
但是對稱加密有一個問題:通訊雙方在網路通訊之前,需要先知道加解密演算法和金鑰。在生活中我們可以通過打電話,或者見面之類的方式。但是每一次通訊都需要這樣交流一次,這顯然不是我們所期望的。
解決辦法便是公鑰加密。
二、接收方接收到一個密文,他並不知道是誰傳送給他的,或者說他無法確定是傳送方本人傳送的。黑客完全可以攔截髮送方的密文,然後傳送給接收方不同的密文,並自稱是接收方傳送的。
解決辦法便是數字簽名。
三、即使黑客無法解開密文,但是他還是可以攔截密文和修改密文的。倘若黑客不想讓接收方接收到正確的明文,每次都直接修改沒有破解的密文,接收方即使可以解密,但是由於密文已經被修改過,因此也得不到正確的明文。那麼接收方如何知道內容是否被修改過呢?
解決辦法便是訊息認證。
公鑰加密
公鑰加密中有兩個金鑰——公鑰和私鑰,使用公鑰進行加密的密文只能使用私鑰進行解密,通過私鑰進行加密的密文只能使用公鑰進行加密。
公鑰人人都可以得到,但是私鑰只有自己有。
加密過程如下圖,首先確認接收方是Bob,因此Bob擁有自己的私鑰,那麼傳送方就需要使用Bob的公鑰進行加密,在Bob接收到之後,直接用自己的私鑰解密即可得到明文。
數字簽名
由於接收方公鑰人人都可以獲得,因此人人都可以發訊息給接收方。那麼接收方如何確定接收方是本人呢?數字簽名就解決了這個問題。
在使用公鑰加密之前,首先使用自己的私鑰對明文進行加密。這樣接收方在使用自己私鑰解密之後,再使用接收方的公鑰進行解密,那麼正常情況下就可以得到正確的明文了,並且也確認了傳送方的身份。
那麼為什麼不是先用接收方公鑰加密,然後再用傳送方私鑰加密麼?
理論上也是可行的,但是就類似寫信一樣,一般我們簽名都會在信封內部,直接簽名在信封上的很少吧?
訊息認證
訊息認證的目的:如果密文被修改過了,那麼接收方可以通過認證技術知道自己的密文被修改過。
認證實現的方式理解也比較簡單:主要是通過認證函式,假設明文為M,認證函式生成的認證值為V,那麼最終傳送的內容就是M+V。
那麼什麼是認證函式呢?認證函式主要分為三類:
訊息加密函式:
用完整資訊的密文作為對資訊的認證。通過對明文M加密後生成V。接收方接收到訊息之後,把V解密,如果M和V解密後的內容相同,那麼內容就是沒有被修改過。
這種方法有一個很大的劣勢,比如明文的大小為1G,那麼生成的認證值也會為1G,而且由於本身明文比較大,加密過程也會比較耗時,所以這種方法認證的代價是比較大的。
訊息認證碼:
是金鑰和訊息的公開函式,產生一個固定長度的值V作為認證標識。接收方接收到訊息之後,仍然是通過這個公開函式得到認證標識,如果最終的結果和接收到的V相同,那麼內容就是沒有被修改過。
雜湊函式:
是一個公開函式,它將任意長的資訊對映成一個固定長度的資訊,作為認證值V,比如MD5。接收方接收到訊息,明文通過雜湊函式得到雜湊值,對比得到的V檢視是否相同,如果相同,那麼內容就是沒有被修改過。
相關文章
- 支付介面教程——公鑰與私鑰,雙鑰加密和數字簽名加密
- 對稱加密、非對稱加密、RSA、訊息摘要、數字簽名、數字證書與HTTPS簡介加密HTTP
- 證書的數字簽名和認證 (轉)
- Android 安全加密:數字簽名和數字證書Android加密
- Android安全加密:數字簽名和數字證書Android加密
- 加密與數字簽名加密
- 深入理解加密、解密、數字簽名和數字證書加密解密
- 3分鐘告訴你什麼是 非對稱加密、對稱加密、公鑰、私鑰、數字證書、數字簽名、資訊摘要、中間人攻擊、CA、根證書加密
- 安全基礎:數字信封、數字簽名、數字證書(加簽驗籤,加密解密)加密解密
- WHQL認證如何給驅動程式做數字簽名
- 蘋果ios簽名的公鑰與私鑰蘋果iOS
- SSH公鑰私鑰認證原理
- 區塊鏈鼻祖比特幣之3:驗證訊息真偽的數字簽名區塊鏈比特幣
- 實現HTTPS系列第二彈之【非對稱加密,公鑰私鑰,數字簽名,OpenSSL及HTTPS等概念簡介】HTTP加密
- Java 新增、驗證PDF 數字簽名Java
- win10 禁止驗證數字簽名方法 win10 如何禁用數字簽名Win10
- 數字簽名
- java使用RSA加密方式,實現數字簽名Java加密
- RSA加密解密及數字簽名Java實現加密解密Java
- 效能:驗證數字簽名導致卡死
- Java安全之對稱加密、非對稱加密、數字簽名Java加密
- 訊息認證碼
- 數字簽名原理
- Java 獲取PDF數字簽名證照資訊Java
- REST API簽名認證機制RESTAPI
- 如何進行UEFI簽名認證
- java和C#使用證照對引數簽名、加密JavaC#加密
- 為什麼我對簽名訊息的簽名驗證在PHP程式碼中未工作?PHP
- 公鑰加密之外加密
- 大話數字簽名
- Elgamal數字簽名原理GAM
- 數字簽名(java) (轉)Java
- 基於CA簽名的使用者公鑰管理
- .NET Core加解密實戰系列之——訊息摘要與數字簽名演算法解密演算法
- Web安全專業術語講解:金鑰、隨機數、雜湊值、簽名、數字證書、httpsWeb隨機HTTP
- 訊息選擇器和方法簽名
- MAC 碼(訊息認證碼)Mac
- C# 獲取PDF中的數字簽名證書C#