473 lines
17 KiB
Markdown
473 lines
17 KiB
Markdown
* [What Is Miracl](README.md)
|
||
* [Security Advisory](security-advisory.md)
|
||
* Benchmarks
|
||
* [Miracl Standard Curves](miracl-standard-curves.md)
|
||
* [IEEE 1363](ieee-1363.md)
|
||
* [Elliptic Curves](elliptic-curves.md)
|
||
* [Licensing](licensing.md)
|
||
* Reference Manual
|
||
* [Low Level Routines](reference-manual/low-level-routines.md)
|
||
* [Advanced Arithmetic Routines](reference-manual/advanced-arithmetic-routines.md)
|
||
* [Montgomery Arithmetic Routines](reference-manual/montgomery-arithmetic-routines.md)
|
||
* [ZZn2 Arithmetic Routines](reference-manual/zzn2-arithmetic-routines.md)
|
||
* [Encryption Routines](reference-manual/encryption-routines.md)
|
||
* [Elliptic Curve Routines](reference-manual/elliptic-curve-routines.md)
|
||
* [Floating Slash Routines](reference-manual/floating-slash-routines.md)
|
||
* [Structure Reference](reference-manual/structure-reference.md)
|
||
|
||
|
||
Benchmarks
|
||
---
|
||
|
||
* [Overview](#overview)
|
||
* [Output of the BMARK Program](#output)
|
||
* [Elliptic Curve Point Multiplication](#curve)
|
||
* [Pairing-Based Crypto](#pairing)
|
||
|
||
## Overview <a id="overview"></a>
|
||
|
||
**Performance is the biggest single issue for implementors, and MIRACL allows a variety of techniques (algorithmic tricks and/or assembly language) to be used to squeeze maximum performance from a particular environment. So use MIRACL in your cryptographic API for a performance boost - you may not need that expensive Cryptographic accelerator!**
|
||
|
||
This diagram below shows timings for modular exponentiation, that is the calculation of xy mod n, for x, y and n all the same size in-bits - the size shown along the horizontal axis. The exponent y is chosen at random. This is the bottleneck calculation in many cryptographic protocols. Five different methods are implemented for the Intel 80x86/Pentium family. Timings on the horizontal axes are correct in seconds for 8192-bit exponentiation. For 4096-bits divide by 8, for 2048-bits divide by 8 again, etc. For a paper describing the methods in more details see [timings.doc](miracl-explained/timings.doc ':ignore').
|
||
|
||
The following timings were obtained using the Borland C/C++ Compiler/assembler, for modular exponentiation.
|
||
|
||
Times in milliseconds for optimal technique:
|
||
|
||
| | 512-bits | 1024-bits | 2048-bits | 4096-bits |
|
||
|--------------------|----------|-----------|-----------|-----------|
|
||
| 33MHz 80486DX | 370 | 2833 | 17833 | 111000 |
|
||
| 60MHz Pentium | 48 | 353 | 2452 | 18500 |
|
||
| 180MHz Pentium Pro | 12 | 90 | 564 | 3551 |
|
||
| 233MHz Pentium II | 10 | 80 | 510 | 3250 |
|
||
|
||
**On a 233 Mhz Pentium II - Best times (without precomputation)**
|
||
|
||
- A 1024-bit RSA decryption/signature takes 20ms. <sup>*</sup>
|
||
- A 2048-bit RSA decryption takes 160 ms. <sup>+</sup>
|
||
- A 1024-bit (160-bit exponent) DSS verification takes 16ms. <sup>+</sup>
|
||
- A 2048-bit (256-bit exponent) DSS verification takes 79ms <sup>+</sup>
|
||
- A 160-bit Elliptic Curve ECS verification takes 11 ms. <sup>*</sup>
|
||
- A 256-bit Elliptic Curve ECS verification takes 26ms. <sup>*</sup>
|
||
- A 192-bit Elliptic Curve ECS verification takes 9ms (NIST Standard Curve - Special Modulus) <sup>*</sup>
|
||
- A 224-bit Elliptic Curve ECS verification takes 13ms (NIST Standard Curve - Special Modulus) <sup>*</sup>
|
||
|
||
**On 80MHz ARM7TDMI - Best times (without precomputation)**
|
||
|
||
- A 1024-bit RSA decryption/signature takes 120ms <sup>*</sup>
|
||
- A 192-bit Elliptic Curve point multiplication takes 38ms (NIST Standard Curve - Special Modulus) <sup>*</sup>
|
||
- A 224-bit Elliptic Curve point multiplication takes 53ms (NIST Standard Curve - Special Modulus) <sup>*</sup>
|
||
|
||
MIRACL contains fast experimental implementations of [Identity-Based Encryption](http://crypto.stanford.edu/ibe/).
|
||
|
||
Timings include all number theoretic components of encrypt/decrypt processing. The most time-consuming component is the calculation of the Tate Pairing. The discrete logarithm-bit-length security of a pairing-based system is a function of the product of the _security multiplier k and the-bit length of the base field. In these cases k=2 and the base field is 512-bits, for 1024-bit security.
|
||
|
||
**On a 1GHz Pentium III**
|
||
|
||
- A 1024-bit IBE encrypt takes 35ms <sup>*</sup>
|
||
- A 1024-bit IBE decrypt takes 27ms <sup>*</sup>
|
||
- A 1024-bit IBE encrypt takes 22ms (with precomputation) <sup>*</sup>
|
||
- A 1024-bit IBE decrypt takes 17ms (with precomputation) <sup>*</sup>
|
||
- A 1024-bit Tate pairing takes 20ms <sup>*</sup>
|
||
- A 1024-bit Tate pairing takes 8.6ms (with precomputation) <sup>*</sup>
|
||
|
||
<sup>* - Using Comba Method for modular multiplication</sup><br />
|
||
<sup>+ - Using KCM Method for modular multiplication</sup>
|
||
|
||
## Output of the BMARK program <a id="output"></a>
|
||
|
||
Below is the output of the BMARK program, on a single core of a 2.4GHz Intel i5 520 processor, compiled with GCC, with standard /O2 compiler optimisation.
|
||
|
||
> This is for the standard version of MIRACL, with no special optimizations.
|
||
|
||
- MIRACL – 64-bit version
|
||
- Little Endian processor
|
||
- Using some assembly language
|
||
- No special optimizations
|
||
- Precomputation uses fixed Window size = 8
|
||
- So 256 values are precomputed and stored
|
||
|
||
> No optimizations/assembly language apply to GF(2^m) Elliptic Curves.<br />Times are elapsed real-times - so make sure nothing else is running!
|
||
|
||
Modular exponentiation benchmarks – calculating g^e mod p. From these figures it should be possible to roughly estimate the time required for your favourite PK algorithm, RSA, DSA, DH, etc.
|
||
|
||
**Key**
|
||
|
||
- R – random base-bits/random exponent-bits
|
||
- V – random base-bits/(small exponent e)
|
||
- S – (small base g) /random exponent-bits
|
||
- P – exponentiation with precomputation (fixed base g)
|
||
- D – double exponentiation g^e.a^b mod p
|
||
- F3 = 257, F4 = 65537
|
||
- RSA - Rivest-Shamir-Adleman
|
||
- DH - Diffie Hellman Key exchange
|
||
- DSA - Digital Signature Algorithm
|
||
|
||
**512-bit prime**
|
||
|
||
- R - 54945 iterations of 512/ 160 0.18 ms per iteration
|
||
- D - 45015 iterations of 512/ 160 0.22 ms per iteration
|
||
- R - 18292 iterations of 512/ 512 0.55 ms per iteration
|
||
- S - 67125 iterations of g=3/ 160 0.15 ms per iteration
|
||
- P - 281436 iterations of 512/ 160 0.04 ms per iteration
|
||
|
||
**1024-bit RSA decryption**
|
||
|
||
1.09 ms
|
||
|
||
**512-bit DH 160-bit exponent**
|
||
|
||
- Offline, no precomputation 0.18 ms
|
||
- Offline, small base 0.15 ms
|
||
- Offline, w. precomputation 0.04 ms
|
||
- Online 0.18 ms
|
||
|
||
**512-bit DSA 160-bit exponent**
|
||
|
||
- Signature no precomputation 0.18 ms
|
||
- Signature w. precomputation 0.04 ms
|
||
- Verification 0.22 ms
|
||
|
||
**1024-bit prime**
|
||
|
||
- R - 17875 iterations of 1024/ 160 0.56 ms per iteration
|
||
- D - 14859 iterations of 1024/ 160 0.67 ms per iteration
|
||
- V - 1163058 iterations of 1024/e= 3 0.01 ms per iteration
|
||
- V - 154892 iterations of 1024/e=F4 0.06 ms per iteration
|
||
- S - 22799 iterations of g=3/ 160 0.44 ms per iteration
|
||
- P - 89730 iterations of 1024/ 160 0.11 ms per iteration
|
||
|
||
**2048-bit RSA decryption**
|
||
|
||
6.62 ms
|
||
|
||
**1024-bit RSA encryption e=3**
|
||
|
||
0.01 ms
|
||
|
||
**1024-bit RSA encryption e=65537**
|
||
|
||
0.06 ms
|
||
|
||
**1024-bit DH 160-bit exponent**
|
||
|
||
- Offline, no precomputation 0.56 ms
|
||
- Offline, small base 0.44 ms
|
||
- Offline, w. precomputation 0.11 ms
|
||
- Online 0.56 ms
|
||
|
||
**1024-bit DSA 160-bit exponent**
|
||
|
||
- Signature no precomputation 0.56 ms
|
||
- Signature w. precomputation 0.11 ms
|
||
- Verification 0.67 ms
|
||
|
||
**2048-bit prime**
|
||
|
||
- R - 2982 iterations of 2048/ 256 3.35 ms per iteration
|
||
- D - 2335 iterations of 2048/ 256 4.28 ms per iteration
|
||
- R - 398 iterations of 2048/2048 25.13 ms per iteration
|
||
- V - 366871 iterations of 2048/e= 3 0.03 ms per iteration
|
||
- V - 48125 iterations of 2048/e=F4 0.21 ms per iteration
|
||
- S - 4223 iterations of g=3/ 256 2.37 ms per iteration
|
||
- P - 15500 iterations of 2048/ 256 0.65 ms per iteration
|
||
|
||
**2048-bit RSA encryption e=3**
|
||
|
||
0.03 ms
|
||
|
||
**2048-bit RSA encryption e=65537**
|
||
|
||
0.21 ms
|
||
|
||
**2048-bit DH 256-bit exponent**
|
||
|
||
- Offline, no precomputation 3.35 ms
|
||
- Offline, small base 2.37 ms
|
||
- Offline, w. precomputation 0.65 ms
|
||
- Online 3.35 ms
|
||
|
||
**2048-bit DSA 256-bit exponent**
|
||
|
||
- Signature no precomputation 3.35 ms
|
||
- Signature w. precomputation 0.65 ms
|
||
- Verification 4.28 ms
|
||
|
||
## Elliptic Curve Point Multiplication <a id="curve"></a>
|
||
|
||
Elliptic Curve point multiplication benchmarks – calculating r.P
|
||
From these figures it should be possible to roughly estimate the time required for your favourite EC PK algorithm, ECDSA, ECDH, etc.
|
||
|
||
**Key**
|
||
- ER - Elliptic Curve point multiplication r.P
|
||
- ED - Elliptic Curve double multiplication r.P + s.Q
|
||
- EP - Elliptic Curve multiplication with precomputation
|
||
- EC - Elliptic curve GF(p) - p of no special form
|
||
- ECDH - Diffie Hellman Key exchange
|
||
- ECDSA - Digital Signature Algorithm
|
||
|
||
**160-bit GF(p) Elliptic Curve**
|
||
|
||
- ER - 22280 iterations 0.45 ms per iteration
|
||
- ED - 17217 iterations 0.58 ms per iteration
|
||
- EP - 96332 iterations 0.10 ms per iteration
|
||
|
||
**160-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.45 ms
|
||
- Offline, w. precomputation 0.10 ms
|
||
- Online 0.45 ms
|
||
|
||
**160-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.45 ms
|
||
- Signature w. precomputation 0.10 ms
|
||
- Verification 0.58 ms
|
||
|
||
**192-bit GF(p) Elliptic Curve**
|
||
|
||
- ER - 17095 iterations 0.58 ms per iteration
|
||
- ED - 12936 iterations 0.77 ms per iteration
|
||
- EP - 74904 iterations 0.13 ms per iteration
|
||
|
||
**192-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.58 ms
|
||
- Offline, w. precomputation 0.13 ms
|
||
- Online 0.58 ms
|
||
|
||
**192-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.58 ms
|
||
- Signature w. precomputation 0.13 ms
|
||
- Verification 0.77 ms
|
||
|
||
**224-bit GF(p) Elliptic Curve**
|
||
|
||
- ER - 11832 iterations 0.85 ms per iteration
|
||
- ED - 9486 iterations 1.05 ms per iteration
|
||
- EP - 52869 iterations 0.19 ms per iteration
|
||
|
||
**224-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.85 ms
|
||
- Offline, w. precomputation 0.19 ms
|
||
- Online 0.85 ms
|
||
|
||
**224-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.85 ms
|
||
- Signature w. precomputation 0.19 ms
|
||
- Verification 1.05 ms
|
||
|
||
**256-bit GF(p) Elliptic Curve**
|
||
|
||
- ER - 9410 iterations 1.06 ms per iteration
|
||
- ED - 7124 iterations 1.40 ms per iteration
|
||
- EP - 41546 iterations 0.24 ms per iteration
|
||
|
||
**256-bit ECDH**
|
||
|
||
- Offline, no precomputation 1.06 ms
|
||
- Offline, w. precomputation 0.24 ms
|
||
- Online 1.06 ms
|
||
|
||
**256-bit ECDSA**
|
||
|
||
- Signature no precomputation 1.06 ms
|
||
- Signature w. precomputation 0.24 ms
|
||
- Verification 1.40 ms
|
||
|
||
**163-bit GF(2^m) Elliptic Curve**
|
||
|
||
- ER - 27160 iterations 0.37 ms per iteration
|
||
- ED - 20689 iterations 0.48 ms per iteration
|
||
- EP - 107712 iterations 0.09 ms per iteration
|
||
|
||
**163-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.37 ms
|
||
- Offline, w. precomputation 0.09 ms
|
||
- Online 0.37 ms
|
||
|
||
**163-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.37 ms
|
||
- Signature w. precomputation 0.09 ms
|
||
- Verification 0.48 ms
|
||
|
||
**163-bit GF(2^m) Koblitz Elliptic Curve**
|
||
|
||
- ER - 43413 iterations 0.23 ms per iteration
|
||
- ED - 23882 iterations 0.42 ms per iteration
|
||
- EP - 111239 iterations 0.09 ms per iteration
|
||
|
||
**163-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.23 ms
|
||
- Offline, w. precomputation 0.09 ms
|
||
- Online 0.23 ms
|
||
|
||
**163-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.23 ms
|
||
- Signature w. precomputation 0.09 ms
|
||
- Verification 0.42 ms
|
||
|
||
**233-bit GF(2^m) Elliptic Curve**
|
||
|
||
- ER - 16703 iterations 0.60 ms per iteration
|
||
- ED - 12460 iterations 0.80 ms per iteration
|
||
- EP - 62551 iterations 0.16 ms per iteration
|
||
|
||
**233-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.60 ms
|
||
- Offline, w. precomputation 0.16 ms
|
||
- Online 0.60 ms
|
||
|
||
**233-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.60 ms
|
||
- Signature w. precomputation 0.16 ms
|
||
- Verification 0.80 ms
|
||
|
||
**233-bit GF(2^m) Koblitz Elliptic Curve**
|
||
|
||
- ER - 27404 iterations 0.36 ms per iteration
|
||
- ED - 13872 iterations 0.72 ms per iteration
|
||
- EP - 62887 iterations 0.16 ms per iteration
|
||
|
||
**233-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.36 ms
|
||
- Offline, w. precomputation 0.16 ms
|
||
- Online 0.36 ms
|
||
|
||
**233-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.36 ms
|
||
- Signature w. precomputation 0.16 ms
|
||
- Verification 0.72 ms
|
||
|
||
**283-bit GF(2^m) Elliptic Curve**
|
||
|
||
- ER - 9870 iterations 1.01 ms per iteration
|
||
- ED - 7095 iterations 1.41 ms per iteration
|
||
- EP - 37435 iterations 0.27 ms per iteration
|
||
|
||
**283-bit ECDH**
|
||
|
||
- Offline, no precomputation 1.01 ms
|
||
- Offline, w. precomputation 0.27 ms
|
||
- Online 1.01 ms
|
||
|
||
**283-bit ECDSA**
|
||
|
||
- Signature no precomputation 1.01 ms
|
||
- Signature w. precomputation 0.27 ms
|
||
- Verification 1.41 ms
|
||
|
||
**283-bit GF(2^m) Koblitz Elliptic Curve**
|
||
|
||
- ER - 19687 iterations 0.51 ms per iteration
|
||
- ED - 8968 iterations 1.12 ms per iteration
|
||
- EP - 37505 iterations 0.27 ms per iteration
|
||
|
||
**283-bit ECDH**
|
||
|
||
- Offline, no precomputation 0.51 ms
|
||
- Offline, w. precomputation 0.27 ms
|
||
- Online 0.51 ms
|
||
|
||
**283-bit ECDSA**
|
||
|
||
- Signature no precomputation 0.51 ms
|
||
- Signature w. precomputation 0.27 ms
|
||
- Verification 1.12 ms
|
||
|
||
**571-bit GF(2^m) Elliptic Curve**
|
||
|
||
- ER - 2227 iterations 4.49 ms per iteration
|
||
- ED - 1504 iterations 6.65 ms per iteration
|
||
- EP - 8231 iterations 1.21 ms per iteration
|
||
|
||
**571-bit ECDH**
|
||
|
||
- Offline, no precomputation 4.49 ms
|
||
- Offline, w. precomputation 1.21 ms
|
||
- Online 4.49 ms
|
||
|
||
**571-bit ECDSA**
|
||
|
||
- Signature no precomputation 4.49 ms
|
||
- Signature w. precomputation 1.21 ms
|
||
- Verification 6.65 ms
|
||
|
||
**571-bit GF(2^m) Koblitz Elliptic Curve**
|
||
|
||
- ER - 5035 iterations 1.99 ms per iteration
|
||
- ED - 2242 iterations 4.46 ms per iteration
|
||
- EP - 8247 iterations 1.21 ms per iteration
|
||
|
||
**571-bit ECDH**
|
||
|
||
- Offline, no precomputation 1.99 ms
|
||
- Offline, w. precomputation 1.21 ms
|
||
- Online 1.99 ms
|
||
|
||
**571-bit ECDSA**
|
||
|
||
- Signature no precomputation 1.99 ms
|
||
- Signature w. precomputation 1.21 ms
|
||
- Verification 4.46 ms
|
||
|
||
## Pairing-Based Crypto <a id="pairing"></a>
|
||
|
||
Processor: 2.4 GHz Intel i5 520M.<br />
|
||
AES refers to equivalent AES-bits of security. For example 128-bits refers to AES with a 128-bit key.<br />
|
||
For G1, G2 and GT precomputation, 8-bit windows are used.<br />
|
||
All timings are in milli-seconds. Maximum optimization applied.<br />
|
||
"One More" refers to the cost of one more pairing in a multi-pairing. The (p) means that precomputation is used.<br />
|
||
|
||
**+Timings for Type-1 pairings G1 X G1 = GT+**
|
||
|
||
These pairing friendly curves are used, where _k_ is the embedding degree:
|
||
- SSP - Super-singular Curve over GF(_p_) (512-bit modulus _p_, _k_=2)
|
||
- SSP - Super-singular Curve over GF(_p_) (1536-bit modulus _p_, _k_=2)
|
||
- SS2 - Supersingular Curve over GF(2^_m_) (_m_=379, _k_=4)
|
||
- SS2 - Supersingular Curve over GF(2^_m_) (_m_=1223, _k_=4)
|
||
|
||
| AES/Curve | 80/SSP | 80/SS2 | 128/SSP | 128/SSP |
|
||
|--------------|--------|--------|---------|---------|
|
||
| G1 mul | 1.49 | 0.38 | 13.57 | 2.57 |
|
||
| G1 mul (p) | 0.30 | - | 3.01 | - |
|
||
| Pairing | 3.34 | 1.18 | 40.95 | 19.00 |
|
||
| Pairing (p) | 1.65 | - | 25.22 | - |
|
||
| GT pow | 0.36 | 0.29 | 3.76 | 2.09 |
|
||
| GT Pow (p) | 0.08 | - | 0.78 | - |
|
||
| One More | 2.29 | 1.01 | 20.80 | 17.80 |
|
||
| One More (p) | 0.60 | - | 5.31 | - |
|
||
|
||
**+Timings for Type-3 pairings G2 X G1 = GT+**
|
||
|
||
These pairing friendly curves are used, where _k_ is the embedding degree:
|
||
- CP - Cocks-Pinch Curve over GF(_p_) (512-bit modulus _p_, _k_=2)<br />
|
||
- MNT - MNT Curve over GF(_p_) (160-bit modulus _p_, _k_=6)<br />
|
||
- BN - Barreto-Naehrig Curve over GF(_p_) (256-bit modulus _p_, k=12)<br />
|
||
- KSS - Kachisa-Schaefer-Scott Curve over GF(_p_) (512-bit modulus _p_, _k_=18)<br />
|
||
- BLS - Barreto-Lynn-Scott Curve over GF(_p_) (640-bit modulus _p_, _k_=24)
|
||
|
||
| AES/Curve | 80/CP | 80/MNT | 128/BN | 192/KSS | 256/BLS |
|
||
|--------------|-------|--------|--------|---------|---------|
|
||
| G1 mul | 0.51 | 0.19 | 0.22 | 0.7 | 1.26 |
|
||
| G1 mul (p) | 0.1 | 0.04 | 0.07 | 0.24 | 0.43 |
|
||
| G2 mul | 0.51 | 1.15 | 0.44 | 5.53 | 16.04 |
|
||
| G2 mul(p) | 0.1 | 0.35 | 0.19 | 2.81 | 5.44 |
|
||
| Pairing | 1.14 | 1.9 | 2.32 | 20.55 | 33.91 |
|
||
| Pairing (p) | 0.58 | 0.69 | 2.09 | 18.05 | 30.45 |
|
||
| GT pow | 0.12 | 0.24 | 0.95 | 6.2 | 24.87 |
|
||
| GT pow (p) | 0.03 | 0.08 | 0.43 | 2.73 | 6.47 |
|
||
| One More | 0.81 | 1.57 | 0.75 | 4.65 | 6.59 |
|
||
| One More (p) | 0.23 | 0.34 | 0.41 | 2.38 | 3.42Ę |
|