Editing Kirk
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
The PSP KIRK Crypto Engine is a security hardware device that is embedded into the TACHYON main IC chip. It is a bus master and can DMA to/from main DDR RAM memory, operating independantly of the CPU. It is | The PSP KIRK Crypto Engine is a security hardware device that is embedded into the TACHYON main IC chip. It is a bus master and can DMA to/from main DDR RAM memory, operating independantly of the CPU. It is intefaced via memory mapped registers at base of 0xBDE00000 ([SPOCK Crypto Engine] on the other hand is mapped to 0xBDF00000). It is capable of performing AES encryption, decryption, SHA1 Hash, pseudo random number generation, and signature generation and verifications (ECDSA) and CMAC. | ||
= Commands = | = Commands = | ||
On PSP there are | On PSP there are 18 KIRK commands. On PSVita, there are these 18 commands plus some new commands to support bigger keys (192 bits for example). See [https://wiki.henkaku.xyz/vita/F00D_Commands#gcauthmgr_sm.self F00D commands]. | ||
== Table == | == Table == | ||
Line 505: | Line 14: | ||
! scope="col"| Input size | ! scope="col"| Input size | ||
! scope="col"| Output size | ! scope="col"| Output size | ||
! scope="col"| Result | |||
! scope="col"| Used in | ! scope="col"| Used in | ||
|- | |- | ||
| 1 | | 1 | ||
| KIRK_CMD_DECRYPT_PRIVATE | | KIRK_CMD_DECRYPT_PRIVATE | ||
| Super-Duper decryption (no inverse) | | Super-Duper decryption (no inverse) | ||
| buf_size+ | | buf_size+0x40 | ||
| buf_size | | buf_size | ||
| memlmd, mesg_led | | | ||
| memlmd, mesg_led | |||
|- | |- | ||
| 2 | | 2 | ||
| | | KIRK_CMD_2 | ||
| Encrypt Operation | | Encrypt Operation (inverse of cmd 3) | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
| 3 | | 3 | ||
| | | KIRK_CMD_3 | ||
| Decrypt Operation | | Decrypt Operation (inverse of cmd 2) | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
| 4 | | 4 | ||
| | | KIRK_CMD_ENCRYPT_IV_0 | ||
| Encrypt Operation (inverse of | | Encrypt Operation (inverse of cmd 7) (IV=0) | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| chnnlsv, memab | | | ||
| chnnlsv, memab | |||
|- | |- | ||
| 5 | | 5 | ||
| | | KIRK_CMD_ENCRYPT_IV_FUSE | ||
| Encrypt Operation (inverse of | | Encrypt Operation (inverse of cmd 8) (IV=FuseID) | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| | | | ||
| chnnlsv, psheet since PSP FW 2.81 for PGD, ?openpsid for IDS Certificates? | |||
|- | |- | ||
| 6 | | 6 | ||
| | | KIRK_CMD_ENCRYPT_IV_USER | ||
| Encrypt Operation (inverse of | | Encrypt Operation (inverse of cmd 9) (IV=UserDefined) | ||
| | | | ||
| | | | ||
| | | | ||
| | |||
| | |||
|- | |- | ||
| 7 | | 7 | ||
| | | KIRK_CMD_DECRYPT_IV_0 | ||
| Decrypt Operation (inverse of | | Decrypt Operation (inverse of cmd 4) (IV=0) | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| memlmd, mesg_led,chnnlsv, memab | | | ||
| memlmd, mesg_led,chnnlsv, memab | |||
|- | |- | ||
| 8 | | 8 | ||
| | | KIRK_CMD_DECRYPT_IV_FUSE | ||
| Decrypt Operation (inverse of | | Decrypt Operation (inverse of cmd 5) (IV=FuseID) | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| buf_size+0x14 | | buf_size+0x14 | ||
| | | | ||
| chnnlsv, psheet since PSP FW 2.81 for PGD | |||
|- | |- | ||
| 9 | | 9 | ||
| | | KIRK_CMD_DECRYPT_IV_USER | ||
| Decrypt Operation (inverse of | | Decrypt Operation (inverse of cmd 6) (IV=UserDefined) | ||
| | | | ||
| | |||
| | | | ||
| | | | ||
| | |||
|- | |- | ||
| 10 (0xA) | | 10 (0xA) | ||
| KIRK_CMD_PRIV_SIGVRY | | KIRK_CMD_PRIV_SIGVRY | ||
| Private Signature Verify (checks for private SCE | | Private Signature Verify (checks for private SCE sig) | ||
| | | | ||
| | | | ||
| | |||
| | | | ||
|- | |- | ||
| 11 (0xB) | | 11 (0xB) | ||
Line 612: | Line 101: | ||
| SHA1 Hash | | SHA1 Hash | ||
| buf_size >= 0x14 | | buf_size >= 0x14 | ||
| 0x14 | | ?0x14? | ||
| memlmd, mesg_led, memab | | | ||
| memlmd, mesg_led, memab | |||
|- | |- | ||
| 12 (0xC) | | 12 (0xC) | ||
| | | KIRK_CMD_MUL1 | ||
| ECDSA Generate | | ECDSA Generate Keys | ||
| 0 | | 0 | ||
| 0x3C | | 0x3C | ||
| | | | ||
| | | memab | ||
|- | |- | ||
| 13 (0xD) | | 13 (0xD) | ||
| | | KIRK_CMD_MUL2 | ||
| ECDSA Multiply Point | | ECDSA Multiply Point | ||
| 0x3C | | 0x3C | ||
| 0x3C | | 0x3C | ||
| | | | ||
| | | | ||
|- | |- | ||
| 14 (0xE) | | 14 (0xE) | ||
Line 640: | Line 126: | ||
| 0 | | 0 | ||
| 0x14 | | 0x14 | ||
| mesg_led, chnnlsv, memab, semawm | | | ||
| mesg_led, chnnlsv, memab, semawm | |||
|- | |- | ||
| 15 (0xF) | | 15 (0xF) | ||
| | | KIRK_CMD_15 | ||
| | | (absolutely no idea – could be KIRK initialization) | ||
| | | | ||
| | | | ||
| | |||
| IPL | | IPL | ||
|- | |- | ||
| 16 (0x10) | | 16 (0x10) | ||
Line 658: | Line 142: | ||
| 0x34 | | 0x34 | ||
| 0x28 | | 0x28 | ||
| | | | ||
| | | memab | ||
|- | |- | ||
| 17 (0x11) | | 17 (0x11) | ||
| KIRK_CMD_SIGVRY | | KIRK_CMD_SIGVRY | ||
| | | Signature Verification (checks for generated signatures) | ||
| 0x64 | | 0x64 | ||
| 0 | | 0 | ||
| | | | ||
| | | memab | ||
|- | |- | ||
| 18 (0x12) | | 18 (0x12) | ||
| KIRK_CMD_CERTVRY | | KIRK_CMD_CERTVRY | ||
| Certificate Verification | | Certificate Verification (IDStorage Certificates CMAC) | ||
| 0xB8 | | 0xB8 | ||
| 0 | | 0 | ||
| openpsid, memab | | | ||
| openpsid, memab | |||
|} | |} | ||
== Command 1 == | |||
== | === Usages === | ||
=== | === Algorithm === | ||
=== Vulnerabilities === | |||
== Command 2 == | |||
== Command | == Command 3 == | ||
== Command 4 == | |||
== Command 5 == | |||
== Command 6 == | |||
== Command 7 == | |||
== Command | == Command 8 == | ||
== Command 9 == | |||
== Command 10 == | |||
== Command 11 == | |||
== Command | == Command 12 == | ||
== Command 13 == | |||
== Command 14 == | |||
== Command 15 == | |||
== Command 16 == | |||
== Command 17 == | |||
= | == Command 18 == | ||
= Library = | |||
= | == Calling commands using KIRK registers == | ||
* [https://github.com/DaveeFTW/iplsdk/tree/master/src/kirk] | * [https://github.com/DaveeFTW/iplsdk/tree/master/src/kirk] | ||
Line 1,022: | Line 216: | ||
* [http://uofw.github.io/upspd/docs/SilverSpring_Blog/my.malloc.us/silverspring/kirk-crypto-engine/index.html] | * [http://uofw.github.io/upspd/docs/SilverSpring_Blog/my.malloc.us/silverspring/kirk-crypto-engine/index.html] | ||
= | = Notes = | ||
In 2008 SilverSpring wrote: | |||
<pre> | |||
Currently what is known about the cipher is that it is: | |||
a block cipher operating in CBC mode | |||
an all zero 128-bit initialization vector | |||
128-bit block and key sizes | |||
cmd4/7 uses a static key that is identical in all PSP’s | |||
cmd5/8 uses a key based off the fuseID making all operations unique per PSP | |||
cmd6/9 uses a user-defined 128-bit key | |||
cmd1/2/3 uses the block cipher but also signature algorithms | |||
the remaining KIRK cmd’s do not use the block cipher (sig, hash, & prng algo’s) | |||
</pre> |