Standardization for the black hat Includes joint work with (in - - PowerPoint PPT Presentation

standardization for the black hat includes joint work
SMART_READER_LITE
LIVE PREVIEW

Standardization for the black hat Includes joint work with (in - - PowerPoint PPT Presentation

1 2 Standardization for the black hat Includes joint work with (in alphabetical order): Daniel J. Bernstein Tung Chou 1 University of Illinois at Chicago & Chitchanok Chuengsatiansup 1 Technische Universiteit Eindhoven Andreas H


slide-1
SLIDE 1

1

Standardization for the black hat Daniel J. Bernstein University of Illinois at Chicago & Technische Universiteit Eindhoven 1 bada55.cr.yp.to “BADA55 Crypto” including “How to manipulate curve standards: a white paper for the black hat.” 2 projectbullrun.org including “Dual EC: a standardized back door.”

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA.

slide-2
SLIDE 2

1

Standardization for the black hat

  • J. Bernstein

University of Illinois at Chicago & echnische Universiteit Eindhoven bada55.cr.yp.to “BADA55 Crypto” including “How to manipulate curve standards: a paper for the black hat.” projectbullrun.org including “Dual EC: a rdized back door.”

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA. The DES IBM: 128! IBM: 64! Final comp

slide-3
SLIDE 3

1

for the black hat Bernstein Illinois at Chicago & Universiteit Eindhoven bada55.cr.yp.to “BADA55 including “How to curve standards: a the black hat.” projectbullrun.org EC: a back door.”

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA. The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise:

slide-4
SLIDE 4

1

black hat Chicago & Eindhoven “BADA55 to rds: a hat.”

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA. The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56.

slide-5
SLIDE 5

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56.

slide-6
SLIDE 6

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small.

slide-7
SLIDE 7

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it!

slide-8
SLIDE 8

2

Includes joint work with (in alphabetical order): Tung Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Eran Lambooij 1 Tanja Lange 1 2 Ruben Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSI, ANSSI, Brainpool, IETF, ISO, NIST, OSCCA, SECG, and especially our buddies at NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.
slide-9
SLIDE 9

2

Includes joint work with alphabetical order): Chou 1 Chitchanok Chuengsatiansup 1 Andreas H¨ ulsing 1 Lambooij 1 Lange 1 2 Niederhagen 1 2 Christine van Vredendaal 1 Inspirational previous work: ANSSI, Brainpool, IETF, NIST, OSCCA, SECG, and ecially our buddies at NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.

Random 1992 Rivest: given enough to hang a standa Standardize

slide-10
SLIDE 10

2

rk with

  • rder):

Chuengsatiansup 1 1 1 2 Niederhagen 1 2 redendaal 1 revious work: Brainpool, IETF, CCA, SECG, and buddies at NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.

Random nonces in 1992 Rivest: “The given enough rope to hang himself—something a standard should Standardize anywa

slide-11
SLIDE 11

2

Chuengsatiansup 1 1 rk: IETF, SECG, and NSA.

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user given enough rope with which to hang himself—something a standard should not do.” Standardize anyway.

slide-12
SLIDE 12

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway.

slide-13
SLIDE 13

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway. 2010 Bushing–Marcan–Segher– Sven “PS3 epic fail”: PS3 forgeries—Sony hung itself.

slide-14
SLIDE 14

3

The DES key size IBM: 128! NSA: 32! IBM: 64! NSA: 48! Final compromise: 56. Crypto community to NSA+NBS: Your key size is too small. NBS: Our key is big enough! And we know how to use it! NBS (now NIST) continues to promote DES for two decades, drastically increasing cost

  • f the inevitable upgrade.

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway. 2010 Bushing–Marcan–Segher– Sven “PS3 epic fail”: PS3 forgeries—Sony hung itself. Add complicated options for deterministic nonces, while preserving old options.

slide-15
SLIDE 15

3

DES key size 128! NSA: 32! 64! NSA: 48! compromise: 56. community to NSA+NBS: ey size is too small. Our key is big enough! e know how to use it! (now NIST) continues to romote DES for two decades, drastically increasing cost inevitable upgrade.

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway. 2010 Bushing–Marcan–Segher– Sven “PS3 epic fail”: PS3 forgeries—Sony hung itself. Add complicated options for deterministic nonces, while preserving old options. Denial of Suspected Bob are “auditors” = “review exploitable in cryptographic Example: involved around the years of How can problem

slide-16
SLIDE 16

3

size NSA: 32! 48! romise: 56. community to NSA+NBS: too small. big enough! w to use it! NIST) continues to r two decades, increasing cost upgrade.

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway. 2010 Bushing–Marcan–Segher– Sven “PS3 epic fail”: PS3 forgeries—Sony hung itself. Add complicated options for deterministic nonces, while preserving old options. Denial of service via Suspected terrorists Bob are aided and “auditors” (= “cryptanalysts” = “reviewers”) checking exploitable security in cryptographic systems. Example: SHA-3 comp involved 200 cryptographers around the world and years of sustained How can we slip a problem past all of

slide-17
SLIDE 17

3

