Cmep Key Ring Base: Difference between revisions
Jump to navigation
Jump to search
Line 27: | Line 27: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Slot !! Initial Valid !! Initial Protection !! Protection (1.69) !! Ever Valid (1.69) !! Set By? | ! Slot !! Initial Valid !! Initial Protection !! Protection (1.69) !! Ever Valid (1.69) !! Set By? !! Description | ||
|- | |- | ||
| 0 || | | 0 || N || 0x0442 || 0x0442 || Y || ? || ? | ||
|- | |- | ||
| 1 || | | 1 || N || 0x0442 || 0x0442 || N || ? || ? | ||
|- | |- | ||
| 2-7 || | | 2-7 || N || 0x0442 || 0x0040 || N || ? || ? | ||
|- | |- | ||
| 8 || | | 8 || N || 0x049F || 0x0081 || Y || ? || enp per-console key | ||
|- | |- | ||
| 9 || | | 9 || N || 0x049F || 0x0080 || N || ? || ? | ||
|- | |- | ||
| 0xA-0xF || | | 0xA-0xF || N || 0x049F || 0x0080 || Y || ? || ? | ||
|- | |- | ||
| 0x10 || | | 0x10 || N || 0x0502 || 0x0502 || N || ? || supports decryption only | ||
|- | |- | ||
| 0x11-0x1F || | | 0x11-0x1F || N || 0x0502 || 0x0100 || N || ? || ? | ||
|- | |- | ||
| 0x20 || | | 0x20 || N || 0x061F || 0x0200 || Y || ? || Derived from 0x344, used for hmac-sha256 over enc files | ||
|- | |- | ||
| 0x21-0x24 || | | 0x21-0x24 || N || 0x061F || 0x061F || N || ? || supports encryption and decryption | ||
|- | |- | ||
| 0x25-0x2F || | | 0x25-0x2F || N || 0x061F || 0x0200 || N || ? || ? | ||
|- | |- | ||
| 0x30-0x34 || | | 0x30-0x34 || N || 0x041F || 0x041F || N || ? || ? | ||
|- | |- | ||
| 0x35-0x7F || | | 0x35-0x7F || N || 0x041F || 0x0000 || N || ? || ? | ||
|- | |- | ||
| 0x80-0xFF || | | 0x80-0xFF || X || 0x0000 || 0x0000 || X || ? || Not used | ||
|- | |- | ||
| 0x100 || | | 0x100 || N || 0x041F || 0x041F || N || ? || ? | ||
|- | |- | ||
| 0x101-0x17F || | | 0x101-0x17F || N || 0x041F || 0x0000 || N || ? || ? | ||
|- | |- | ||
| 0x180-0x1FF || | | 0x180-0x1FF || X || 0x0000 || 0x0000 || X || ? || Not used | ||
|- | |- | ||
| 0x200-0x203 || | | 0x200-0x203 || Y || 0x0002 || 0x0000 || Y || ? || ? | ||
|- | |- | ||
| 0x204-0x205 || | | 0x204-0x205 || Y || 0x006F || 0x006F || Y || ? || ? | ||
|- | |- | ||
| 0x206 || | | 0x206 || Y || 0x00AF || 0x00A0 || Y || ? || Used to derive key used to decrypt personalized layer over enc. Should be per-console. | ||
|- | |- | ||
| 0x207 || | | 0x207 || Y || 0x00AF || 0x00A0 || Y || ? || Used instead of the above key when secret debug mode is set. (Possibly non-per-console?) | ||
|- | |- | ||
| 0x208-0x20D || | | 0x208-0x20D || Y || 0x00AF || 0x00A0 || Y || ? || 6 keys used to decrypt enc metadata, which one is used depends on key revision in enc header | ||
|- | |- | ||
| 0x20E-0x20F || | | 0x20E-0x20F || Y || ? || 0x0010 || Y || ? || Maybe per-console emmc crypto keys? Protected by second_loader. | ||
|- | |- | ||
| 0x210-0x211 || | | 0x210-0x211 || Y || 0x001F || 0x0000 || Y || ? || ? | ||
|- | |- | ||
| 0x212 || | | 0x212 || Y|| 0x001F || 0x001F || Y || ? || ? | ||
|- | |- | ||
| 0x213 || | | 0x213 || Y|| 0x001F || 0x001F || Y || ? || Used to derive SMI keys, which are used for factory fw decryption. Per-console. | ||
|- | |- | ||
| 0x214 || | | 0x214 || Y|| 0x001F || 0x0000 || Y || ? || Used to derive keyslots 0x514, 0x515 in second_loader | ||
|- | |- | ||
| 0x215 || | | 0x215 || Y|| 0x001F || 0x0000 || Y || ? || ? | ||
|- | |- | ||
| 0x216 || | | 0x216 || Y|| 0x001F || 0x001F || Y || ? || Derive 0x502-0x504 by encrypting data in second_loader. | ||
|- | |- | ||
| 0x217 || | | 0x217 || Y || 0x001F || 0x0000 || Y || ? || ? | ||
|- | |- | ||
| 0x218-0x2FF || | | 0x218-0x2FF || X || 0x0000 || 0x0000 || X || ? || Not used | ||
|- | |- | ||
| 0x300-0x33F || | | 0x300-0x33F || Y || 0x0002 || 0x0000 || Y || ? || ? | ||
|- | |- | ||
| 0x340 || | | 0x340 || Y || 0x012F || 0x012F || Y || ? || Used to decrypt keys into the 0x10 key slot | ||
|- | |- | ||
| 0x341-0x343 || | | 0x341-0x343 || Y || 0x012F || 0x0120 || Y || ? || ? | ||
|- | |- | ||
| 0x344 || | | 0x344 || Y || 0x022F || 0x0220 || Y || ? || Used to derive key 0x20 in brom. | ||
|- | |- | ||
| 0x345-0x348 || | | 0x345-0x348 || Y || 0x022F || 0x022F || Y || ? || Used to decrypt keys into one of the 0x21-0x24 key slot | ||
|- | |- | ||
| 0x349-0x353 || | | 0x349-0x353 || Y || 0x022F ||0x0220 || Y || ? || ? | ||
|- | |- | ||
| 0x354-0x3FF || | | 0x354-0x3FF || Y || 0x001F || 0x0000 || Y || ? || ? | ||
|- | |- | ||
| 0x400-0x47F || | | 0x400-0x47F || N || 0x1800 || 0x0000 || N || ? || ? | ||
|- | |- | ||
| 0x480-0x4FF || | | 0x480-0x4FF || X || 0x0000 || 0x0000 || X || ? || Not used | ||
|- | |- | ||
| 0x500 || | | 0x500 || N || 0x1800 || 0x1800 || N || ? || ? | ||
|- | |- | ||
| 0x501 || | | 0x501 || N || 0x1800 || 0x1000 || Y || first_loader || Used by bootrom first_loader to figure out whether to load from eMMC or ARM comms after reset | ||
|- | |- | ||
| 0x502-0x504 || | | 0x502-0x504 || N || 0x1800 || 0x1800 || Y || ? || Related to Ernie SNVS | ||
|- | |- | ||
| 0x505 || | | 0x505 || N || 0x1800 || 0x0000 || N || ? || ? | ||
|- | |- | ||
| 0x506 || | | 0x506 || N || 0x1800 || 0x1800 || Y || ? || ? | ||
|- | |- | ||
| 0x507 || | | 0x507 || N || 0x1800 || 0x1800 || Y || ? || ? | ||
|- | |- | ||
| 0x508 || | | 0x508 || N || 0x1800 || 0x1800 || Y || ? || Ernie HW version (from syscon cmd 0x1). Set to 0x100060D on 1.692, 0x100010A on 1.05, 0x0100010B on 1.50 | ||
|- | |- | ||
| 0x509 || | | 0x509 || N || 0x1800 || 0x1800 || Y || ? || IDPS of unit (console id) | ||
|- | |- | ||
| 0x50A || | | 0x50A || N || 0x1800 || 0x1800 || Y || ? || Byte15bit0,byte14bit0,byte14bit1,byte11bit4: Revocation related. Byte13bit0: Enable F00D debug prints. | ||
|- | |- | ||
| 0x50B || | | 0x50B || N || 0x1800 || 0x1800 || Y || ? || From 0xD2 SNVS block 0, 8 bytes | ||
|- | |- | ||
| 0x50C || | | 0x50C || N || 0x1800 || 0x1800 || Y || ? || Flags. Set to 1 on 1.692 and newer, 0 on older | ||
|- | |- | ||
| 0x50D || | | 0x50D || N || 0x1800 || 0x1800 || Y || ? || OpenPSID | ||
|- | |- | ||
| 0x50E || | | 0x50E || N || 0x1800 || 0x1800 || Y || ? || Current firmware version. Comes from SNVS. | ||
|- | |- | ||
| 0x50F || | | 0x50F || N || 0x1800 || 0x1800 || Y || ? || Factory firmware version. Comes from idstorage. | ||
|- | |- | ||
| 0x510 || | | 0x510 || N || 0x1800 || 0x1800 || Y || ? || Some bit flags, comes from syscon cmd 0x90 offset 0xE0 | ||
|- | |- | ||
| 0x511 || | | 0x511 || N || 0x1800 || 0x1800 || Y || ? || Unique per boot session id, Syscon shared 0xD0 session key | ||
|- | |- | ||
| 0x512 || | | 0x512 || N || 0x1800 || 0x1800 || Y || ? || Tick count? Used in Syscon encrypted communication. Set to a random value when session key is set. | ||
|- | |- | ||
| 0x513 || | | 0x513 || N || 0x1800 || 0x1800 || Y || ? || DRAM size. Set to 0x20000000 on retail, 0x40000000 on devkit. | ||
|- | |- | ||
| 0x514 || | | 0x514 || N || 0x1800 || 0x1800 || Y || ? || F00d-cmd F01 AES-256-CMAC key. Protected on 1.05. | ||
|- | |- | ||
| 0x515 || | | 0x515 || N || 0x1800 || 0x1800 || Y || ? || F00d-cmd F01 AES-256-CBC key. Protected on 1.05. | ||
|- | |- | ||
| 0x516 || | | 0x516 || N || 0x1800 || 0x1800 || Y || ? || F00d-cmd F01 writes (u32)1 here when exporting the infoblk. Next time main() executes this flag is cleared. | ||
|- | |- | ||
| 0x517 || | | 0x517 || N || 0x1800 || 0x1800 || Y || ? || When initializing the EEPROM, this is zeroed if 0x50D has bit8 clear (on 1.692). | ||
|- | |- | ||
| 0x518 || | | 0x518 || N || 0x1800 || 0x1800 || Y || ? || Another current FW version (3.60+?) Comes from SNVS. | ||
|- | |- | ||
| 0x519 || | | 0x519 || N || 0x1800 || 0x1800 || Y || ? || 00s | ||
|- | |- | ||
| 0x51A || | | 0x51A || N || 0x1800 || 0x1800 || Y || ? || Randomized 0x20 byte key unique every boot/reboot/resume used for kernel coredump encryption | ||
|- | |- | ||
| 0x51B || | | 0x51B || N || 0x1800 || 0x1800 || Y || ? || Some kind of model info 0x406000 on retail and 0x416000 on devkit, obtained from syscon command 5 | ||
|- | |- | ||
| 0x51C-0x57F || | | 0x51C-0x57F || N || 0x1800 || 0x0000 || N || ? || ? | ||
|- | |- | ||
| 0x580-0x5FF || | | 0x580-0x5FF || X || 0x0000 || 0x0000 || X || ? || Not used | ||
|- | |- | ||
| 0x600 || | | 0x600 || Y || 0x1000 || 0x1000 || Y || ? || <code>aimgr_sm.self</code> cmd 0x3 return, VisibleId/FuseId | ||
|- | |- | ||
| 0x601 || 3 || 0x1000 || 0x1000 || Y || ? || ? | | 0x601 || 3 || 0x1000 || 0x1000 || Y || ? || ? |
Revision as of 22:59, 4 October 2018
Address = 0xE0058000 + 32 * Slot
Permission bits
Bit | Function |
---|---|
0x01 | accessible for bigmac encrypt |
0x02 | accessible for bigmac decrypt |
0x10 | ? |
0x20 | crypto operation supports a keyslot dst |
0x80 | related to bootrom functionality. If set then permissions for this slot can be reset |
0x400 | dst can be memory |
0x800 | can be written directly by f00d (?) |
0x1000 | can be read directly by f00d |
Key Ring Slots 0xE0058000
Slot | Initial Valid | Initial Protection | Protection (1.69) | Ever Valid (1.69) | Set By? | Description |
---|---|---|---|---|---|---|
0 | N | 0x0442 | 0x0442 | Y | ? | ? |
1 | N | 0x0442 | 0x0442 | N | ? | ? |
2-7 | N | 0x0442 | 0x0040 | N | ? | ? |
8 | N | 0x049F | 0x0081 | Y | ? | enp per-console key |
9 | N | 0x049F | 0x0080 | N | ? | ? |
0xA-0xF | N | 0x049F | 0x0080 | Y | ? | ? |
0x10 | N | 0x0502 | 0x0502 | N | ? | supports decryption only |
0x11-0x1F | N | 0x0502 | 0x0100 | N | ? | ? |
0x20 | N | 0x061F | 0x0200 | Y | ? | Derived from 0x344, used for hmac-sha256 over enc files |
0x21-0x24 | N | 0x061F | 0x061F | N | ? | supports encryption and decryption |
0x25-0x2F | N | 0x061F | 0x0200 | N | ? | ? |
0x30-0x34 | N | 0x041F | 0x041F | N | ? | ? |
0x35-0x7F | N | 0x041F | 0x0000 | N | ? | ? |
0x80-0xFF | X | 0x0000 | 0x0000 | X | ? | Not used |
0x100 | N | 0x041F | 0x041F | N | ? | ? |
0x101-0x17F | N | 0x041F | 0x0000 | N | ? | ? |
0x180-0x1FF | X | 0x0000 | 0x0000 | X | ? | Not used |
0x200-0x203 | Y | 0x0002 | 0x0000 | Y | ? | ? |
0x204-0x205 | Y | 0x006F | 0x006F | Y | ? | ? |
0x206 | Y | 0x00AF | 0x00A0 | Y | ? | Used to derive key used to decrypt personalized layer over enc. Should be per-console. |
0x207 | Y | 0x00AF | 0x00A0 | Y | ? | Used instead of the above key when secret debug mode is set. (Possibly non-per-console?) |
0x208-0x20D | Y | 0x00AF | 0x00A0 | Y | ? | 6 keys used to decrypt enc metadata, which one is used depends on key revision in enc header |
0x20E-0x20F | Y | ? | 0x0010 | Y | ? | Maybe per-console emmc crypto keys? Protected by second_loader. |
0x210-0x211 | Y | 0x001F | 0x0000 | Y | ? | ? |
0x212 | Y | 0x001F | 0x001F | Y | ? | ? |
0x213 | Y | 0x001F | 0x001F | Y | ? | Used to derive SMI keys, which are used for factory fw decryption. Per-console. |
0x214 | Y | 0x001F | 0x0000 | Y | ? | Used to derive keyslots 0x514, 0x515 in second_loader |
0x215 | Y | 0x001F | 0x0000 | Y | ? | ? |
0x216 | Y | 0x001F | 0x001F | Y | ? | Derive 0x502-0x504 by encrypting data in second_loader. |
0x217 | Y | 0x001F | 0x0000 | Y | ? | ? |
0x218-0x2FF | X | 0x0000 | 0x0000 | X | ? | Not used |
0x300-0x33F | Y | 0x0002 | 0x0000 | Y | ? | ? |
0x340 | Y | 0x012F | 0x012F | Y | ? | Used to decrypt keys into the 0x10 key slot |
0x341-0x343 | Y | 0x012F | 0x0120 | Y | ? | ? |
0x344 | Y | 0x022F | 0x0220 | Y | ? | Used to derive key 0x20 in brom. |
0x345-0x348 | Y | 0x022F | 0x022F | Y | ? | Used to decrypt keys into one of the 0x21-0x24 key slot |
0x349-0x353 | Y | 0x022F | 0x0220 | Y | ? | ? |
0x354-0x3FF | Y | 0x001F | 0x0000 | Y | ? | ? |
0x400-0x47F | N | 0x1800 | 0x0000 | N | ? | ? |
0x480-0x4FF | X | 0x0000 | 0x0000 | X | ? | Not used |
0x500 | N | 0x1800 | 0x1800 | N | ? | ? |
0x501 | N | 0x1800 | 0x1000 | Y | first_loader | Used by bootrom first_loader to figure out whether to load from eMMC or ARM comms after reset |
0x502-0x504 | N | 0x1800 | 0x1800 | Y | ? | Related to Ernie SNVS |
0x505 | N | 0x1800 | 0x0000 | N | ? | ? |
0x506 | N | 0x1800 | 0x1800 | Y | ? | ? |
0x507 | N | 0x1800 | 0x1800 | Y | ? | ? |
0x508 | N | 0x1800 | 0x1800 | Y | ? | Ernie HW version (from syscon cmd 0x1). Set to 0x100060D on 1.692, 0x100010A on 1.05, 0x0100010B on 1.50 |
0x509 | N | 0x1800 | 0x1800 | Y | ? | IDPS of unit (console id) |
0x50A | N | 0x1800 | 0x1800 | Y | ? | Byte15bit0,byte14bit0,byte14bit1,byte11bit4: Revocation related. Byte13bit0: Enable F00D debug prints. |
0x50B | N | 0x1800 | 0x1800 | Y | ? | From 0xD2 SNVS block 0, 8 bytes |
0x50C | N | 0x1800 | 0x1800 | Y | ? | Flags. Set to 1 on 1.692 and newer, 0 on older |
0x50D | N | 0x1800 | 0x1800 | Y | ? | OpenPSID |
0x50E | N | 0x1800 | 0x1800 | Y | ? | Current firmware version. Comes from SNVS. |
0x50F | N | 0x1800 | 0x1800 | Y | ? | Factory firmware version. Comes from idstorage. |
0x510 | N | 0x1800 | 0x1800 | Y | ? | Some bit flags, comes from syscon cmd 0x90 offset 0xE0 |
0x511 | N | 0x1800 | 0x1800 | Y | ? | Unique per boot session id, Syscon shared 0xD0 session key |
0x512 | N | 0x1800 | 0x1800 | Y | ? | Tick count? Used in Syscon encrypted communication. Set to a random value when session key is set. |
0x513 | N | 0x1800 | 0x1800 | Y | ? | DRAM size. Set to 0x20000000 on retail, 0x40000000 on devkit. |
0x514 | N | 0x1800 | 0x1800 | Y | ? | F00d-cmd F01 AES-256-CMAC key. Protected on 1.05. |
0x515 | N | 0x1800 | 0x1800 | Y | ? | F00d-cmd F01 AES-256-CBC key. Protected on 1.05. |
0x516 | N | 0x1800 | 0x1800 | Y | ? | F00d-cmd F01 writes (u32)1 here when exporting the infoblk. Next time main() executes this flag is cleared. |
0x517 | N | 0x1800 | 0x1800 | Y | ? | When initializing the EEPROM, this is zeroed if 0x50D has bit8 clear (on 1.692). |
0x518 | N | 0x1800 | 0x1800 | Y | ? | Another current FW version (3.60+?) Comes from SNVS. |
0x519 | N | 0x1800 | 0x1800 | Y | ? | 00s |
0x51A | N | 0x1800 | 0x1800 | Y | ? | Randomized 0x20 byte key unique every boot/reboot/resume used for kernel coredump encryption |
0x51B | N | 0x1800 | 0x1800 | Y | ? | Some kind of model info 0x406000 on retail and 0x416000 on devkit, obtained from syscon command 5 |
0x51C-0x57F | N | 0x1800 | 0x0000 | N | ? | ? |
0x580-0x5FF | X | 0x0000 | 0x0000 | X | ? | Not used |
0x600 | Y | 0x1000 | 0x1000 | Y | ? | aimgr_sm.self cmd 0x3 return, VisibleId/FuseId
|
0x601 | 3 | 0x1000 | 0x1000 | Y | ? | ? |
0x602 | 3 | 0x1000 | 0x1000 | Y | ? | ? |
0x603 | 3 | 0x1000 | 0x1000 | Y | ? | ? |
0x604 | 3 | 0x1000 | 0x1000 | Y | ? | ? |
0x605-0x607 | 3 | 0x1000 | 0x0000 | Y | ? | ? |
0x608-0x6FF | 0 | 0x0000 | 0x0000 | X | ? | Not used |
0x700-0x7FF | 3 | 0x1000 | 0x0000 | Y | ? | 16 public RSA keys for enc, which one is used depends on public key revision from enc header. |