作者:[91Wii]Lucky☆star
在進入實際軟改的解說前,先講一些相關的基本概念。
1. Hash(雜湊函數)
我們一般在生活中,有許多Hash運用的實例,例如最常見的CRC32,以及MD5、SHA-1等等,廣泛應用在文件檢查的上面。
ZIP/RAR在解壓縮的時候,會比對原始記錄的CRC32碼,和解出來的CRC32,以判斷此檔案是否有毀損的問題,而我們如果從網絡下 載了文件,例如linux安裝光碟。往往也會用md5碼來確認此iso檔是否正確無誤。
檔案 > Hash值
Hash演算法
那麼究竟什麼是Hash? 我以任意長度的檔案,不管是64kb,或64MB,甚至64GB,都可以用很快的速度,計算出一個固定長度的Hash值,當原始檔案變動任何一個位元,Hash值都會產生天翻地覆的變化。
所以,兩個檔案得到同一個Hash值的機率是非常的小的,是以可以拿來當做檢查檔案的依據。
2. RSA
RSA演算法普遍用於Wii上面的資料加解密和籤章檢查,我用比較簡單的方法來說明。
傳統的加密屬於一對一的對應,舉個不是很貼切但是比較容易理解的概念就是,今天你家的門,要關上和打開,用的都是同一把鑰匙。
我加密資料,加密和解密所用的'key'(鑰匙),也是同一個,就好像ZIP/RAR的加密,你用abc123對檔案上鎖,那要解壓縮的時候,同樣也要用abc123把檔案打開來。
傳統加解密
檔案 > 加密資料
abc123加密
加密資料 > 檔案
abc123解密
而比較現代的加密演算法如RSA,則改變了這個概念,這個演算法會有成對的兩鑰匙(key),這邊先用A和B來稱呼,用A鑰匙加密的資料,必須用B鑰匙才能打開,而且用B無法直接反推回A 。
RSA加解密
檔案 > 加密資料
A鑰匙加密
加密資料 > 檔案
B鑰匙解密
那麼,這樣的加密方法,有什麼用處?如果我今天有這對鑰匙,A和B,那麼我用A加密的資料,傳給別人。
我不需要把A鑰匙給別人,只需要B鑰匙告訴別人,別人就可以解開這個資料,而且附加的優點是,可以確定這一定是我加密的資料,別人無法偽造我的身份發出也就可以達到驗證的功能。
上面講的A鑰匙,必須好好保密,也叫做'private key'(私密金鑰) ,而上面講的B鑰匙,可以公開,也叫做'public key'(公開金鑰) 。
3. 電子籤章(Electronic Signature)
那麼,什麼是電子籤章?
因為RSA很慢的緣故,所以如果要達到前述驗證檔案是由特定某人所發出,加密整個檔案是很沒效率的作法。所以,就有人想到,何不綜合Hash和RSA的原理?
一個好的Hash演算法,如SHA-1,是不容易由人為的方法去創造出Hash重覆的檔案的。
所以我只要對文件做Hash,然後再用私密金鑰加密這個Hash。那麼驗證這個Hash的真實性,也就驗證了這個文件的真實性。
籤章:
檔案 > Hash
Hash演算法
Hash > 加密過的Hash(籤章)
A鑰匙加密
驗證:
檔案 > Hash
Hash演算法
籤章 > Hash'
B鑰匙解密
如果Hash = Hash' ---> 文件為真
4. Wii驗證
後面講到Wii系 統架構的時候,會再詳述。Wii在很多地方會使用電子籤章的演算法來驗證軟體的真偽。不讓人執行和安裝非官方授權的軟體。
而實際上,每個被任天堂授權的官方的個人或公司,都有自己的金鑰。在發行的軟體中,會放入這家公司的籤章,驗證這套軟體。當然也會隨之附上供檢查的公司公開金鑰。
但是,怎麼驗證這家公司是官方授權的公司呢?伴隨著公開金鑰,每個公開金鑰會伴隨著一個「憑證」,任天堂會用任天堂自己本家的金鑰去幫個人或公司的憑證籤章,被認可的憑證,裡面的公開金鑰才是有效的公開金鑰。
任天堂---->公司憑證---->Wii軟體
籤章 籤章
以原始的設計概念來說。Wii的軟體有兩條路可以進入Wii裡面,一是光碟機,二是網絡,而光碟機還有硬體保護。
就算用硬改的方式破解光碟機的硬體保護。基本上Wii還是只能執行有授權的遊戲(因為籤章需正確) 。
而就算黑客攔截網絡,用個人的程序取代官方下載,因為籤章不對的關係,所以還是無法進入Wii。
不過就算看似萬無一失的防護,卻還是有不少漏洞,在接下來的文章會再做詳細說明。