隨著安全問題越來越被重視,公司也全面替換了HTTP
為HTTPS
。2015
年iOS9
的ATS
到今年蘋果更是放出話來,2017
年全面支持HTTPS
缘挽,不支持的App
,在審核的時(shí)候可能會遇到麻煩呻粹。鑒于此壕曼,我有了寫這一系列文章的沖動,文章從最基本的知識點(diǎn)著手等浊,一點(diǎn)點(diǎn)剖析腮郊,盡量把HTTPS
這個(gè)東西說明白。此系列共四篇文章(有可能會出一篇進(jìn)階篇講述攻防相關(guān)知識)筹燕,本人從事iOS
開發(fā)轧飞,其他端的實(shí)際運(yùn)用不做敘述,但是前三篇的原理部分是通用的都可以看撒踪。四篇文章分別為:
- 第一篇:加密和哈希
- 第二篇:數(shù)字簽名和數(shù)字證書
- 第三篇:HTTPS的核心SSL/TSL協(xié)議
- 第四篇:iOS中的實(shí)際運(yùn)用
此篇文章的邏輯圖
加密(Encrypt)
- 加密的概念:簡單來說就是一組含有
參數(shù)k
的變換E
过咬。信息m
通過變換E
得到c = E(m)
。原始信息m為明文
制妄,通過變換得到的信息c為密文
掸绞。從明文得到密文的過程叫做加密,變換E
為加密算法
耕捞,參數(shù)k
稱作秘鑰
衔掸。同一個(gè)加密算法烫幕,可以取不同的密鑰,得出不同的加密結(jié)果具篇。從密文c
恢復(fù)明文m
的過程稱作解密纬霞,解密算法D
是加密算法E
的逆運(yùn)算。解密算法也有參數(shù)驱显,稱作解密算法的秘鑰。 - 加密的方式:
私鑰密碼(對稱加密)
和公鑰密碼(非對稱加密)
瞳抓。
私鑰密碼(對稱加密)
私鑰密碼實(shí)例-凱撒(J.Caesar)密碼:
公元前羅馬皇帝凱撒
(J.Caesar)
曾用密碼傳遞作戰(zhàn)命令埃疫。他的加密方法是把每個(gè)字母按字母表的順序向后移動3位,最后3個(gè)字母依次變成前3個(gè)字母孩哑。例如栓霜,"take action at middle night"
,經(jīng)過加密變成"wdnhdfwlrqdwplqqohqljkw"
(忽略掉空格)横蜒。(這個(gè)加密算法應(yīng)該都不陌生胳蛮,數(shù)據(jù)結(jié)構(gòu)雙向循環(huán)鏈表部分應(yīng)該都實(shí)現(xiàn)過的)
凱撒密碼的加密算法是把字母按字母表的順序循環(huán)移動
k位
,取k=3
就是凱撒所用的加密算法丛晌。如果用數(shù)字0 ~ 25
分別表示26個(gè)字母
仅炊,算法可表示成E(i) = (i + k)mod26, i = 0, 1, ..., 25
,其中k
就是加密秘鑰
。凱撒密碼的解密算法是D(i) = (i - k) mode 26, i = 0, 1, ..., 25
澎蛛。其中k
就是解密秘鑰
抚垄。它的解密算法的秘鑰與加密算法的秘鑰相同。
私鑰密碼
由以上例子可以看出谋逻。私鑰加密的秘鑰是對稱的呆馁,只要知道加密秘鑰就能推出解密秘鑰(所以稱為對稱加密)。通信雙方分別持有加密密鑰和解密密鑰毁兆,密鑰對外是絕對保密的浙滤,必須通過秘密渠道傳送 。常見的對稱加密算法有:DES
气堕、3DES
纺腊、TDEA
、Blowfish
送巡、RC2
摹菠、RC4
、RC5
骗爆、IDEA
次氨、SKIPJACK
、AES
摘投。
公鑰加密(非對稱加密)
公鑰加密概念
迪菲(W.Diffie)
和赫爾曼(M.Hellman)
于1976
年提出公鑰密碼的思想煮寡,這種密碼是非對稱的虹蓄,也就是說,不能從加密密鑰推算出解密密鑰幸撕,所以又稱之為非對稱加密薇组。加密密鑰不需要保密,可以公開坐儿,稱之為公鑰律胀,只需要保守解密秘鑰稱之為私鑰。公鑰和私鑰是成對的貌矿。常見的非對稱加密算法有:RSA
炭菌、Elgamal
、背包算法
逛漫、Rabin
黑低、D-H
、ECC
酌毡。
公鑰加密簡單舉例:甲乙兩人通信克握,甲將他的加密密鑰(公鑰)公布,任何想與甲通信的人都可以使用這個(gè)加密密鑰將要傳送的信息(明文)加密成密文發(fā)送給甲枷踏,只有甲自己知道解密密鑰(私鑰)菩暗,能夠把密文還原為明文。任何第三方即使截獲到密文也不可能知道密文所傳遞的信息呕寝。
- 兩種加密方式對比如下圖(圖1-0)所示:
基于公鑰密碼的加密和認(rèn)證
加密和認(rèn)證是兩個(gè)不同的概念勋眯,其中加密是保證數(shù)據(jù)的安全性,認(rèn)證是確保用戶的真實(shí)性下梢。只有通信雙方確定是真正要通信的雙方客蹋,通信才有進(jìn)行下去的必要。這也就是認(rèn)證的主要目的孽江。
基于公鑰密碼的加密過程
比如有兩個(gè)用戶Alice
和Bob
讶坯,Alice
想把一段明文通過公鑰密碼的技術(shù)發(fā)送給Bob
,Bob
有一對公鑰和私鑰岗屏,那么加密解密的過程如下:
1辆琅、Bob
將他的公鑰傳送給Alice
。
2这刷、Alice
用Bob
的公鑰加密她的消息婉烟,然后傳送給Bob
。
3暇屋、Bob
用他的私鑰解密Alice
的消息似袁。
Alice
使用Bob
的公鑰進(jìn)行加密,Bob
用自己的私鑰進(jìn)行解密。
基于公鑰密碼的認(rèn)證過程
認(rèn)證和加密就不同了昙衅,主要是鑒別用戶的真?zhèn)窝锼_€是Alice
和Bob
這兩個(gè)用戶,Alice
有一對公私鑰而涉,Alice
想讓Bob
知道自己是真實(shí)的Alice
著瓶,而不是假冒的,因此Alice
只要使用私鑰對文件加密發(fā)送給Bob
啼县,Bob
使用Alice
的公鑰對文件進(jìn)行解密材原,如果可以解密成功,則證明Alice
的私鑰是正確的季眷,因而就完成了對Alice
的身份鑒別华糖。
整個(gè)身份認(rèn)證的過程如下:
1、Alice
用她的私鑰對文件加密瘟裸,從而對文件簽名。
2诵竭、Alice
將簽名的文件傳送給Bob
话告。
3、Bob
用Alice
的公鑰解密文件卵慰,從而驗(yàn)證簽名沙郭。
Alice
使用自己的私鑰加密,Bob
用Alice
的公鑰進(jìn)行解密裳朋。
基于公鑰密碼的加密和認(rèn)證的思考
在加密過程中病线,思考如何保證Alice
拿到公鑰后就能確定是Bob
的公鑰,若是篡改的公鑰鲤嫡,通信進(jìn)行下去已經(jīng)無意義送挑。接下來的第二篇文章數(shù)字簽名和數(shù)字證書來解答這個(gè)問題。
哈希(Hash)
哈希與加密是不同的暖眼,概括來說惕耕,哈希
(Hash)
是將目標(biāo)文本轉(zhuǎn)換成具有相同長度的、不可逆的雜湊字符串(或叫做消息摘要)诫肠,而加密(Encrypt)
是將目標(biāo)文本轉(zhuǎn)換成具有不同長度的司澎、可逆的密文。
兩者有如下重要區(qū)別:
1栋豫、哈希算法往往被設(shè)計(jì)成生成具有相同長度的文本挤安,而加密算法生成的文本長度與明文本身的長度有關(guān)。
2丧鸯、哈希算法是不可逆的蛤铜,而加密算法是可逆的。
這里重點(diǎn)強(qiáng)調(diào)一下Hash
和Encrypt
的主要區(qū)別,因?yàn)榻酉聛淼奈恼乱玫竭@兩個(gè)概念昂羡,這里對此不做深究絮记。詳細(xì)介紹可看我下面參考的一篇文章哈希(Hash)與加密(Encrypt)的基本原理、區(qū)別及工程應(yīng)用虐先。
總結(jié)
第一篇講解的都是一些常用的基本概念怨愤,做安全肯定是會經(jīng)常遇見,后續(xù)的幾篇文章也依賴于對這些概念的理解蛹批,所以這里先提一下撰洗。關(guān)于Hash
也只強(qiáng)調(diào)了一下和加密的區(qū)別。
參考
- 屈婉玲,耿素云,張立昂. 離散數(shù)學(xué):高等教育出版社
- 詳解公鑰腐芍、私鑰差导、數(shù)字證書的概念
- 哈希(Hash)與加密(Encrypt)的基本原理、區(qū)別及工程應(yīng)用