NSA+NBS: enough! it! continues to decades,

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway. 2010 Bushing–Marcan–Segher– Sven “PS3 epic fail”: PS3 forgeries—Sony hung itself. Add complicated options for deterministic nonces, while preserving old options. Denial of service via flooding Suspected terrorists Alice and Bob are aided and abetted b “auditors” (= “cryptanalysts” = “reviewers”) checking for exploitable security problems in cryptographic systems. Example: SHA-3 competition involved 200 cryptographers around the world and took years of sustained public effo How can we slip a security problem past all of them?

slide-18
SLIDE 18

4

Random nonces in DSA/ECDSA 1992 Rivest: “The poor user is given enough rope with which to hang himself—something a standard should not do.” Standardize anyway. 2010 Bushing–Marcan–Segher– Sven “PS3 epic fail”: PS3 forgeries—Sony hung itself. Add complicated options for deterministic nonces, while preserving old options.

5

Denial of service via flooding Suspected terrorists Alice and Bob are aided and abetted by “auditors” (= “cryptanalysts” = “reviewers”) checking for exploitable security problems in cryptographic systems. Example: SHA-3 competition involved 200 cryptographers around the world and took years of sustained public effort. How can we slip a security problem past all of them?

slide-19
SLIDE 19

4

Random nonces in DSA/ECDSA Rivest: “The poor user is enough rope with which hang himself—something standard should not do.” Standardize anyway. Bushing–Marcan–Segher– “PS3 epic fail”: PS3 rgeries—Sony hung itself. complicated options terministic nonces, preserving old options.

5

Denial of service via flooding Suspected terrorists Alice and Bob are aided and abetted by “auditors” (= “cryptanalysts” = “reviewers”) checking for exploitable security problems in cryptographic systems. Example: SHA-3 competition involved 200 cryptographers around the world and took years of sustained public effort. How can we slip a security problem past all of them? During the NIST also FIPS 186-3 FIPS 198-1 SP 800-38E SP 800-38F SP 800-56C SP 800-57 SP 800-67 SP 800-108 SP 800-131A SP 800-133 SP 800-152 and related such as SP

slide-20
SLIDE 20

4

in DSA/ECDSA “The poor user is rope with which himself—something should not do.” anyway. Bushing–Marcan–Segher– fail”: PS3 hung itself.

  • ptions

nonces,

  • ld options.

5

Denial of service via flooding Suspected terrorists Alice and Bob are aided and abetted by “auditors” (= “cryptanalysts” = “reviewers”) checking for exploitable security problems in cryptographic systems. Example: SHA-3 competition involved 200 cryptographers around the world and took years of sustained public effort. How can we slip a security problem past all of them? During the same p NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key SP 800-133 (key generation), SP 800-152 (key management), and related protoc such as SP 800-81r1.

slide-21
SLIDE 21

4

DSA/ECDSA user is which himself—something do.” rcan–Segher– itself.

  • ptions.

5

Denial of service via flooding Suspected terrorists Alice and Bob are aided and abetted by “auditors” (= “cryptanalysts” = “reviewers”) checking for exploitable security problems in cryptographic systems. Example: SHA-3 competition involved 200 cryptographers around the world and took years of sustained public effort. How can we slip a security problem past all of them? During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1.

slide-22
SLIDE 22

5

Denial of service via flooding Suspected terrorists Alice and Bob are aided and abetted by “auditors” (= “cryptanalysts” = “reviewers”) checking for exploitable security problems in cryptographic systems. Example: SHA-3 competition involved 200 cryptographers around the world and took years of sustained public effort. How can we slip a security problem past all of them?

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1.

slide-23
SLIDE 23

5

  • f service via flooding

ected terrorists Alice and re aided and abetted by “auditors” (= “cryptanalysts” “reviewers”) checking for exploitable security problems cryptographic systems. Example: SHA-3 competition involved 200 cryptographers the world and took

  • f sustained public effort.

can we slip a security roblem past all of them?

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1. Attention not entirely Auditors security just befo

slide-24
SLIDE 24

5

via flooding rists Alice and and abetted by “cryptanalysts” checking for security problems systems. competition cryptographers and took sustained public effort. a security

  • f them?

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1. Attention of audito not entirely on SHA-3. Auditors caught a security flaw in EAX just before NIST standa

slide-25
SLIDE 25

5

ding and by “cryptanalysts” for roblems etition cryptographers effort.

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1. Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization.

slide-26
SLIDE 26

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1.

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization.

slide-27
SLIDE 27

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1.

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization.

slide-28
SLIDE 28

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1.

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service.

slide-29
SLIDE 29

6

During the same period, NIST also published FIPS 186-3 (signatures), FIPS 198-1 (authentication), SP 800-38E (disk encryption), SP 800-38F (key wrapping), SP 800-56C (key derivation), SP 800-57 (key management), SP 800-67 (block encryption), SP 800-108 (key derivation), SP 800-131A (key lengths), SP 800-133 (key generation), SP 800-152 (key management), and related protocol documents such as SP 800-81r1.

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg.

slide-30
SLIDE 30

6

the same period, also published 186-3 (signatures), 198-1 (authentication), 800-38E (disk encryption), 800-38F (key wrapping), 800-56C (key derivation), 800-57 (key management), 800-67 (block encryption), 800-108 (key derivation), 800-131A (key lengths), 800-133 (key generation), 800-152 (key management), related protocol documents as SP 800-81r1.

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg. Flooding If we were would tell ciphers/hashes

