Fast and simple constant-time hashing to the BLS12-381 elliptic - - PowerPoint PPT Presentation

fast and simple constant time hashing to the bls12 381
SMART_READER_LITE
LIVE PREVIEW

Fast and simple constant-time hashing to the BLS12-381 elliptic - - PowerPoint PPT Presentation

Fast and simple constant-time hashing to the BLS12-381 elliptic curve (and other curves, too!) Riad S. Wahby, Dan Boneh Stanford December 3 rd , 2019 Motivation Our initial motivation: BLS signatures [BLS01] Motivation Our initial


slide-1
SLIDE 1

Fast and simple constant-time hashing to the BLS12-381 elliptic curve

(and other curves, too!)

Riad S. Wahby, Dan Boneh

Stanford

December 3rd, 2019

slide-2
SLIDE 2

Motivation Our initial motivation: BLS signatures [BLS01]

slide-3
SLIDE 3

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .
slide-4
SLIDE 4

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .

Why simple and constant time?

slide-5
SLIDE 5

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .

Why simple and constant time?

  • Avoids side channels (e.g. Dragonblood [VR19]),

without requiring randomized blinding

slide-6
SLIDE 6

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .

Why simple and constant time? fixed-modulus arithmetic only

  • Avoids side channels (e.g. Dragonblood [VR19]),

without requiring randomized blinding

slide-7
SLIDE 7

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .

Why simple and constant time? fixed-modulus arithmetic only

  • Avoids side channels (e.g. Dragonblood [VR19]),

without requiring randomized blinding

  • Fixed modulus: an order of magnitude less code
slide-8
SLIDE 8

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .

Why simple and constant time? fixed-modulus arithmetic only

  • Avoids side channels (e.g. Dragonblood [VR19]),

without requiring randomized blinding

  • Fixed modulus: an order of magnitude less code
  • Embedded systems often have fixed-modulus

hardware acceleration but slow generic bigint

slide-9
SLIDE 9

Motivation Our initial motivation: BLS signatures [BLS01]

  • Also: VRFs, OPRFs, PAKEs, IBE, . . .

Why simple and constant time?

  • Avoids side channels (e.g. Dragonblood [VR19]),

without requiring randomized blinding

  • Fixed modulus: an order of magnitude less code
  • Embedded systems often have fixed-modulus

hardware acceleration but slow generic bigint Why the BLS12-381 pairing-friendly elliptic curve?

  • Widely used curve for ≈120-bit security level

Will (probably) be an IETF standard soon

slide-10
SLIDE 10

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

slide-11
SLIDE 11

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

  • 2. An optimization to the map of [BCIMRT10]

that reduces its cost to 1 exponentiation ✓ On par with the fastest existing maps

slide-12
SLIDE 12

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

  • 2. An optimization to the map of [BCIMRT10]

that reduces its cost to 1 exponentiation ✓ On par with the fastest existing maps ✓ Fast impls are simple and constant time

slide-13
SLIDE 13

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

  • 2. An optimization to the map of [BCIMRT10]

that reduces its cost to 1 exponentiation ✓ On par with the fastest existing maps ✓ Fast impls are simple and constant time ✓ Applies to essentially any elliptic curve

slide-14
SLIDE 14

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

  • 2. An optimization to the map of [BCIMRT10]

that reduces its cost to 1 exponentiation ✓ On par with the fastest existing maps ✓ Fast impls are simple and constant time ✓ Applies to essentially any elliptic curve

  • 3. Impl and eval of 34 hash variants for BLS12-381
slide-15
SLIDE 15

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

  • 2. An optimization to the map of [BCIMRT10]

that reduces its cost to 1 exponentiation ✓ On par with the fastest existing maps ✓ Fast impls are simple and constant time ✓ Applies to essentially any elliptic curve

  • 3. Impl and eval of 34 hash variants for BLS12-381

✓ 1.3–2× faster than prior constant-time hashes, ≤ 9% slower than non-CT deterministic maps

slide-16
SLIDE 16

Our contributions

  • 1. “Indirect” maps via isogenies, sidestepping

limitations of existing maps when j ∈ {0, 1728} (Recall: pairing-friendly curves often have j = 0)

  • 2. An optimization to the map of [BCIMRT10]

