加密和簽名

基本知識

  1. ASCII(American Standard Code for Information Interchange,美國信息交換標(biāo)準(zhǔn)代碼)。
    計算機(jī)中存儲時要使用二進(jìn)制數(shù)來表示箫老,具體用哪些二進(jìn)制數(shù)字表示哪個符號,這就叫編碼辛藻。而大家如果要想互相通信而不造成混亂,那么大家就必須使用相同的編碼規(guī)則互订,于是美國有關(guān)的標(biāo)準(zhǔn)化組織就出臺了ASCII編碼吱肌。

  2. Base64:
    一種用64個字符來表示任意二進(jìn)制數(shù)據(jù)的方法。使用3個字節(jié)為一組通過查找ASCII表找到對應(yīng)二進(jìn)制3*8=24bit仰禽,然后分成4組24/4=6bit氮墨,前面補(bǔ)0,轉(zhuǎn)10進(jìn)制數(shù)吐葵,作為索引查Base64表找到對應(yīng)字符规揪。Base64表索引0-63分別是A-Za-z+/。(為什么是3個自己分成4組温峭?我猜是Base64表有64個字符猛铅,最大只能是2^6,也就是6bit凤藏,然而是6bit和一個字節(jié)8bit的最小公倍數(shù)的就是24bit奸忽,也就是3個字節(jié))。

  3. 數(shù)字簽名:
    也稱之為數(shù)字摘要法(Digital Digest)或數(shù)字指紋法(Digital Finger Print)揖庄。hash簽名是最主要的數(shù)字簽名方法栗菜。采用單項(xiàng)Hash函數(shù)將需要加密的明文“摘要”成一串固定長度(128位)的密文這一串密文又稱為數(shù)字指紋,它有固定的長度抠艾,而且不同的明文摘要成密文苛萎,其結(jié)果總是不同的,而同樣的明文其摘要必定一致检号。常用的hash算法有MD5和SHA1,MD5算法摘要的消息有128個比特位蛙酪,SHA-1算法摘要的消息最終有160比特位的輸出齐苛。

  4. 簽名文件和證書:
    首先了解下數(shù)據(jù)交互的流程:

    1. 發(fā)送方明文消息數(shù)字摘要
    2. 發(fā)送方私鑰加密數(shù)字摘要,生成簽名文件
    3. 發(fā)送方把公鑰給接收方桂塞,并發(fā)送明文消息和簽名文件
    4. 接收方收到消息凹蜂,用公鑰解密簽名文件,并用相同摘要算法摘要明文消息
    5. 判斷解密后的摘要跟重新生成的摘要比較,若一樣表示消息為損壞玛痊。

    上面的流程解釋了簽名文件即用私鑰加密的明文消息的摘要的文件汰瘫。只是第三步怎么把公鑰給接收方,有怎么保證接收方的公鑰不會被他人更換擂煞,為了解決這個問題所以就有了證書混弥。

    證書中心(certificate authority,簡稱CA)是一個統(tǒng)一的證書管理機(jī)構(gòu)对省。它管理所有需要發(fā)送數(shù)據(jù)方的公鑰蝗拿,對公鑰進(jìn)行認(rèn)證和加密。認(rèn)證加密后的公鑰蒿涎,即是證書哀托,又稱為CA證書,證書中包含了很多信息劳秋,最重要的是申請者的公鑰仓手。

    CA機(jī)構(gòu)在給公鑰加密時,用的是一個統(tǒng)一的密鑰對玻淑,在加密公鑰時嗽冒,用的是其中的私鑰。這樣岁忘,申請者拿到證書后辛慰,在發(fā)送數(shù)據(jù)時,用自己的私鑰生成簽名干像,將簽名帅腌、證書和發(fā)送內(nèi)容一起發(fā)給對方,對方拿到了證書后麻汰,需要對證書解密以獲取到證書中的公鑰速客,解密需要用到CA機(jī)構(gòu)的”統(tǒng)一密鑰對“中的公鑰,這個公鑰也就是我們常說的CA根證書五鲫,通常需要我們到證書頒發(fā)機(jī)構(gòu)去下載并安裝到相應(yīng)的收取數(shù)據(jù)的客戶端溺职,如瀏覽器上面。這個公鑰只需要安裝一次位喂。有了這個公鑰之后浪耘,就可以解密證書,拿到發(fā)送方的公鑰塑崖,然后解密發(fā)送方發(fā)過來的簽名七冲,獲取摘要,重新計算摘要规婆,作對比澜躺,以驗(yàn)證數(shù)據(jù)內(nèi)容的完整性蝉稳。