slide-31
SLIDE 31

6

period, lished (signatures), (authentication), (disk encryption), wrapping), ey derivation), management), ck encryption), derivation), ey lengths), generation), management), rotocol documents 800-81r1.

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg. Flooding via dishonest If we were honest then would tell Alice+Bob ciphers/hashes as

slide-32
SLIDE 32

6

(authentication), encryption), wrapping), derivation), management), encryption), derivation), lengths), generation), management), cuments

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg. Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs.

slide-33
SLIDE 33

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg.

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs.

slide-34
SLIDE 34

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg.

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch!

slide-35
SLIDE 35

7

Attention of auditors was not entirely on SHA-3. Auditors caught a severe security flaw in EAX Prime just before NIST standardization. Also a troublesome flaw in the GCM security “proofs” years after NIST standardization. Why did this take years? Scientific advances? No! We successfully denied service. And NIST is just the tip of the crypto standardization iceberg.

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.”

slide-36
SLIDE 36

7

ttention of auditors was entirely on SHA-3. rs caught a severe y flaw in EAX Prime efore NIST standardization. troublesome flaw in GCM security “proofs” after NIST standardization. did this take years? Scientific advances? No! successfully denied service. NIST is just the tip of the standardization iceberg.

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.” Denial of 2006 Gjøsteen, 2006 Scho Dual EC definition

slide-37
SLIDE 37

7

auditors was SHA-3. a severe EAX Prime standardization. troublesome flaw in y “proofs” standardization. e years? advances? No! successfully denied service. just the tip of the rdization iceberg.

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.” Denial of service via 2006 Gjøsteen, indep 2006 Schoenmakers–Sido Dual EC flunks well-established definition of PRNG

slide-38
SLIDE 38

7

Prime rdization. rdization. service.

  • f the

iceberg.

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.” Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenk Dual EC flunks well-established definition of PRNG security.

slide-39
SLIDE 39

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.”

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security.

slide-40
SLIDE 40

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.”

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize!

slide-41
SLIDE 41

8

Flooding via dishonesty If we were honest then we would tell Alice+Bob to reuse ciphers/hashes as PRNGs. But why should we be honest? Let’s build PRNGs from scratch! 2004: Number-theoretic RNGs provide “increased assurance.” 2006: Dual EC “is the only DRBG mechanism in this Recommendation whose security is related to a hard problem in number theory.”

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize! 2007 Shumow–Ferguson: Dual EC has a back door. Would have been easy to build Q with the key. 2007 Schneier: Never use Dual

  • EC. “Both NIST and the NSA

have some explaining to do.”

slide-42
SLIDE 42

8

ding via dishonesty ere honest then we tell Alice+Bob to reuse ciphers/hashes as PRNGs. why should we be honest? build PRNGs from scratch! Number-theoretic RNGs rovide “increased assurance.” Dual EC

  • nly DRBG mechanism

Recommendation security is related to a roblem in number theory.”

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize! 2007 Shumow–Ferguson: Dual EC has a back door. Would have been easy to build Q with the key. 2007 Schneier: Never use Dual

  • EC. “Both NIST and the NSA

have some explaining to do.” Did Shumo show us Maintain standard. 2008.07–2014.03: 73 validation for Dual

slide-43
SLIDE 43

8

dishonesty t then we Alice+Bob to reuse as PRNGs. we be honest? PRNGs from scratch! er-theoretic RNGs reased assurance.” DRBG mechanism Recommendation is related to a number theory.”

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize! 2007 Shumow–Ferguson: Dual EC has a back door. Would have been easy to build Q with the key. 2007 Schneier: Never use Dual

  • EC. “Both NIST and the NSA

have some explaining to do.” Did Shumow and F show us the key? No! Maintain and promote

  • standard. Pay people

2008.07–2014.03: 73 validation certificates for Dual EC implementations.

slide-44
SLIDE 44

8

reuse est? scratch! NGs assurance.” mechanism to a theory.”

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize! 2007 Shumow–Ferguson: Dual EC has a back door. Would have been easy to build Q with the key. 2007 Schneier: Never use Dual

  • EC. “Both NIST and the NSA

have some explaining to do.” Did Shumow and Ferguson show us the key? No! Maintain and promote Dual

  • standard. Pay people to use

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations.

slide-45
SLIDE 45

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize! 2007 Shumow–Ferguson: Dual EC has a back door. Would have been easy to build Q with the key. 2007 Schneier: Never use Dual

  • EC. “Both NIST and the NSA

have some explaining to do.”

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations.

slide-46
SLIDE 46

9

Denial of service via hoops 2006 Gjøsteen, independently 2006 Schoenmakers–Sidorenko: Dual EC flunks well-established definition of PRNG security. Are all applications broken? Obviously not! Standardize! 2007 Shumow–Ferguson: Dual EC has a back door. Would have been easy to build Q with the key. 2007 Schneier: Never use Dual

  • EC. “Both NIST and the NSA

have some explaining to do.”

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations. Even after being caught, continue to burn auditors’ time by demanding that they jump higher. NSA’s Dickie George, 2014: Gee, Dual EC is really hard to exploit!

