今天我們來實現(xiàn)私人衣櫥的第3個功能:登錄揉燃;
現(xiàn)在APP都有登錄的功能猪钮,登錄的過程是客戶端(手機端)與服務(wù)端交互的過程好爬,這種架構(gòu)模式叫client/server模式吩跋,client即客戶端友酱,也就是你們能看到的和可操作的界面,而服務(wù)端用戶是感知不到的隶校, 但是實際上每個客戶端背后都有負責的服務(wù)端支撐仔涩,你的數(shù)據(jù)忍坷,登錄的驗證過程都在服務(wù)器端完成。
登陸的過程是非常重要且敏感的熔脂,因為它涉及到一個安全承匣。我們肯定不希望自己的用戶名和密碼被竊取或者說修改。在手機的界面上當你輸入用戶名跟密碼之后锤悄。手機端都需要將這兩個信息發(fā)送到服務(wù)端韧骗,來完成驗證,驗證完畢后零聚,再通知客戶端登錄成功袍暴。
在網(wǎng)絡(luò)傳輸數(shù)據(jù)用戶名和密碼的過程中,就有可能發(fā)生4個主要的安全問題隶症。
竊聽
a向b發(fā)送的消息可能會在傳輸?shù)倪^程中被第三者政模,比如說x偷看。
篡改
a向b發(fā)送消息的過程中被x進行了篡改蚂会。
假冒
a向b發(fā)送的消息過程中可能會被x監(jiān)聽淋样,然后x冒充a向b發(fā)送了消息,這叫假冒胁住。
事后否認
b得到了a發(fā)送的消息趁猴,但是a不承認這是我發(fā)送的消息刊咳。
所以這個過程類似:a寫信給b,在郵寄的過程中被偷看了叫竊聽儡司。被偷看了娱挨,并且還被第三者修改了一部分重要的內(nèi)容叫篡改。第三者直接替換掉a的信捕犬,然后發(fā)給了b叫假冒跷坝。b收到信之后,與a確認寫信內(nèi)容的時候碉碉,a否認該信由他寄出柴钻,叫事后否認。
所以怎么解決上面所提到的4個安全方面的問題呢垢粮?
方法一:加密
既然消息很容易被竊聽贴届。那我們就可以采取加密的方式。
- 加密的第1種方式:對稱加密
對稱是相對于非對稱加密而言足丢,而實際上就是說對內(nèi)容的加密和解密用的是同一把鑰匙粱腻。
但這里會涉及到一個問題庇配,比如說a發(fā)送消息前斩跌,需要進行加密,把密文發(fā)給了b捞慌,b也必須使用同一把鑰匙進行解密耀鸦。所以說a還需要把鑰匙也發(fā)送給b。
所以這里又涉及到一個問題是鑰匙的安全性啸澡。假如說這個鑰匙被第三者截獲袖订。那他也可以用這個鑰匙解開其中的消息的內(nèi)容。
- 加密的第2種方式:非對稱加密嗅虏。
也就是說加密和解密用的是兩把不同的鑰匙洛姑。分別叫公鑰和私鑰。公鑰用來加密皮服,私鑰用來解密楞艾。
整個過程是:
1.a 準備 發(fā)送登錄信息b
2.b 先發(fā)送一個公鑰給a
3.a 用公鑰加密信息,然后發(fā)給b
4.b 收到a的密碼信息后龄广,用私鑰解密
因為只有b有私鑰硫眯,所以即使X截獲了信息,也沒有私鑰去解密內(nèi)容择同。
這個過程可以可理解成:
你要投票两入,黨組織先發(fā)放一個投票箱,大家將投票信息往其中投敲才,這個投票箱就像是公鑰裹纳,投完之后择葡,再把裝有投票信息的投票箱返回給黨組織,黨組織用手中的鑰匙(私鑰)打開投票箱痊夭,查看里面的內(nèi)容刁岸。所以投票箱在運輸過程中,一直是安全的她我。
第2種方式的優(yōu)點是假設(shè)發(fā)送方有:a1,a2,a3 他們?nèi)呖梢怨灿靡粋€鑰匙虹曙;但第1種方式就需要三把鑰匙。
方式2:非對稱加密有缺陷嗎番舆?答案是的酝碳,你這么知道投票箱是來自合法組織(黨組織)的呢?也就是a無法確認公鑰是來自b恨狈,如果中間人用一個假冒的公鑰疏哗,發(fā)給a,a加密后禾怠,被X截獲返奉,然后X用他的私鑰,即可揭開其中的信息內(nèi)容吗氏。
所以想要解決這個問題就必須用用到數(shù)字證書芽偏。
方式二:數(shù)字證書
數(shù)字證書是一種權(quán)威性的電子文檔,可以由權(quán)威公正的[第三方機構(gòu)]弦讽,即CA中心簽發(fā)的證書污尉。它包含一個公鑰、名稱以及證書授權(quán)中心的數(shù)字簽名往产。數(shù)字證書還有一個重要的特征就是只在特定的時間段內(nèi)有效被碗。
所以來回顧下非對稱加密的交互過程:
1.a 準備 發(fā)送登錄信息b
2.b 先發(fā)送一個公鑰給a
3.a 用公鑰加密信息,然后發(fā)給b
4.b 收到a的密碼信息后仿村,用私鑰解密
因為只有b有私鑰锐朴,所以即使X截獲了信息,也沒有私鑰去解密內(nèi)容蔼囊。
變成了:
1.a 準備 發(fā)送登錄信息b
2.b 先將公鑰以及b的資料信息提交給CA審核焚志,審核通過后,生成數(shù)字證書压真。
3.b將數(shù)字證書發(fā)給a
4.a從中提取出b的信息娩嚼,在CA中心驗證,b的公鑰確實屬于b滴肿,確認屬實后岳悟,用公鑰加密信息,然后發(fā)給b
5.b 收到a的密碼信息后,用私鑰解密
因為只有b有私鑰贵少,所以即使X截獲了信息呵俏,也沒有私鑰去解密內(nèi)容。如果b用偽造證書滔灶,也無法通過第4步普碎。
這個過程是絕對安全的嗎?當然是否定的录平。有可能第三者x攻擊認證中心麻车,冒充認證中心生成數(shù)字證書,但是這種概率極低斗这,并且一般來說認證中心都是有一些權(quán)威機構(gòu)动猬。
方式二:數(shù)字簽名
前面介紹的加密方式,數(shù)字證書表箭,是為了防止信息被竊聽赁咙、篡改和冒充。那數(shù)字簽名解決的是防止事后否認免钻。比如在網(wǎng)上簽約彼水,合同一旦簽訂是不允許抵賴或者違約,也就需要防止事后否認极舔。
數(shù)字簽名
就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串凤覆,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明。
前面的傳輸過程演變?yōu)椋?br>
1.a 準備 發(fā)送登錄信息b
2.b 先將公鑰以及b的資料信息提交給CA審核姆怪,審核通過后叛赚,生成數(shù)字證書澡绩。
3.b將數(shù)字證書發(fā)給a
4.a從中提取出b的信息稽揭,在CA中心驗證,b的公鑰確實屬于b肥卡,確認屬實后溪掀,用公鑰加密信息,同時加上自己的數(shù)字簽名步鉴,然后一并發(fā)給b
5.b 收到a的密碼信息后揪胃,用私鑰解密,并確認數(shù)字簽名信息是來自a.
- 數(shù)字簽名的過程其實也是加密的過程氛琢,使用的是a的私鑰加密喊递,b獲取后使用a的公鑰解密。
計算機世界里阳似,加解密的過程其實都是算法運算的過程骚勘,加密有許多種算法,比如AES, RSA.... 但是非業(yè)內(nèi)人士只需要了解加解密的過程和原理。有興趣的可以找其他資料繼續(xù)深入俏讹。