Apk簽名

Android系統(tǒng)在安裝APK的時候,首先會檢驗(yàn)APK的簽名掘鄙,如果發(fā)現(xiàn)簽名文件不存在或者校驗(yàn)簽名失敗耘戚,則會拒絕安裝,所以應(yīng)用程序在發(fā)布之前一定要進(jìn)行簽名操漠。

給APK簽名可以帶來以下好處:

  • 應(yīng)用程序升級
    如果想無縫升級一個應(yīng)用收津,Android系統(tǒng)要求應(yīng)用程序的新版本與老版本具有相同的簽名與包名。若包名相同而簽名不同颅夺,系統(tǒng)會拒絕安裝新版應(yīng)用朋截。

  • 應(yīng)用程序模塊化
    Android系統(tǒng)可以允許同一個證書簽名的多個應(yīng)用程序在一個進(jìn)程里運(yùn)行,系統(tǒng)實(shí)際把他們作為一個單個的應(yīng)用程序吧黄。此時就可以把我們的應(yīng)用程序以模塊的方式進(jìn)行部署部服,而用戶可以獨(dú)立的升級其中的一個模塊。

  • 代碼或數(shù)據(jù)共享
    Android提供了基于簽名的權(quán)限機(jī)制拗慨,一個應(yīng)用程序可以為另一個以相同證書簽名的應(yīng)用程序公開自己的功能與數(shù)據(jù)廓八,同時其它具有不同簽名的應(yīng)用程序不可訪問相應(yīng)的功能與數(shù)據(jù)。

  • 應(yīng)用程序的可認(rèn)定性
    簽名信息中包含有開發(fā)者信息赵抢,在一定程度上可以防止應(yīng)用被偽造剧蹂。例如網(wǎng)易云加密對Android APK加殼保護(hù)中使用的“校驗(yàn)簽名(防二次打包)”功能就是利用了這一點(diǎn)。


簽名的目的:

  • 要確定消息的來源確實(shí)是其申明的那個人
  • 要保證信息在傳遞的過程中不被第三方篡改烦却,即使被篡改了宠叼,也可以發(fā)覺出來。

簽名原理:

  • 對Apk中的每個文件做一次算法(數(shù)據(jù)摘要+Base64編碼)其爵,保存到MANIFEST.MF文件中
  • 對MANIFEST.MF整個文件做一次算法(數(shù)據(jù)摘要+Base64編碼)冒冬,存放到CERT.SF文件的頭屬性中,在對MANIFEST.MF文件中每一條記錄做一次算法(數(shù)據(jù)摘要+Base64編碼)摩渺,存放到CERT.SF文件中简烤。
  • 對CERT.SF文件做簽名,內(nèi)容存檔到CERT.RSA中摇幻,RSA文件還包含了簽名的公鑰横侦、簽名所有者等信息。

對一個APK文件簽名之后绰姻,APK文件根目錄下會增加META-INF目錄枉侧,該目錄下增加三個文件:
MANIFEST.MF
NETEASE.RSA
NETEASE.SF
.RSA文件還可能是.DSA文件,RSA與SF文件的文件名可以更改狂芋,但是它們的命名必須一樣棵逊。


為什么要這么設(shè)計簽名流程呢?

  • 如果你改變了apk包中的任何文件银酗,那么在apk安裝校驗(yàn)時辆影,改變后的文件摘要信息與MANIFEST.MF的檢驗(yàn)信息不同,于是驗(yàn)證失敗黍特,程序就不能成功安裝蛙讥。
  • 如果你改變了apk包中的任何文件,那么在apk安裝校驗(yàn)時灭衷,改變后的文件摘要信息與MANIFEST.MF的檢驗(yàn)信息不同次慢,于是驗(yàn)證失敗,程序就不能成功安裝翔曲。
  • 如果你還不死心迫像,繼續(xù)計算MANIFEST.MF的摘要值,相應(yīng)的更改CERT.SF里面的值瞳遍,那么數(shù)字簽名值必定與CERT.RSA文件中記錄的不一樣闻妓,還是失敗。
  • 那么能不能繼續(xù)偽造數(shù)字簽名呢掠械?不可能由缆,因?yàn)闆]有數(shù)字證書對應(yīng)的私鑰。

