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