"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