The Discrete Logarithm Problem with Preprocessing
Henry Corrigan-Gibbs and Dmitry Kogan Stanford University
Eurocrypt – 1 May 2018 Tel Aviv, Israel
The Discrete Logarithm Problem with Preprocessing Henry - - PowerPoint PPT Presentation
The Discrete Logarithm Problem with Preprocessing Henry Corrigan-Gibbs and Dmitry Kogan Stanford University Eurocrypt 1 May 2018 Tel Aviv, Israel 38 Signatures (DSA and Schnorr) 39 DH key Signatures exchange (DSA and Schnorr) 40
Henry Corrigan-Gibbs and Dmitry Kogan Stanford University
Eurocrypt – 1 May 2018 Tel Aviv, Israel
38
Signatures
(DSA and Schnorr)
39
Signatures
(DSA and Schnorr)
DH key exchange
40
Signatures
(DSA and Schnorr)
DH key exchange DDH
41
Signatures
(DSA and Schnorr)
DH key exchange DDH Pairings
42
Group: ! = #
Instance: #% ∈ ! Solution: ' ∈ ℤ) Adversary *
43
Group: ! = #
Instance: #% ∈ ! Solution: ' ∈ ℤ) Adversary * Why do we believe this problem is hard?
44
Th
generic discrete-log algorithm that
must run in time Ω(!%/').
45
Th
generic discrete-log algorithm that
must run in time Ω(!%/').
Generic attack in 256-bit group takes ≈ 2%'+ time.
46
Th
generic discrete-log algorithm that
must run in time Ω(!%/').
Generic attack in 256-bit group takes ≈ 2%'+ time.
47
Best attacks on standard EC groups are generic
Ge Generic-gr group up model del:
“lab abeling” function
!: ℤ$ → 0,1 ∗
group up-op
*+ ! , , ! - ↦ ! , + -
Generic dlog algorithm takes as input ! 1 , ! 0 , representing (2, 23), make queries to *+, outputs 0.
[Measure running time by query complexity]
48 [Nechaev’94], [Shoup’97], [Maurer’05]
Ge Generic-gr group up model del:
“lab abeling” function
!: ℤ$ → 0,1 ∗
group up-op
*+ ! , , ! - ↦ ! , + -
Generic dlog algorithm takes as input ! 1 , ! 0 , representing (2, 23), make queries to *+, outputs 0.
[Measure running time by query complexity]
49 [Nechaev’94], [Shoup’97], [Maurer’05]
Very useful way to understand hardness
[BB04,B05,M05,D06, B08,Y15,…]
knows s no nothi hing ng about the structure of the group ! in advance
Ø ! is one of a small number of groups: NIST P-256, Curve25519, …
preprocessing attacks! [H80, Yao90, FN91, …]
50
knows s no nothi hing ng about the structure of the group ! in advance
Ø ! is one of a small number of groups: NIST P-256, Curve25519, …
preprocessing attacks! [H80, Yao90, FN91, …]
51
knows s no nothi hing ng about the structure of the group ! in advance
Ø ! is one of a small number of groups: NIST P-256, Curve25519, …
preprocessing attacks! [H80, Yao90, FN91, …]
52
knows s no nothi hing ng about the structure of the group ! in advance
Ø ! is one of a small number of groups: NIST P-256, Curve25519, …
preprocessing attacks! [H80, Yao90, FN91, …]
53
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
Initiated by Hellman (1980) in context of OWFs
54
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
Initiated by Hellman (1980) in context of OWFs
Both algorithms are generic! Both algorithms are generic!
55
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
56
Initiated by Hellman (1980) in context of OWFs
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
Preprocessing time .
57
Initiated by Hellman (1980) in context of OWFs
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
Advice size . Preprocessing time /
58
Initiated by Hellman (1980) in context of OWFs
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
Advice size . Online time / Preprocessing time 0
59
Initiated by Hellman (1980) in context of OWFs
!" !# Preprocessing phase
Group: $ = & Advice: '($ Solution: ) ∈ ℤ, Instance: &- ∈ $
Online phase
Advice size . Online time / Preprocessing time 0 Success prob. 1
60
Initiated by Hellman (1980) in context of OWFs
Background: Preprocessing attacks are relevant
%('(/*) generic attack on discrete log
Our results: Preprocessing lower-bounds and attacks
%('(/*) generic dlog attack is optimal
%('(/.) preprocessing attack on DDH-like problem
Open questions
61
Background: Preprocessing attacks are relevant
%('(/*) generic attack on discrete log
Our results: Preprocessing lower-bounds and attacks
%('(/*) generic dlog attack is optimal
%('(/.) preprocessing attack on DDH-like problem
Open questions
62
Th
There is a generic dlog algorithm with preprocessing that:
such that: !"$ = & '(#))
63
A preexisting result…
…. building on prior work on multiple-discrete-log algorithms [ESST99,KS01,HMCD04,BL12]
Th
There is a generic dlog algorithm with preprocessing that:
such that: !"$ = & '(#))
Will sketch the algorithm for ! = " = )+/-, constant #.
64
A preexisting result…
…. building on prior work on multiple-discrete-log algorithms [ESST99,KS01,HMCD04,BL12]
Th
There is a generic dlog algorithm with preprocessing that:
such that: !"$ = & '(#))
65
A preexisting result…
…. building on prior work on multiple-discrete-log algorithms [ESST99,KS01,HMCD04,BL12]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
66
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"#
67
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&)
68
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%&)%&*
69
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%&)%&*
70
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
71
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
72
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
73
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
74
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
75
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
76
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
77
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
78
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Define a pseudo-random walk on !:
"# ↦ "#%&
where ' = Hash "# is a random function
"# "#%&) "#%∑+ &+ "#%&)%&,
= -.
79
/
If you know the dlog of the endpoint of a walk, you know the dlog of the starting point!
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
80
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits
81
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits
82
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits
)*
83
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits
)*
84
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits
)*
85
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits
)*
86
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits Time: ( %(!"/$) steps
)*
87
[M10, LCH11, BL13]
Advice string
!"/$ chains Length: !"/$
Preprocessing phase
length !"/$
endpoints Online phase
stored point, output the discrete log
Advice: ( %(!"/$) bits Time: ( %(!"/$) steps
)*
88
Preprocessing time: + Ω(!-/$)
[M10, LCH11, BL13]
Generic discrete log à Without preprocessing: Ω "#/%
&'&( ti time
à With preprocessing: ) *("#/,)
&(. ti time
Related preprocessing attacks break:
[This paper]
[FJM14]
[CDGS17]
“
25 256-bi bit ECDL
89
Generic discrete log à Without preprocessing: Ω "#/%
&'&( ti time
à With preprocessing: ) *("#/,)
&(. ti time
Related preprocessing attacks break:
[This paper]
[FJM14]
[CDGS17] 25 256-bi bit ECDL
90
Generic discrete log à Without preprocessing: Ω "#/%
&'&( ti time
à With preprocessing: ) *("#/,)
&(. ti time
Related preprocessing attacks break:
[This paper]
[FJM14]
[CDGS17] Is this dlog attack the best possible?! 25 256-bi bit ECDL
91
Generic discrete log à Without preprocessing: Ω "#/%
&'&( ti time
à With preprocessing: ) *("#/,)
&(. ti time
Related preprocessing attacks break:
[This paper]
[FJM14]
[CDGS17] 25 256-bi bit ECDL
92
Signatures
(DSA and Schnorr)
DH key exchange DDH Pairings
93
Signatures
(DSA and Schnorr)
DH key exchange DDH Pairings
Could there exist a generic dlog preprocessing attack with ! = # = $%/%'?
94
Signatures
(DSA and Schnorr)
DH key exchange DDH Pairings
Could there exist a generic dlog preprocessing attack with ! = # = $%/%'?
Preprocessing attacks might make us worry about 256-bit EC groups95
96
Background: Preprocessing attacks are relevant
%('(/*) generic attack on discrete log
Our results: Preprocessing lower-bounds and attacks
%('(/*) generic dlog attack is optimal
%('(/.) preprocessing attack on DDH-like problem
Open questions
97
Th
Every generic dlog algorithm with preprocessing that:
must satisfy: !"$ = & Ω(#))
98
Th
Every generic dlog algorithm with preprocessing that:
must satisfy: !"$ = & Ω(#))
This bound is tight for the full range of parameters (up to log factors)
99
Th
Every generic dlog algorithm with preprocessing that:
must satisfy: !"$ = & Ω(#))
100
Th
Every generic dlog algorithm with preprocessing that:
must satisfy: !"$ = & Ω(#))
101
Shoup’s proof technique (1997) relies on + having no information about the group , when it starts running à Need different proof technique
Th
Every generic dlog algorithm with preprocessing that:
must satisfy: !"$ = & Ω(#))
102
Th
Furthermore, the preprocessing time ! must satisfy !" + "$ = Ω(()) Th
Every generic dlog algorithm with preprocessing that:
must satisfy: +"$ = , Ω(())
103
Th
Furthermore, the preprocessing time ! must satisfy !" + "$ = Ω(()) Th
Every generic dlog algorithm with preprocessing that:
must satisfy: +"$ = , Ω(())
104
Online time )-// implies Ω()$//) preprocessing
Th
Furthermore, the preprocessing time ! must satisfy !" + "$ = Ω(()) Th
Every generic dlog algorithm with preprocessing that:
must satisfy: +"$ = , Ω(())
105
“lab abeling” function
!: ℤ$ → 0,1 ∗
group up-op
*+ ! , , ! - ↦ ! , + -
E.g., A dlog algorithm takes as input ! 1 , ! 0 , representing (2, 23), make queries to *+, outputs 0.
106
Use ! to compress the mapping ": ℤ% → 0,1 ∗ that defines the group
⇒ Encoder compresses well
⇒ Lower bound on + and ,
Encoder Decoder
Enc(") ! !
Compressed representation
[Yao90, GT00, DTT10, DHT12, DGK17…]
107
(Random)
4 "(4) 1 101 2 110 3 001 … 4 "(4) 1 101 2 110 3 001 … Similar technique used in [DHT12]
Use ! to compress the mapping ": ℤ% → 0,1 ∗ that defines the group
⇒ Encoder compresses well
⇒ Lower bound on + and ,
Encoder Decoder
Enc(") ! !
Compressed representation
[Yao90, GT00, DTT10, DHT12, DGK17…]
108
(Random)
4 "(4) 1 101 2 110 3 001 … 4 "(4) 1 101 2 110 3 001 … Similar technique used in [DHT12]
Use ! to compress the mapping ": ℤ% → 0,1 ∗ that defines the group
⇒ Encoder compresses well
⇒ Lower bound on + and ,
Encoder Decoder
Enc(") ! !
Compressed representation
[Yao90, GT00, DTT10, DHT12, DGK17…]
109
(Random)
4 "(4) 1 101 2 110 3 001 … 4 "(4) 1 101 2 110 3 001 … Similar technique used in [DHT12]
Use ! to compress the mapping ": ℤ% → 0,1 ∗ that defines the group
⇒ Encoder compresses well
⇒ Lower bound on + and ,
Encoder Decoder
Enc(") ! !
Compressed representation
[Yao90, GT00, DTT10, DHT12, DGK17…]
110
(Random)
4 "(4) 1 101 2 110 3 001 … 4 "(4) 1 101 2 110 3 001 …
Wlog, assume ! is deterministic
Similar technique used in [DHT12]
Use ! to compress the mapping ": ℤ% → 0,1 ∗ that defines the group
⇒ Encoder compresses well
⇒ Lower bound on + and ,
Encoder Decoder
Enc(") ! !
Compressed representation
[Yao90, GT00, DTT10, DHT12, DGK17…]
111
(Random)
4 "(4) 1 101 2 110 3 001 … 4 "(4) 1 101 2 110 3 001 … Similar technique used in [DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
& %(&) 1 101 2 110 3 001 4 000 5 1111 …
112
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
Compressed representation of %
& %(&) 1 101 2 110 3 001 4 000 5 1111 …
113
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
& %(&) 1 101 2 110 3 001 4 000 5 1111 …
114
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
& %(&) 1 101 2 110 3 001 4 000 5 1111 …
115
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
' %(') 1 101 2 110 3 001 4 000 5 1111 …
116
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
* %(*) 1 101 2 110 3 001 4 000 5 1111 …
117
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
* %(*) 1 101 2 110 3 001 4 000 5 1111 … First bitstring in image of %, representing some +,
118
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
* %(*) 1 101 2 110 3 001 4 000 5 1111 …
119
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
* %(*) 1 101 2 110 3 001 4 000 5 1111 …
120
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
* %(*) 1 101 2 110 3 001 4 000 5 1111 …
121
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
!$(001)
+ %(+) 1 101 2 110 3 001 4 000 5 1111 …
122
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
!$(001)
+ %(+) 1 101 2 110 3 001 4 000 5 1111 …
123
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
!$(001)
Responses to !$’s queries on “001”
+ %(+) 1 101 2 110 3 001 4 000 5 1111 …
124
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
!$(001)
Responses to !$’s queries on “001”
… …
+ %(+) 1 101 2 110 3 001 4 000 5 1111 …
125
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
!$(001)
Responses to !$’s queries on “001”
… …
Run !$ on + instances, for some parameter +
, %(,) 1 101 2 110 3 001 4 000 5 1111 …
126
[Yao90, GT00, DHT12]
Pr Proof
a: Use preprocessing dlog adversary !", !$ to build a compressed representation of the mapping %. Encoder
!"
Compressed representation of %
st&
!$(000)
Responses to !$’s queries on “000”
!$(001)
Responses to !$’s queries on “001”
Rest of %
… …
Run !$ on + instances, for some parameter +
, %(,) 1 101 2 110 3 001 4 000 5 1111 …
127
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
128
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
129
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
130
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 2 = ?
131
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 2 = ? “110”
132
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 2 = ? “110”
133
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
134
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 5 = ?
135
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 5 = ? “111”
136
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 5 = ? “111”
137
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
" 5 = ? “111”
138
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
dlog, we get one value "(!) “for free”
139
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
dlog, we get one value "(!) “for free”
140
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
dlog, we get one value "(!) “for free”
141
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
dlog, we get one value "(!) “for free”
" 1 = ?
142
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
dlog, we get one value "(!) “for free”
“101” " 1 = ?
143
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
dlog, we get one value "(!) “for free”
“101” " 1 = ?
144
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
dlog, we get one value "(!) “for free”
“101” " 1 = ?
145
[Yao90, GT00, DHT12]
! "(!) 1 101 2 110 3 001 4 000 5 1111 …
Pr Proof
a: Use preprocessing dlog adversary %&, %( to build a compressed representation of the mapping ".
Compressed representation of "
st) Decoder
%((000)
110 111 … 101 …
Rest of "
…
%((001)
…
dlog, we get one value "(!) “for free”
“101” " 1 = ?
146
[Yao90, GT00, DHT12]
Easy case: The response to all of !"’s queries are distinct
Compress by ≈ log ( bits
Harder case: The response to query ) is the same as the response to query )′ < ).
If the encoder runs !" on 0 instances, requires log 01 + log 1 bits.
147
Index of query ) Pointer to query )′
Cl Claim: m: Each invocation of !" allows the encoder to compress , by at least one bit.
[DHT12] treats a more difficult version of “hard case”
Easy case: The response to all of !"’s queries are distinct
Compress by ≈ log ( bits
Harder case: The response to query ) is the same as the response to query )′ < ).
If the encoder runs !" on 0 instances, requires log 01 + log 1 bits.
148
Index of query ) Pointer to query )′
Cl Claim: m: Each invocation of !" allows the encoder to compress , by at least one bit.
[DHT12] treats a more difficult version of “hard case”
Easy case: The response to all of !"’s queries are distinct
Compress by ≈ log ( bits
Harder case: The response to query ) is the same as the response to query )′ < ).
If the encoder runs !" on 0 instances, requires log 01 + log 1 bits.
149
Index of query ) Pointer to query )′
Cl Claim: m: Each invocation of !" allows the encoder to compress , by at least one bit.
[DHT12] treats a more difficult version of “hard case”
Easy case: The response to all of !"’s queries are distinct
Compress by ≈ log ( bits
Harder case: The response to query ) is the same as the response to query )′ < ).
If the encoder runs !" on 0 instances, requires log 01 + log 1 bits.
150
Index of query ) Pointer to query )′
Cl Claim: m: Each invocation of !" allows the encoder to compress , by at least one bit.
[DHT12] treats a more difficult version of “hard case”
Easy case: The response to all of !"’s queries are distinct
Compress by ≈ log ( bits
Harder case: The response to query ) is the same as the response to query )′ < ).
If the encoder runs !" on 0 instances, requires log 01 + log 1 bits.
151
Index of query ) Pointer to query )′
Cl Claim: m: Each invocation of !" allows the encoder to compress , by at least one bit.
[DHT12] treats a more difficult version of “hard case”
Easy case: The response to all of !"’s queries are distinct
Compress by ≈ log ( bits
Harder case: The response to query ) is the same as the response to query )′ < ).
If the encoder runs !" on 0 instances, requires log 01 + log 1 bits.
152
Index of query ) Pointer to query )′
Each execution of 34 saves at least 1 bit, when: 567 89: < 567;, or 8 < ;/9:
Cl Claim: m: Each invocation of !" allows the encoder to compress , by at least one bit.
[DHT12] treats a more difficult version of “hard case”
= ) − +
,- ≥ 0
⇒ )'( = Ω % ∎
153
Encoding
Use the random self-reducibility of dlog Hardcode a good set of random coins for "# into En Enc $
"# only outputs 1 bit—prior argument fails because encoding the runtime in log ( bits is too expensive Run "# on batches of inputs [See paper for details]
154
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
155
For , = -40/2 ' = -0/2
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
156
For , = -40/2 ' = -0/2
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
157
For , = -40/2 ' = -0/2
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
158
Better attack?
For , = -40/2 ' = -0/2
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
159
For , = -40/2 ' = -0/2
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
160
For , = -40/2 ' = -0/2
DDH problem: Distinguish !, !#, !$, !#$ from !, !#, !$, !% Up Upper bou
Lo Lower b bound Ti Time & Discrete log: '&( = * + ,- '&( = . Ω ,-
CDH: '&( = * + ,- '&( = . Ω ,-
DDH: '&( = * + ,- '&( = . Ω ,(- ≤ -0/2 ≥ -0/3 sqDDH: '&( = * + ,(- '&( = . Ω ,(-
161
Our new results Our new results
For , = -40/2 ' = -0/2
De
!, !#, ! #$ from !, !#, !%
for &, ' ←) ℤ+.
Why it’s interesting:
it’s as hard as discrete log
we show that it’s “much easier” à A DDH-like problem that is easier than dlog
162
De
!, !#, ! #$ from !, !#, !%
for &, ' ←) ℤ+.
Why it’s interesting:
it’s as hard as discrete log
we show that it’s “much easier” à A DDH-like problem that is easier than dlog
163
De
!, !#, ! #$ from !, !#, !%
for &, ' ←) ℤ+.
Why it’s interesting:
it’s as hard as discrete log
we show that it’s “much easier” à A DDH-like problem that is easier than dlog
164
De
!, !#, ! #$ from !, !#, !%
for &, ' ←) ℤ+.
Why it’s interesting:
it’s as hard as discrete log
we show that it’s “much easier” à A DDH-like problem that is easier than dlog
165
Background: Preprocessing attacks are relevant
%('(/*) generic attack on discrete log
Our results: Preprocessing lower-bounds and attacks
%('(/*) generic dlog attack is optimal
%('(/.) preprocessing attack on DDH-like problem
Open questions
166
∗
Coretti, Dodis, and Guo (2018)
(à la Unruh, 2007)
167
Background: Preprocessing attacks are relevant
%('(/*) generic attack on discrete log
Our results: Preprocessing lower-bounds and attacks
%('(/*) generic dlog attack is optimal
%('(/.) preprocessing attack on DDH-like problem
Open questions
168
Background: Preprocessing attacks are relevant
%('(/*) generic attack on discrete log
Our results: Preprocessing lower-bounds and attacks
%('(/*) generic dlog attack is optimal
%('(/.) preprocessing attack on DDH-like problem
Open questions
169
Henry – henrycg@cs.stanford.edu Dima – dkogan@cs.stanford.edu https://eprint.iacr.org/2017/1113