that reduces its cost to 1 exponentiation ✓ On par with the fastest existing maps ✓ Fast impls are simple and constant time ✓ Applies to essentially any elliptic curve

  • 3. Impl and eval of 34 hash variants for BLS12-381

✓ 1.3–2× faster than prior constant-time hashes, ≤ 9% slower than non-CT deterministic maps Open-source impls in C, Rust, Python, . . .

slide-17
SLIDE 17

Roadmap

  • 1. Hash functions to elliptic curves
  • 2. Optimizing the map of [BCIMRT10]
  • 3. Evaluation results
  • 4. IETF standardization efforts
slide-18
SLIDE 18

Notation Hp : {0, 1}⋆ → Fp and Hq : {0, 1}⋆ → Fq are hash functions modeled as random oracles

slide-19
SLIDE 19

Notation Hp : {0, 1}⋆ → Fp and Hq : {0, 1}⋆ → Fq are hash functions modeled as random oracles, e.g.,

  • 1. Seed a PRG with the input
  • 2. Extract a 2 log p-bit integer
  • 3. Reduce mod p
slide-20
SLIDE 20

Notation Hp : {0, 1}⋆ → Fp and Hq : {0, 1}⋆ → Fq are hash functions modeled as random oracles E(Fp) is the elliptic curve group with identity O and points {(x, y) : x, y ∈ Fp, y 2 = x3 + ax + b} additive notation, [α]P for scalar multiplication

slide-21
SLIDE 21

Notation Hp : {0, 1}⋆ → Fp and Hq : {0, 1}⋆ → Fq are hash functions modeled as random oracles E(Fp) is the elliptic curve group with identity O and points {(x, y) : x, y ∈ Fp, y 2 = x3 + ax + b} additive notation, [α]P for scalar multiplication G ⊆ E(Fp) is a subgroup of prime order q. #E(Fp) = hq; h is the cofactor.

slide-22
SLIDE 22

Notation Hp : {0, 1}⋆ → Fp and Hq : {0, 1}⋆ → Fq are hash functions modeled as random oracles E(Fp) is the elliptic curve group with identity O and points {(x, y) : x, y ∈ Fp, y 2 = x3 + ax + b} additive notation, [α]P for scalar multiplication G ⊆ E(Fp) is a subgroup of prime order q. #E(Fp) = hq; h is the cofactor. BLS12-381 defines G1 ⊂ E1(Fp), G2 ⊂ E2(Fp2), GT ⊂ F×

p12, and e : G1 × G2 → GT s.t.

e([α]P1, [β]P2) = e(P1, P2)α·β α, β ∈ Fq

slide-23
SLIDE 23

Attempt #1: random scalar For some distinguished point ˆ P ∈ G, HashToCurveRS(msg): x ← Hq(msg) return [x]ˆ P

slide-24
SLIDE 24

Attempt #1: random scalar For some distinguished point ˆ P ∈ G, HashToCurveRS(msg): x ← Hq(msg) return [x]ˆ P Informally: need a point with unknown discrete log known dlog breaks security of most protocols (e.g., BLS signatures)

slide-25
SLIDE 25

BLS signatures For H : {0, 1}⋆ → G1, ˆ Q ∈ G2: KeyGen() → (pk, sk): r ←

R Zq; return ([r] ˆ

Q, r)

slide-26
SLIDE 26

BLS signatures For H : {0, 1}⋆ → G1, ˆ Q ∈ G2: KeyGen() → (pk, sk): r ←

R Zq; return ([r] ˆ

Q, r) Sign(sk, msg) → sig: return [sk]H(msg)

slide-27
SLIDE 27

BLS signatures For H : {0, 1}⋆ → G1, ˆ Q ∈ G2: KeyGen() → (pk, sk): r ←

R Zq; return ([r] ˆ

Q, r) Sign(sk, msg) → sig: return [sk]H(msg) Verify(pk, msg, sig) → {True, False}: e(H(msg), pk) =

? e(sig, ˆ

Q)

slide-28
SLIDE 28

BLS signatures and HashToCurveRS For HashToCurveRS : {0, 1}⋆ → G1, ˆ Q ∈ G2: KeyGen() → (pk, sk): r ←

R Zq; return ([r] ˆ

Q, r) Sign(sk, msg) → sig: return [sk]HashToCurveRS(msg) Verify(pk, msg, sig) → {True, False}: e(HashToCurveRS(msg), pk) =