slide-47
SLIDE 47

9

  • f service via hoops

Gjøsteen, independently Schoenmakers–Sidorenko: EC flunks well-established definition of PRNG security. all applications broken? Obviously not! Standardize! Shumow–Ferguson: Dual has a back door. Would have easy to build Q with the key. Schneier: Never use Dual “Both NIST and the NSA some explaining to do.”

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations. Even after being caught, continue to burn auditors’ time by demanding that they jump higher. NSA’s Dickie George, 2014: Gee, Dual EC is really hard to exploit! System vs. Traditiona Auditor lo an RNG. Auditor’s random numb Bob are

slide-48
SLIDE 48

9

via hoops independently enmakers–Sidorenko: well-established PRNG security. applications broken? Standardize! erguson: Dual

  • door. Would have

build Q with the key. Never use Dual and the NSA explaining to do.”

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations. Even after being caught, continue to burn auditors’ time by demanding that they jump higher. NSA’s Dickie George, 2014: Gee, Dual EC is really hard to exploit! System vs. ecosystem Traditional RNG auditing: Auditor looks at one an RNG. Tries to find Auditor’s starting assumption: random numbers fo Bob are created by

slide-49
SLIDE 49

9

  • ps

endently renko: ell-established y. en? rdize! Dual

  • uld have

the key. Dual NSA do.”

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations. Even after being caught, continue to burn auditors’ time by demanding that they jump higher. NSA’s Dickie George, 2014: Gee, Dual EC is really hard to exploit! System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG.

slide-50
SLIDE 50

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations. Even after being caught, continue to burn auditors’ time by demanding that they jump higher. NSA’s Dickie George, 2014: Gee, Dual EC is really hard to exploit!

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG.

slide-51
SLIDE 51

10

Did Shumow and Ferguson show us the key? No! Maintain and promote Dual EC

  • standard. Pay people to use it.

2008.07–2014.03: NIST issues 73 validation certificates for Dual EC implementations. Even after being caught, continue to burn auditors’ time by demanding that they jump higher. NSA’s Dickie George, 2014: Gee, Dual EC is really hard to exploit!

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)
slide-52
SLIDE 52

10

Shumow and Ferguson us the key? No! Maintain and promote Dual EC

  • rd. Pay people to use it.

2008.07–2014.03: NIST issues validation certificates al EC implementations. after being caught, continue to burn auditors’ time by demanding that they jump higher. Dickie George, 2014: Gee, EC is really hard to exploit!

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)

This is a perspective. defending The ecosyste weaknesses inside any e.g. Easily

slide-53
SLIDE 53

10

and Ferguson ? No! romote Dual EC eople to use it. 2008.07–2014.03: NIST issues ertificates implementations. caught, auditors’ time by they jump higher. George, 2014: Gee, hard to exploit!

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)

This is a critical change

  • perspective. Audito

defending the wrong The ecosystem has weaknesses that are inside any particula e.g. Easily take control

slide-54
SLIDE 54

10

erguson Dual EC use it. issues implementations. time by higher. 2014: Gee, exploit!

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO.

slide-55
SLIDE 55

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO.

slide-56
SLIDE 56

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection.

slide-57
SLIDE 57

11

System vs. ecosystem Traditional RNG auditing: Auditor looks at one system, an RNG. Tries to find weakness. Auditor’s starting assumption: random numbers for Alice and Bob are created by an RNG. Reality: random numbers are created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys

  • RNGs. (Same for other crypto.)

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection. Deter publication of weaknesses: “This attack is trivial. Reject.”

slide-58
SLIDE 58

11

  • vs. ecosystem

raditional RNG auditing: r looks at one system,

  • RNG. Tries to find weakness.

r’s starting assumption: numbers for Alice and re created by an RNG. y: random numbers created by a much more complicated ecosystem that designs, evaluates, standardizes, selects, implements, and deploys (Same for other crypto.)

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection. Deter publication of weaknesses: “This attack is trivial. Reject.” Textbook using standa

  • n a standa

Alice’s secret

  • Alice’s

public aP {Alice; Bob shared abP

slide-59
SLIDE 59

11

ecosystem auditing:

  • ne system,

to find weakness. rting assumption: ers for Alice and by an RNG. numbers much more

  • system that

evaluates, standardizes, implements, and deploys r other crypto.)

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection. Deter publication of weaknesses: “This attack is trivial. Reject.” Textbook key exchange using standard point

  • n a standard elliptic

Alice’s secret key a

  • Alice’s

public key aP ▲ ▲ ▲ ▲ ▲ rrrrr {Alice; Bob}’s shared secret abP =

slide-60
SLIDE 60

11

system, eakness. assumption: and RNG. re that rdizes, deploys crypto.)

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection. Deter publication of weaknesses: “This attack is trivial. Reject.” Textbook key exchange using standard point P

  • n a standard elliptic curve E

Alice’s secret key a

  • Bob’s

secret k

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice shared sec baP

slide-61
SLIDE 61

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection. Deter publication of weaknesses: “This attack is trivial. Reject.”

13

Textbook key exchange using standard point P

  • n a standard elliptic curve E:

Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP

slide-62
SLIDE 62

12

This is a critical change in

  • perspective. Auditor is stuck

