EC Cryptography Tutorials - Herong's Tutorial Examples - v1.03, by Herong Yang
"sect283r1" - For 256-Bit ECC Keys
This section describes 'sect283r1' elliptic curve domain parameters for generating 256-Bit ECC Keys as specified by secg.org.
What Is "sect283r1"? "sect283r1" is a specific elliptic curve and associated domain parameters selected and recommended by SECG (Standards for Efficient Cryptography Group). See "SEC 2: Recommended Elliptic Curve Domain Parameters" at secg.org/sec2-v2.pdf.
The "t283r1" part of the "sect283r1" name indicates:
t Field type = Binary field 283 Key size = 283 r Curve type = Verifiably Random 1 Sequence = 1
"sect283r1" domain parameters (m, f(x), b, G, n, h)
m: The degree of the binary field:
m = 283
f(x): The primitive polynomial of the field:
f(x) = x^283 + x^12 + x^7 + x^5 + 1 The associated elliptic curve: y^2 + xy = x^3 + ax^2 + b
a: The first coefficient of the elliptic curve:
a = 0x01
b: The second coefficient of the elliptic curve:
b = 0x027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5
G: The generator (base point) of the subgroup:
G =(0x05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053, 0x03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4)
n: The order of the subgroup:
n = 0x03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307
h: The cofactor of the subgroup:
h = 2
Verify domain parameters with Python - There is no easy way to perform arithmetic operations on binary polynomials. I need to find a Python package to do this later.
Generate a "sect283r1" key pair with OpenSSL
herong> openssl ecparam -genkey -name sect283r1 \ -out sect283r1.pem -param_enc explicit herong> openssl ec -in sect283r1.pem -noout -text Private-Key: (282 bit) priv: 00:bf:68:27:3f:c9:5e:a9:08:c7:94:51:01:f4:0d: b3:79:26:11:81:30:27:af:eb:8a:2d:1b:a3:ca:33: e7:ff:64:5f:8a:5f pub: 04:05:83:51:2b:0b:16:9d:61:11:3d:95:13:fb:89: 7f:bd:8f:bd:23:6b:a2:07:b2:bd:78:65:2b:a5:97: 44:fa:fb:3d:ea:57:55:00:ab:ce:72:6a:91:38:ac: 25:46:36:e3:0f:8f:f7:18:e3:d9:1e:69:14:86:78: 1d:8f:fc:a0:68:8e:fb:dd:c3:dd:00:a9:4f Field Type: characteristic-two-field Basis Type: ppBasis Polynomial: 08:00:00:00:00:00:00:00:00:00:00:00:00:00:00: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00: 00:00:00:00:10:a1 A: 1 (0x1) B: 02:7b:68:0a:c8:b8:59:6d:a5:a4:af:8a:19:a0:30: 3f:ca:97:fd:76:45:30:9f:a2:a5:81:48:5a:f6:26: 3e:31:3b:79:a2:f5 Generator (uncompressed): 04:05:f9:39:25:8d:b7:dd:90:e1:93:4f:8c:70:b0: df:ec:2e:ed:25:b8:55:7e:ac:9c:80:e2:e1:98:f8: cd:be:cd:86:b1:20:53:03:67:68:54:fe:24:14:1c: b9:8f:e6:d4:b2:0d:02:b4:51:6f:f7:02:35:0e:dd: b0:82:67:79:c8:13:f0:df:45:be:81:12:f4 Order: 03:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff: ff:ff:ff:ef:90:39:96:60:fc:93:8a:90:16:5b:04: 2a:7c:ef:ad:b3:07 Cofactor: 2 (0x2) Seed: 77:e2:b0:73:70:eb:0f:83:2a:6d:d5:b6:2d:fc:88: cd:06:bb:84:be
The printed domain parameters (A, B, Generator, Order, Cofactor) match well with (a, b, G, n, h) specified by secg.org. Remember that OpenSSL prints "Generator" as 0x04<G.x><G.y>.
Table of Contents
Geometric Introduction to Elliptic Curves
Algebraic Introduction to Elliptic Curves
Abelian Group and Elliptic Curves
Discrete Logarithm Problem (DLP)
Generators and Cyclic Subgroups
tinyec - Python Library for ECC
ECDH (Elliptic Curve Diffie-Hellman) Key Exchange
ECDSA (Elliptic Curve Digital Signature Algorithm)
ECES (Elliptic Curve Encryption Scheme)
What Are Standard Elliptic Curves
"openssl ecparam -list_curves" - Curves Supported by OpenSSL
"secp256r1" - For 256-Bit ECC Keys
"secp256k1" - For 256-Bit ECC Keys
►"sect283r1" - For 256-Bit ECC Keys
"brainpoolP256r1"“ - For 256-Bit ECC Keys