? e(sig, ˆ

Q) sig1 = Sign(sk, msg1) = [sk · Hq(msg1)]ˆ P

slide-29
SLIDE 29

BLS signatures and HashToCurveRS For HashToCurveRS : {0, 1}⋆ → G1, ˆ Q ∈ G2: KeyGen() → (pk, sk): r ←

R Zq; return ([r] ˆ

Q, r) Sign(sk, msg) → sig: return [sk]HashToCurveRS(msg) Verify(pk, msg, sig) → {True, False}: e(HashToCurveRS(msg), pk) =

? e(sig, ˆ

Q) sig1 = Sign(sk, msg1) = [sk · Hq(msg1)]ˆ P Trivial existential forgery: Sign(sk, msg2) =

  • Hq(msg2) · Hq(msg1)−1

sig1

slide-30
SLIDE 30

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

slide-31
SLIDE 31

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

slide-32
SLIDE 32

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

E(Fp) = {(x, y) : x, y ∈ Fp, y 2 = x3 + ax + b}

slide-33
SLIDE 33

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

slide-34
SLIDE 34

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

Not constant time; “bad” inputs are common.

slide-35
SLIDE 35

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

Not constant time; “bad” inputs are common.

Loop a fixed number of times?

slide-36
SLIDE 36

Attempt #2: hash and check HashToCurveH&C(msg): ctr ← 0 y ← ⊥ while y = ⊥: x ← Hp(ctr || msg) ctr ← ctr + 1 ySq ← x3 + ax + b y ← sqrt(ySq)

// ⊥ if ySq is non-square

P ← (x, y) return [h]P

// map to G via cofactor mul

Not constant time; “bad” inputs are common.

✗ Loop a fixed number of times? Slow; well-meaning “optimization” breaks CT.

slide-37
SLIDE 37

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5:

slide-38
SLIDE 38

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp

slide-39
SLIDE 39

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp y 2 = x3 + b = ⇒ x =

3
  • y 2 − b
slide-40
SLIDE 40

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp

slide-41
SLIDE 41

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp

slide-42
SLIDE 42

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp

slide-43
SLIDE 43

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp

slide-44
SLIDE 44

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp

slide-45
SLIDE 45

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-46
SLIDE 46

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp [SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-47
SLIDE 47

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp

BLS12-381: p ≡ 1 mod 3, a = 0, 2 ∤ #E(Fp)

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-48
SLIDE 48

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] ✗ p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] ✗ p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp

BLS12-381: p ≡ 1 mod 3, a = 0, 2 ∤ #E(Fp)

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-49
SLIDE 49

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] ✗ p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] ✗ p ≡ 3 mod 4, ab = 0 3 exp [Icart09] ✗ p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] ✗ p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp

BLS12-381: p ≡ 1 mod 3, a = 0, 2 ∤ #E(Fp)

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-50
SLIDE 50

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] ✗ p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] ✗ p ≡ 3 mod 4, ab = 0 3 exp [Icart09] ✗ p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] ✗ p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] ✗ b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp

BLS12-381: p ≡ 1 mod 3, a = 0, 2 ∤ #E(Fp)

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-51
SLIDE 51

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] ✗ p ≡ 2 mod 3, a = 0 1 exp [SW06] ✓ none 3 exp SWU [Ulas07] ✗ p ≡ 3 mod 4, ab = 0 3 exp [Icart09] ✗ p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] ✗ p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] ✗ b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp

BLS12-381: p ≡ 1 mod 3, a = 0, 2 ∤ #E(Fp)

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-52
SLIDE 52

Deterministic maps to elliptic curves M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] ✗ p ≡ 2 mod 3, a = 0 1 exp [SW06] ✓ none 3 exp SWU [Ulas07] ✗ p ≡ 3 mod 4, ab = 0 3 exp [Icart09] ✗ p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] ✗ p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] ✗ b = 0, 2 | #E(Fp) 1 exp This work ✗ ab = 0 1 exp ✓ none 1

+ exp

BLS12-381: p ≡ 1 mod 3, a = 0, 2 ∤ #E(Fp)

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-53
SLIDE 53

The Shallue–van de Woestijne map [SW06] (high level) E : y 2 = f (x) = x3 + ax + b Idea #1 (Ska lba): For X1, X2, X3, X4 = 0, let V (Fp) : f (X1) · f (X2) · f (X3) = X 2

