Cryptography Tricks: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
No edit summary
(Removed 128-bit only references and improved accuracy)
Line 1: Line 1:
Here are some cryptography tricks that I have learned with some important people and that helped to make this page. They helped a lot with the Keys and Seeds page construction. Use them wisely :) - Zecoxao
Here are some cryptography tricks that I have learned with some important people and that helped to make this page. They helped a lot with the [[Keys]] and [[Seeds]] page construction. Use them wisely :) - Zecoxao


= AES-CTR tricks =
= AES-CTR tricks =


* Recovery of partial plaintext with two ciphertexts encrypted with same key and iv pair by knowing where zeroes (\x00) are located. This trick was used in the recovery of the PS3 ebootrom keys. Xoring these ciphertexts will reveal plaintext where in both locations there are zeroes in one place and plaintext in the other.
* Recovery of partial plaintext with two ciphertexts encrypted with same (key, iv) pair by knowing where zeroes (\x00) are located. This trick was used in the recovery of the PS3 ebootrom keys. Xoring these ciphertexts will reveal plaintext where in both locations there are zeroes in one place and plaintext in the other.
* AES-CTR encryption is the exact same operation as decryption. If you can make the hardware (black box) decrypt for you, you can also make it encrypt.
 
* AES-CTR encryption is the exact same operation as decryption. If you can make the hardware (black box) decrypt for you, you can also make it encrypt. This trick was used in PS Vita CEX2DEX to generate AES-CMAC key after ConsoleId Certificate modification.


= AES-CBC tricks =
= AES-CBC tricks =


* The iv of a CBC operation is always the previous 0x10 block of the ciphered text when decrypting it into the plaintext, UNLESS it is the starting operation. In this case it is specified by the end-user.
* The iv of a CBC operation is always the previous block of the ciphered text when decrypting it into the plaintext, except when it is the starting operation: in this case iv is specified by the end-user.


= AES-ECB tricks =
= AES-ECB tricks =


* If CBC is used on a block and if the attacker knows where 16 bytes of zeroes are located in known plaintext with given ciphertext location, the attacker can use AES-ECB with the guessed key on that location. If there is a match of the previous 16 bytes as result, the attacker automatically knows that the guessed key is the correct key. This means that the first 16 bytes of the ciphered text will be equal to the second 16 bytes of the plaintext of the ECB decryption, if the plaintext is supposed to have zeroes in the CBC decryption and the ECB/CBC key is correct. ?Do you precisely mean "block" instead of "location" and "16 bytes"?
* If CBC is used on a block and if the attacker knows where a block full of zeroes is located in known plaintext with given ciphertext location, the attacker can use AES-ECB with the guessed key on that location. If there is a match of the previous block as result, the attacker automatically knows that the guessed key is the correct key. This means that the first block of the ciphered text will be equal to the second block of the plaintext of the ECB decryption, if the plaintext is supposed to have zeroes in the CBC decryption and the ECB/CBC key is correct.


= AES-CTR and AES-CBC tricks =
= AES-CTR and AES-CBC tricks =


* If the plaintext starting 0x10 byte block contains zeroes only and is encrypted with AES-CBC, one can also use AES-CTR to know if the key and iv are both correct. Simply attempt to AES-CTR decrypt said block using the given key and iv, and if it turns out zeroes, then it is the correct key and iv. This only works if the starting block is 0x10 zeroes.
* If the plaintext starting block contains zeroes only and is encrypted with AES-CBC, the attacker can use AES-CTR to know if the (key, iv) pair is correct. Simply attempt to AES-CTR decrypt said block using the given (key, iv) pair, and if it turns out full of zeroes, then it is the correct (key, iv) pair. This only works if the starting block is full of zeroes.




{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude>
{{Reverse engineering}}<noinclude>[[Category:Main]]</noinclude>

Revision as of 00:28, 10 February 2022

Here are some cryptography tricks that I have learned with some important people and that helped to make this page. They helped a lot with the Keys and Seeds page construction. Use them wisely :) - Zecoxao

AES-CTR tricks

  • Recovery of partial plaintext with two ciphertexts encrypted with same (key, iv) pair by knowing where zeroes (\x00) are located. This trick was used in the recovery of the PS3 ebootrom keys. Xoring these ciphertexts will reveal plaintext where in both locations there are zeroes in one place and plaintext in the other.
  • AES-CTR encryption is the exact same operation as decryption. If you can make the hardware (black box) decrypt for you, you can also make it encrypt. This trick was used in PS Vita CEX2DEX to generate AES-CMAC key after ConsoleId Certificate modification.

AES-CBC tricks

  • The iv of a CBC operation is always the previous block of the ciphered text when decrypting it into the plaintext, except when it is the starting operation: in this case iv is specified by the end-user.

AES-ECB tricks

  • If CBC is used on a block and if the attacker knows where a block full of zeroes is located in known plaintext with given ciphertext location, the attacker can use AES-ECB with the guessed key on that location. If there is a match of the previous block as result, the attacker automatically knows that the guessed key is the correct key. This means that the first block of the ciphered text will be equal to the second block of the plaintext of the ECB decryption, if the plaintext is supposed to have zeroes in the CBC decryption and the ECB/CBC key is correct.

AES-CTR and AES-CBC tricks

  • If the plaintext starting block contains zeroes only and is encrypted with AES-CBC, the attacker can use AES-CTR to know if the (key, iv) pair is correct. Simply attempt to AES-CTR decrypt said block using the given (key, iv) pair, and if it turns out full of zeroes, then it is the correct (key, iv) pair. This only works if the starting block is full of zeroes.