㈠ 順豐如何看是不是信息加密
順豐如何看信息加密要打開電腦上的搜索引擎。
1、在搜索框內輸入順豐速運點擊搜索。
2、在順豐速運中輸入豐密運單號,點擊立即查詢即可。順豐是國內的快遞物流綜合服務商,總部位於深圳,經過多年發展,已初步建立為客戶提供一體化綜合物流解決方案的能力,不僅提供配送端的物流服務,還延伸至價值鏈前端的產、供、銷、配等環節,從消費者需求出發,以數據為牽引,利用大數據分析和雲計算技術,為客戶提供倉儲管理、銷售預測、大數據分析、金融管理等解決方案。
㈡ 加密技術06-加密總結
對稱密碼是一種用相同的密鑰進行加密和解密的技術,用於確保消息的機密性。在對稱密碼的演算法方面,目前主要使用的是 AES。盡管對稱密碼能夠確保消息的機密性,但需要解決將解密密鑰配送給接受者的密鑰配送問題。
主要演算法
DES
數據加密標准(英語:Data Encryption Standard,縮寫為 DES)是一種對稱密鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位密鑰的對稱演算法。
DES現在已經不是一種安全的加密方法,主要因為它使用的56位密鑰過短。
原理請參考: 加密技術01-對稱加密-DES原理
3DES
三重數據加密演算法(英語:Triple Data Encryption Algorithm,縮寫為TDEA,Triple DEA),或稱3DES(Triple DES),是一種對稱密鑰加密塊密碼,相當於是對每個數據塊應用三次DES演算法。由於計算機運算能力的增強,原版DES由於密鑰長度過低容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。
注意:有3個獨立密鑰的3DES的密鑰安全性為168位,但由於中途相遇攻擊(知道明文和密文),它的有效安全性僅為112位。
3DES使用「密鑰包」,其包含3個DES密鑰,K1,K2和K3,均為56位(除去奇偶校驗位)。
密文 = E k3 (D k2 (E k1 (明文)))
而解密則為其反過程:
明文 = D k3 (E k2 (D k1 (密文)))
AES
AES 全稱 Advanced Encryption Standard(高級加密標准)。它的出現主要是為了取代 DES 加密演算法的,因為 DES 演算法的密鑰長度是 56 位,因此演算法的理論安全強度是 56 位。於是 1997 年 1 月 2 號,美國國家標准技術研究所宣布希望徵集高級加密標准,用以取代 DES。AES 也得到了全世界很多密碼工作者的響應,先後有很多人提交了自己設計的演算法。最終有5個候選演算法進入最後一輪:Rijndael,Serpent,Twofish,RC6 和 MARS。最終經過安全性分析、軟硬體性能評估等嚴格的步驟,Rijndael 演算法獲勝。
AES 密碼與分組密碼 Rijndael 基本上完全一致,Rijndael 分組大小和密鑰大小都可以為 128 位、192 位和 256 位。然而 AES 只要求分組大小為 128 位,因此只有分組長度為 128 位的 Rijndael 才稱為 AES 演算法。
本文 AES 默認是分組長度為 128 位的 Rijndael 演算法
原理請參考: 加密技術02-對稱加密-AES原理
演算法對比
公鑰密碼是一種用不同的密鑰進行加密和解密的技術,和對稱密碼一樣用於確保消息的機密性。使用最廣泛的一種公鑰密碼演算法是 RAS。和對稱密碼相比,公鑰密碼的速度非常慢,因此一般都會和對稱密碼一起組成混合密碼系統來使用。公鑰密碼能夠解決對稱密碼中的密鑰交換問題,但存在通過中間人攻擊被偽裝的風險,因此需要對帶有數字簽名的公鑰進行認證。
公鑰密碼學的概念是為了解決對稱密碼學中最困難的兩個問題而提出
應用場景
幾個誤解
主要演算法
Diffie–Hellman 密鑰交換
迪菲-赫爾曼密鑰交換(英語:Diffie–Hellman key exchange,縮寫為D-H) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。公鑰交換的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而這個密鑰交換方法,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表,也是在公開文獻中發布的第一個非對稱方案。
Diffie–Hellman 演算法的有效性是建立在計算離散對數很困難的基礎上。簡單地說,我們可如下定義離散對數。首先定義素數 p 的本原跟。素數 p 的本原根是一個整數,且其冪可以產生 1 到 p-1 之間所有整數,也就是說若 a 是素數 p 的本原根,則
a mod p, a 2 mod p,..., a p-1 mod p 各不相同,它是整數 1 到 p-1 的一個置換。
對任意整數 b 和素數 p 的本原跟 a,我們可以找到唯一的指數 i 使得
b ≡ a i (mod p) 其中 0 <= i <= p-1
其中 a, b, p 這些是公開的,i 是私有的,破解難度就是計算 i 的難度。
Elgamal
1985年,T.Elgamal 提出了一種基於離散對數的公開密鑰體制,一種與 Diffie-Hellman 密鑰分配體制密切相關。Elgamal 密碼體系應用於一些技術標准中,如數字簽名標准(DSS) 和 S/MIME 電子郵件標准。
基本原理就是利用 Diffie–Hellman 進行密鑰交換,假設交換的密鑰為 K,然後用 K 對要發送的消息 M,進行加密處理。
所以 Elgamal 的安全系數取決於 Diffie–Hellman 密鑰交換。
另外 Elgamal 加密後消息發送的長度會增加一倍。
RSA
MIT 的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在 1977 年提出並於 1978 年首次發表的演算法。RSA 是最早滿足要求的公鑰演算法之一,自誕生日起就成為被廣泛接受且被實現的通用的公鑰加密方法。
RSA 演算法的有效性主要依據是大數因式分解是很困難的。
原理請參考: 加密技術03-非對稱加密-RSA原理
ECC
大多數使用公鑰密碼學進行加密和數字簽名的產品和標准都使用 RSA 演算法。我們知道,為了保證 RSA 使用的安全性,最近這些年來密鑰的位數一直在增加,這對使用 RSA 的應用是很重的負擔,對進行大量安全交易的電子商務更是如此。近來,出現的一種具有強大競爭力的橢圓曲線密碼學(ECC)對 RSA 提出了挑戰。在標准化過程中,如關於公鑰密碼學的 IEEE P1363 標准中,人們也已考慮了 ECC。
與 RSA 相比,ECC 的主要誘人之處在於,它可以使用比 RSA 短得多的密鑰得到相同安全性,因此可以減少處理負荷。
ECC 比 RSA 或 Diffie-Hellman 原理復雜很多,本文就不多闡述了。
演算法對比
公鑰密碼體制的應用
密碼分析所需計算量( NIST SP-800-57 )
註:L=公鑰的大小,N=私鑰的大小
散列函數是一種將長消息轉換為短散列值的技術,用於確保消息的完整性。在散列演算法方面,SHA-1 曾被廣泛使用,但由於人們已經發現了一些針對該演算法理論上可行的攻擊方式,因此該演算法不應再被用於新的用途。今後我們應該主要使用的演算法包括目前已經在廣泛使用的 SHA-2,以及具有全新結構的 SHA-3 演算法。散列函數可以單獨使用,也可以作為消息認證、數字簽名以及偽隨機數生成器等技術的組成元素來使用。
主要應用
主要演算法
MD5
MD5消息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個 128 位( 16 位元組,被表示為 32 位十六進制數字)的散列值(hash value),用於確保信息傳輸完整一致。MD5 由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於 1992 年公開,用以取代 MD4 演算法。這套演算法的程序在 RFC 1321 中被加以規范。
2009年,中國科學院的謝濤和馮登國僅用了 2 20.96 的碰撞演算法復雜度,破解了MD5的碰撞抵抗,該攻擊在普通計算機上運行只需要數秒鍾。2011年,RFC 6151 禁止MD5用作密鑰散列消息認證碼。
原理請參考: 加密技術04-哈希演算法-MD5原理
SHA-1
SHA-1(英語:Secure Hash Algorithm 1,中文名:安全散列演算法1)是一種密碼散列函數,美國國家安全局設計,並由美國國家標准技術研究所(NIST)發布為聯邦資料處理標准(FIPS)。SHA-1可以生成一個被稱為消息摘要的160位(20位元組)散列值,散列值通常的呈現形式為40個十六進制數。
2005年,密碼分析人員發現了對SHA-1的有效攻擊方法,這表明該演算法可能不夠安全,不能繼續使用,自2010年以來,許多組織建議用SHA-2或SHA-3來替換SHA-1。Microsoft、Google以及Mozilla都宣布,它們旗下的瀏覽器將在2017年停止接受使用SHA-1演算法簽名的SSL證書。
2017年2月23日,CWI Amsterdam與Google宣布了一個成功的SHA-1碰撞攻擊,發布了兩份內容不同但SHA-1散列值相同的PDF文件作為概念證明。
2020年,針對SHA-1的選擇前綴沖突攻擊已經實際可行。建議盡可能用SHA-2或SHA-3取代SHA-1。
原理請參考: 加密技術05-哈希演算法-SHA系列原理
SHA-2
SHA-2,名稱來自於安全散列演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數演算法標准,由美國國家安全局研發,由美國國家標准與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演算法標准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
SHA-2 系列的演算法主要思路和 SHA-1 基本一致
原理請參考: 加密技術05-哈希演算法-SHA系列原理
SHA-3
SHA-3 第三代安全散列演算法(Secure Hash Algorithm 3),之前名為 Keccak 演算法。
Keccak 是一個加密散列演算法,由 Guido Bertoni,Joan Daemen,Michaël Peeters,以及 Gilles Van Assche 在 RadioGatún 上設計。
2012年10月2日,Keccak 被選為 NIST 散列函數競賽的勝利者。SHA-2 目前沒有出現明顯的弱點。由於對 MD5、SHA-0 和 SHA-1 出現成功的破解,NIST 感覺需要一個與之前演算法不同的,可替換的加密散列演算法,也就是現在的 SHA-3。
SHA-3 在2015年8月5日由 NIST 通過 FIPS 202 正式發表。
原理請參考: 加密技術05-哈希演算法-SHA系列原理
演算法對比
㈢ 餓了么外賣,電話加密是什麼
隱藏真實聯系方式。餓了么外賣電話加密是一種安全裝置方式,是指隱藏真實聯系方式,「餓了么」是2008年創立的本地生扒茄活平台,主營在線禪此派外賣、新零售、即時配送和餐飲供賀賀應鏈等業務。
㈣ 在外賣、快遞等配送服務中,用戶個人信息安全如何保證
隨著電商行業的發展,越來越多的人會選擇在平台上留下自己的聯系方式,然後讓商家將自己購買的商品交給配送人員,以便讓配送人員送到自己的家中。這樣確實很方便,於是越來越多的人喜歡在網上訂餐,或者在網上買東西。可是,也有越來越多的網友反映,自己接到詐騙電話以及推銷電話的頻率越來越高了。於是,如何保護自己的信息成了人們熱議的焦點。
網友保護自己信息的方式五花八門,有許多方法可謂是十分機智了。我們在使用快遞或者外賣服務的時候確實應該考慮到信息安全問題,避免因為自己的個人信息泄露導致一些壞人有機可乘,繼而傷害到自己或者家人。
㈤ 寄快遞信息加密收件人能收到嗎
如果孫殲您鎮野在寄快遞時選擇了加密收件人信息,那麼收件人是可以正常接收到快遞的。一般來說,加密只會對個別敏感信息進行處理(例如手機號碼、地址等),而不會影響整個快遞流程。
具體來說,在使用某些物流公司的在線下單系統或者APP時,可能會提供「隱私保護」、「加密顯示」等選項。這些選項可以幫助用戶隱藏部分個人信息,並且僅在必要情況下才向相關工作人員展示。
需要注意的是,在使用此類功能時,請務必填寫准確無誤的聯系方式和地址御凱喊信息,並及時與收件人溝通確認。否則可能因為信息錯誤或者缺失而導致配送延遲、退回等問題。
㈥ 加密那些事--非對稱加密詳解
「非對稱加密也叫公鑰密碼:使用公鑰 加密 ,使用私鑰解密」
在對稱密碼中,由於加密和解密的密鑰是相同的,因此必須向接收者配送密鑰。用於解密的密鑰必須被配送給接收者,這一問題稱為密鑰配送問題。如果使用非對稱加密,則無需向接收者配送用於解密的密鑰,這樣就解決了密鑰配送的問題。
非對稱加密中,密鑰分為加密密鑰和解密密鑰兩種。發送者用加密密鑰對消息進行加密,接收者用解密密鑰對密文進行解密。需理解公鑰密碼,清楚地分加密密鑰和解密密鑰是非常重要的。加密密鑰是發送者加密時使用的,而解密密鑰則是接收者解密時使用的。
加密密鑰和解密密鑰的區別:
a.發送者只需要加密密鑰
b.接收者只需要解密密鑰
c.解密密鑰不可以被竊聽者獲取
d.加密密鑰被竊聽者獲取也沒關系
也就是說,解密密鑰從一開始就是由接收者自己保管的,因此只要將加密密鑰發給發送者就可以解決密鑰配送問題了,而根本不需要配送解密密鑰。
非對稱加密中,加密密鑰一般是公開的。真是由於加密密鑰可以任意公開,因此該密鑰被稱為公鑰(pulickey)。相對地解密密鑰是絕對不能公開的,這個密鑰只能由你自己來使用,因此稱為私鑰(privatekey)****。私鑰不可以被別人知道,也不可以將它發送給別人。
公鑰和私鑰是"一一對應的",一對公鑰和私鑰統稱為密鑰對(keypair)。由公鑰進行加密的密文,必須使用與該公鑰配對的私鑰才能解密。密鑰對中的兩個密鑰之間具有非常密切的的關系(數學上的關系)。因此公鑰和私鑰不能分別單獨生成。
非對稱加密通訊流程
假設A要給B發一條信息,A是發送者,B是接收者,竊聽者C可以竊聽他們之間的通訊內容。
1.B生成一個包含公鑰和私鑰的密鑰對
私鑰由B自行妥善保管
2.B將自己的公鑰發送給A
B的公鑰被C截獲也沒關系。將公鑰發給A,表示B請A用這個公鑰對消息進行加密並發送給他。
3.A用B的公鑰對消息進行加密
加密後的消息只有B的私鑰才能夠解密。
雖然A擁有B的公鑰,但用B的公鑰是無法對密文進行解密的。
4.A將密文發送給B
密文被C截獲也沒關系,C可能擁有B的公鑰,但是B的公鑰是無法進行解密的。
5.B用自己的私鑰對密文進行解密。
參考下圖
RSA是一種非對稱加密演算法,它的名字由三位開發者。即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母組成的(Rivest-Shamir-Leonard)
RSA的加密工程可以用下來公式來表達,如下。
也就是說,RSA的密文是對代表明文的數字的E次方求modN的結果。換句話說,就是將明文自己做E次乘法,然後將其結果除以N求余數,這個余數就是密文。
RSA的加密是求明文的E次方modN,因此只要知道E和N這兩個數,任何人都可以完成加密的運算。所以說E和N是RSA加密的密鑰。也就是說E和N的組合就是公鑰
有一個很容易引起誤解的地方需要大家注意一一E和N這兩個數並不是密鑰對(公鑰和私鑰的密鑰對)。E和N兩個數才組成了一個公鑰,因此我們一般會寫成 「公鑰是(E,N)」 或者 「公鑰是{E, N}" 這樣的形式,將E和N用括弧括起來。
1.3.2 RSA解密
RSA的解密和加密一樣簡單,可以用下面的公式來表達:
也就是說,對表示密文的數字的D次方求modN就可以得到明文。換句話說,將密文自己做D次乘法,在對其結果除以N求余數,就可以得到明文 。
這里所使用的數字N和加密時使用的數字N是相同的。數D和數N組合起來就是RSA的解密密鑰,因此D和N的組合就是私鑰。只有知道D和N兩個數的人才能夠完成解密的運算。
大家應該已經注意到,在RSA中,加密和解密的形式是相同的。加密是求 "E次方的mod N」,而解密則是求 "D次方的modN」,這真是太美妙了。
當然,D也並不是隨便什麼數都可以的,作為解密密鑰的D,和數字E有著相當緊密的聯系。否則,用E加密的結果可以用D來解密這樣的機制是無法實現的。
順便說一句, D是解密〈Decryption)的首字母,N是數字(Number)的首字母 。
RSA加密和解密
聲明該文章僅做個人學習使用,無任何商業用途。
原文鏈接:https://blog.csdn.net/atlansi/article/details/111144109
㈦ 前後端分類,數據傳輸問題
目前我所知道的項目開發中,基本上都是前後端分離的。這就出現了數據傳輸的問題,前端傳給伺服器 或者 伺服器傳給前端的數據都是容易被別人竊取的。這里就要對傳輸的數據進行加解密,以保證數據安全。
下面介紹兩種前後端數據傳輸的方式
前後端約定一個key,將請求參數按照字母排序拼接成一個字元串(通常都是ASCll排序),然後拼接上key,最後用MD5或者SHA進行加密,得到一個加密的簽名sign,再把sign作為最後一個參數傳到服務端。
服務端拿到前端傳過來的結果之後,也將參數(排除sign)按照順序拼接成一個字元串,再拼接上key,再用MD5或者SHA進行加密,也得到了一個新的sign,服務端比較這兩個sign,如果相同就說明傳回來的數據沒有問題,如果不相同,說明數據被串改了。
例如:
傳遞的參數是
id=5&age=10
現在通過加簽 應該傳遞的參數為
id=5&age=10&sign=MD5(age=10&id=5)
服務端拿到的就是
id=5&age=10&sign=MD5(age=10&id=5)
服務端經過篩選參數,得到 id=5&age=10 ,然後進行排序得到 age=10&id=5 ,再MD5得到sign,頌敏兩個sign進行比較
目前我知道的根據秘鑰的使用方法,可以將密碼分為兩種
在對稱密碼中,加密、解密時使用的是同一個密鑰,我們常用的AES演算法就是對稱密碼演算法。具體AES演算法大家自己網路就好了
但是通常使用對稱密碼時,就會有秘鑰配送問題。
例:發送者A將使用對稱密碼加密過得信息發送給接收者B,只有將秘鑰發送給接收者B,B才能進行解密,這里A發送秘鑰給B的過程中,就容易被別人竊取秘鑰,別人拿著秘鑰也能進行解密。
如何解決秘鑰配送問題
我知道的幾種解決方法
公鑰密碼
公鑰密碼中,密鑰分為加密密鑰、解密密鑰2種,它們並不是同一個密鑰。
目前使用最廣泛的公鑰密碼演算法是RSA
加密密鑰,一般是公開的,因此該密鑰稱為公鑰(public key)
解密密鑰,由消息接收者自己保管的,不能公開,因此也稱為私鑰(private key)
公鑰和私鑰是一 一對應的,是不能單獨生成的,一對公鑰和密鑰統稱為密鑰對(key pair)
由公鑰加密的密文,必須使用與該公鑰對應的私鑰才能解密
由私鑰加密的密文,必野或枝須使用與該私鑰對應的公鑰才能解密
1.由消息的接收者,生成一對公鑰、私鑰
2.將公鑰發給消息的發送者
3.消息的發送者使用公鑰加密消息
混合密碼系統
不能很好地解決密鑰配送問題
加密解密速度比較慢
混合密碼系統,是將對稱密碼和公鑰密碼的優勢相團銀結合的方法,解決了公鑰密碼速度慢的問題,並通過公鑰密碼解決了對稱密碼的密鑰配送問題
會話密鑰(session key)為本次通信隨機生成的臨時密鑰,作為對稱密碼的密鑰,用於加密信息,提高速度
發送出去的內容包括
前端A >>>>> 伺服器端B
發送過程,加密過程
接收過程,解密過程
文章參考了 猿天地的再談前後端API簽名安全? 和李明傑的底層原理iOS簽名機制
㈧ 京東快遞農村送貨上門嗎
可以。
以重慶下庄村為例,京東快遞農村可以實現送貨上門。2021年3月,家住重慶市巫山縣竹賢鄉下庄村的居民收到了其數天前在京東商城下單的一套護膚品。讓其沒想到的是,以往都要托村民幫著去隔壁鎮上取貨,這次竟然快遞直接送到家則孝賀門口。
由於下庄村位置偏遠,很多快遞公司都只能把商品送到相鄰的騾坪鎮上,村民只能自取或者託人順路帶回來,來回需要2個小時。此番送貨,讓京東物流成為巫山縣下庄村第一個送貨上門的企業。
京東快遞鄉鎮村落配送
京東快遞巫山縣營業部負責人李孫派宏偉介紹,京東快遞加速網路下沉,將觸角延伸至一些偏僻村莊,2021年2月底,包括下庄村在內的幾個偏遠村落實現了送貨上門。此次送貨,他中午10時就從縣城出發了,連翻兩座大山,70多公里的路程,開了3個小時車才到。
為解決農村地區末端慎森配送的難題,近年來京東快遞加快網路下沉,堅持送貨上門,通過建設中轉場地、投入智能設備與加密配送班次等舉措,面向低線區縣、鄉鎮村落布局物流基礎設施建設。
同時,創新推出鄉村共配模式,在全國700多個物流覆蓋成本較高和時效較差的偏遠鄉鎮地區,建設以共同配送為基礎的末端綜合性服務站,全面提升快遞服務時效。
以上內容參考中國交通新聞網——「天坑村」也能收快遞了
㈨ 圖文徹底搞懂非對稱加密(公鑰密鑰)
前文詳細講解了對稱加密及演算法原理。那麼是不是對稱加密就萬無一失了呢?對稱加密有一個天然的缺點,就是加密方和解密方都要持有同樣的密鑰。你可以能會提出疑問:既然要加、解密,當然雙方都要持有密鑰,這有什麼問題呢?別急,我們繼續往下看。
我們先看一個例子,小明和小紅要進行通信,但是不想被其他人知道通信的內容,所以雙方決定採用對稱加密的方式。他們做了下面的事情:
1、雙方商定了加密和解密的演算法
2、雙方確定密鑰
3、通信過程中採用這個密鑰進行加密和解密
這是不是一個看似完美的方案?但其中有一個步驟存在漏洞!
問題出在步驟2:雙方確定密鑰!
你肯定會問,雙方不確定密鑰,後面的加、解密怎麼做?
問題在於確定下來的密鑰如何讓雙方都知道。密鑰在傳遞過程中也是可能被盜取的!這里引出了一個經典問題:密鑰配送問題。
小明和小紅在商定密鑰的過程中肯定會多次溝通密鑰是什麼。即使單方一次確定下來,也要發給對方。加密是為了保證信息傳輸的安全,但密鑰本身也是信息,密鑰的傳輸安全又該如何保證呢?難不成還要為密鑰的傳輸再做一次加密?這樣不就陷入了死循環?
你是不是在想,密鑰即使被盜取,不還有加密演算法保證信息安全嗎?如果你真的有這個想法,那麼趕緊復習一下上一篇文章講的杜絕隱蔽式安全性。任何演算法最終都會被破譯,所以不能依賴演算法的復雜度來保證安全。
小明和小紅現在左右為難,想加密就要給對方發密鑰,但發密鑰又不能保證密鑰的安全。他們應該怎麼辦呢?
有如下幾種解決密鑰配送問題的方案:
非對稱加密也稱為公鑰密碼。我更願意用非對稱加密這種叫法。因為可以體現出加密和解密使用不同的密鑰。
對稱加密中,我們只需要一個密鑰,通信雙方同時持有。而非對稱加密需要4個密鑰。通信雙方各自准備一對公鑰和私鑰。其中公鑰是公開的,由信息接受方提供給信息發送方。公鑰用來對信息加密。私鑰由信息接受方保留,用來解密。既然公鑰是公開的,就不存在保密問題。也就是說非對稱加密完全不存在密鑰配送問題!你看,是不是完美解決了密鑰配送問題?
回到剛才的例子,小明和下紅經過研究發現非對稱加密能解決他們通信的安全問題,於是做了下面的事情:
1、小明確定了自己的私鑰 mPrivateKey,公鑰 mPublicKey。自己保留私鑰,將公鑰mPublicKey發給了小紅
2、小紅確定了自己的私鑰 hPrivateKey,公鑰 hPublicKey。自己保留私鑰,將公鑰 hPublicKey 發給了小明
3、小明發送信息 「周六早10點soho T1樓下見」,並且用小紅的公鑰 hPublicKey 進行加密。
4、小紅收到信息後用自己的私鑰 hPrivateKey 進行解密。然後回復 「收到,不要遲到」 並用小明的公鑰mPublicKey加密。
5、小明收到信息後用自己的私鑰 mPrivateKey 進行解密。讀取信息後心裡暗想:還提醒我不遲到?每次遲到的都是你吧?
以上過程是一次完整的request和response。通過這個例子我們梳理出一次信息傳輸的非對稱加、解密過程:
1、消息接收方准備好公鑰和私鑰
2、私鑰接收方自己留存、公鑰發布給消息發送方
3、消息發送方使用接收方公鑰對消息進行加密
4、消息接收方用自己的私鑰對消息解密
公鑰只能用做數據加密。公鑰加密的數據,只能用對應的私鑰才能解密。這是非對稱加密的核心概念。
下面我用一個更為形象的例子來幫助大家理解。
我有下圖這樣一個信箱。
由於我只想接收我期望與之通信的朋友信件。於是我在投遞口加了一把鎖,這把鎖的鑰匙(公鑰)我可以復制n份,發給我想接受其信件的人。只有這些人可以用這把鑰匙打開寄信口,把信件投入。
相信通過這個例子,可以幫助大家徹底理解公鑰和私鑰的概念。
RSA 是現在使用最為廣泛的非對稱加密演算法,本節我們來簡單介紹 RSA 加解密的過程。
RSA 加解密演算法其實很簡單:
密文=明文^E mod N
明文=密文^D mod N
RSA 演算法並不會像對稱加密一樣,用玩魔方的方式來打亂原始信息。RSA 加、解密中使用了是同樣的數 N。公鑰是公開的,意味著 N 也是公開的。所以私鑰也可以認為只是 D。
我們接下來看一看 N、E、D 是如何計算的。
1、求 N
首先需要准備兩個很大質數 a 和 b。太小容易破解,太大計算成本太高。我們可以用 512 bit 的數字,安全性要求高的可以使用 1024,2048 bit。
N=a*b
2、求 L
L 只是生成密鑰對過程中產生的數,並不參與加解密。L 是 (a-1) 和 (b-1) 的最小公倍數
3、求 E(公鑰)
E 有兩個限制:
1<E<
E和L的最大公約數為1
第一個條件限制了 E 的取值范圍,第二個條件是為了保證有與 E 對應的解密時用到的 D。
4、求 D(私鑰)
D 也有兩個限制條件:
1<D<L
E*D mod L = 1
第二個條件確保密文解密時能夠成功得到原來的明文。
由於原理涉及很多數學知識,這里就不展開細講,我們只需要了解這個過程中用到這幾個數字及公式。這是理解RSA 安全性的基礎。
由於 N 在公鑰中是公開的,那麼只需要破解 D,就可以解密得到明文。
在實際使用場景中,質數 a,b 一般至少1024 bit,那麼 N 的長度在 2048 bit 以上。D 的長度和 N 接近。以現在計算機的算力,暴力破解 D 是非常困難的。
公鑰是公開的,也就是說 E 和 N 是公開的,那麼是否可以通過 E 和 N 推斷出 D 呢?
E*D mod L = 1
想要推算出 D 就需要先推算出 L。L 是 (a-1) 和 (b-1) 的最小公倍數。想知道 L 就需要知道質數 a 和 b。破解者並不知道這兩個質數,想要破解也只能通過暴力破解。這和直接破解 D 的難度是一樣的。
等等,N 是公開的,而 N = a*b。那麼是否可以對 N 進行質因數分解求得 a 和 b 呢?好在人類還未發現高效進行質因數分解的方法,因此可以認為做質因數分解非常困難。
但是一旦某一天發現了快速做質因數分解的演算法,那麼 RSA 就不再安全
我們可以看出大質數 a 和 b 在 RSA 演算法中的重要性。保證 a 和 b 的安全也就確保了 RSA 演算法的安全性。a 和 b 是通過偽隨機生成器生成的。一旦偽隨機數生成器的演算法有問題,導致隨機性很差或者可以被推斷出來。那麼 RSA 的安全性將被徹底破壞。
中間人攻擊指的是在通信雙方的通道上,混入攻擊者。他對接收方偽裝成發送者,對放送放偽裝成接收者。
他監聽到雙方發送公鑰時,偷偷將消息篡改,發送自己的公鑰給雙方。然後自己則保存下來雙方的公鑰。
如此操作後,雙方加密使用的都是攻擊者的公鑰,那麼後面所有的通信,攻擊者都可以在攔截後進行解密,並且篡改信息內容再用接收方公鑰加密。而接收方拿到的將會是篡改後的信息。實際上,發送和接收方都是在和中間人通信。
要防範中間人,我們需要使用公鑰證書。這部分內容在下一篇文章里會做介紹。
和對稱加密相比較,非對稱加密有如下特點:
1、非對稱加密解決了密碼配送問題
2、非對稱加密的處理速度只有對稱加密的幾百分之一。不適合對很長的消息做加密。
3、1024 bit 的 RSA不應該在被新的應用使用。至少要 2048 bit 的 RSA。
RSA 解決了密碼配送問題,但是效率更低。所以有些時候,根據需求可能會配合使用對稱和非對稱加密,形成混合密碼系統,各取所長。
最後提醒大家,RSA 還可以用於簽名,但要注意是私鑰簽名,公鑰驗簽。發信方用自己的私鑰簽名,收信方用對方公鑰驗簽。關於簽名,後面的文章會再詳細講解。
㈩ 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】進行數字簽名