4
slide-54
SLIDE 54

The Shallue–van de Woestijne map [SW06] (high level) E : y 2 = f (x) = x3 + ax + b Idea #1 (Ska lba): For X1, X2, X3, X4 = 0, let V (Fp) : f (X1) · f (X2) · f (X3) = X 2

4

One of f (Xi), i ∈ {1, 2, 3} must be square ⇒ that Xi must be an x-coordinate on E(Fp)

slide-55
SLIDE 55

The Shallue–van de Woestijne map [SW06] (high level) E : y 2 = f (x) = x3 + ax + b Idea #1 (Ska lba): For X1, X2, X3, X4 = 0, let V (Fp) : f (X1) · f (X2) · f (X3) = X 2

4

Idea #2: Construct a map Fp → V (Fp), yielding polynomials X1(t), X2(t), X3(t).

slide-56
SLIDE 56

The Shallue–van de Woestijne map [SW06] (high level) E : y 2 = f (x) = x3 + ax + b Idea #1 (Ska lba): For X1, X2, X3, X4 = 0, let V (Fp) : f (X1) · f (X2) · f (X3) = X 2

4

Idea #2: Construct a map Fp → V (Fp), yielding polynomials X1(t), X2(t), X3(t). SW(t)      (X1(t),

  • f (X1(t)))

if f (X1(t)) is square, else (X2(t),

  • f (X2(t)))

if f (X2(t)) is square, else (X3(t),

  • f (X3(t)))
slide-57
SLIDE 57

The Shallue–van de Woestijne map [SW06] (high level) E : y 2 = f (x) = x3 + ax + b Idea #1 (Ska lba): For X1, X2, X3, X4 = 0, let V (Fp) : f (X1) · f (X2) · f (X3) = X 2

4

Idea #2: Construct a map Fp → V (Fp), yielding polynomials X1(t), X2(t), X3(t). SW(t)      (X1(t),

  • f (X1(t)))

if f (X1(t)) is square, else (X2(t),

  • f (X2(t)))

if f (X2(t)) is square, else (X3(t),

  • f (X3(t)))

constant-time cost dominated by 3 exps (recall: Legendre symbol in Fp ops is 1 exp)

slide-58
SLIDE 58

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

slide-59
SLIDE 59

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

slide-60
SLIDE 60

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

slide-61
SLIDE 61

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

slide-62
SLIDE 62

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

Can use a faster method for cofactor clearing:

  • via endomorphisms [GLV01,SBCDK09,FKR11,BP18]
  • via subgroup structure [S19 (see WB19, §5)]
slide-63
SLIDE 63

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

Possible issue: M is not a bijection: #E(Fp) = p

  • utput distribution is nonuniform
slide-64
SLIDE 64

Hash functions from deterministic maps Compose Hp and M in a natural way: HashToCurveNU(msg) : t ← Hp(msg)

// {0, 1}⋆ → Fp

P ← M(t)

// Fp → E(Fp)

return [h]P

// E(Fp) → G

Possible issue: M is not a bijection: #E(Fp) = p

  • utput distribution is nonuniform

This could be OK—but what if we need uniformity?

slide-65
SLIDE 65

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P P ← P1 + P2 return [h]P

slide-66
SLIDE 66

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P P ← P1 + P2 return [h]P

slide-67
SLIDE 67

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P P ← P1 + P2 return [h]P

slide-68
SLIDE 68

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P P ← P1 + P2 return [h]P

slide-69
SLIDE 69

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P P ← P1 + P2 return [h]P [x]ˆ P acts as a “one-time pad”

slide-70
SLIDE 70

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P P ← P1 + P2 return [h]P [x]ˆ P acts as a “one-time pad” HashToCurveOTP is indifferentiable from RO [MRH05]

slide-71
SLIDE 71

Uniform hashing from deterministic maps [BCIMRT10] For some distinguished point ˆ P ∈ G: HashToCurveOTP(msg) : P1 ← M(Hp(msg)) x ← Hq(msg) P2 ← [x]ˆ P // ✗ expensive P ← P1 + P2 return [h]P [x]ˆ P acts as a “one-time pad” HashToCurveOTP is indifferentiable from RO [MRH05]

slide-72
SLIDE 72

Faster uniform hashing from deterministic maps Problem: point multiplication is usually much more expensive than evaluating M.

