"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

 About This Book

 Geometric Introduction to Elliptic Curves

 Algebraic Introduction to Elliptic Curves

 Abelian Group and Elliptic Curves

 Discrete Logarithm Problem (DLP)

 Finite Fields

 Generators and Cyclic Subgroups

 Reduced Elliptic Curve Groups

 Elliptic Curve Subgroups

 tinyec - Python Library for ECC

 EC (Elliptic Curve) Key Pair

 ECDH (Elliptic Curve Diffie-Hellman) Key Exchange

 ECDSA (Elliptic Curve Digital Signature Algorithm)

 ECES (Elliptic Curve Encryption Scheme)

 EC Cryptography in Java

Standard Elliptic Curves

 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

 "brainpoolP256t1"“ - For 256-Bit ECC Keys

 Terminology

 References

 Full Version in PDF/EPUB