所以猾蒂,如果要重新打包后的應(yīng)用程序能再Android設(shè)備上安裝均唉,必須對其進(jìn)行重簽名。只要修改了Apk中的任何內(nèi)容肚菠,就必須重新簽名舔箭,不然會提示安裝失敗。

Https加密通訊過程

HTTPS在傳輸過程中是可以通過加密來保護(hù)數(shù)據(jù)安全的蚊逢,以免用戶敏感信息被第三方獲取层扶。 可以說HTTPS是HTTP的升級版、安全版时捌。


交互過程.png
  1. 瀏覽器請求服務(wù)器地址
  2. 服務(wù)器返回公鑰
  3. 瀏覽器驗(yàn)證公鑰是否有效怒医,無效彈框警告,有效生成隨機(jī)秘鑰奢讨,然后用服務(wù)器公鑰加密生成的隨機(jī)秘鑰發(fā)送給服務(wù)端
  4. 服務(wù)端收到后用私鑰解密出隨機(jī)秘鑰
  5. 之后服務(wù)端和瀏覽器傳輸數(shù)據(jù)就用隨機(jī)必要加密傳輸

其中瀏覽器驗(yàn)證服務(wù)端證書是TLS協(xié)議的工作稚叹,它是基于TCP協(xié)議。在建立連接的時候先進(jìn)行TCP連接握手拿诸,然后進(jìn)行TLS握手扒袖,過程如下

  1. 瀏覽器高速服務(wù)端支持的加密算法列表
  2. 服務(wù)端獲取瀏覽器的加密算法列表,選擇一個亩码,加上證書公鑰給到瀏覽器
  3. 瀏覽器用服務(wù)端選擇的加密算法用服務(wù)端給的公鑰加密一個隨機(jī)生成的對稱秘鑰給到服務(wù)端
  4. 服務(wù)端收到后用私鑰解密得到對稱秘鑰季率,發(fā)送用秘鑰解密的信息給瀏覽器,握手結(jié)束描沟。

證書的校驗(yàn)是瀏覽器會預(yù)置一些公認(rèn)的根證書飒泻,拿到服務(wù)端的證書鞭光,然后后倒退到根證書瀏覽器中是否有,如果有則代表證書可信泞遗。如果證書是自己生成的惰许,那需要在瀏覽器安裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市史辙,隨后出現(xiàn)的幾起案子汹买,更是在濱河造成了極大的恐慌,老刑警劉巖聊倔,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晦毙,死亡現(xiàn)場離奇詭異,居然都是意外死亡耙蔑,警方通過查閱死者的電腦和手機(jī)见妒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纵潦,“玉大人徐鹤,你說我怎么就攤上這事⊙悖” “怎么了返敬?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寥院。 經(jīng)常有香客問我劲赠,道長,這世上最難降的妖魔是什么秸谢? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任凛澎,我火速辦了婚禮,結(jié)果婚禮上估蹄,老公的妹妹穿的比我還像新娘塑煎。我一直安慰自己,他們只是感情好臭蚁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布最铁。 她就那樣靜靜地躺著,像睡著了一般垮兑。 火紅的嫁衣襯著肌膚如雪冷尉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天系枪,我揣著相機(jī)與錄音雀哨,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛雾棺,可吹牛的內(nèi)容都是我干的膊夹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼垢村,長吁一口氣:“原來是場噩夢啊……” “哼割疾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘉栓,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓诸,沒想到半個月后侵佃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奠支,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年馋辈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倍谜。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡迈螟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尔崔,到底是詐尸還是另有隱情答毫,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布季春,位于F島的核電站洗搂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏载弄。R本人自食惡果不足惜耘拇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宇攻。 院中可真熱鬧惫叛,春花似錦、人聲如沸逞刷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亲桥。三九已至洛心,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間题篷,已是汗流浹背词身。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留番枚,地道東北人法严。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓损敷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親深啤。 傳聞我的和親對象是個殘疾皇子拗馒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容