defending the wrong targets! The ecosystem has many weaknesses that are not visible inside any particular system. e.g. Easily take control of ISO. e.g. Propose 20 weak standards. Some will survive auditing. Then manipulate selection. Deter publication of weaknesses: “This attack is trivial. Reject.”

13

Textbook key exchange using standard point P

  • n a standard elliptic curve E:

Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP Security depends on choice of E.

slide-63
SLIDE 63

12

is a critical change in

  • ective. Auditor is stuck

defending the wrong targets! ecosystem has many eaknesses that are not visible any particular system. Easily take control of ISO. Propose 20 weak standards. will survive auditing. manipulate selection. publication of weaknesses: attack is trivial. Reject.”

13

Textbook key exchange using standard point P

  • n a standard elliptic curve E:

Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP Security depends on choice of E. Our Alice’s secret

  • Alice’s

public aP {Alice; Bob shared abP This is not

slide-64
SLIDE 64

12

critical change in Auditor is stuck wrong targets! has many are not visible rticular system. control of ISO. weak standards. survive auditing. manipulate selection. publication of weaknesses:

  • trivial. Reject.”

13

Textbook key exchange using standard point P

  • n a standard elliptic curve E:

Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP Security depends on choice of E. Our partner choice of

  • Alice’s

secret key a

  • Alice’s

public key aP ▲ ▲ ▲ ▲ ▲ rrrrr {Alice; Bob}’s shared secret abP = This is not the same

slide-65
SLIDE 65

12

in stuck rgets! visible system. ISO. standards. auditing. election. eaknesses: Reject.”

13

Textbook key exchange using standard point P

  • n a standard elliptic curve E:

Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP Security depends on choice of E. Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret k

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice shared sec baP This is not the same picture!

slide-66
SLIDE 66

13

Textbook key exchange using standard point P

  • n a standard elliptic curve E:

Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP Security depends on choice of E.

14

Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP This is not the same picture!

slide-67
SLIDE 67

13

  • k key exchange

standard point P standard elliptic curve E: Alice’s secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr ; Bob}’s red secret bP = {Bob; Alice}’s shared secret baP Security depends on choice of E.

14

Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP This is not the same picture! One final 2005 Brainp “The choice from which parameters not motivated part of the : : : Verifiably The [Brainp generated manner using generated comprehensive

slide-68
SLIDE 68

13

exchange

  • int P

elliptic curve E: Bob’s secret key b

▲ ▲ Bob’s public key bP rrrr = {Bob; Alice}’s shared secret baP ends on choice of E.

14

Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP This is not the same picture! One final example 2005 Brainpool standa “The choice of the from which the [NIST] parameters have b not motivated leaving part of the security : : : Verifiably pseudo-random. The [Brainpool] curves generated in a pseudo-random manner using seeds generated in a systematic comprehensive way

slide-69
SLIDE 69

13

curve E: Bob’s key b

  • Bob’s

public key P Alice}’s secret aP choice of E.

14

Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP This is not the same picture! One final example 2005 Brainpool standard: “The choice of the seeds from which the [NIST] curve parameters have been derived not motivated leaving an essential part of the security analysis : : : Verifiably pseudo-random. The [Brainpool] curves shall generated in a pseudo-random manner using seeds that are generated in a systematic and comprehensive way.”

slide-70
SLIDE 70

14

Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr {Alice; Bob}’s shared secret abP = {Bob; Alice}’s shared secret baP This is not the same picture!

15

One final example 2005 Brainpool standard: “The choice of the seeds from which the [NIST] curve parameters have been derived is not motivated leaving an essential part of the security analysis open. : : : Verifiably pseudo-random. The [Brainpool] curves shall be generated in a pseudo-random manner using seeds that are generated in a systematic and comprehensive way.”

slide-71
SLIDE 71

14

Our partner Jerry’s choice of E; P

  • Alice’s

secret key a

  • Bob’s

secret key b

  • Alice’s

public key aP

▲ ▲ ▲ ▲ ▲ ▲ Bob’s public key bP rrrrrrr ; Bob}’s red secret bP = {Bob; Alice}’s shared secret baP is not the same picture!

15

One final example 2005 Brainpool standard: “The choice of the seeds from which the [NIST] curve parameters have been derived is not motivated leaving an essential part of the security analysis open. : : : Verifiably pseudo-random. The [Brainpool] curves shall be generated in a pseudo-random manner using seeds that are generated in a systematic and comprehensive way.”

import hashlib def hash(seed): h seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = def secure(A,B): if k(B).is_square(): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and and Integers(n)(p).multiplicative_order() def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) def fullhash(seed): return str2int(hash(seed) def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S) B = fullhash(S) if not secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-72
SLIDE 72

14

rtner Jerry’s

  • f E; P
  • Bob’s

secret key b

▲ ▲ Bob’s public key bP rrrr = {Bob; Alice}’s shared secret baP same picture!

15

One final example 2005 Brainpool standard: “The choice of the seeds from which the [NIST] curve parameters have been derived is not motivated leaving an essential part of the security analysis open. : : : Verifiably pseudo-random. The [Brainpool] curves shall be generated in a pseudo-random manner using seeds that are generated in a systematic and comprehensive way.”

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-73
SLIDE 73

14

