| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- IMPORTANT
- =========
- 1. Do not use any of the OpenSSL binaries
- 2. Do not compile OpenSSL binaries yourself
- (except for doing some research into the deep internals of OpenSSL)
- REASONS
- =======
- All OpenSSL binaries included are highly experimental and are likely to fail
- in many cases. To get some real benefit from OpenSSL (or PolarSSL) it should
- handle all crypting/hashing.
- However this is not possible because Microsoft has slightly altered AES
- encryption in KMSv6 and uses a non-AES variant of the Rijndael CMAC in
- KMSv4. OpenSSL is not able to handle this if you use it correctly.
- This means OpenSSL can be used safely only for SHA256 and HMAC SHA256
- calculations used in KMSv5 and KMSv6 but the code size benefit is only
- 100 to 300 bytes (depending on the architecture).
- To benefit more from OpenSSL (getting it performing the AES stuff) I do
- the first phase of AES encryption/decryption (called key expansion) with my
- own code. I then poke the expanded key into internal OpenSSL structs to make
- it behave in a way not intended by the OpenSSL developers but in a way to
- perform non-standard AES crypting as required by KMSv4 and KMSv6. KMSv5 is
- the only protocol that could use OpenSSL without hacking the OpenSSL internals.
- That means vlmcsd still needs about 40% of the internal AES code plus some
- OpenSSL hacking code to poke the expanded key into OpenSSL.
- The entire OpenSSL hacking does not work in every case because the internal
- OpenSSL structs differ depending on the OpenSSL version, OpenSSL configuration
- at compile time (whether it is configured to use compiled C code or assembler
- code), CPU architecture and CPU features (whether it can perform AES in
- hardware).
- SUMMARY
- =======
- If you use OpenSSL in a safe way (compile with CRYPTO=openssl), there is not
- much benefit from it. The binary may become bigger or smaller and you
- definitely need more RAM when you run vlmcsd or vlmcs.
- If you use hacked OpenSSL (compile with CRYPTO=openssl_with_aes or
- CRYPTO=openssl_with_aes_soft) you risk malfunction of vlmcs/vlmcsd even if it
- performed correctly several times before.
- Both vlmcs and vlmcsd do not have more features when compiled with OpenSSL
- support. It may be faster (especially on CPUs with hardware assisted AES) but
- uses more memory and may fail or perform unreliably.
|