ipsw文件 --> iTunes --> iOS設備的CPU --> iOS設備的Flash/eMMC
其中非常關鍵的一點是:只有CPU才能把固件寫到Flash/eMMC中,所以你能不能成功刷機,在於CPU同不同意。
CPU不同意,你就刷不進去。
為什麼不能繞開CPU直接寫入Flash/eMMC呢?這是因為iOS設備是全盤加密的,也就是說,往Flash/eMMC裡寫東西要先加密。這個加密密鑰寫在CPU內部,只有CPU才知道。而且每台設備的密鑰都是不一樣的。
所以,你沒有密鑰,就無法向Flash/eMMC寫入正確的數據,即使把Flash/eMMC拆下來刷入也不行。
那麼CPU怎麼決定能否刷機呢?需要驗證來自蘋果服務器的固件簽名。假如固件簽名正確,就可以刷入固件。所以iTunes必須向蘋果服務器詢問這個固件的簽名,提供給CPU。蘋果服務器根據這個固件的真偽、版本號,來決定是否提供簽名。所以,蘋果服務器對你能否刷入固件是有決定權的。
可以想像以下情景:
如果固件過期的話,會是以下情景:
(數字簽名使用非對稱加密技術,具有不可偽造性。所以你不能自行偽造簽名)
雖然數字簽名不能偽造,但是可以保存下來重放。前幾年可以使用SHSH刷入舊版固件,就是這個原理。可以想像以下情景:
這種重放攻擊是很容易避免的,所以現在SHSH已經沒用了。你可以想像成以下情景:
其中非常關鍵的一點是:只有CPU才能把固件寫到Flash/eMMC中,所以你能不能成功刷機,在於CPU同不同意。
CPU不同意,你就刷不進去。
為什麼不能繞開CPU直接寫入Flash/eMMC呢?這是因為iOS設備是全盤加密的,也就是說,往Flash/eMMC裡寫東西要先加密。這個加密密鑰寫在CPU內部,只有CPU才知道。而且每台設備的密鑰都是不一樣的。
所以,你沒有密鑰,就無法向Flash/eMMC寫入正確的數據,即使把Flash/eMMC拆下來刷入也不行。
那麼CPU怎麼決定能否刷機呢?需要驗證來自蘋果服務器的固件簽名。假如固件簽名正確,就可以刷入固件。所以iTunes必須向蘋果服務器詢問這個固件的簽名,提供給CPU。蘋果服務器根據這個固件的真偽、版本號,來決定是否提供簽名。所以,蘋果服務器對你能否刷入固件是有決定權的。
可以想像以下情景:
iTunes:我要刷入這個固件
CPU:那你得提供這個固件的簽名
iTunes向蘋果驗證服務器索要了這個固件的簽名
iTunes:這是這個固件的簽名
CPU:這個簽名是真的!這個包可以刷入。
如果固件過期的話,會是以下情景:
iTunes:我要刷入這個固件
CPU:那你得提供這個固件的簽名
iTunes向蘋果驗證服務器索要這個固件的簽名
蘋果驗證服務器:這個固件過期了,所以我不能給你提供簽名。
(數字簽名使用非對稱加密技術,具有不可偽造性。所以你不能自行偽造簽名)
雖然數字簽名不能偽造,但是可以保存下來重放。前幾年可以使用SHSH刷入舊版固件,就是這個原理。可以想像以下情景:
iTunes:我要刷入這個固件
CPU:那你得提供這個固件的簽名
iTunes拿出了收藏多年的舊簽名
iTunes:這是這個固件的簽名
CPU:這個簽名是真的!這個包可以刷入。
(實際上要搭建一個假的驗證服務器,把收藏多年的舊簽名提供給iTunes)
這種重放攻擊是很容易避免的,所以現在SHSH已經沒用了。你可以想像成以下情景:
iTunes:我要刷入這個固件
CPU:那你得提供這個固件的簽名,並且簽名中含有隨機數fasdjhpgia;
收藏的舊簽名中,隨機數不是fasdjhpgia,而是另外一個,所以無法使用