The many failures of the PS3 Encryption
PS3 Overview
- Its a Video Game system
- Released in 2006
-
It runs on a modified version of linux
1st Failure
USB
- The thing you cant seem to plugin correctly the first time
- The PS3 has a recovery mode which allows a Operating System loaded over USB
- This is how Sony fixes broken PS3's in its factory
So why can't I also do that?
The Operating System that is sent over USB is encrypted with a Symmetric Key.
Cryptography 101
- Symmetric Key: encrypting and decrypting data use the same key.
- If you find a key for decryption you can use it to encrypt data.
- If you find a key for encryption you can use it to decrypt data.
How to Find Sony's Key
- On Sony's Servers
- On Sony's developers computers
- On the PS3
Now anyone can push an OS to the PS3
2nd Failure
PS3 Programs
- Linux biased programs
- Before the program is run it is checked that it has been authorized by Sony
- This Prevents unauthorized programs from running
- This is done by a Cryptographic Signature
- Cryptographic Signature are created using Asymmetric Keys
Cryptography 102
- Asymmetric Keys: Encrypting and decrypting data uses different keys
- These keys are related to each other and are inverses
- If you know the Decryption Key you also know the Encryption Key
- But If you know the Encryption Key you don't know the Decryption key
- Decryption Key as Private Key
- Encryption Key as Public Key
Cryptography 103
- Cryptographic Signature: A way that you can trust the origin or validity of data.
- Creating a Signature is done by using the Decryption Key on the some message.
- signature = Decryption(message, ...)
- This can be verified using the corresponding Encryption Key
- Encrypting the Signature gets back the original message
- messageĀ = Encryption(Decryption(message, ...))
- messageĀ = Encryption(signature, ...)
Sony's Signature
- Uses Elliptic Curve Digital Signature Algorithm (ECDSA)
- This algorithm needs a large random number to generate a secure signature.
- Sign(random_number, message, sony_private_key) = random_output, signature
- This is only secure when random_number is unique on for every message
- If random_number is repeated on two different messages everything is broken.
So what did Sony do?
They Fucked it up
Warning Math
Getting the Random Number
random\_output_1 = (random\_number_1 * G)
\newline
signature_1 = (random\_output_1 * private\_key) + message_1) / random\_number_1
random\_output_2 = (random\_number_2 * G) = random\_output_1
\newline
signature_2 = ((random\_output_2 * private\_key) + message_2) /random\_number_2
\begin{aligned}
signature_1 - signature_2 &= \dfrac{(random\_output_1 * singing\_key) + message_1}{random\_number} - \\
& \dfrac{(random\_output_2 * singing\_key) + message_2}{random\_number}
\end{aligned}
\begin{aligned}
&= \dfrac{(random\_output_1 * signing\_key) - (random\_output_2 * singing\_key) + message_1 - message_2}{random\_number} \\
& =\dfrac{ message_1 - message_2}{random\_number}
\end{aligned}
\begin{aligned}
random\_number &= \dfrac{message_1 - message_2}{signature_1 - signature_2}
\end{aligned}
Getting Sony Signing Key
\begin{aligned}
signing\_key &= \dfrac{random\_number * signature_1 - message_1}{random\_output_1} \\
& = \dfrac{message_1 * signature_2 - message_2 * signature_1}{random\_output_1} \\
& = \dfrac{signature_1 * \dfrac{message_1 - message_2}{signature_1 - signature_2} - message_1}{random\_output_1} \\
& = \dfrac{\dfrac{message_1 - message_2}{1 - signature_2} - message_1}{random\_output_1} \\
& = \dfrac{\dfrac{message_1 - message_2}{1 - signature_2} - \dfrac{message_1 - message_1 * signature_2)}{1 - signature_2}}{random\_output_1} \\
& = \dfrac{ message_1 * signature_2 - message_2}{random\_output_1 - signature_2} \\
\end{aligned}
\begin{aligned}
signing\_key &= \dfrac{ message_1 * signature_2 - message_2}{random\_output_1 - signature_2} \\
\end{aligned}
How Sony Fucked up PS3 Encryption
By generalzero
How Sony Fucked up PS3 Encryption
- 11