mirror of https://github.com/Wind4/vlmcsd
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.3 KiB
Plaintext
56 lines
2.3 KiB
Plaintext
9 years ago
|
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.
|
||
|
|
||
|
|