The iPhone Wiki is no longer updated. Visit this article on The Apple Wiki for current information. |
Difference between revisions of "KBAG"
m (sizeof(char* EncIV[16]) == 4*16 == 64 == 512 bits!) |
m (Links.) |
||
Line 1: | Line 1: | ||
==Explanation== |
==Explanation== |
||
− | In Apple's new IMG3 security scheme, they have used something called a KBAG. At the bottom of a firmware file, you will see something that will, on the ASCII side of your hex editor, see "GABK", which is "KBAG" flipped. Look on the hex side and you will the KBAG according to this format: |
+ | In Apple's new [[IMG3 File Format|IMG3]] security scheme, they have used something called a KBAG. At the bottom of a firmware file, you will see something that will, on the ASCII side of your hex editor, see "GABK", which is "KBAG" flipped. Look on the hex side and you will the KBAG according to this format: |
==KBAG Format== |
==KBAG Format== |
||
Line 46: | Line 46: | ||
==How it works== |
==How it works== |
||
− | Basically, it just boils down to using the |
+ | Basically, it just boils down to using the [[GID-key]] to decrypt Enc_IV and Enc_Key, then using that key and IV to decrypt the DATA section of the file (the code itself). |
− | As an interesting side note, because of the circumstances with the [[IMG3]] |
+ | As an interesting side note, because of the circumstances with the [[IMG3 File Format]], the kernel never needs to even touch the [[GID-key]] anymore, as it's job is to just flash the image to the [[NOR]] as is, with container and all. |
[[Category:Firmware Tags]] |
[[Category:Firmware Tags]] |
Revision as of 17:17, 12 September 2010
Explanation
In Apple's new IMG3 security scheme, they have used something called a KBAG. At the bottom of a firmware file, you will see something that will, on the ASCII side of your hex editor, see "GABK", which is "KBAG" flipped. Look on the hex side and you will the KBAG according to this format:
KBAG Format
KBAG128
typedef struct Unparsed_KBAG_128 { int magic; // string with bits flipped = "KBAG" (magic = 0x4741424B) int tagFullSize; // size of KBAG from beyond that point to the end of it int tagDataSize; // size of KBAG without this 0xC header int cryptState; // 1 if the key and IV in the KBAG are encrypted with the [[GID-Key]] // 2 is used with a second KBAG for the [[S5L8920]], use is unknown. int aesType; // 0x80 = aes128 / 0xc0 = aes192 / 0x100 = aes256 char EncIV[16]; // IV for the firmware file, encrypted with the [[GID-Key]] char EncKey[16]; // Key for the firmware file, encrypted with the [[GID-Key]] } Unparsed_KBAG_AES128;
KBAG192
typedef struct Unparsed_KBAG_AES192 { int magic; // string with bits flipped = "KBAG" (magic = 0x4741424B) int fullSize; // size of KBAG from beyond that point to the end of it int tagDataSize; // size of KBAG without this 0xC header int cryptState; // 1 if the key and IV in the KBAG are encrypted with the [[GID-Key]] // 2 is used with a second KBAG for the [[S5L8920]], use is unknown. int aesType; // 0x80 = aes128 / 0xc0 = aes192 / 0x100 = aes256 char EncIV[16]; // IV for the firmware file, encrypted with the [[GID-Key]] char EncKey[24]; // Key for the firmware file, encrypted with the [[GID-Key]] } Unparsed_KBAG_AES192;
KBAG256
typedef struct Unparsed_KBAG_256 { int magic; // string with bits flipped = "KBAG" (magic = 0x4741424B) int fullSize; // size of KBAG from beyond that point to the end of it int tagDataSize; // size of KBAG without this 0xC header int cryptState; // 1 if the key and IV in the KBAG are encrypted with the [[GID-Key]] // 2 is used with a second KBAG for the [[S5L8920]], use is unknown. int aesType; // 0x80 = aes-128, 0xc0 = aes-192, 0x100 = aes256 char EncIV[16]; // IV for the firmware file, encrypted with the [[GID-Key]] char EncKey[32]; // Key for the firmware file, encrypted with the [[GID-Key]] } Unparsed_KBAG_AES256;
How it works
Basically, it just boils down to using the GID-key to decrypt Enc_IV and Enc_Key, then using that key and IV to decrypt the DATA section of the file (the code itself).
As an interesting side note, because of the circumstances with the IMG3 File Format, the kernel never needs to even touch the GID-key anymore, as it's job is to just flash the image to the NOR as is, with container and all.