安全問題
首先App的安全問題主要包括以下三個方面
- 本地代碼安全
可以通過代碼混淆留量,關(guān)鍵字符串或者重要變量加密;
通過加殼防止二次打包 - 本地數(shù)據(jù)存儲
持久化數(shù)據(jù)的加密,盡量不要保存重要信息在本地(如用戶密碼之類的) - 遠程數(shù)據(jù)通訊安全
本文主要討論網(wǎng)絡(luò)通訊的安全問題
遠程數(shù)據(jù)通訊安全
保證遠程數(shù)據(jù)通訊安全一般方法是采用數(shù)據(jù)加密的方式,常用的數(shù)據(jù)加密無非就兩種
對稱加密算法(如AES)
- 對稱加密強度非常高。
- 無法安全地生成和保管密鑰累舷。
- 如果每次會話都使用固定的、相同的密鑰加密和解密夹孔,存在很大的安全隱患被盈。
非對稱加密算法(如RSA)
- 非對稱加密主要用于密鑰交換(也叫密鑰協(xié)商),能夠很好地解決對稱加密的問題搭伤。
- 客戶端和服務(wù)器每次新建會話時都使用非對稱密鑰交換算法協(xié)商出對稱密鑰只怎,使用這些對稱密鑰完成應(yīng)用數(shù)據(jù)的加解密和驗證,整個會話過程中的密鑰只在內(nèi)存中生成和保存闷畸,而且每個會話的對稱密鑰都不相同(除非會話復(fù)用)尝盼,中間者無法竊取。
- 非對稱密鑰交換很安全佑菩,但同時也是 HTTPS 性能和速度嚴重降低的“罪魁禍首”盾沫。想要知道 HTTPS 為什么影響速度,為什么消耗資源殿漠,就一定要理解非對稱密鑰交換的整個過程赴精。
兩個加密的問題
- 在非對稱密鑰交換算法出現(xiàn)以前,對稱加密一個很大的問題就是不知道如何安全生成和保管密鑰绞幌。
- 非對稱密鑰交換過程主要就是為了解決這個問題蕾哟,使得對稱密鑰的生成和使用更加安全。
- 密鑰交換算法本身非常復(fù)雜莲蜘,密鑰交換過程涉及到隨機數(shù)生成谭确,模指數(shù)運算,空白補齊票渠,加密逐哈,簽名等操作,比較耗費性能问顷。
非對稱加密的公鑰私鑰問題
簡單來說昂秃,在非對稱加密中,用公鑰加密的數(shù)據(jù)只有私鑰才能解密杜窄;相反的肠骆,用私鑰加密的數(shù)據(jù)只有公鑰才能解密。一般來說塞耕,他們負責(zé)以下內(nèi)容:
- 公鑰負責(zé)加密蚀腿,私鑰負責(zé)解密;
- 私鑰負責(zé)簽名扫外,公鑰負責(zé)驗證唯咬。
HTTPS中的SSL 協(xié)議既用到了非對稱加密技術(shù)(公鑰加密)纱注,又用到了對稱加密技術(shù)。
所以結(jié)合HTTPS中的SSL握手協(xié)議可知胆胰,每次新建會話,就會產(chǎn)生新的SSL握手刻获,從服務(wù)器返回的證書攜帶公鑰蜀涨,客戶端生成隨機碼的時候,使用證書中的公鑰加密隨機碼蝎毡,然后服務(wù)器接收到后厚柳,使用私鑰解密獲取隨機碼。這樣的過程沐兵,就算公鑰和加密后的隨機碼在傳輸過程中被截取别垮,沒有與之匹配私鑰也是無法解密的。
這個過程可以成為非對稱加密
SSL握手協(xié)議后期扎谎,客戶端和服務(wù)器都擁有三個隨機碼生成的同一個對稱密鑰(相同的)碳想,客服端和服務(wù)器通訊的時候,使用這個相同的密鑰進行加密解密毁靶。
這個過程稱為對稱加密
SSL的CA證書是采用非對稱加密的方式實現(xiàn)的胧奔。包含一個公鑰(加密隨機碼的)以及該密鑰所有者的信息。證書還標明有有效期预吆,并通過另一密鑰(CA私鑰)進行簽名龙填。
客戶端驗證證書的有效性一般是驗證有效期,名字是否一樣拐叉,發(fā)行者的公鑰能否能驗證通過岩遗。“發(fā)行者數(shù)字簽名”凤瘦。
讓網(wǎng)絡(luò)通訊更安全
不要使用HTTP通訊
因為HTTP協(xié)議使用明文傳輸宿礁,就算是POST方式(以body方式傳送數(shù)據(jù)),一樣可以輕易截獲廷粒。自定義的通訊方式窘拯,如手動實現(xiàn)TCP長連接,或者UDP通訊可以使用加密算法加密數(shù)據(jù)坝茎,如對稱加密或者非對稱加密涤姊。
使用HTTPS通訊
不要在本地存儲密碼,就算是加密過的密碼嗤放,本地登錄可以使用token校驗思喊,傳輸密碼的時候使用加密后的密碼,如hash散列(md5或者SHA-1),或者散列前加鹽次酌。
鹽(Salt)恨课,密碼學(xué)中舆乔,是指在散列之前將散列內(nèi)容(例如:密碼)的任意固定位置插入特定的字符串。這個在散列中加入字符串的方式稱為“加鹽”剂公。其作用是讓加鹽后的散列結(jié)果和沒有加鹽的結(jié)果不相同希俩,在不同的應(yīng)用情景中,這個處理可以增加額外的安全性纲辽。