Jerry’s Bob’s key b

  • Bob’s

public key P Alice}’s secret aP picture!

15

One final example 2005 Brainpool standard: “The choice of the seeds from which the [NIST] curve parameters have been derived is not motivated leaving an essential part of the security analysis open. : : : Verifiably pseudo-random. The [Brainpool] curves shall be generated in a pseudo-random manner using seeds that are generated in a systematic and comprehensive way.”

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-74
SLIDE 74

15

One final example 2005 Brainpool standard: “The choice of the seeds from which the [NIST] curve parameters have been derived is not motivated leaving an essential part of the security analysis open. : : : Verifiably pseudo-random. The [Brainpool] curves shall be generated in a pseudo-random manner using seeds that are generated in a systematic and comprehensive way.”

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-75
SLIDE 75

15

final example Brainpool standard: choice of the seeds which the [NIST] curve rameters have been derived is motivated leaving an essential

  • f the security analysis open.

erifiably pseudo-random. [Brainpool] curves shall be generated in a pseudo-random manner using seeds that are generated in a systematic and rehensive way.”

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

2015: W the curve-gene from the Previous Output of

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E B 68AEC4BFE84C659E

slide-76
SLIDE 76

15

example standard: the seeds [NIST] curve been derived is leaving an essential security analysis open. pseudo-random. curves shall be pseudo-random seeds that are systematic and ay.”

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

2015: We carefully the curve-generation from the Brainpool Previous slide: 224-bit Output of this pro

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

slide-77
SLIDE 77

15

curve derived is essential analysis open. pseudo-random. shall be pseudo-random re and

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

slide-78
SLIDE 78

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

slide-79
SLIDE 79

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

The standard 224-bit Brainpool curve is not the same curve:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 B 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

slide-80
SLIDE 80

16

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): if k(B).is_square(): return False n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue S = update(S) B = fullhash(S) if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

The standard 224-bit Brainpool curve is not the same curve:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 B 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

Next slide: a procedure that does generate the standard Brainpool curve.

slide-81
SLIDE 81

16

= hashlib.sha1(); h.update(seed); return h.digest() 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF = k[] k(B).is_square(): return False EllipticCurve([k(A),k(B)]).cardinality() and n.is_prime() Integers(n)(p).multiplicative_order() * 100 >= n-1) int2str(seed,bytes): ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) str2int(seed): Integer(seed.encode(’hex’),16) int2str(str2int(seed) + 1,len(seed)) fullhash(seed): str2int(hash(seed) + hash(update(seed))) % 2^223 real2str(seed,bytes): int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) real2str(exp(1)/16,7*seedbytes) nums[2*seedbytes:3*seedbytes] (k(A)*x^4+3).roots(): S = update(S); continue secure(A,B): S = update(S); continue ’p’,hex(p).upper() ’A’,hex(A).upper() ’B’,hex(B).upper()

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

The standard 224-bit Brainpool curve is not the same curve:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 B 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

Next slide: a procedure that does generate the standard Brainpool curve.

import hashlib def hash(seed): h seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and and Integers(n)(p).multiplicative_order() def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) def fullhash(seed): return str2int(hash(seed) def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): while True: S = update(S) B = fullhash(S) if not k(B).is_square(): if not secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-82
SLIDE 82

16

h.update(seed); return h.digest() 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF EllipticCurve([k(A),k(B)]).cardinality() Integers(n)(p).multiplicative_order() * 100 >= n-1) ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) Integer(seed.encode(’hex’),16) 1,len(seed)) hash(update(seed))) % 2^223 int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) real2str(exp(1)/16,7*seedbytes) update(S); continue continue

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

The standard 224-bit Brainpool curve is not the same curve:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 B 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

Next slide: a procedure that does generate the standard Brainpool curve.

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-83
SLIDE 83

16

h.digest() 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF n-1) reversed(range(bytes))]) int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes)

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

The standard 224-bit Brainpool curve is not the same curve:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 B 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

Next slide: a procedure that does generate the standard Brainpool curve.

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-84
SLIDE 84

17

2015: We carefully implemented the curve-generation procedure from the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E B 68AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

The standard 224-bit Brainpool curve is not the same curve:

p D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF A 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 B 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

Next slide: a procedure that does generate the standard Brainpool curve.

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-85
SLIDE 85

17

We carefully implemented curve-generation procedure the Brainpool standard. Previous slide: 224-bit procedure. Output of this procedure:

D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E 8AEC4BFE84C659EBB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

standard 224-bit Brainpool is not the same curve:

D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

slide: a procedure does generate standard Brainpool curve.

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

Did Brainp publication? Did they Brainpool advertised “comprehensive”, transparent”, say the same

slide-86
SLIDE 86

17

refully implemented ation procedure

  • ol standard.

224-bit procedure. rocedure:

D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF 2B98B906DC245F2916C03A2F953EA9AE565C3253E8AEC4BFE84C659E BB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

224-bit Brainpool same curve:

D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

cedure generate Brainpool curve.

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

Did Brainpool check publication? After Did they know befo Brainpool procedure advertised as “systematic”, “comprehensive”, “completely transparent”, etc. say the same for b

slide-87
SLIDE 87

17

implemented cedure rd. cedure.