slide-73
SLIDE 73

Faster uniform hashing from deterministic maps Problem: point multiplication is usually much more expensive than evaluating M. Idea [BCIMRT10,FFSTV13]: HashToCurve(msg) : P1 ← M(Hp(0 || msg)) P2 ← M(Hp(1 || msg)) P ← P1 + P2 return [h]P

slide-74
SLIDE 74

Faster uniform hashing from deterministic maps Problem: point multiplication is usually much more expensive than evaluating M. Idea [BCIMRT10,FFSTV13]: HashToCurve(msg) : P1 ← M(Hp(0 || msg)) P2 ← M(Hp(1 || msg)) P ← P1 + P2 return [h]P

slide-75
SLIDE 75

Faster uniform hashing from deterministic maps Problem: point multiplication is usually much more expensive than evaluating M. Idea [BCIMRT10,FFSTV13]: HashToCurve(msg) : P1 ← M(Hp(0 || msg)) P2 ← M(Hp(1 || msg)) P ← P1 + P2 return [h]P Indifferentiable from RO if M is well distributed ✓ All of the M we’ve seen are well distributed.

slide-76
SLIDE 76

Roadmap

  • 1. Hash functions to elliptic curves
  • 2. Optimizing the map of [BCIMRT10]
  • 3. Evaluation results
  • 4. IETF standardization efforts
slide-77
SLIDE 77

The Simplified SWU map [BCIMRT10] E : y 2 = f (x) = x3 + ax + b, ab = 0 Idea: pick x s.t. f (ux) = u3f (x). For u non-square ∈ Fp, f (x) or f (ux) is square.

slide-78
SLIDE 78

The Simplified SWU map [BCIMRT10] E : y 2 = f (x) = x3 + ax + b, ab = 0 Idea: pick x s.t. f (ux) = u3f (x). For u non-square ∈ Fp, f (x) or f (ux) is square. u3x3 + aux + b = u3(x3 + ax + b) ∴ x = −b a

  • 1 +

1 u2 + u

slide-79
SLIDE 79

The Simplified SWU map [BCIMRT10] E : y 2 = f (x) = x3 + ax + b, ab = 0 Idea: pick x s.t. f (ux) = u3f (x). For u non-square ∈ Fp, f (x) or f (ux) is square. u3x3 + aux + b = u3(x3 + ax + b) ∴ x = −b a

  • 1 +

1 u2 + u

  • If p ≡ 3 mod 4, u = −t2 is non-square
slide-80
SLIDE 80

The Simplified SWU map [BCIMRT10] E : y 2 = f (x) = x3 + ax + b, ab = 0 Idea: pick x s.t. f (ux) = u3f (x). For u non-square ∈ Fp, f (x) or f (ux) is square. u3x3 + aux + b = u3(x3 + ax + b) ∴ x = −b a

  • 1 +

1 u2 + u

  • If p ≡ 3 mod 4, u = −t2 is non-square, so:

X0(t) −b a

  • 1 +

1 t4 − t2

  • X1(t) −t2X0(t)
slide-81
SLIDE 81

Evaluating the S-SWU map S-SWU(t)

  • (X0(t),
  • f (X0(t)))

if f (X0(t)) is square (X1(t),

  • f (X1(t)))
  • therwise
slide-82
SLIDE 82

Evaluating the S-SWU map S-SWU(t)

  • (X0(t),
  • f (X0(t)))

if f (X0(t)) is square (X1(t),

  • f (X1(t)))
  • therwise

Attempt #1 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)

p+1 4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← f (x1)

p+1 4

// ✗ expensive

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1)

slide-83
SLIDE 83

Evaluating the S-SWU map S-SWU(t)

  • (X0(t),
  • f (X0(t)))

if f (X0(t)) is square (X1(t),

  • f (X1(t)))
  • therwise

Attempt #1 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)

p+1 4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← f (x1)

p+1 4

// ✗ expensive

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1)

slide-84
SLIDE 84

Evaluating the S-SWU map S-SWU(t)

  • (X0(t),
  • f (X0(t)))

if f (X0(t)) is square (X1(t),

  • f (X1(t)))
  • therwise

Attempt #1 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)

p+1 4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← f (x1)

p+1 4

// ✗ expensive

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1)

slide-85
SLIDE 85

Evaluating the S-SWU map S-SWU(t)

  • (X0(t),
  • f (X0(t)))

