久等愚臀,最近一直很忙馋袜,代碼實在寫的無聊捧毛,然后確實有想要了解和總結(jié)這方面的知識师痕,就寫了這篇文章。
申明:這可能只是一個讀后感,關(guān)于一片《漫談iOS程序的證書和簽名機(jī)制》的一些理解(或者說用自己的方式描述一遍之類的),打開有問題的同學(xué)可以查看segmentfault上面的轉(zhuǎn)載厢塘。
加密算法
按照原文的寫法喂急,我們先來講一下幾個比較基礎(chǔ)的加密算法廊移。世上無難事,只怕有心人,任何的加密算法都是可以破解的芋类,設(shè)置一些加密算法無非只是提高門檻罷了泡躯,高玩?zhèn)兛吹竭@些粗淺的加密算法千萬別噴咕别,嘴下留情啊送。
對稱加密
可以先講講對稱的加密,就是加密的密鑰和解密的密鑰是同一個纤子,舉個栗子就是你的寶庫的開門鑰匙和鎖門鑰匙是同一把艾少,假如有人拿到這把鑰匙肋演,就能夠進(jìn)入寶庫雏吭,把里面的寶物全部偷光,過分點(diǎn),還可以拉兩坨屎再走。然后當(dāng)不懂事的小虎子拿著你給他的鑰匙來寶庫拿寶物的時候,就會開開心心的拿著兩坨屎,帶在身上氯质。好蠢拱礁,講不下去了鸯乃,大概就是這么個意思。</br>
稍微專業(yè)點(diǎn)的描述就是,當(dāng)你使用密鑰加密你的數(shù)據(jù),在傳輸過程中隐砸,如果有人竊取過你的密鑰式塌,那么武学,他能夠篡改你的數(shù)據(jù)熏矿,而接收到的人卻全然不知栏妖。</br>
用圖來表示大概是這樣:
非對稱加密
非對稱加密和對稱加密相反,它有兩個密鑰勇边,一個我們叫做私鑰(secret key)识颊,一個叫做公鑰(public key),通過私鑰加密的數(shù)據(jù)只有通過公鑰才能解密奕坟,通過公鑰加密的數(shù)據(jù)只有私鑰才能夠解密祥款,而且公鑰和私鑰唯一對應(yīng),且很難或者不可能互相推導(dǎo)月杉,再拿同一個比方刃跛,開門和鎖門的鑰匙是兩把,鎖門的鑰匙只有自己持有苛萎,而把開門的鑰匙交給別人桨昙,這樣,當(dāng)別人獲取到相對較易獲取的公鑰的時候首懈,那個人能夠打開你的寶庫绊率,但是當(dāng)他偷取里面的寶物再鎖上門的時候是沒有鑰匙的,我們就能清楚的知道寶庫是否被竊賊關(guān)顧過究履,從而考慮是不是要換一組鑰匙滤否,而去取寶物的人,也不會很蠢的拿著里面的垃圾當(dāng)寶物了最仑。</br>
再用專業(yè)點(diǎn)的話來描述就是:你會使用只有你自己持有藐俺,并相對安全的私鑰較密數(shù)據(jù),假如公鑰的持有者很不小心的把公鑰泄露了泥彤,那么造成的影響最大是數(shù)據(jù)被剽竊欲芹,但絕不會被篡改,一旦被篡改吟吝,我們能夠馬上知曉并作出相應(yīng)地應(yīng)對策略菱父。</br>
但經(jīng)過這番了解,我發(fā)現(xiàn)非對稱加密算法應(yīng)該只是單向安全的剑逃,假如從數(shù)據(jù)從對方發(fā)來浙宜,如果使用公鑰加密數(shù)據(jù),那么在中途就可能有機(jī)會篡改蛹磺,所以就必須要使用另一套公鑰私鑰粟瞬。所以其實各大第三方的平臺都會給其開發(fā)者開出一個公鑰,一個私鑰萤捆,而這對公鑰私鑰在我理解來看應(yīng)該是不對應(yīng)的裙品,而應(yīng)該是和其平臺上的一對公鑰私鑰相對應(yīng)俗批。
摘要算法
摘要算法是一段很神奇的算法,它的功能是更具一段很長的數(shù)據(jù)市怎,它能夠計算出一段唯一且很短的數(shù)據(jù)岁忘。使用這種技術(shù)可以用一段較短的數(shù)據(jù)標(biāo)示一段很長的數(shù)據(jù)或者文件,比較著名的有MD5和SHA算法焰轻。想起git和svn的區(qū)別臭觉,svn在記錄每一個commit的時候,只是使用一個計數(shù)器辱志,每次加1,而git在記錄commit的時候就是使用SHA的算法狞膘,計算這個項目的SHA值揩懒,用這個值作為這次commit的唯一標(biāo)示。SHA和MD5加密不可逆挽封,所以現(xiàn)在很多賬號密碼服務(wù)中已球,也會使用這兩種算法。
數(shù)字簽名
非對稱加密中比較著名的加密算法有個叫做RSA加密算法辅愿,但他似乎并不是最好的智亮,但是從參考文中,我們可以知曉点待,蘋果證書使用的非對稱加密算法就是RSA加密算法阔蛉,那么RSA有個很致命的缺點(diǎn),就是這個算法的速度特別慢癞埠,讓我想起大學(xué)信息安全導(dǎo)論課上實現(xiàn)的一個文件加密應(yīng)用状原,我們使用了對稱加密的方式加密了文件,但是我們使用了RSA加密的算法加密了對稱加密的秘鑰苗踪,這樣可以做到在保證一定的安全性的情況下提高了效率颠区。而數(shù)字簽名應(yīng)該也是做了差不多的事情,當(dāng)我們拿到文件的時候通铲,我們首先使用摘要算法獲取文件的摘要毕莱,再使用RSA算法用私鑰加密文件摘要,然后將加密過后的摘要和源文件發(fā)送出去颅夺,當(dāng)對方接收到數(shù)據(jù)的時候朋截,同樣使用摘要算法對源文件摘要,然后將加密后的摘要使用公鑰解密碗啄,比對兩端摘要就能知曉數(shù)據(jù)的真實性质和。
大致的流程,在參考文中有張圖我覺得很不錯稚字,這里就直接放上來了:
.cer
文件
生成這個文件需要我們本地的CertificateSigningRequest.certSigningRequest
文件饲宿,而CertificateSigningRequest.certSigningRequest
中包含了RSA的一對秘鑰厦酬,而當(dāng)我們上傳CertificateSigningRequest.certSigningRequest
文件的時候,蘋果會瘫想,獲取里面的私鑰仗阅,然后結(jié)合Member Center
中的用戶信息來生成一個.cer
文件,于是.cer
中就包含了我們這臺電腦的公鑰和Member Center
的個人信息国夜,當(dāng)我們下載.cer
文件并雙擊之后减噪,.cer
就會找到我們電腦本地的對應(yīng)的私鑰,形成一個有效地.cer
文件并記入keychain
中车吹,如果本地沒有的私鑰筹裕,就不能形成一個有效.cer
文件,在keychain
中這個.cer
文件屬于缺失私鑰的窄驹。
所以朝卒,在團(tuán)隊協(xié)作中,一種方式是導(dǎo)出創(chuàng)建者的私鑰生成的.p12
文件乐埠,然后大家使用同一個app賬號和同一個.cer
文件抗斤,或者使用不同的賬號和不同的CertificateSigningRequest.certSigningRequest
的文件生成不同的.cer
文件,不然很有可能會出現(xiàn)問題丈咐。
.mobileprovision
文件
.mobileprovision
是一個配置文件瑞眼,而且是Member Center
中按照創(chuàng)建設(shè)置設(shè)定的,由于其含有蘋果的數(shù)字簽名棵逊,下載后不可修改伤疙,主要的配置內(nèi)容有
- AppId。每個app必須在MC中創(chuàng)建一個對應(yīng)的AppId歹河。規(guī)則不累述了掩浙。
- 使用哪些證書。上面說了秸歧,不同類型的證書就代表了不同的發(fā)布方式厨姚,還包括一些功能的能否使用(比如APN)
- 功能授權(quán)列表
- 可安裝的設(shè)備列表。對于AdHoc方式發(fā)布的app或者真機(jī)調(diào)試時键菱,會有一個列表谬墙,這個列表里面是iOS設(shè)備的UDID,每臺iOS設(shè)備出廠的UDID都不同经备,所以可以用來標(biāo)識設(shè)備拭抬。可通過iTunes連接設(shè)備侵蒙,或者http://fir.im/udid這里獲取
此外造虎,.mobileprovision
還包含了這個app的簽名的公鑰,但是我們實際上不會使用這個公鑰來加密纷闺,我真是說了一句廢話算凿,想想也知道份蝴,私鑰只有你自己的機(jī)器上有,如果使用私鑰來加密簽名氓轰,那還有誰可以解密簽名驗證婚夫。
所以,在打包的時候署鸡,我們會通過.mobileprovision
描述的公鑰的對應(yīng)的私鑰對整個項目經(jīng)行數(shù)字簽名案糙。
當(dāng)使用者獲取到項目之后,.mobileprovision
中的公鑰對各個簽名經(jīng)行解密對照之后就能知道項目的真實性和完整性靴庆。
總結(jié)
在Member Center
中應(yīng)該也就這兩個文件比較重要时捌,.cer
的作用主要在于驗證開發(fā)者的信息,. mobileprovision
的作用主要在于連接app的各方面設(shè)置和開發(fā)者的信息炉抒。而前面講到的算法主要作用于幾個文件在上傳下載過程中的驗證匣椰,還有在發(fā)布和用戶下載的包的驗證。若未完端礼,再待續(xù)。入录。蛤奥。。僚稿。凡桥。