D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF 8AEC4BFE84C659E BB8B81DC39355A2EBFA3870D98976FA2F17D2D8D

Brainpool curve:

D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF 68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43 2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B

curve.

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we say the same for both procedures.

slide-88
SLIDE 88

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures.

slide-89
SLIDE 89

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures. Can quietly manipulate choice to take the weaker procedure.

slide-90
SLIDE 90

18

import hashlib def hash(seed): h = hashlib.sha1(); h.update(seed); return h.digest() seedbytes = 20 p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF k = GF(p); R.<x> = k[] def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n < p and n.is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def update(seed): return int2str(str2int(seed) + 1,len(seed)) def fullhash(seed): return str2int(hash(seed) + hash(update(seed))) % 2^223 def real2str(seed,bytes): return int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) nums = real2str(exp(1)/16,7*seedbytes) S = nums[2*seedbytes:3*seedbytes] while True: A = fullhash(S) if not (k(A)*x^4+3).roots(): S = update(S); continue while True: S = update(S) B = fullhash(S) if not k(B).is_square(): break if not secure(A,B): S = update(S); continue print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures. Can quietly manipulate choice to take the weaker procedure. Interesting Brainpool quote: “It is envisioned to provide additional curves on a regular basis.”

slide-91
SLIDE 91

18

= hashlib.sha1(); h.update(seed); return h.digest() 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF = k[] EllipticCurve([k(A),k(B)]).cardinality() and n.is_prime() Integers(n)(p).multiplicative_order() * 100 >= n-1) int2str(seed,bytes): ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) str2int(seed): Integer(seed.encode(’hex’),16) int2str(str2int(seed) + 1,len(seed)) fullhash(seed): str2int(hash(seed) + hash(update(seed))) % 2^223 real2str(seed,bytes): int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) real2str(exp(1)/16,7*seedbytes) nums[2*seedbytes:3*seedbytes] (k(A)*x^4+3).roots(): S = update(S); continue fullhash(S) k(B).is_square(): break secure(A,B): S = update(S); continue ’p’,hex(p).upper() ’A’,hex(A).upper() ’B’,hex(B).upper()

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures. Can quietly manipulate choice to take the weaker procedure. Interesting Brainpool quote: “It is envisioned to provide additional curves on a regular basis.” We made using standa To avoid complications hash outputs: from SHA-1 maximum-securit Also upgraded maximum Brainpool and arctan(1) uses sin(1), We also pattern of

slide-92
SLIDE 92

18

h.update(seed); return h.digest() 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF EllipticCurve([k(A),k(B)]).cardinality() Integers(n)(p).multiplicative_order() * 100 >= n-1) ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) Integer(seed.encode(’hex’),16) 1,len(seed)) hash(update(seed))) % 2^223 int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes) real2str(exp(1)/16,7*seedbytes) update(S); continue continue

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures. Can quietly manipulate choice to take the weaker procedure. Interesting Brainpool quote: “It is envisioned to provide additional curves on a regular basis.” We made a new 224- using standard NIST To avoid Brainpool’s complications of concatenating hash outputs: We from SHA-1 to state-of-the-a maximum-security Also upgraded to requiring maximum twist securit Brainpool uses exp(1) and arctan(1) = ı uses sin(1), so we We also used much pattern of searching

slide-93
SLIDE 93

18

h.digest() 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF n-1) reversed(range(bytes))]) int2str(Integer(floor(RealField(8*bytes+8)(seed)*256^bytes)),bytes)

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures. Can quietly manipulate choice to take the weaker procedure. Interesting Brainpool quote: “It is envisioned to provide additional curves on a regular basis.” We made a new 224-bit curve using standard NIST P-224 p To avoid Brainpool’s complications of concatenating hash outputs: We upgraded from SHA-1 to state-of-the-a maximum-security SHA3-512. Also upgraded to requiring maximum twist security. Brainpool uses exp(1) = e and arctan(1) = ı=4, and M uses sin(1), so we used cos(1). We also used much simpler pattern of searching for seeds.

slide-94
SLIDE 94

19

Did Brainpool check before publication? After publication? Did they know before 2015? Brainpool procedure is advertised as “systematic”, “comprehensive”, “completely transparent”, etc. Surely we can say the same for both procedures. Can quietly manipulate choice to take the weaker procedure. Interesting Brainpool quote: “It is envisioned to provide additional curves on a regular basis.”

20

We made a new 224-bit curve using standard NIST P-224 prime. To avoid Brainpool’s complications of concatenating hash outputs: We upgraded from SHA-1 to state-of-the-art maximum-security SHA3-512. Also upgraded to requiring maximum twist security. Brainpool uses exp(1) = e and arctan(1) = ı=4, and MD5 uses sin(1), so we used cos(1). We also used much simpler pattern of searching for seeds.

slide-95
SLIDE 95

19

Brainpool check before publication? After publication? they know before 2015?

  • ol procedure is

advertised as “systematic”, rehensive”, “completely transparent”, etc. Surely we can the same for both procedures. quietly manipulate choice e the weaker procedure. Interesting Brainpool quote: “It envisioned to provide additional

  • n a regular basis.”

20

