加密技術(shù)包括兩個元素:算法和密鑰蒜撮。
算法是將普通的信息或者可以理解的信息與一串?dāng)?shù)字(密鑰)結(jié)合叮雳,產(chǎn)生不可理解的密文的步驟温圆。
密鑰是用來對數(shù)據(jù)進(jìn)行編碼和解密的一種算法。
在安全保密中诲宇,可通過適當(dāng)?shù)蔫€加密技術(shù)和管理機制來保證網(wǎng)絡(luò)的信息通信安全际歼。
大綱介紹
常用的加密解密方法主要有以下加大類:
- 基本加密方法
- 對稱加密方法
- 非對稱加密方法
下面我們簡單介紹一下這幾種加密碼方法
加密解密技術(shù)
我們先來了解一下加密解密的技術(shù)。
數(shù)據(jù)加密和數(shù)據(jù)解密是一對逆過程姑蓝。
先來看加密解密的公式:
加密:
數(shù)據(jù)加密是用加密算法E和加密密鑰K1將明文P轉(zhuǎn)換成密文C 用上面公式表示鹅心。
解密:
數(shù)據(jù)解密是數(shù)據(jù)加密的逆過程, 解密算法D和解密密鑰K2獎密文C轉(zhuǎn)換成明文P。
通過下圖我們可以清晰的看到纺荧,數(shù)據(jù)加密及解密的整修過程:
發(fā)送端將明文P 通過加密算法E與加密密鑰Ke巴帮,生成密文C溯泣,然后傳輸?shù)浇邮斩耍邮斩耸盏矫芪暮笸ㄟ^解密算法D與解密密鑰Kd對密文C進(jìn)行解密榕茧,最終還原明文P。
知道了加密的整個過程客给,我們來看看上面所說的三種加密解密方式用押。
基本加密方法
基本加密方法只要分為:
-
位移法
- 按照一定的規(guī)則,重新安排明文中的比特或字符的順序來形成密文靶剑,而字符本身保持不變蜻拨。
例如:
hello world!
我們可以變?yōu)?lord l!oleh
, 只需要按照一定的規(guī)則解開就可以了。 -
置換法
- 按照一定的規(guī)則桩引,用一個字符去置換(替代)另一個字符來形成密文缎讼。
我們還是以
hello world!
為例,約定一個簡單的算法把h
變成9
坑匠,r
>c
,l
>#
血崭,那么得到的結(jié)果就是:9e##o woc##d!
解密把它逆過來就好了,非常簡單厘灼。
對稱加密技術(shù)
- 對稱密鑰加密 又稱為對稱加密夹纫、私鑰加密、共享密鑰加密设凹,是密碼學(xué)中的一類加密算法舰讹。
- 這類算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰闪朱。
- 實際上月匣,這組密鑰成為在兩個或多個成員間的共同秘密,以便維持專屬的通信聯(lián)系奋姿。
上面說得可能有點饒锄开,舉個簡單的例子: 假設(shè)小明與小紅在考試,他們相互約定了一個算法: 當(dāng)小明連續(xù)咳嗽三聲的時候小紅看著小明胀蛮,如果小明摸了下左耳朵院刁,那就說明小紅可以給小明傳答案了。如果沒有粪狼,那可能是小明感冒了... 然后怎么傳答案呢? 小紅摸左耳朵代表A, 摸右耳朵代表B退腥,左手摳鼻子代表C,右手摳鼻子代表D
怎么樣再榄,通過上面的個簡單的例子是不是比較好理解呢狡刘,對稱加密碼就是雙方約定好一個算法,通過這個算法進(jìn)行加密解密困鸥。
對稱加密類型
常用的對稱加密碼主要分為以下幾類:
- DES
- 三重DES(TDEA)或3DES
- RC-5
- IDEA
- AES
DES 主要采用替換和移位的方法加密嗅蔬,它用56位密鑰對64位二進(jìn)制數(shù)據(jù)進(jìn)行加密剑按,每次加密可對64位輸入數(shù)據(jù)進(jìn)行16輪編碼,經(jīng)一系列替換和移位后輸入的64位原始數(shù)據(jù)轉(zhuǎn)換成了不同的64位輸出數(shù)據(jù)澜术。DES算法運算速度快,密鑰產(chǎn)生容易艺蝴。
三重DES 在DES的基礎(chǔ)上采用了三重DES,用兩個56位的密鑰k1和k2. 發(fā)送方k1加密鸟废,k2解密猜敢,再使用k1加密。接收方則使用k1解密,k2加密盒延,再使用k1解密
RC-5 引入了一種新的密碼基本變換數(shù)據(jù)相依旋轉(zhuǎn)方法缩擂,即一個中間的字是另一個中間的低位所決定的循環(huán)移位結(jié)果,以提高密碼強度
IDEA 是國際數(shù)據(jù)加密算法 是在DES算法的基礎(chǔ)上發(fā)展而來添寺,類似于三重DES胯盯。密鑰長度為128位。
AES 基于排列和置換運算计露。提成列是對數(shù)據(jù)重新進(jìn)行安排博脑,置換是將一個數(shù)據(jù)單元替換成另一個”』担可以使用128,192,256們的密鑰趋厉,并且用128位(16字節(jié))分組加密和解密數(shù)據(jù)。
DES(數(shù)據(jù)加密標(biāo)準(zhǔn))
DES算法為密碼體制中的對稱密碼體制胶坠,又被稱為美國數(shù)據(jù)加密標(biāo)準(zhǔn)君账,是1972年美國IBM公司研制的對稱密碼體制加密算法。 明文按64位進(jìn)行分組沈善,密鑰長64位乡数,密鑰事實上是56位參與DES運算(第8、16闻牡、24净赴、32、40罩润、48玖翅、56、64位是校驗位割以, 使得每個密鑰都有奇數(shù)個1)分組后的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法金度。
下圖是它的加密流程:
DES的密鑰長度為56位,這意味著加密時存在256個密鑰可供選擇严沥,即72,057,594,037,927,936種可能性猜极。
DES現(xiàn)在已經(jīng)不是一種安全的加密方法,主要因為它使用的56位密鑰過短消玄。DES破解機包括1,856個自定義的芯片跟伏,可以在數(shù)天內(nèi)破解一個DES密鑰—本圖顯示了使用數(shù)個Deep Crack芯片搭成的DES破解機
下圖就是專門破解DES加密的芯片:
AES(高級加密碼標(biāo)準(zhǔn))
AES為分組密碼丢胚,分組密碼也就是把明文分成一組一組的,每組長度相等受扳,每次加密一組數(shù)據(jù)携龟,直到加密完整個明文。在AES標(biāo)準(zhǔn)規(guī)范中辞色,分組長度只能是128位骨宠,也就是說,每個分組為16個字節(jié)(每個字節(jié)8位)相满。密鑰的長度可以使用128位、192位或256位桦卒。密鑰的長度不同立美,推薦加密輪數(shù)也不同。
[圖片上傳失敗...(image-baf2d4-1551780610742)]
比如我們家里的無線路由器方灾,一般使用的就是AES加密建蹄。
AES算法流程
AES加密算法涉及4種操作:
- 字節(jié)替代
- 行移位
- 列混淆
- 輪密鑰加
字節(jié)替換,上面已經(jīng)講過裕偿。
我們可以把加密的數(shù)據(jù)分解成 4x4 大小的表格洞慎,然后對表格里的每個空位進(jìn)行替換然后移位,再進(jìn)行列混淆加上密鑰嘿棘,重復(fù)上面幾個步驟劲腿。
下圖是加密解密的流程圖:
字節(jié)代替
字節(jié)代替的主要功能是通過S盒完成一個字節(jié)到另外一個字節(jié)的映射。S盒的詳細(xì)構(gòu)造方法可以直接給出構(gòu)造好的結(jié)果鸟妙,S盒用于提供密碼算法的混淆性焦人。
用兩張?zhí)鎿Q表可以秀好的理解:
加密替換表:
解密替換表:
假設(shè): 字節(jié)00000000B能過加密替換表x=0,y=0替換后的值為(S[0][0]=)63H,再通過解密替換表即可得到替換前的值x=6,y=3重父,(S-1 [6][3]=)00H花椭。
行移位
行移位是一個4x4的矩陣內(nèi)部字節(jié)之間的置換,用于提供算法的擴散性房午。
行移位分有:
-
正向行移位
假設(shè)矩陣的名字為state矿辽,用公式表示:state[i][j] = state[i][(j+i)%4];其中i、j屬于[0,3]郭厌。
-
逆向行移位
用公式表示:state[i][j] = state[i][(4+j-i)%4];其中i袋倔、j屬于[0,3]。
正向行移位: 正向行移位用于加密沪曙,其原理圖如下奕污。其中:第一行保持不變,第二行循環(huán)左移8比特液走,第三行循環(huán)左移16比特碳默,第四行循環(huán)左移24比特贾陷。
逆向行移位: 逆向行移位即是相反的操作,即:第一行保持不變嘱根,第二行循環(huán)右移8比特髓废,第三行循環(huán)右移16比特,第四行循環(huán)右移24比特该抒。
列混淆
利用GF(28)域上算術(shù)特性的一個代替慌洪,同樣用于提供算法的擴散性。
同樣的也有:
- 正向列混淆
- 逆向列混淆
對稱加密思考
對稱加密速度快但是安全性相對于非對稱加密來說低凑保,為什么呢冈爹?
- 密鑰的交換需要建立在安全的通信基礎(chǔ)上,而通信本身是不可能絕對安全的
- 加密和解密使用相同的密鑰欧引,如果信息泄露频伤,提取到了密鑰,密文就會被輕易破解
- 無法驗證發(fā)送者芝此,可以用相同的加密方式偽造密文憋肖,這時信息的來源就變得不可靠
- 密鑰每使用一次都被拋棄,需要重新生成密鑰
要想使用對稱加密婚苹,那么分享信息的各個個體之間都需要分享這個密鑰岸更,比如1000個人之間都使用同一個密鑰進(jìn)行密文傳輸,只要其中一個人密鑰被盜竊了膊升,那么整體加密的信息將都被破解了怎炊。
那有什么方法呢,這個時候就可以引入另一種加密算法 非對稱加密用僧。
非對稱加密
如何做到即使一個人的密鑰被盜竊了结胀,最起碼保證你給其他人發(fā)送密文不被破解?
簡單來說就是: 每個人生成一個“私鑰-公鑰”對责循,這個私鑰需要每個人自行進(jìn)行保護糟港!公鑰可以隨便分享,同時院仿,生成的這個“私鑰-公鑰”對還有個強大的功能就是秸抚,使用私鑰加密的信息,只能由該私鑰對應(yīng)的公鑰才能解密歹垫,使用公鑰加密的信息剥汤,只能由該公鑰對應(yīng)的私鑰才能解密!
還是拿上面小明排惨、小紅來舉例:
小明生成了他自己的一個“私鑰-公鑰”對吭敢,叫做“小明私鑰-小明公鑰”,小紅生成了他自己的一個“小紅私鑰-小明公鑰”對暮芭,之前我們說過私鑰要每個個體自己進(jìn)行保存鹿驼,公鑰可以隨便分享欲低,目的是為什么呢?是為了加密信息畜晰!
有了公鑰砾莱、私鑰之后,小明在QQ群里與小紅說:
非對稱解密算法 即使別人截取了凄鼻,也只是知道該公鑰而已腊瑟,但是要是想解密使用該公鑰加密的密文!只有一個人可以辦得到块蚌!就是小紅闰非! 為什么?
小明使用小紅的公鑰加密的信息峭范,只有小紅的公鑰所對應(yīng)的私鑰河胎,這里就是“小紅私鑰”,才能解密虎敦!所以,沒有小紅私鑰的第三方即時截取了這些密文政敢,也破解不了其徙!或者更嚴(yán)格的說在有限時間內(nèi)比如說幾十上面年內(nèi)很難進(jìn)行暴力破解!
我們來看看官方對非對稱加密的解釋
公開密鑰加密喷户,也稱為非對稱加密唾那,一種密碼學(xué)算法類型,在這種密碼學(xué)方法中褪尝,需要一對密鑰(其實這里密鑰說法不好闹获,就是“鑰”),一個是私人密鑰河哑,另一個則是公開密鑰避诽。這兩個密鑰是數(shù)學(xué)相關(guān),用某用戶密鑰加密后所得的信息璃谨,只能用該用戶的解密密鑰才能解密沙庐。如果知道了其中一個,并不能計算出另外一個佳吞。因此如果公開了一對密鑰中的一個拱雏,并不會危害到另外一個的秘密性質(zhì)。稱公開的密鑰為公鑰底扳;不公開的密鑰為私鑰铸抑。
看明白了么?是不是有一種WFT的感受衷模?
非對稱加密需要包含:
- Private Key 私鑰
- Public Key 公鑰
下圖是非對稱加密解密的過程圖:
大概意思就是鹊汛,要想使用非對稱加密算法蒲赂,首先要有一對key,一個為private key私鑰柒昏,一個為public key公鑰凳宙,然后可以把你的public key分發(fā)給想給你傳密文的用戶,然后用戶使用該public key加密過得密文职祷,只有使用你的private key才能解密氏涩,也就是說,只要你自己保存好你的private key有梆,就能確保是尖,別人想給你發(fā)的密文不被破解,所以你不用擔(dān)心別人的密鑰被盜泥耀。
- 小明用小紅給的公鑰給明文進(jìn)加密
- 小紅用自己的私鑰對密文進(jìn)行解密
這種加密是單向的饺汹,所以被稱為非對稱加密算法
Ok 我們來總結(jié)一下 非對稱加密碼的特點
優(yōu)缺點
- 優(yōu)點:
- 允許在不安全的媒體上交換信息
- 解密的私鑰不發(fā)往任何用戶,即使密文泄露也不用擔(dān)心被破解痰催,因為沒有私鑰
- 可以驗證消息的發(fā)送者
- 缺點:
- 加密速度較慢
這種加密算法應(yīng)用非常廣泛兜辞,SSH, HTTPS, TLS,電子證書夸溶,電子簽名逸吵,電子身份證等等。
RSA 加密解密算法
我們來舉一個比較常用的算法RSA加密解密算法
RSA加密算法是非對稱加密算法的一種缝裁,是三個牛逼的人一起提出的扫皱。RSA就是下圖他們?nèi)诵帐祥_頭字母拼在一起組成的。
我猜左邊兩個會比右邊這個更聰明(看頭發(fā)(ˉ︶ˉ))
公鑰和私鑰的產(chǎn)生
我們來看看公鑰與私鑰的產(chǎn)生一共有四個步驟:
- 選擇兩個大素數(shù)p和我(大于10100)
- 令n=pq和z=(p-1)(q-1)
- 選擇d與z的互質(zhì)
- 選擇e捷绑,使e*d=1(mod z)
(n,e)是公鑰韩脑,(n,d)是私鑰
明文P被分成了k位的塊,k是滿足2k<n的最大整數(shù)粹污,于是有了0<=P<n (n最好大于 1024)
互質(zhì)關(guān)系
-
什么是互質(zhì)關(guān)系?
如果兩個正整數(shù)段多,除了1以外,沒有其他公因子厕怜,我們就稱這兩個數(shù)是互質(zhì)關(guān)系(coprime)衩匣。比如,15和32沒有公因子,所以它們是互質(zhì)關(guān)系。這說明梢薪,不是質(zhì)數(shù)也可以構(gòu)成互質(zhì)關(guān)系裸卫。
任意兩個質(zhì)數(shù)構(gòu)成互質(zhì)關(guān)系,比如13和61。
一個數(shù)是質(zhì)數(shù),另一個數(shù)只要不是前者的倍數(shù)香追,兩者就構(gòu)成互質(zhì)關(guān)系搜吧,比如3和10市俊。
如果兩個數(shù)之中,較大的那個數(shù)是質(zhì)數(shù)滤奈,則兩者構(gòu)成互質(zhì)關(guān)系摆昧,比如97和57。
1和任意一個自然數(shù)是都是互質(zhì)關(guān)系蜒程,比如1和99绅你。
p是大于1的整數(shù),則p和p-1構(gòu)成互質(zhì)關(guān)系昭躺,比如57和56忌锯。
p是大于1的奇數(shù),則p和p-2構(gòu)成互質(zhì)關(guān)系领炫,比如17和15偶垮。
歐拉函數(shù)
任意給定正整數(shù)n,在小于等于n的正整數(shù)之中帝洪,有多少個與n構(gòu)成互質(zhì)關(guān)系似舵?
計算這個值的方法就叫做歐拉函數(shù),以φ(n)表示葱峡。在1到8之中啄枕,與8形成互質(zhì)關(guān)系的是1、3族沃、5、7泌参,所以 φ(n) = 4脆淹。
如果n可以分解成兩個互質(zhì)的整數(shù)之積:
n = p1 × p2
則:
φ(n) = φ(p1p2) = φ(p1)φ(p2)
所以:
φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24
加密消息
小明想給小紅發(fā)送一個消息M,他知道小紅產(chǎn)生的公鑰(n,e)他使用起先與小紅約好的格式將M轉(zhuǎn)換為一個小于n的整數(shù)m沽一,比如他可以將每一個字轉(zhuǎn)換為這個字的Unicode碼盖溺,然后將這些數(shù)字連在一起組成一個新的數(shù)字。如果他的信息非常長的話铣缠,他可以將這個信息分為幾段烘嘱,然后將每一段轉(zhuǎn)換為m。用下面這個公式他可以將m加密為c
加密公式:
解密消息
德龍得到海豐的消息c后就可以利用他的私鑰d來解碼蝗蛙。他可以用以下這個公式來將c轉(zhuǎn)換為m
解密公式:
假設(shè):
p = 3, q = 11, n = 33, z = 20, d = 7, e = 3
C = P3(mod 33)
P = C7(mod 33)
套用公式:
則:
C = 23(mod 33) = 8(mod 33) = 8
P = 87(mod 33) = 2097152(mod 33) = 2
z=(p-1)(q-1), n=pq, Mod 取余數(shù), (n,e)是公鑰, (n,d)是私鑰 設(shè)明文大P 為2, 2是明文蝇庭。8是密文
小DEMO
參照上面的公式,我們寫一個非常非常非常非常簡單的例子:
最終得出的結(jié)果如下:
最大值在 32
, 最小值: 1
捡硅,明文不得超過 p * q
哮内,所以p,q
必須大。
數(shù)字簽名
RSA 的另一個最大的優(yōu)點是其在數(shù)字簽名中的應(yīng)用壮韭。數(shù)字簽名的作用是確認(rèn)消息來源的可靠性,保證信息的完整性和不可否認(rèn)性北发。假如A要公開發(fā)布自己的文件,A先用HASH算法生成這個文件的消息摘要(或者叫信息指紋),再用 RSA 加密算法(A 的私鑰)對摘要進(jìn)行加密纹因。用戶想要下載 A 發(fā)布的文件,需要同時下載文件和摘要,下載完畢后,用戶使用 A 的公鑰對摘要進(jìn)行解密得到 A 之前生成的摘要,并且用戶用同樣的 HASH 算法對下載到的文件生成一份摘要,比對這兩份摘要是否相等,如果相等,那么可以確定兩件事情:文件是完整的,文件是 A 發(fā)布的。
我們從很多下載文件的網(wǎng)站都會看到一些 SHA256, MD5 碼琳拨,這就是對文件進(jìn)行校驗的瞭恰,驗證文件是不是官方發(fā)頁的,有沒有被竄改過狱庇。我們看golang.org官方源碼包:
RSA的算法安全性是基于大素數(shù)分解的困難性惊畏,攻擊者可以分解已知的n,得到p和q僵井,然后可得到z陕截,最后用Euclid算法由e和z得到d。
Openssl生成公私鑰
我們可以在服務(wù)器上生成自己的公鑰私鑰批什,服務(wù)器需要安裝OpenSSL
:
私鑰:
下面是所生成的公鑰:
RSA的安全性
常見的 RSA 攻擊方法有:
- 直接分解模數(shù)n
- 對 RSA 的選擇密文攻擊
- 對 RSA 的同模攻擊
- 對 RSA 小指數(shù)的攻擊
- RSA 的比特性攻擊
廣泛的應(yīng)用證明 RSA 體制的安全性是相當(dāng)可靠的农曲。RSA 密碼體制的安全性取決于其加密函數(shù)求逆的困難性,即大數(shù)因子分解的困難性。雖然至今在理論和實踐中還未能證明有分解大整數(shù)的有效方法,但大數(shù)因子分解未被證明為是 NP 問題,隨著計算機計算能力的提高,原來被認(rèn)為不可能分解的某些大整數(shù)可能會被成功分解,這對 RSA 密碼體制的安全性構(gòu)成潛在的威脅驻债。
在未來比較長的時間范圍內(nèi)(在不動用國家級計算機的情況下)乳规,大約幾百年上千年,在不考慮量子計算和對密碼算法破解分析沒有太大突破的前提下合呐,不大可能通過計算能力提升而使得現(xiàn)有的密碼算法得到輕易地破解暮的。