if f (X0(t)) is square (X1(t),

  • f (X1(t)))
  • therwise

Attempt #1 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)

p+1 4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← f (x1)

p+1 4

// ✗ expensive

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1) Requires two exponentiations! Can we do better?

slide-86
SLIDE 86

Eliminating an exponentiation Recall: f (x1) = −t6f (x0). So: f (x1)

p+1 4 =
  • −t6f (x0)

p+1

4
slide-87
SLIDE 87

Eliminating an exponentiation Recall: f (x1) = −t6f (x0). So: f (x1)

p+1 4 =
  • −t6f (x0)

p+1

4

= t3 (−f (x0))

p+1 4 = t3

−f (x0)

slide-88
SLIDE 88

Eliminating an exponentiation Recall: f (x1) = −t6f (x0). So: f (x1)

p+1 4 =
  • −t6f (x0)

p+1

4

= t3 (−f (x0))

p+1 4 = t3

−f (x0) We have f (x0)

p+1 4 . Can we use this?
slide-89
SLIDE 89

Eliminating an exponentiation Recall: f (x1) = −t6f (x0). So: f (x1)

p+1 4 =
  • −t6f (x0)

p+1

4

= t3 (−f (x0))

p+1 4 = t3

−f (x0) We have f (x0)

p+1 4 . Can we use this?
  • f (x0)
p+1 4

2 = f (x0)

p+1 2 = f (x0) · f (x0) p−1 2
slide-90
SLIDE 90

Eliminating an exponentiation Recall: f (x1) = −t6f (x0). So: f (x1)

p+1 4 =
  • −t6f (x0)

p+1

4

= t3 (−f (x0))

p+1 4 = t3

−f (x0) We have f (x0)

p+1 4 . Can we use this?
  • f (x0)
p+1 4

2 = f (x0)

p+1 2 = f (x0) · f (x0) p−1 2

Legendre symbol!

slide-91
SLIDE 91

Eliminating an exponentiation Recall: f (x1) = −t6f (x0). So: f (x1)

p+1 4 =
  • −t6f (x0)

p+1

4

= t3 (−f (x0))

p+1 4 = t3

−f (x0) We have f (x0)

p+1 4 . Can we use this?
  • f (x0)
p+1 4

2 = f (x0)

p+1 2 = f (x0) · f (x0) p−1 2

= −f (x0) if f (x0) is non-square ✓ f (x0)

p+1 4 is
  • −f (x0) when f (x0) is non-square!
slide-92
SLIDE 92

Evaluating the S-SWU map—faster! Attempt #2 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)(p+1)/4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← t3y0

// ✓ cheap!

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1)

slide-93
SLIDE 93

Evaluating the S-SWU map—faster! Attempt #2 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)(p+1)/4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← t3y0

// ✓ cheap!

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1) ✓ Prior work [BDLSY12] lets us avoid inversions.

slide-94
SLIDE 94

Evaluating the S-SWU map—faster! Attempt #2 (assume p ≡ 3 mod 4): x0 ← X0(t) y0 ← f (x0)(p+1)/4

// ✗ expensive

x1 ← −t2x0

// a.k.a. X1(t)

y1 ← t3y0

// ✓ cheap!

if y 2

0 = f (x0): return (x0, y0)

else: return (x1, y1) ✓ Prior work [BDLSY12] lets us avoid inversions. ✓ Straightforward to generalize to p ≡ 1 mod 4.

slide-95
SLIDE 95

Generalizing: the p ≡ 5 mod 8 case

  • 1 is square in Fp ⇒ need u = ξt2 for ξ nonsquare.
slide-96
SLIDE 96

Generalizing: the p ≡ 5 mod 8 case

  • 1 is square in Fp ⇒ need u = ξt2 for ξ nonsquare.

Recall Atkin’s square-root trick:

  • z
p+3 8

2 = z ·

  • z
p−1 2

1

2
slide-97
SLIDE 97

Generalizing: the p ≡ 5 mod 8 case

  • 1 is square in Fp ⇒ need u = ξt2 for ξ nonsquare.

Recall Atkin’s square-root trick:

  • z
p+3 8

2 = z ·

  • z
p−1 2

1

2

Legendre symbol!

slide-98
SLIDE 98

Generalizing: the p ≡ 5 mod 8 case

  • 1 is square in Fp ⇒ need u = ξt2 for ξ nonsquare.

