A. iOS中的簽名機制
說到簽名機制,首先要了解一下 加密解密 ,簽名文件就是 加密解密 的過程。
加密 是將明文信息改變為難以讀取的密文內容,使之不可讀的過程。
解密 是通過特殊的對象,將密文還原為正常可讀的內容的過程。而在這個過程中,我們所使用的方法,就是加密解密演算法。
加密分為 對稱加密 與 非對稱加密(公開密鑰加密) 。
對稱加密就是加密和解密使用的都是同一套密鑰
常見的對稱密碼演算法有:
如下圖,在使用對稱密碼時,一定會遇到密鑰配送問題, 假設,Alice將使用對稱密碼加密過的消息發給了Bob, 只有將密鑰發送給Bob,Bob才能完成解密, 在發送密鑰過程中,可能會被Eve竊取密鑰,最後Eve也能完成解密。
加密和解密使用的不是同一個密鑰,即為非對稱加密演算法,也稱公開密鑰加密;
公鑰密碼中,密鑰分為加密密鑰、解密密鑰2種,它們並不是同一個密鑰, 公鑰密碼也被稱為非對稱密碼銀虧(Asymmetric Cryptography)
在公鑰密碼中:
加密密鑰 ,一般是公開的,因此該密鑰稱為 公鑰 (public key)
解密密鑰 ,由消息接收者自己保管的,不能公開,因此也稱為 私鑰 (private key) 公鑰和私鑰是一 一對應的,是不能單獨生成的,一對公鑰和密鑰統稱為密鑰對(key pair)
這樣就能 解決秘鑰配送的問題 了,如下圖:
上圖解析:
這其中如果有第三者竊聽,只有第2步和第4步能夠監聽數據,由於Bob公鑰是公開的誰都可以獲取,那麼第二步也不用擔心被誰獲取,第4步如果數據被第三者截獲,那麼他看到的也是加密後的數據,由於他沒有Bob的私鑰,那麼他也無法知道消息的真實內容。而且他即使篡改密文消息也無任何意義。
雖然非對稱加密解決了密鑰配送問題,但是它的加解密速度較慢,下面我們總結一下對稱和非對稱加密的優缺點:
混合密碼 系統,是將對稱密碼和公鑰密碼的優勢相結合的方法:
為本次通信隨機生成的臨時密鑰; 作為對稱密碼的密鑰,用於加密消息,提高速度
首先,消息發送者要擁有消息接收者的公鑰; 生成會話密鑰,作為對稱密碼的密鑰,加密消息; 用消息接收者的公鑰,加密會話密鑰; 將前2步生成的加密結果,一並發給消息接收者。
發送出去的內容包括
用會話密鑰加密的消息(加密方法:對稱密碼)
用公鑰加密的謹搏吵會話密鑰(加密方法:公鑰密碼)
1 消息接收者用自己的私鑰解密出會話密鑰
2 再用第1步解密出來的會話密鑰,解密消息
發送過程,加密過程
接收過程,解密過程
1.Bob利用自己的私鑰解密會話密鑰(使用的是公鑰密碼解密,也就是非對稱密碼解密)
2.Bob利用會話密鑰解密發送過來的消息(使用的是對稱密碼解密)
上面的加密演算法解決了數據傳輸的安全問題,那麼 數據的完整性 是沒法驗證的,就是我這個數據有沒有被改過,因為公鑰大家都能獲取,如果有中間人攔截了消息,並改動了內容。那麼我們如何驗證這個 消息有沒有變動 呢?
單向散列函數 ,又稱單向 Hash函數 、 雜湊函數 ,就是把任意長的輸入消息串變化成 固定長的輸出串 且由輸出串難以得到輸入串的一種函數。這個輸出串稱為該消息的散列值。一般用於產生消息摘要,密鑰加密等
單向散列函數,可以根據根據消息內容計算出散列值 散列祥侍值的長度和消息的長度無關 ,無論消息是1bit、10M、100G,單向散列函數都會計算出 固定長度的散列值 。
單向散列函數 ,又被稱為 消息摘要函數 (message digest function),哈希函數輸出的散列值,也被稱為消息摘要(message digest)、指紋(fingerprint)
MD4、MD5 產生128bit的散列值,MD就是Message Digest的縮寫,目前已經不安全 Mac終端上默認可以使用md5命令
SHA-1 產生160bit的散列值,目前已經不安全
SHA-2 SHA-256、SHA-384、SHA-512,散列值長度分別是256bit、384bit、512bit
SHA-3 全新標准
不同的數據生成的散列值是不一樣的,只要你對一個文件改動過,那麼它的散列值就會發生變化,要想確定我們的數據有沒有發生變化,只要對比兩次散列值相不相同就可以了,我們常常做的登錄功能,在保存用戶密碼的時候就採用單項散列函數生成的值來進行保存,防止第三方人員串改密碼。
數據防篡改的技術我們知道了,在數據傳輸的過程中,我們對數據生成一個散列值,和發送的數據一並發給接收者,當接收者收到這個數據的時候,它拿接收到的數據重新生成散列值,然後跟接收到的散列值進行比較,就可以判斷這個數據有沒有被人改過。
到此我們通過混合密碼技術解決的傳輸數據的保密性,通過單項散列函數確定數據的一致性,但是還是沒有解決 中間人截獲篡改 的問題,因為散列函數中間人也可以重新生成一次,接下來我們就要講數字簽名了,他可以對消息發送者的真實性進行認證。
數字簽名 (又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。
它是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術來實現的,用於鑒別數字信息的方法。一套數字簽名通常定義兩種互補的運算,一個用於簽名,另一個用於驗證。數字簽名是非對稱密鑰加密技術與數字摘要技術的應用。
說白了就是用用消息發送者的私鑰進行簽名就是數字簽名
在數字簽名中,任何人都可以使用公鑰驗證簽名
在數字簽名技術中,有以下2種行為:
生成簽名 由消息的發送者完成,通過「簽名密鑰」生成
驗證簽名 由消息的接收者完成,通過「驗證密鑰」驗證
數字簽名由於是消息發送者的私鑰進行簽名,消息發送者的私鑰只有他自己擁有,別人是沒有的,從而我們通過私鑰進行簽名,別人通過消息發送者的公鑰就能確定消息發送者的真實身份。
接下來我們看一下數字簽名和公鑰密碼的對比:
上圖Alice將要發送的消息用自己的私鑰加密,發送給Bob,Bob用Alice的公鑰解密消息,這里其實有一個不好的點,就是如果Alice如果發送的消息比較大,比如發1GB的視頻文件,那這個簽名過程就太慢了,本身非對稱加密的速度就是比較慢的,
下面我們來看一個改進版的:
這里我們將要發送的消息先生成固定大小的散列值,然後再簽名,這樣簽名文件就小的多了,然後我們將消息和簽名一同發送該Bob,然後Bob再用公鑰解密 對比等。
下面有關數字簽名的一些點進行一下說明:
1 如果有人篡改了文件內容或者簽名內容,會是什麼結果? 結果是:簽名驗證失敗,證明內容會篡改
2 數字簽名不能保證機密性? 數字簽名的作用不是為了保證機密性,僅僅是為了能夠識別內容有沒有被篡改
3 數字簽名的作用
數字簽名是能確定消息發送者,前提是你要確定你獲取的公鑰是確定是消息發送者的,如果你拿到的公鑰是中間人偽造的,那麼你就無法驗證消息發送者的真實性了,就如下圖:
[圖片上傳中...(image-b6d6e1-1614756605461-3)]
A問B要公鑰,M從監聽到了中間,B給A發的公鑰被M攔截了並保存,M把他自己的公鑰給了A,A以為這個公鑰是B的,A用公鑰加密發消息給B,M攔截然後用自己的私鑰解密,修改消息內容後,然後用保存的公鑰加密把消息發送給B,B解密消息。A,和B都以為是正常通信的,但消息確實不是那個消息了,那麼如何確定公鑰合法?也就是如何確定這個公鑰就是B的呢?
接下來就是我們要講的證書了,我們引入一個第三方權威機構來認正,說這個公鑰就是B的。接下來我們來看一下。
CA是證書的簽發機構,它是公鑰基礎設施(Public Key Infrastructure,PKI)的核心。CA是負責簽發證書、認證證書、管理已頒發證書的機關。
CA 擁有一個證書(內含公鑰和私鑰)。網上的公眾用戶通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的證書(含公鑰),用以驗證它所簽發的證書,密碼學中的證書,全稱叫公鑰證書(Public-key Certificate,PKC),跟駕駛證類似 裡面有姓名、郵箱等個人信息,以及此人的公鑰; 並由認證機構(Certificate Authority,CA)施加數字簽名。
圖已經表示的很清楚了,消息發送者先向CA機構 注冊自己的證書,那麼任何拿到消息發送者的公鑰都可以向CA進行驗證公鑰的真實性。
首先我們要知道iOS簽名機制的作用是什麼?
保證安裝到用戶手機上的APP都是經過Apple官方允許的
不管是真機調試,還是發布APP,開發者都需要經過一系列復雜的步驟:
大致如下圖:
[圖片上傳中...(image-169a4f-1614756605461-0)]
總結:
1、.cerSigningRequest文件 : Mac公鑰
2、.cer文件:利用Apple私鑰(CA),對Mac公鑰生成了數字簽名
3、.mobileprovision : 利用Apple私鑰,對【.cer證書 + devices + AppID + entitlements】進行數字簽名
B. 簡要說說對稱加密和非對稱加密的原理以及區別是什麼
對稱加密的原理是數據發送方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。接收方收到密文後,若想解讀原文,則需要使用加密密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。
非對稱加密的原理是甲方首先生成一對密鑰同時將其中的一把作為公開密鑰;得到公開密鑰的乙方再使用該密鑰對需要加密的信息進行加密後再發送給甲方;甲方再使用哪鍵另一把對應的私有密鑰對加密後的信息進行解密,這樣就實現了機密數據傳輸。
對稱加密和非對稱加密的區別為:密鑰不同、安全性不同、數字簽名不同。
一、密鑰不同
1、對稱加密:對稱加密加密和解密使用同一個密鑰。
2、非對稱加密:非對稱加密加密和解密所使用的不是同一個密鑰,需要兩個密鑰來進行加密和解密。
二、安全性不同
1、對基緩銷稱加密:對稱加密如果用於通過網路傳輸加密文件,那麼不管使用任何方法將密鑰告訴對方,都有可能被竊聽。
2、非對稱加密:非對稱加密因為它包含有兩個密鑰,且僅有其中的「公鑰」是可以被公開的,接收方只需要使用自己已持有的私鑰進行解密,這樣就可以很好的避免密鑰在傳輸過程中產生的安全問題。
三搏游、數字簽名不同
1、對稱加密:對稱加密不可以用於數字簽名和數字鑒別。
2、非對稱加密:非對稱加密可以用於數字簽名和數字鑒別。
C. 非對稱密碼演算法指的是什麼
非對稱加密演算法是一種密鑰的保密方法。
非對稱加密演算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。
非對稱加密演算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將公鑰公開,需要向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密後再發送給甲方;甲方再用自己私鑰對加密後的信息進行解密。甲方想要回復乙方時正好相反,使用乙方的公鑰對數據進行加密,同理,乙方使用自己的私鑰來進行解密。
另一方面,甲方可以使用自己的私鑰對機密信息進行簽名後再發送給乙方;乙方再用甲方的公鑰對甲方發送回來的數據進行驗簽。
甲方只能用其私鑰解密由其公鑰加密後的任何信息。 非對稱加密演算法的保密性比較好,它消除了最終用戶交換密鑰的需要。
非對稱密碼體制的特點:演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。
所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
D. 對稱加密、非對稱加密、數字簽名
通信雙方使用同一個密鑰,不同演算法工作。數據發送方使用密鑰和加密演算法對數據進行加密,數據接收方使用密鑰和解密演算法對密文進行解密,還原數據。
基本模型如下圖所示。
通信雙方使用不同的密鑰,相同的演算法工作。數據發送方持有公鑰,數據接收方持有私鑰。公鑰由數據接收方通過網路發送給數據發送方。數據發送方通過加密演算法和公鑰對數據進行加密,數據接收方通過加密演算法和私鑰對密文進行解密,還原數據。
基本模型如下圖所示。
數字簽名是安卓 APK 校驗安裝包是否被篡改、損壞的有效手段。數字簽名採用了非對稱加密 + Hash 兩種技術。具體原理參見下圖,主要是以下幾步。
E. 非對稱加密、SSH加密演算法、數字簽名簡介
非對稱加密演算法的核心源於數學問題,它存在公鑰和私鑰的概念,要完成加解密操作,需要兩個密鑰同時參與。我們常說的「公鑰加密,私鑰加密」或「私鑰加密, 公鑰解密」都屬於非對稱加密的范疇。公鑰加密的數據必須使用私鑰才可以解密,同樣,私鑰加密的數據也 只能通過公鑰進行解密。
相比對稱加密,非對稱加密的安全性得到了提升,但是也存在明顯的缺點,非對稱加解密的效率要遠遠小於對稱加解密。所以非對稱加密往往被用在一些安全性要求比較高的應用或領域中。
RSA加密演算法是一種典型的非對稱加密演算法,它基於大數的因式分解數學難題,它也是應用最廣泛的非對稱加密演算法,於1978年由美國麻省理工學院(MIT)的三位學者:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
它的原理較為簡單,我們假設有消息發送方A和消息接收方B,通過下面的幾個步驟,我們就可以完成消息的加密傳遞:
(1)消息發送方A在本地構建密鑰對,公鑰和私鑰;
(2)消息發送方A將產生的公鑰發送給消息接收方B;
(3)B向A發送數據時,通過公鑰進行加密,A接收到數據後通過私鑰進行解密,完成一次通信;
(4)反之,A向B發送數據時,通過私鑰對數據進行加密,B接收到數據後通過公鑰進行解密。
由於公鑰是消息發送方A暴露給消息接收方B的,所以這種方式也存在一定的安全隱患,如果公鑰在數據傳輸過程中泄漏,則A通過私鑰加密的數據就可能被解密。
如果要建立更安全的加密消息傳遞模型,需要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A通過B的公鑰對數據加密,B接收到消息通過B的私鑰進行解密,反之,B通過A的公鑰進行加密,A接收到消息後通過A的私鑰進行解密。
當然,這種方式可能存在數據傳遞被模擬的隱患,我們可以通過數字簽名等技術進行安全性的進一步提升。由於存在多次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。可以詳讀這兩篇文章:RSA 演算法原理 (一) (二)
在SSH安全協議的原理中, 是一種非對稱加密與對稱加密演算法的結合,先看下圖:
這里進行一下說明:
(1)首先服務端會通過非對稱加密,產生一個 公鑰 和 私鑰
(2)在客戶端發起請求時,服務端將 公鑰 暴露給客戶端,這個 公鑰 可以被任意暴露;
(3)客戶端在獲取 公鑰 後,會先產生一個由256位隨機數字組成的會話密鑰,這里稱為口令;
(4)客戶端通過 公鑰 將這個口令加密,發送給伺服器端;
(5)伺服器端通過 私鑰 進行解密,獲取到通訊口令;
之後,客戶端和服務端的信息傳遞,都通過這個口令進行對稱的加密。
這樣的設計在一定程度上提高了加解密的效率,不過,與客戶端服務端各構建一套密鑰對的加解密方式相比,在安全性上可能有所下降。在上面所述的通過口令進行加密的過程中,數據也是可以被竊聽的,不過由於密鑰是256個隨機數字,有10的256次方中組合方式,所以破解難度也很大。相對還是比較安全的。服務端和客戶端都提前知道了密鑰,SSH的這種方式,服務端是通過解密獲取到了密鑰。
現在知道了有非對稱加密這東西,那數字簽名是怎麼回事呢?
數字簽名的作用是我對某一份數據打個標記,表示我認可了這份數據(簽了個名),然後我發送給其他人,其他人可以知道這份數據是經過我認證的,數據沒有被篡改過。
有了上述非對稱加密演算法,就可以實現這個需求:
F. 如何利用非對稱密鑰加密演算法實現數字信封和數字簽名
不對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密演算法的基本原理是,如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然後利用收信方的公鑰來加密原文;收信方收到加密密文後,使用自己的私鑰才能解密密文。顯然,採用不對稱加密演算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱演算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。廣泛應用的不對稱加密演算法有RSA演算法和美國國家標准局提出的DSA