RSA算法在擴展程序中的運用

RSA算法在Chrome的擴展程序中被用於對其.crx安裝文件進行簽名和生成ID。下面讓我們逐一瞭解其技術細節。在繼續之前,請注意一點,文中對於Web Store的技術細節是基於Chrome瀏覽器的角度通過一定的測試而推測出來的,要徹底地瞭解Web Store的細節並不能僅通過本文。


擴展程序的安裝文件有兩種生成方式,一種方式是由擴展程序的開發者在開發的過程中生成,另一種是通過Google的Web Store(Google又稱之爲Gallery)提交由後臺服務器生成。儘管兩種方式有些差異,但我們可以從開發者生成這種方式中大概瞭解Web Store的行爲。


擴展程序的開發者通過下圖所列舉的入口可以打開安裝文件生成對話框。

150434670.png


在【打包擴展】對話框中(如下圖),需要選擇所需打包擴展程序的根目錄,以及可選的私鑰文件,這一文件與RSA算法有關,這是我們後面要講的重點。

150529668.png


當我們不選擇私鑰文件進行打包時,Chrome會爲我們生成一個後綴爲.pem的私鑰文件(文件的生成位置與所指定的擴展程序目錄並列)。該文件中存放有RSA算法的私鑰,且通過該私鑰可以導出公鑰。下圖示例瞭如何通過openssl工具顯示私鑰文件和通過該文件導出公鑰。

150630521.png


下面的活動圖示例說明了Chrome在後臺是如何打包一個擴展程序的。

150737142.png


所生成的.crx(二進制)文件格式如下圖所示。需要特別說明的是,擴展程序的整個目錄是以一個壓縮包存放在.crx文件的最後面的,其中的Signature是通過Public Key所獲得的簽名,用於保證壓縮文件內容的完整性。

154210722.png


至此相信讀者已瞭解了RSA算法在.crx安裝文件中的作用,接下來讓我們瞭解擴展程序的ID(又被稱爲App ID)。Chrome中的每一個擴展程序都有一個ID值(下圖示例了AdBlock擴展程序的ID值),該值是通過對Public Key進行Hash運算而獲得的。

150917481.png


下圖示例說明了Chrome打包擴展程序時,如何在後臺生成擴展程序的ID,其中也順道說明了如何處理RSA密鑰來源的。

151027393.png


請注意,由於ID是通過Public Key生成的,而Public Key又是由Private Key所導出的,如果想保證一個擴展程序的ID永遠不變,則打包過程中必須使用同一個.pem文件。現實工作中,我們可以在第一次打包擴展程序時不指定.pem文件以便讓Chrome爲我們自動生成,然後在隨後的所有打包動作中都指定該.pem文件。當然,如果不關心ID的不變性的話,可以讓打包程序每次自動生成.pem文件,具體應如何使用讀者可以根據自己的情景加以選擇。


擴展程序一旦安裝完成,需要通過Google Web Store的Developer Dashboard進行上傳,以便用戶能通過Web Store進行安裝。與本地製作.crx文件不同的是,上傳的文件必須是對擴展目錄進行壓縮而生成的.zip文件。需要注意的是,擴展程序的manifest.json中不能包含key和update_url兩個域。通過研究Chrome安裝好的擴展程序發現,其中的key域所存放的正是前面談到的Public Key,且兩個域都是服務器在後臺所插入的。由於這種打包方式中不需指定.pem文件,因此我們可以推測打包服務器將爲之自動生成Private Key。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章