Recall Atkin’s square-root trick:

  • z
p+3 8

2 = z ·

  • z
p−1 2

1

2

z

p+3 8 · 1− 1 4 = √z
slide-99
SLIDE 99

Generalizing: the p ≡ 5 mod 8 case

  • 1 is square in Fp ⇒ need u = ξt2 for ξ nonsquare.

Recall Atkin’s square-root trick:

  • z
p+3 8

2 = z ·

  • z
p−1 2

1

2

z

p+3 8 · 1− 1 4 = √z

So we want:

  • f (x1) =
  • ξ3t6f (x0)

= t3 ξ3f (x0) p+3

8 · 1− 1 4
slide-100
SLIDE 100

Generalizing: the p ≡ 5 mod 8 case

  • 1 is square in Fp ⇒ need u = ξt2 for ξ nonsquare.

Recall Atkin’s square-root trick:

  • z
p+3 8

2 = z ·

  • z
p−1 2

1

2

z

p+3 8 · 1− 1 4 = √z

So we want:

  • f (x1) =
  • ξ3t6f (x0)

= t3 ξ3f (x0) p+3

8 · 1− 1 4

ξ is fixed, so we can preompute

  • ξ3 p+3
8
slide-101
SLIDE 101

Supporting the ab = 0 case Issue: S-SWU still does not work with ab = 0. Rules out pairing-friendly curves [BLS03,BN06,. . . ]

slide-102
SLIDE 102

Supporting the ab = 0 case Issue: S-SWU still does not work with ab = 0. Rules out pairing-friendly curves [BLS03,BN06,. . . ] Idea: map to a curve E ′ having ab = 0 and an efficiently-computable homomorphism to E.

slide-103
SLIDE 103

Supporting the ab = 0 case Issue: S-SWU still does not work with ab = 0. Rules out pairing-friendly curves [BLS03,BN06,. . . ] Idea: map to a curve E ′ having ab = 0 and an efficiently-computable homomorphism to E. Specifically: Find E ′(Fp) d-isogenous to E, d small. Defines a degree ≈d rational map E ′(Fp) → E(Fp)

slide-104
SLIDE 104

Supporting the ab = 0 case Issue: S-SWU still does not work with ab = 0. Rules out pairing-friendly curves [BLS03,BN06,. . . ] Idea: map to a curve E ′ having ab = 0 and an efficiently-computable homomorphism to E. Specifically: Find E ′(Fp) d-isogenous to E, d small. Defines a degree ≈d rational map E ′(Fp) → E(Fp) Then: S-SWU to E ′(Fp), isogeny map to E(Fp). ✓ Preserves well-distributedness of S-SWU.

slide-105
SLIDE 105

Roadmap

  • 1. Hash functions to elliptic curves
  • 2. Optimizing the map of [BCIMRT10]
  • 3. Evaluation results
  • 4. IETF standardization efforts
slide-106
SLIDE 106

Implementation, baselines, setup, method BLS12-381 defines G1 ⊂ E1(Fp) and G2 ⊂ E2(Fp2).

slide-107
SLIDE 107

Implementation, baselines, setup, method BLS12-381 defines G1 ⊂ E1(Fp) and G2 ⊂ E2(Fp2). For G1 and G2, we implement: Maps: hash-and-check; [SW06]; this work Styles: full bigint; field ops only, non-CT and CT Hashes: non-uniform; uniform In total: 34 hash variants, 3520 lines of C.

slide-108
SLIDE 108

Implementation, baselines, setup, method BLS12-381 defines G1 ⊂ E1(Fp) and G2 ⊂ E2(Fp2). For G1 and G2, we implement: Maps: hash-and-check; [SW06]; this work Styles: full bigint; field ops only, non-CT and CT Hashes: non-uniform; uniform In total: 34 hash variants, 3520 lines of C.

slide-109
SLIDE 109

Implementation, baselines, setup, method BLS12-381 defines G1 ⊂ E1(Fp) and G2 ⊂ E2(Fp2). For G1 and G2, we implement: Maps: hash-and-check; [SW06]; this work Styles: full bigint; field ops only, non-CT and CT Hashes: non-uniform; uniform In total: 34 hash variants, 3520 lines of C. Setup: Xeon E3-1535M v6 (no hyperthreading or frequency scaling); Linux 5.2; GCC 9.1.0.

