New NXP Kinetis K8X LP Trusted Crypto (LTC) support for PKI (RSA/ECC)
NXP has a new LP Trusted Crypto (LTC) core which accelerates RSA/ECC PKI in their Kinetis K8x line. The LTC hardware accelerator improves:
RSA performance by 12-17X ECC performance by 18-23X Ed/Curve25519 performance by 2-3X.
This adds to the existing MMCAU support which accelerates RNG, AES (CBC, CCM, GCM, CTR), DES/3DES, MD5, SHA, SHA256, SHA384/512 and ChaCha20/Poly1305. The combined LTC/MMCAU hardware acceleration improves performance, reduces power consumption and reduces code size by 40%. Here are the benchmarks on a FRDM-K82F Cortex M4 @ 150MHz, showing the improvements offered by the hardware acceleration: Hardware Accelerated (LTC / MMCAU):RNG 25 kB took 0.026 seconds, 0.939 MB/sAES enc 25 kB took 0.002 seconds, 12.207 MB/sAES dec 25 kB took 0.002 seconds, 12.207 MB/sAES-GCM 25 kB took 0.002 seconds, 12.207 MB/sAES-CTR 25 kB took 0.003 seconds, 8.138 MB/sAES-CCM 25 kB took 0.004 seconds, 6.104 MB/sCHACHA 25 kB took 0.008 seconds, 3.052 MB/sCHA-POLY 25 kB took 0.013 seconds, 1.878 MB/sPOLY1305 25 kB took 0.003 seconds, 8.138 MB/sSHA 25 kB took 0.006 seconds, 4.069 MB/sSHA-256 25 kB took 0.009 seconds, 2.713 MB/sSHA-384 25 kB took 0.032 seconds, 0.763 MB/sSHA-512 25 kB took 0.035 seconds, 0.698 MB/sRSA 2048 public 12.000 milliseconds, avg over 1 iterationsRSA 2048 private 135.000 milliseconds, avg over 1 iterationsECC 256 key generation 17.400 milliseconds, avg over 5 iterationsEC-DHE key agreement 15.200 milliseconds, avg over 5 iterationsEC-DSA sign time 20.200 milliseconds, avg over 5 iterationsEC-DSA verify time 33.000 milliseconds, avg over 5 iterationsCURVE25519 256 key generation 14.400 milliseconds, avg over 5 iterationsCURVE25519 key agreement 14.400 milliseconds, avg over 5 iterationsED25519 key generation 14.800 milliseconds, avg over 5 iterationsED25519 sign time 16.800 milliseconds, avg over 5 iterationsED25519 verify time 30.400 milliseconds, avg over 5 iterations Software only:RNG 25 kB took 0.179 seconds, 0.136 MB/sAES enc 25 kB took 0.099 seconds, 0.247 MB/sAES dec 25 kB took 0.102 seconds, 0.239 MB/sAES-GCM 25 kB took 1.486 seconds, 0.016 MB/sAES-CTR 25 kB took 0.099 seconds, 0.247 MB/sAES-CCM 25 kB took 0.201 seconds, 0.121 MB/sCHACHA 25 kB took 0.043 seconds, 0.568 MB/sCHA-POLY 25 kB took 0.055 seconds, 0.444 MB/sPOLY1305 25 kB took 0.010 seconds, 2.441 MB/sSHA 25 kB took 0.029 seconds, 0.842 MB/sSHA-256 25 kB took 0.079 seconds, 0.309 MB/sSHA-384 25 kB took 0.109 seconds, 0.224 MB/sSHA-512 25 kB took 0.113 seconds, 0.216 MB/sRSA 2048 public 147.000 milliseconds, avg over 1 iterationsRSA 2048 private 2363.000 milliseconds, avg over 1 iterationsECC 256 key generation 355.400 milliseconds, avg over 5 iterationsEC-DHE key agreement 352.400 milliseconds, avg over 5 iterationsEC-DSA sign time 362.400 milliseconds, avg over 5 iterationsEC-DSA verify time 703.400 milliseconds, avg over 5 iterationsCURVE25519 256 key generation 66.200 milliseconds, avg over 5 iterationsCURVE25519 key agreement 65.400 milliseconds, avg over 5 iterationsED25519 key generation 25.000 milliseconds, avg over 5 iterationsED25519 sign time 30.400 milliseconds, avg over 5 iterationsED25519 verify time 74.400 milliseconds, avg over 5 iterations The code to support the LTC is currently in PR #597 here, soon to be rolled into the wolfSSL embedded SSL/TLS library:https://github.com/wolfSSL/wolfssl/pull/597 These changes are also included in the KSDK 2.0.