We made a new 224-bit curve using standard NIST P-224 prime. To avoid Brainpool’s complications of concatenating hash outputs: We upgraded from SHA-1 to state-of-the-art maximum-security SHA3-512. Also upgraded to requiring maximum twist security. Brainpool uses exp(1) = e and arctan(1) = ı=4, and MD5 uses sin(1), so we used cos(1). We also used much simpler pattern of searching for seeds.

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and Integers(n)(p).multiplicative_order() and Integers(2*p+2-n)(p).multiplicative_order() def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-96
SLIDE 96

19

check before After publication? efore 2015? cedure is “systematic”, rehensive”, “completely

  • etc. Surely we can

both procedures. manipulate choice er procedure. Brainpool quote: “It provide additional regular basis.”

20

We made a new 224-bit curve using standard NIST P-224 prime. To avoid Brainpool’s complications of concatenating hash outputs: We upgraded from SHA-1 to state-of-the-art maximum-security SHA3-512. Also upgraded to requiring maximum twist security. Brainpool uses exp(1) = e and arctan(1) = ı=4, and MD5 uses sin(1), so we used cos(1). We also used much simpler pattern of searching for seeds.

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() and Integers(2*p+2-n)(p).multiplicative_order() def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-97
SLIDE 97

19

re publication? 2015? “systematic”, “completely we can cedures. choice cedure. quote: “It additional

20

We made a new 224-bit curve using standard NIST P-224 prime. To avoid Brainpool’s complications of concatenating hash outputs: We upgraded from SHA-1 to state-of-the-art maximum-security SHA3-512. Also upgraded to requiring maximum twist security. Brainpool uses exp(1) = e and arctan(1) = ı=4, and MD5 uses sin(1), so we used cos(1). We also used much simpler pattern of searching for seeds.

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-98
SLIDE 98

20

We made a new 224-bit curve using standard NIST P-224 prime. To avoid Brainpool’s complications of concatenating hash outputs: We upgraded from SHA-1 to state-of-the-art maximum-security SHA3-512. Also upgraded to requiring maximum twist security. Brainpool uses exp(1) = e and arctan(1) = ı=4, and MD5 uses sin(1), so we used cos(1). We also used much simpler pattern of searching for seeds.

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

slide-99
SLIDE 99

20

made a new 224-bit curve standard NIST P-224 prime. avoid Brainpool’s complications of concatenating

  • utputs: We upgraded

SHA-1 to state-of-the-art maximum-security SHA3-512. upgraded to requiring maximum twist security.

  • ol uses exp(1) = e

rctan(1) = ı=4, and MD5 sin(1), so we used cos(1). also used much simpler pattern of searching for seeds.

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

Output:

slide-100
SLIDE 100

20

224-bit curve NIST P-224 prime.

  • ol’s

concatenating e upgraded state-of-the-art maximum-security SHA3-512.

  • requiring

security. exp(1) = e ı=4, and MD5 e used cos(1). much simpler rching for seeds.

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

Output:

7144BA12CE8A0C3BEFA053ED

slide-101
SLIDE 101

20

curve P-224 prime. concatenating upgraded state-of-the-art SHA3-512. MD5 cos(1). impler eeds.

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

Output:

7144BA12CE8A0C3BEFA053EDBADA55

slide-102
SLIDE 102

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

22

Output:

7144BA12CE8A0C3BEFA053EDBADA55...

slide-103
SLIDE 103

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

22

Output:

7144BA12CE8A0C3BEFA053EDBADA55...

We actually generated >1000000 curves for this prime, each having a Brainpool-like explanation, even without complicating hashing, seed search, etc.; e.g., BADA55-VPR2-224 uses exp(1).

slide-104
SLIDE 104

21

import simplesha3 hash = simplesha3.sha3512 p = 2^224 - 2^96 + 1 k = GF(p) seedbytes = 20 def secure(A,B): n = EllipticCurve([k(A),k(B)]).cardinality() return (n.is_prime() and (2*p+2-n).is_prime() and Integers(n)(p).multiplicative_order() * 100 >= n-1 and Integers(2*p+2-n)(p).multiplicative_order() * 100 >= 2*p+2-n-1) def int2str(seed,bytes): return ’’.join([chr((seed//256^i)%256) for i in reversed(range(bytes))]) def str2int(seed): return Integer(seed.encode(’hex’),16) def complement(seed): return ’’.join([chr(255-ord(s)) for s in seed]) def real2str(seed,bytes): return int2str(Integer(RealField(8*bytes)(seed)*256^bytes),bytes) sizeofint = 4 nums = real2str(cos(1),seedbytes - sizeofint) for counter in xrange(0,256^sizeofint): S = int2str(counter,sizeofint) + nums T = complement(S) A = str2int(hash(S)) B = str2int(hash(T)) if secure(A,B): print ’p’,hex(p).upper() print ’A’,hex(A).upper() print ’B’,hex(B).upper() break

22

Output:

7144BA12CE8A0C3BEFA053EDBADA55...

We actually generated >1000000 curves for this prime, each having a Brainpool-like explanation, even without complicating hashing, seed search, etc.; e.g., BADA55-VPR2-224 uses exp(1). See bada55.cr.yp.to for much more: full paper; scripts; detailed Brainpool analysis; manipulating “minimal” primes and curves (Microsoft “NUMS”); manipulating security criteria.