slide-110
SLIDE 110

Implementation, baselines, setup, method BLS12-381 defines G1 ⊂ E1(Fp) and G2 ⊂ E2(Fp2). For G1 and G2, we implement: Maps: hash-and-check; [SW06]; this work Styles: full bigint; field ops only, non-CT and CT Hashes: non-uniform; uniform In total: 34 hash variants, 3520 lines of C. Setup: Xeon E3-1535M v6 (no hyperthreading or frequency scaling); Linux 5.2; GCC 9.1.0. Method: run each hash 106 times; record #cycles.

slide-111
SLIDE 111

BLS12-381 G1, uniform hash function

H&C H&C (worst 10%) SW This work 200 400 600 800 1000 time, kCycles (lower is better) 319 348 459 389 712 564 456 965 496 Full bigint Field ops (non-CT) Field ops (CT)
slide-112
SLIDE 112

Roadmap

  • 1. Hash functions to elliptic curves
  • 2. Optimizing the map of [BCIMRT10]
  • 3. Evaluation results
  • 4. IETF standardization efforts
slide-113
SLIDE 113

hash-to-curve

slide-114
SLIDE 114

hash-to-curve BLS sigs pairing-friendly curves

slide-115
SLIDE 115

hash-to-curve BLS sigs pairing-friendly curves VRFs

slide-116
SLIDE 116

hash-to-curve BLS sigs pairing-friendly curves VRFs VOPRFs PAKEs?

slide-117
SLIDE 117

Which maps should the IETF standardize? M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp [SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-118
SLIDE 118

Which maps should the IETF standardize? M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp [SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-119
SLIDE 119

Which maps should the IETF standardize? M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp [SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ]
slide-120
SLIDE 120

Which maps should the IETF standardize? M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp [SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ] (+ tweaks to avoid infringing patents)
slide-121
SLIDE 121

Which maps should the IETF standardize? M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp [SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ] (+ tweaks to avoid infringing patents)
slide-122
SLIDE 122

Which maps should the IETF standardize? M : Fp → E(Fp), where E : y 2 = x3 + ax + b and p > 5: Map M Restrictions Cost [BF01] p ≡ 2 mod 3, a = 0 1 exp [SW06] none 3 exp SWU [Ulas07] p ≡ 3 mod 4, ab = 0 3 exp [Icart09] p ≡ 2 mod 3 1 exp S-SWU [BCIMRT10] p ≡ 3 mod 4, ab = 0 2 exp Elligator [BHKL13] b = 0, 2 | #E(Fp) 1 exp This work ab = 0 1 exp none 1

+ exp

What about supersingular maps [BF01,BLMP19]?

[SS04,Ska05,FSV09,FT10a,FT10b,KLR10,CK11,Far11,FT12,FJT13,BLMP19. . . ] (+ tweaks to avoid infringing patents)

???

slide-123
SLIDE 123

Recap and conclusion Contributions: ✓ Optimizations to the map of [BCIMRT10] ✓ “Indirect” approach to expand applicability ✓ Fast impls are simple and constant time

slide-124
SLIDE 124

Recap and conclusion Contributions: ✓ Optimizations to the map of [BCIMRT10] ✓ “Indirect” approach to expand applicability ✓ Fast impls are simple and constant time Result: hash-to-curve costs 1

+ exponentiation for

essentially any prime-field elliptic curve.

slide-125
SLIDE 125

Recap and conclusion Contributions: ✓ Optimizations to the map of [BCIMRT10] ✓ “Indirect” approach to expand applicability ✓ Fast impls are simple and constant time Result: hash-to-curve costs 1

+ exponentiation for

essentially any prime-field elliptic curve. State of the art for BLS, BN, NIST, secp256k1, and other curves not covered by Elligator or Icart.

slide-126
SLIDE 126

Recap and conclusion Contributions: ✓ Optimizations to the map of [BCIMRT10] ✓ “Indirect” approach to expand applicability ✓ Fast impls are simple and constant time Result: hash-to-curve costs 1

+ exponentiation for

essentially any prime-field elliptic curve. State of the art for BLS, BN, NIST, secp256k1, and other curves not covered by Elligator or Icart.

https://bls-hash.crypto.fyi https://github.com/kwantam/bls12-381_hash https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve rsw@cs.stanford.edu