0:00:00.000,0:00:10.064
preroll music
0:00:10.064,0:00:12.189
Herald: Tanja Lange and djb,
0:00:12.189,0:00:15.519
or, Daniel Bernstein,
0:00:15.519,0:00:19.980
came from the elliptic curve
0:00:19.980,0:00:21.710
are gonna talk today also about
0:00:21.710,0:00:24.380
the McEliece crypto where they took us.
0:00:24.380,0:00:25.759
They're both in the steering committee
0:00:25.759,0:00:28.219
for the PQCrypt
0:00:28.219,0:00:30.259
and I've talked to other people[br]in the community
0:00:30.259,0:00:31.239
and they said,
0:00:31.239,0:00:32.390
especially about Tanja,
0:00:32.390,0:00:37.739
she is the one that brings practice[br]and reality into all this theoretical mess
0:00:37.739,0:00:44.420
so let's please have a hand for[br]Tanja Lange and Daniel Bernstein.
0:00:44.420,0:00:55.260
applause
0:00:55.260,0:00:58.769
djb: Okay. Am I on? I apparently am.
0:00:58.769,0:01:01.980
Welcome to a late night show,[br]with Dan and Tanja.
0:01:01.980,0:01:05.570
laughter[br]There's a lot of crypto talks out there
0:01:05.570,0:01:09.560
where you'll get the idea that[br]crypto has problems.
0:01:09.560,0:01:12.340
Crypto has massive usability problems,
0:01:12.340,0:01:13.890
has performance problems,
0:01:13.890,0:01:15.460
has pitfalls for implementors,
0:01:15.460,0:01:17.750
has crazy complexity in implementation,
0:01:17.750,0:01:19.729
stupid standards,
0:01:19.729,0:01:21.920
millions of lines of unauditable code,
0:01:21.920,0:01:23.320
and then all of these problems
0:01:23.320,0:01:27.189
are combined into a[br]grand unified clusterfuck
0:01:27.189,0:01:30.030
called transport layer security.
0:01:30.030,0:01:38.030
laughter, applause
0:01:38.030,0:01:41.449
But, actually, the situation is worse.
0:01:41.449,0:01:43.510
laughter
0:01:43.510,0:01:45.790
Because of what's coming, namely,
0:01:45.790,0:01:49.260
quantum computers.
0:01:49.260,0:01:51.610
These typical talks will give you the idea
0:01:51.610,0:01:54.829
that the core of crypto,[br]the basic cryptographic primitives
0:01:54.829,0:01:57.280
like elliptic curve crypto, ECC,
0:01:57.280,0:01:59.240
that those are just fine,[br]and all the problems
0:01:59.240,0:02:01.229
are integration into applications,
0:02:01.229,0:02:03.100
that's where the security problems happen.
0:02:03.100,0:02:06.609
But quantum computers will break ECC.
0:02:06.609,0:02:09.258
This has been know since the 1990s.
0:02:09.258,0:02:11.500
For people who don't recognise[br]the picture here,
0:02:11.500,0:02:17.040
this is a mathematician named Peter Shor,[br]20 years ago.
0:02:17.040,0:02:25.769
laughter, applause
0:02:25.769,0:02:27.640
20 years ago he wrote a paper saying
0:02:27.640,0:02:29.340
that a big quantum computer would be
0:02:29.340,0:02:33.300
able to factor big integers[br]in polynomial time.
0:02:33.300,0:02:34.770
Now, if you like doing attacks,
0:02:34.770,0:02:36.259
and you hear about something like this,
0:02:36.259,0:02:37.190
then your first thought is
0:02:37.190,0:02:39.080
"Ooh, I wanna quantum computer!"
0:02:39.080,0:02:41.430
"I want a big quantum computer[br]so I can run this attack!"
0:02:41.430,0:02:43.350
"And, where is it? Does anybody have one?"
0:02:43.350,0:02:44.620
"Can anybody gimme one?"
0:02:44.620,0:02:46.610
"Oh, it isn't there yet?[br]Well, what's the progress?"
0:02:46.610,0:02:48.670
"Are we there yet?[br]Can I have one, please?"
0:02:48.670,0:02:50.470
And, well, in the news, you now hear
0:02:50.470,0:02:53.669
about this D-wave quantum computer,
0:02:53.669,0:02:56.879
which, okay, there's some very good[br]quantum engineering
0:02:56.879,0:02:58.180
that goes into this machine.
0:02:58.180,0:02:59.420
It's pretty clear that it's quantum,
0:02:59.420,0:03:01.800
I mean, it's actually doing the quantum[br]stuff they say it does.
0:03:01.800,0:03:04.920
And there's some fantastic[br]marketing in this machine.
0:03:04.920,0:03:06.230
But, unfortunately,
0:03:06.230,0:03:07.650
it's not actually useful.
0:03:07.650,0:03:09.780
So the D-wave quantum computer
0:03:09.780,0:03:11.690
doesn't do the basic things
0:03:11.690,0:03:14.830
that we expect a universal[br]quantum computer to do.
0:03:14.830,0:03:18.159
It can only do very limited[br]kinds of quantum computation.
0:03:18.159,0:03:20.480
It cannot maintain qubits,
0:03:20.480,0:03:22.520
do error correction on qubits for a while,
0:03:22.520,0:03:23.750
hold on to them to be able to do
0:03:23.750,0:03:25.659
basic qubit computations.
0:03:25.659,0:03:27.739
It can't even do those computations,
0:03:27.739,0:03:29.769
even if it could hold on to the qubits.
0:03:29.769,0:03:31.299
It can't do Shor's algorithm.
0:03:31.299,0:03:32.939
Can't factor big numbers.
0:03:32.939,0:03:35.390
Can't do other quantum algorithms[br]that we care about.
0:03:35.390,0:03:38.080
Now, the D-wave company says that's[br]not the point,
0:03:38.080,0:03:39.519
there's some other computations
0:03:39.519,0:03:41.799
that we designed this machine to do.
0:03:41.799,0:03:43.549
But they cherry-picked the computations
0:03:43.549,0:03:45.280
for this machine, saying basically
0:03:45.280,0:03:48.769
Here is the problem of[br]simulating this machine
0:03:48.769,0:03:51.129
simulating the quantum[br]thing that it's doing,
0:03:51.129,0:03:53.400
and of course the machine is very good[br]at simulating itself,
0:03:53.400,0:03:54.610
by just running,
0:03:54.610,0:03:57.909
whereas a normal laptop, they compared to
0:03:57.909,0:04:00.189
sort of standard programs[br]on a normal laptop,
0:04:00.189,0:04:02.439
and latest results, 10^8 times faster
0:04:02.439,0:04:06.129
except, well, there's a much[br]more optimised program
0:04:06.129,0:04:07.780
that somebody put out last year,
0:04:07.780,0:04:10.159
which basically is the same speed[br]as the D-wave machine
0:04:10.159,0:04:12.049
and like ten thousand times cheaper.
0:04:12.049,0:04:15.630
So, the D-wave machine is not,[br]for the moment, something useful.
0:04:15.630,0:04:18.360
Lange: Well, if this makes you[br]kind of comfortable,
0:04:18.360,0:04:22.440
so, no Shor monster coming,
0:04:22.440,0:04:23.720
there is progress.
0:04:23.720,0:04:25.760
There will be a universal[br]quantum computer,
0:04:25.760,0:04:28.000
so, something that can run[br]Shor's algorithm,
0:04:28.000,0:04:30.020
and there's a lot of research effort[br]going into this,
0:04:30.020,0:04:32.120
so if you track, like, spending on crypto
0:04:32.120,0:04:33.320
and you can spend...
0:04:33.320,0:04:36.450
and track spending on quantum computers,
0:04:36.450,0:04:37.670
that is a lot of money.
0:04:37.670,0:04:39.850
And there's a lot of institutions[br]and companies
0:04:39.850,0:04:41.700
and of course governments[br]all over the world
0:04:41.700,0:04:43.090
building stuff.
0:04:43.090,0:04:44.250
And we do see progress, so
0:04:44.250,0:04:45.730
we're keeping track on this,
0:04:45.730,0:04:48.300
and, go to the Wikipedia page here
0:04:48.300,0:04:50.270
so we see over the last few years
0:04:50.270,0:04:53.980
a huge progress in stability of qubits,
0:04:53.980,0:04:56.430
so these things usually[br]forget what they had,
0:04:56.430,0:04:57.930
they decay,
0:04:57.930,0:04:59.890
but they get more stable,
0:04:59.890,0:05:01.730
there's better error correction,
0:05:01.730,0:05:03.040
and there's better communication.
0:05:03.040,0:05:06.900
So the latest was that[br]even silicon-based qubits can communicate.
0:05:06.900,0:05:08.530
So something is happening.
0:05:08.530,0:05:12.970
Um, IBM has[br]on the record of Mark Ketchen
0:05:12.970,0:05:15.390
who's their CEO saying
0:05:15.390,0:05:19.640
"We actually do things that make us think[br]like, hey, this isn't 50 years off"
0:05:19.640,0:05:23.260
"This is maybe just 10 or 15 years off.[br]It's within reach."
0:05:23.260,0:05:24.590
So IBM is leaning out the window
0:05:24.590,0:05:27.510
and saying, yup, we're gonna be there[br]pretty damn soon.
0:05:27.510,0:05:31.560
They said that in 2012, so[br]let's fast-forward by 10 to 15 years
0:05:31.560,0:05:34.930
so it's now 2022 or 2027
0:05:34.930,0:05:37.990
and so there is a universal[br]quantum computer.
0:05:37.990,0:05:42.220
The effect this has on the Internet crypto
0:05:42.220,0:05:45.320
is that RSA, which is still the majority
0:05:45.320,0:05:46.650
of all the connections today,
0:05:46.650,0:05:49.760
RSA is broken. RSA is dead.
0:05:49.760,0:05:51.820
Discrete logs in finite fields.
0:05:51.820,0:05:53.250
You might have thought a lot about it
0:05:53.250,0:05:55.000
earlier this year about Logjam.
0:05:55.000,0:05:57.740
But Logjam just breaks the very small one.
0:05:57.740,0:06:00.210
This is breaking any big one.
0:06:00.210,0:06:03.250
So, discrete logs in finite fields[br]is totally dead as well.
0:06:03.250,0:06:05.810
Elliptic curves, that I already mentioned,[br]ECC is dead.
0:06:05.810,0:06:11.030
So this breaks all public-key crypto[br]on the Internet.
0:06:11.030,0:06:13.460
There's another algorithm due to Grover,
0:06:13.460,0:06:16.190
which is somewhat better under control,
0:06:16.190,0:06:18.360
somewhat less scary for crypto,
0:06:18.360,0:06:19.820
but it still has quite an effect,
0:06:19.820,0:06:22.250
so if you believe in the security of AES
0:06:22.250,0:06:26.010
and go like, well, AES-128 seems just fine,
0:06:26.010,0:06:27.200
has been not getting any
0:06:27.200,0:06:30.300
big progress in cryptanalysis,
0:06:30.300,0:06:33.850
but it halves the security,[br]so AES 128-bit keys
0:06:33.850,0:06:36.800
are only 64-bit secure.
0:06:36.800,0:06:40.460
However, you can go to 256 bits.
0:06:40.460,0:06:43.470
djb: Okay, so, the AES situation:[br]not so bad,
0:06:43.470,0:06:45.530
but all this public key stuff is broken.
0:06:45.530,0:06:46.470
So what do we do?
0:06:46.470,0:06:48.370
Well, you could bury[br]your head in the sand,
0:06:48.370,0:06:50.870
you could hope that quantum computers[br]don't come along,
0:06:50.870,0:06:55.800
you could deploy[br]a physically secure crypto.
0:06:55.800,0:06:59.100
You could take a locked briefcase[br]and chain it to your wrist,
0:06:59.100,0:07:01.090
or you could do quantum key distribution.
0:07:01.090,0:07:04.000
Now these things, obviously,[br]are very very expensive.
0:07:04.000,0:07:07.610
This is crypto, information protection[br]for rich people.
0:07:07.610,0:07:11.980
Or, quantum key distribution is crypto[br]for even richer people.
0:07:11.980,0:07:15.370
You, obviously, aren't going to be able[br]to democratically give this
0:07:15.370,0:07:16.840
to everybody who has a laptop.
0:07:16.840,0:07:19.210
But, well, okay, imagine that[br]you have enough money,
0:07:19.210,0:07:20.490
that you don't mind this.
0:07:20.490,0:07:23.830
There's a bigger problem[br]with physical cryptography,
0:07:23.830,0:07:25.290
which is the security.
0:07:25.290,0:07:26.950
Now these things are always advertised
0:07:26.950,0:07:30.100
as provably secure, guaranteed secure.
0:07:30.100,0:07:31.760
Nobody can get into this briefcase!
0:07:31.760,0:07:34.300
Nobody can get into this[br]quantum key distribution system!
0:07:34.300,0:07:36.340
Assuming, of course, blah blah blah.
0:07:36.340,0:07:37.550
And then you look at the assumptions
0:07:37.550,0:07:38.410
and you start saying
0:07:38.410,0:07:40.570
"Wait a minute, is that actually true?"
0:07:40.570,0:07:43.440
And then it turns out that when people try[br]attacking these systems,
0:07:43.440,0:07:44.770
the assumptions are not true.
0:07:44.770,0:07:47.520
And the systems get broken[br]again and again and again
0:07:47.520,0:07:50.380
for a very reasonable attack cost.
0:07:50.380,0:07:54.270
Okay. Even if you have a system[br]where you think it's secure,
0:07:54.270,0:07:55.770
which nobody's managed to build yet,
0:07:55.770,0:07:59.080
even if you had that, the design of[br]this physical security system
0:07:59.080,0:08:01.590
is incredibly difficult to audit.
0:08:01.590,0:08:03.700
It's something where, if somebody wants[br]to slip in a backdoor,
0:08:03.700,0:08:05.020
it's really easy.
0:08:05.020,0:08:06.260
But there's an even worse problem
0:08:06.260,0:08:07.860
with physical cryptography,
0:08:07.860,0:08:10.480
which is that it doesn't[br]do very much crypto.
0:08:10.480,0:08:14.860
Typically these systems do about[br]the same thing that AES does.
0:08:14.860,0:08:17.000
You start with a shared secret,
0:08:17.000,0:08:18.310
and then from that shared secret
0:08:18.310,0:08:20.560
you can authenticate more secrets
0:08:20.560,0:08:24.590
that you transmit through this[br]physically secure communication mechanism.
0:08:24.590,0:08:26.050
For instance, quantum key distribution
0:08:26.050,0:08:28.520
starts with some way,[br]some pre-existing way
0:08:28.520,0:08:30.190
of authenticating.
0:08:30.190,0:08:33.070
But that's just like AES starts with[br]a, a secret key
0:08:33.070,0:08:34.450
which is then used to generate
0:08:34.450,0:08:36.529
more and more secret data.
0:08:36.529,0:08:38.330
And quantum key distribution says
0:08:38.330,0:08:40.610
well, it's provably secure under[br]certain assumptions,
0:08:40.610,0:08:42.770
instead of AES which, well,
0:08:42.770,0:08:44.860
we just heard AES may be a little affected
0:08:44.860,0:08:46.260
by quantum computers, but
0:08:46.260,0:08:48.160
AES-256 is not broken.
0:08:48.160,0:08:50.030
Nobody has any idea how to break it.
0:08:50.030,0:08:52.200
So this physical cryptography
0:08:52.200,0:08:54.570
isn't actually serving[br]the needs that we want.
0:08:54.570,0:08:58.470
Imagine trying to distribute[br]operating system updates
0:08:58.470,0:09:00.550
through locked briefcases.
0:09:00.550,0:09:01.810
It's just not going to happen.
0:09:01.810,0:09:04.330
Microsoft sending out billions[br]of locked briefcases
0:09:04.330,0:09:05.800
to all of its customers.
0:09:05.800,0:09:07.020
If you think that's realistic,
0:09:07.020,0:09:11.150
or if you think that,[br]just, lasers are cool,
0:09:11.150,0:09:13.450
then there's a talk about quantum crypto
0:09:13.450,0:09:15.340
tomorrow, I believe.
0:09:15.340,0:09:20.010
Back in the real world, we obviously[br]need to do something better with crypto.
0:09:20.010,0:09:22.770
Lange: Alright, so,[br]let me take, momentarily,
0:09:22.770,0:09:24.770
a slightly more optimistic perspective.
0:09:24.770,0:09:26.370
Is there any hope? Yes.
0:09:26.370,0:09:29.180
So, the title of this talk, PQCHacks,
0:09:29.180,0:09:31.310
comes from post-quantum crypto,
0:09:31.310,0:09:32.860
and that's the term Dan coined
0:09:32.860,0:09:34.510
back in 2003
0:09:34.510,0:09:36.290
for crypto that remains secure
0:09:36.290,0:09:38.840
even if the adversary has[br]a quantum computer.
0:09:38.840,0:09:42.500
So you, the normal people,[br]me, him, the normal people,
0:09:42.500,0:09:44.290
the Internet, all the connections,
0:09:44.290,0:09:46.740
we have normal computers.
0:09:46.740,0:09:49.080
The adversary has a quantum computer.
0:09:49.080,0:09:50.700
We, today, encrypt something.
0:09:50.700,0:09:51.970
Adversary has all the time in the world
0:09:51.970,0:09:53.450
to build the quantum computer,
0:09:53.450,0:09:56.390
break us now or break us in the future.
0:09:56.390,0:09:57.370
And so this took off,
0:09:57.370,0:09:58.550
and there's been the first workshop
0:09:58.550,0:10:02.370
on post-quantum crypto,[br]called PQCrypto2006
0:10:02.370,0:10:03.770
and then there's been[br]a series of workshops
0:10:03.770,0:10:04.850
you can see here.
0:10:04.850,0:10:07.270
These are the attendees[br]of the last edition
0:10:07.270,0:10:09.580
which was in Waterloo.[br]It's more than a hundred people,
0:10:09.580,0:10:11.390
going like, yes,[br]this is an important topic,
0:10:11.390,0:10:13.490
let's do some research on it.
0:10:13.490,0:10:15.740
So something is happening.
0:10:15.740,0:10:17.500
If you're curious what's happening,
0:10:17.500,0:10:20.620
next there's a workshop in Japan[br]in February
0:10:20.620,0:10:23.420
and then in the Netherlands[br]in 2017,
0:10:23.420,0:10:26.630
and we also got a project through[br]from the EU
0:10:26.630,0:10:28.810
to support research on post-quantum.
0:10:28.810,0:10:30.320
So something is happening.
0:10:30.320,0:10:34.260
Actually, um, did I forget somebody?[br]Yes.
0:10:34.260,0:10:38.280
Um, the NSA is also saying,[br]let's do something.
0:10:38.280,0:10:44.400
So, on August 11 the NSA posted[br]on their Suite B... page
0:10:44.400,0:10:47.540
saying, "The Information Assurance[br]Director (so, IAD)
0:10:47.540,0:10:51.640
recognizes that there will be a move, in[br]the not distant future, to a
0:10:51.640,0:10:53.480
quantum resistant algorithm suite."
0:10:53.480,0:10:56.180
Oh my god! Somebody is doing something!
0:10:56.180,0:10:58.210
The public has realised[br]we have to do something!
0:10:58.210,0:11:00.510
Quick, quick,[br]let's put out a press release!
0:11:00.510,0:11:02.590
Um.
0:11:02.590,0:11:05.560
Looks like they kind of realised[br]it was embarrassing.
0:11:05.560,0:11:09.690
So, eight days later they pushed[br]a new release, saying
0:11:09.690,0:11:15.210
"IAD will initiate a transition to quantum[br]resistant algorithms in the not distant future."
0:11:15.210,0:11:19.910
So, NSA will lead us to a bright and[br]glorious future.
0:11:19.910,0:11:22.760
djb: America, fuck yeah.
0:11:22.760,0:11:30.790
laughter, applause
0:11:30.790,0:11:34.510
Lange: But if you thought that,[br]so far, this was bad,
0:11:34.510,0:11:38.340
it actually takes a lot of time[br]to build crypto.
0:11:38.340,0:11:41.810
With let's say, NSA[br]all ask the researchers
0:11:41.810,0:11:44.000
If you have some idea of[br]what could be secure
0:11:44.000,0:11:45.510
against a quantum computer,
0:11:45.510,0:11:47.120
say AES-256,
0:11:47.120,0:11:48.590
the reason that you have confidence in it
0:11:48.590,0:11:51.250
is we had more than ten years of people
0:11:51.250,0:11:53.000
trying to break it,
0:11:53.000,0:11:54.570
trying all kinds of approaches
0:11:54.570,0:11:55.870
and not getting anywhere.
0:11:55.870,0:12:00.350
It takes a lot of time to explore[br]the space of cryptosystems.
0:12:00.350,0:12:01.540
Once you have figured out
0:12:01.540,0:12:02.880
what could be actually doable,
0:12:02.880,0:12:05.230
you want to figure[br]what the best attacks are,
0:12:05.230,0:12:06.940
you want to focus on the security system,
0:12:06.940,0:12:09.430
you want to figure out[br]how to implement them,
0:12:09.430,0:12:10.380
how to implement them securely,
0:12:10.380,0:12:13.570
that is a whole lot of work[br]that needs to be done
0:12:13.570,0:12:15.860
before you can say, well,[br]this is actually practical.
0:12:15.860,0:12:18.060
We can actually use this.
0:12:18.060,0:12:22.680
Or sometimes, this is as practical[br]as we can get it.
0:12:22.680,0:12:27.210
And then, you have this tiny little[br]crypto primitive,
0:12:27.210,0:12:28.410
and then you have to build the hooks
0:12:28.410,0:12:31.200
and connections to get it into TLS.
0:12:31.200,0:12:32.670
Then we said at the beginning
0:12:32.670,0:12:33.910
that maybe you believe
0:12:33.910,0:12:36.670
that the cute little crypto cores[br]are all secure
0:12:36.670,0:12:37.600
and it's just the connections
0:12:37.600,0:12:39.500
with the AES, sorry, with the TLS
0:12:39.500,0:12:42.029
in other world that is the problem.
0:12:42.029,0:12:44.620
That still needs to be done[br]for post-quantum as well.
0:12:44.620,0:12:46.500
And, the side-channel attacks,
0:12:46.500,0:12:48.260
there's, uh, as an example,
0:12:48.260,0:12:52.370
ECC was introduced back in 85,
0:12:52.370,0:12:54.100
and now 30 years later,
0:12:54.100,0:12:57.460
we're seeing that ECC is actually[br]getting deployed on the Internet,
0:12:57.460,0:13:02.340
that now the IETF, having called[br]for having elliptic curve crypto,
0:13:02.340,0:13:05.560
because people start saying, yes,[br]we would like to use this.
0:13:05.560,0:13:08.440
So we cannot wait until[br]there's a quantum computer
0:13:08.440,0:13:10.670
in order to start research on it.
0:13:10.670,0:13:14.770
If you remember what 85 looked like
0:13:14.770,0:13:18.770
That's a while ago.
0:13:18.770,0:13:21.970
Now, if that sounded bad,
0:13:21.970,0:13:23.170
it's actually worse.
0:13:23.170,0:13:26.400
It's not just that, in 15 years from now,
0:13:26.400,0:13:29.259
whatever you send then will be broken.
0:13:29.259,0:13:33.420
There's some indication that some entities
0:13:33.420,0:13:40.690
might be recording your traffic.
0:13:40.690,0:13:42.700
We've given a talk like this in 2012
0:13:42.700,0:13:44.220
which was "Crypto for the Paranoid",
0:13:44.220,0:13:45.400
everybody thought it was, like,
0:13:45.400,0:13:46.960
pfft, you're crazy,
0:13:46.960,0:13:48.720
now it goes like[br]"well, there might be an entity"
0:13:48.720,0:13:52.960
and everybody goes like, yeah, hmm, yeah.
0:13:52.960,0:13:54.560
So, let's assume that this entity
0:13:54.560,0:13:57.020
has the records of all the connections,
0:13:57.020,0:14:01.220
and, that in ten years, you're going[br]to be an interesting person.
0:14:01.220,0:14:04.540
Maybe you're a politician,[br]maybe you've become rich,
0:14:04.540,0:14:07.880
maybe you associate with the wrong people,[br]or so they think,
0:14:07.880,0:14:12.630
and so somehow they go back to[br]the 27th of December 2015,
0:14:12.630,0:14:16.000
and figure out what you[br]were emailing during the talks,
0:14:16.000,0:14:18.279
because they have all the connections here
0:14:18.279,0:14:20.410
so they can go back in time
0:14:20.410,0:14:26.050
just by the metadata,[br]and of course the real data.
0:14:26.050,0:14:28.630
From the metadata, they can decrypt it,
0:14:28.630,0:14:31.670
because this metadata is using RSA or ECC
0:14:31.670,0:14:33.090
which are broken.
0:14:33.090,0:14:34.550
And then they get the same key
0:14:34.550,0:14:38.180
than you're currently using with your[br]other side to communicate.
0:14:38.180,0:14:42.920
And so they can go and decrypt this.
0:14:42.920,0:14:45.529
So it's not only that we can't wait for[br]quantum computers to come,
0:14:45.529,0:14:51.320
we might already be too late.
0:14:51.320,0:14:53.359
Well, on the next slide,
0:14:53.359,0:14:56.190
here's a bunch of people who are getting[br]together in this EU project,
0:14:56.190,0:14:59.720
and we have come up with[br]what we're currently thinking
0:14:59.720,0:15:02.290
are good recommendations.
0:15:02.290,0:15:04.080
We think it's necessary for people
0:15:04.080,0:15:07.190
who really care about the security[br]of their connections,
0:15:07.190,0:15:08.480
and when I say people I include myself,
0:15:08.480,0:15:10.740
I care about the security of[br]my connections,
0:15:10.740,0:15:12.330
we would like to have something
0:15:12.330,0:15:15.050
that we believe is secure[br]for the next hundred years.
0:15:15.050,0:15:17.310
And so we put out[br]a list of recommendations.
0:15:17.310,0:15:19.910
So, for symmetric, it's relatively easy.
0:15:19.910,0:15:22.500
You want something which is at least[br]a 256-bit key
0:15:22.500,0:15:25.110
and is sufficiently well understood
0:15:25.110,0:15:29.129
so there we have Salsa20,[br]and we have AES-256.
0:15:29.129,0:15:32.990
Then, for authentication in symmetric,
0:15:32.990,0:15:35.430
there, we don't actually have any decrease
0:15:35.430,0:15:36.750
from a quantum computer, because
0:15:36.750,0:15:38.899
these are already[br]information-theoretically secure.
0:15:38.899,0:15:40.899
So these are the nice part.
0:15:40.899,0:15:44.220
These two talk items is where we go like
0:15:44.220,0:15:47.690
"Pff. We might be okay on those."
0:15:47.690,0:15:49.880
We can do better,[br]we can have nice research
0:15:49.880,0:15:51.740
and get something which is even[br]better protected,
0:15:51.740,0:15:54.010
even faster under the new scenario,
0:15:54.010,0:15:55.740
but it's not so dire.
0:15:55.740,0:15:59.240
The bottom two, these are[br]the public key systems.
0:15:59.240,0:16:03.399
That's public key encryption[br]and public key signatures.
0:16:03.399,0:16:05.220
That's what we're going to[br]focus on in this talk.
0:16:05.220,0:16:07.750
So, for public key encryption,[br]we're recommending
0:16:07.750,0:16:10.620
the McEliece cryptosystem[br]with Goppa codes
0:16:10.620,0:16:13.250
for a certain parameter size,
0:16:13.250,0:16:15.240
and then for signatures,
0:16:15.240,0:16:17.959
the recommendation is to use hash-based.
0:16:17.959,0:16:19.170
djb: Okay, so...
0:16:19.170,0:16:23.240
Let me dive into[br]the hash-based part of this.
0:16:23.240,0:16:26.220
This is something which goes back[br]even further than the 80s.
0:16:26.220,0:16:28.720
It goes back to the 1970s. Lamport.
0:16:28.720,0:16:32.810
So here's a way to use hashes[br]to do one-time signatures.
0:16:32.810,0:16:34.300
Which are, we'll see in a few minutes,
0:16:34.300,0:16:35.700
signatures that you can use
0:16:35.700,0:16:38.460
to sign one message under a given key.
0:16:38.460,0:16:40.660
And then, well, that's a little bit[br]inconvenient
0:16:40.660,0:16:41.910
that you can't sign more messages
0:16:41.910,0:16:43.470
so then Merkle came along
0:16:43.470,0:16:45.100
and said, you can sign more messages
0:16:45.100,0:16:46.339
by modifying the system,
0:16:46.339,0:16:47.730
and we'll also take a look at that.
0:16:47.730,0:16:50.890
The only thing you need[br]for these public-key signature systems
0:16:50.890,0:16:52.130
is a good hash function.
0:16:52.130,0:16:54.690
And, okay, that's something where[br]historically,
0:16:54.690,0:16:57.740
some hash functions designed in like, 1991
0:16:57.740,0:16:58.580
had trouble.
0:16:58.580,0:17:00.920
But, now, we have some good hash functions
0:17:00.920,0:17:03.660
so, for instance, SHA-3 has[br]some great hash functions,
0:17:03.660,0:17:05.790
even SHA-2, there's no sign of trouble,
0:17:05.790,0:17:07.400
of those things being broken.
0:17:07.400,0:17:10.119
And then after these original systems[br]from Lamport and Merkle,
0:17:10.119,0:17:11.859
there's lots and lots of improvements,
0:17:11.859,0:17:14.020
but all of these hash-based systems,
0:17:14.020,0:17:16.670
it's really easy to[br]understand the security.
0:17:16.670,0:17:18.329
It's something where the basic idea
0:17:18.329,0:17:19.589
is really, really simple,
0:17:19.589,0:17:21.280
and the security analysis also ends up
0:17:21.280,0:17:22.869
being very straightforward.
0:17:22.869,0:17:24.679
You have to be careful about some things,
0:17:24.679,0:17:26.589
but, when you're careful about those,
0:17:26.589,0:17:28.790
and there's nothing subtle[br]about it, nothing tricky,
0:17:28.790,0:17:32.110
then we understand exactly[br]what security we get from these.
0:17:32.110,0:17:35.130
So let's dive into a signature scheme
0:17:35.130,0:17:37.820
that can only sign empty messages.
0:17:37.820,0:17:40.690
Now, this sounds kind of, like,[br]wait a minute,
0:17:40.690,0:17:42.760
what do you mean,[br]"can only sign empty messages?"
0:17:42.760,0:17:44.600
There's only one empty string,
0:17:44.600,0:17:46.290
and that's the only thing you can sign.
0:17:46.290,0:17:49.550
But imagine that you want[br]to have a panic button,
0:17:49.550,0:17:51.000
like, your revocation key,
0:17:51.000,0:17:52.000
you want to be able to say,
0:17:52.000,0:17:56.290
"Here's a message that says,[br]my house, my computer's been compromised,
0:17:56.290,0:17:58.290
don't trust anything from this anymore".
0:17:58.290,0:18:00.750
It's this one message[br]that you want to sign,
0:18:00.750,0:18:01.500
under a certain key,
0:18:01.500,0:18:03.750
and if anybody has that public key,
0:18:03.750,0:18:06.800
then they should be able to verify[br]that you sent that message,
0:18:06.800,0:18:08.350
and nobody should be able to forge that,
0:18:08.350,0:18:10.000
because it's really bad[br]if somebody can forge
0:18:10.000,0:18:10.880
your panic message.
0:18:10.880,0:18:12.960
So, being able to sign just one message
0:18:12.960,0:18:15.550
is not actually such a useless thing,
0:18:15.550,0:18:16.790
and we'll also see that it builds up
0:18:16.790,0:18:19.550
to the rest of hash-based crypto.
0:18:19.550,0:18:23.040
Okay. Let's look at[br]some Python stuff here,
0:18:23.040,0:18:25.650
simple SHA-3 you can get online
0:18:25.650,0:18:29.580
under Ubuntu or Debian[br]do install python-pip and python-dev
0:18:29.580,0:18:31.360
because it's a C library actually,
0:18:31.360,0:18:33.840
and then, pip install simplesha3,
0:18:33.840,0:18:36.210
that will give you SHA3-256,
0:18:36.210,0:18:38.000
and then to generate a keypair
0:18:38.000,0:18:41.140
in this empty-message signature system,
0:18:41.140,0:18:43.850
all you do is you make 32 bytes[br]of random data
0:18:43.850,0:18:45.070
and just hash it again,
0:18:45.070,0:18:49.740
just in in case... urandom is not[br]too well-reviewed...
0:18:49.740,0:18:51.770
I mean, we should trust urandom,
0:18:51.770,0:18:54.090
but it's really cheap[br]to put an extra hash on it.
0:18:54.090,0:18:57.140
So that's your secret key,[br]it's a 32-byte hash.
0:18:57.140,0:18:58.530
And then the public key is,
0:18:58.530,0:18:59.890
hash that secret again.
0:18:59.890,0:19:03.040
So the public key is simply[br]a hash of the secret key.
0:19:03.040,0:19:05.120
And then return the public key[br]and the secret key,
0:19:05.120,0:19:06.640
of course the public key[br]will get published,
0:19:06.640,0:19:08.860
and the secret key you keep for yourself.
0:19:08.860,0:19:11.370
As an example of doing this, well, um,
0:19:11.370,0:19:12.600
you just get random-looking data
0:19:12.600,0:19:15.000
coming out from your public key[br]at the bottom
0:19:15.000,0:19:17.910
your secret key right at the bottom[br]and public key above that.
0:19:17.910,0:19:19.870
And you can check that one[br]of them's a hash of the other
0:19:19.870,0:19:21.290
if you know the secret key,
0:19:21.290,0:19:22.730
you can hash it to get the public.
0:19:22.730,0:19:25.000
Okay, now, how do you sign a message?
0:19:25.000,0:19:27.380
Well, this maybe sort of spelled out
0:19:27.380,0:19:29.230
in more steps than it has to be.
0:19:29.230,0:19:32.260
The API here, this is, I would say,
0:19:32.260,0:19:33.910
getting to be a pretty popular API
0:19:33.910,0:19:36.790
for signatures and for verification,
0:19:36.790,0:19:40.010
where you include the signature[br]and the message together,
0:19:40.010,0:19:41.230
as a signed message.
0:19:41.230,0:19:44.940
And to emphasise that, here's a returned[br]signed message from the sign function.
0:19:44.940,0:19:48.730
Now, the signed message[br]will be later on verified,
0:19:48.730,0:19:50.450
and you get a message out of it,
0:19:50.450,0:19:52.080
where the only possible message
0:19:52.080,0:19:53.670
to be signed is the empty string,
0:19:53.670,0:19:55.610
and you can see that the top there
0:19:55.610,0:19:57.540
of the signature is checking
0:19:57.540,0:19:59.530
if the message is anything[br]other than the empty string
0:19:59.530,0:20:01.750
then you're not allowed to sign it.
0:20:01.750,0:20:04.740
Um, if you have the empty string coming in
0:20:04.740,0:20:09.600
then the signature is simply[br]your secret key.
0:20:09.600,0:20:11.780
So you reveal your secret key
0:20:11.780,0:20:13.610
and the whole idea of hash-based crypto
0:20:13.610,0:20:16.160
is that somebody can publicly check
0:20:16.160,0:20:18.650
the hashes of something that you reveal
0:20:18.650,0:20:22.220
to sign, in this case, the empty message.
0:20:22.220,0:20:23.860
And we'll see later how[br]you can use the same idea
0:20:23.860,0:20:25.390
to sign lots more.
0:20:25.390,0:20:27.030
And then, okay, verification,
0:20:27.030,0:20:29.270
you simply checked that signedmessage,
0:20:29.270,0:20:31.340
which is supposed to be the secret key,
0:20:31.340,0:20:32.480
check its hash
0:20:32.480,0:20:34.480
and see if that matches the public key.
0:20:34.480,0:20:36.120
What would somebody have to do[br]to attack this?
0:20:36.120,0:20:37.360
He would have to,
0:20:37.360,0:20:39.549
if you haven't actually signed a message,
0:20:39.549,0:20:40.540
the one message,
0:20:40.540,0:20:41.710
then he would have to figure out
0:20:41.710,0:20:45.010
some string that, when you hash it,
0:20:45.010,0:20:46.510
gives this public key.
0:20:46.510,0:20:48.460
And, well, that public key,
0:20:48.460,0:20:50.260
this is a preimage problem,
0:20:50.260,0:20:51.760
inverting the hash function.
0:20:51.760,0:20:53.580
The hash is supposed to be one-way,
0:20:53.580,0:20:55.460
if the input were low-entropy,
0:20:55.460,0:20:56.860
then this would be doable,
0:20:56.860,0:20:59.140
but the input was a 32-byte random string,
0:20:59.140,0:21:00.760
so nobody will be able to guess that,
0:21:00.760,0:21:03.730
or find any other string that passes this.
0:21:03.730,0:21:05.410
And then you return the message
0:21:05.410,0:21:06.660
and you can try this out
0:21:06.660,0:21:08.240
and see that it works.
0:21:08.240,0:21:09.610
Alright, let's move on.
0:21:09.610,0:21:11.470
We've managed to sign empty messages.
0:21:11.470,0:21:13.790
How about signing 0 or 1?
0:21:13.790,0:21:15.929
So now we'll make a signature system
0:21:15.929,0:21:18.270
where your key can sign 0
0:21:18.270,0:21:19.730
and your key can sign 1.
0:21:19.730,0:21:22.400
And, well, this is going[br]to be kind of stupid,
0:21:22.400,0:21:24.850
what you do is, you make two keys,
0:21:24.850,0:21:26.480
one of them is signing 0,
0:21:26.480,0:21:28.370
and the other one is signing 1.
0:21:28.370,0:21:31.600
You can see how complicated[br]this hash-based signature stuff is,
0:21:31.600,0:21:34.460
it's, okay, you put two keys together,
0:21:34.460,0:21:36.450
you make one key that will sign 0,
0:21:36.450,0:21:37.470
one key that will sign 1,
0:21:37.470,0:21:38.610
concatenate the public keys,
0:21:38.610,0:21:40.130
concatenate the secret keys,
0:21:40.130,0:21:42.520
the p0+p1, s0+s1,
0:21:42.520,0:21:43.880
and then if you want to sign, then,
0:21:43.880,0:21:45.860
well, if you're signing 0,
0:21:45.860,0:21:48.020
now the messages being signed[br]are integers now
0:21:48.020,0:21:49.490
instead the empty string,
0:21:49.490,0:21:50.670
if you want to sign 0,
0:21:50.670,0:21:51.940
then the signed message will be
0:21:51.940,0:21:55.830
the string "0", followed by the 32 bytes,
0:21:55.830,0:21:59.059
well, this is again more complicated[br]than it has to be,
0:21:59.059,0:22:01.400
but think of this as[br]signing the empty message
0:22:01.400,0:22:03.460
with the empty signature system,
0:22:03.460,0:22:06.540
which is just copying the 32 bytes[br]of the secret key.
0:22:06.540,0:22:08.410
And then if you want to sign message 1,
0:22:08.410,0:22:12.240
then you do that with the other 32 bytes[br]of the secret key.
0:22:12.240,0:22:13.770
And then, to verify it,
0:22:13.770,0:22:16.100
well, just whether the[br]signed message is 0 or 1,
0:22:16.100,0:22:18.150
just do the obvious thing.
0:22:18.150,0:22:19.950
Maybe I should emphasise this code
0:22:19.950,0:22:22.440
was written just for this talk,
0:22:22.440,0:22:24.179
it has not been reviewed,
0:22:24.179,0:22:25.860
and you should audit everything.
0:22:25.860,0:22:26.809
You know, you might feel like
0:22:26.809,0:22:28.990
six lines of code,[br]you can't possibly screw it up,
0:22:28.990,0:22:32.530
but, don't ever[br]use code like that in crypto.
0:22:32.530,0:22:34.760
So, this is just meant for[br]you to understand
0:22:34.760,0:22:35.700
what this is supposed to be doing,
0:22:35.700,0:22:36.860
this has not passed review.
0:22:36.860,0:22:39.640
But, I like to think it would pass review.
0:22:39.640,0:22:41.650
Um, okay, if you try
0:22:41.650,0:22:44.570
signing the 1 message, for example,
0:22:44.570,0:22:47.549
and take the signed 1 message[br]and open that signed message,
0:22:47.549,0:22:49.360
you do get the integer 1 back.
0:22:49.360,0:22:50.470
And if you try forging it,
0:22:50.470,0:22:51.600
you're again faced with this problem
0:22:51.600,0:22:53.980
of coming up with some 32-byte string
0:22:53.980,0:22:56.580
that hashes to a particular result.
0:22:56.580,0:22:59.790
Alright, let's move on to 4-bit messages!
0:22:59.790,0:23:02.440
So, I promise I won't do[br]every possible length.
0:23:02.440,0:23:04.610
But, 4 bits, this will make[br]an important point
0:23:04.610,0:23:06.600
that you don't see from 1 bit.
0:23:06.600,0:23:08.720
Let's try to sign a 4-bit message
0:23:08.720,0:23:11.150
by signing each of the four bits.
0:23:11.150,0:23:13.960
This all scales up to signing 1000 bits[br]if you want.
0:23:13.960,0:23:17.950
Um, so, okay, let's make[br]4 sign-bit keypairs
0:23:17.950,0:23:21.179
where each of those was[br]two 32-byte hashes,
0:23:21.179,0:23:25.590
I mean, each secret key is[br]two 32-byte random strings
0:23:25.590,0:23:29.380
and each of the public keys is the hash[br]of those 32-byte random strings.
0:23:29.380,0:23:31.970
Make 4 of those pairs[br]and concatenate them
0:23:31.970,0:23:34.950
to make some new public keys[br]and secret keys.
0:23:34.950,0:23:38.489
Alright, and now to sign a message, well,[br]you look at the message
0:23:38.489,0:23:41.179
and check,[br]is it an integer between 0 and 15,
0:23:41.179,0:23:42.580
and reject otherwise,
0:23:42.580,0:23:44.960
and then sign each bit of the message.
0:23:44.960,0:23:47.850
You can see m shifted right by 0, 1, 2, 3,
0:23:47.850,0:23:49.750
extract the bottom bit of each of those,
0:23:49.750,0:23:51.690
and then sign each of those bits,
0:23:51.690,0:23:53.730
and then concatenate the signatures
0:23:53.730,0:23:56.970
to get, well, signatures of the four bits[br]of the message.
0:23:56.970,0:24:00.200
And then verification works the way[br]you expect
0:24:00.200,0:24:02.750
and I'll just skip that.
0:24:02.750,0:24:04.290
Alright, this has a problem.
0:24:04.290,0:24:06.919
That if you use this signature system
0:24:06.919,0:24:09.960
to sign two different messages,
0:24:09.960,0:24:13.360
then you might actually allow forgeries.
0:24:13.360,0:24:14.620
So let's look, for example,
0:24:14.620,0:24:18.100
suppose you sign 11 and you sign 7.
0:24:18.100,0:24:20.200
Now what is that signature of 11,
0:24:20.200,0:24:22.799
11, uh-oh, I have to do 11 in binary now,
0:24:22.799,0:24:27.260
so 11 sounds like 8+2+1.
0:24:27.260,0:24:30.990
And you sign 7, which is 4+2+1.
0:24:30.990,0:24:32.679
So what if you revealed now?
0:24:32.679,0:24:35.510
You reveal the signature on that 8,
0:24:35.510,0:24:38.090
so the 3rd bit you revealed
0:24:38.090,0:24:41.330
a signature saying, "the 3rd bit is 1"
0:24:41.330,0:24:43.390
as part of the signature of 11.
0:24:43.390,0:24:45.350
But as part of the signature of 7,
0:24:45.350,0:24:47.330
you revealed, you signed a message
0:24:47.330,0:24:50.419
saying "the 3rd bit is 0".
0:24:50.419,0:24:52.600
And now you can just mix and match[br]those messages,
0:24:52.600,0:24:53.830
wherever the bits were different.
0:24:53.830,0:24:56.120
So for instance if you take the top bit[br]from the 11
0:24:56.120,0:24:58.970
and the bottom 3 bits from the 7
0:24:58.970,0:25:00.830
then you end up signing 15.
0:25:00.830,0:25:02.990
So this signature system,
0:25:02.990,0:25:05.870
it's totally safe[br]if you're signing one message.
0:25:05.870,0:25:07.200
But if you think about the data flow,
0:25:07.200,0:25:09.510
what does it mean[br]to sign the individual bits
0:25:09.510,0:25:11.270
of two different messages,
0:25:11.270,0:25:12.669
then you can get in big trouble.
0:25:12.669,0:25:15.809
So this is a one-time signature system.
0:25:15.809,0:25:19.140
Alright. Here's how Lamport's[br]signature system
0:25:19.140,0:25:21.110
works for one-time signatures
0:25:21.110,0:25:22.919
of any length of message.
0:25:22.919,0:25:26.559
First of all, you scale that 4 bits[br]up to 256 bits.
0:25:26.559,0:25:28.600
And then, if you want to sign[br]whatever length of message,
0:25:28.600,0:25:32.460
you just hash the message to 256 bits.
0:25:32.460,0:25:34.690
And the code for it is very simple.
0:25:34.690,0:25:36.299
This is not quite the state of the art
0:25:36.299,0:25:37.540
for one-time signatures,
0:25:37.540,0:25:38.630
there's fancier things you can do,
0:25:38.630,0:25:41.160
you can sign with Winternitz signatures
0:25:41.160,0:25:46.260
and get instead of something[br]like 256 or 512 hash values
0:25:46.260,0:25:47.740
you can compress that down to like
0:25:47.740,0:25:49.760
50 or even fewer hash values.
0:25:49.760,0:25:52.410
There's all sorts of tricks to[br]trade space for time
0:25:52.410,0:25:53.049
in these systems
0:25:53.049,0:25:56.010
but it's totally feasible to deploy[br]Lamport signatures
0:25:56.010,0:26:00.270
and, well, Winternitz makes it[br]even more practical.
0:26:00.270,0:26:02.690
Alright. What about this[br]one-time restriction?
0:26:02.690,0:26:04.110
So these last, the 4-bit,
0:26:04.110,0:26:05.980
and the Lamport bigger message system,
0:26:05.980,0:26:07.309
these are only usable for,
0:26:07.309,0:26:08.790
you can only use your key
0:26:08.790,0:26:10.620
to sign one message.
0:26:10.620,0:26:13.030
And this was fixed by Merkle.
0:26:13.030,0:26:14.690
What Merkle said was,
0:26:14.690,0:26:18.980
you take 8 Lamport, for example 8,[br]it can be any number,
0:26:18.980,0:26:20.299
here's how we'll make a public key
0:26:20.299,0:26:22.510
that can sign 8 different messages.
0:26:22.510,0:26:24.990
You make, well, 8 different Lamport keys
0:26:24.990,0:26:26.620
and you concatenate them together
0:26:26.620,0:26:28.299
and you use each one just once.
0:26:28.299,0:26:31.410
But it's actually more space-efficient[br]than that sounds.
0:26:31.410,0:26:33.130
So here's what you send along.
0:26:33.130,0:26:38.780
You make 8 Ss there, those are the secret[br]Lamport keys,
0:26:38.780,0:26:41.130
that are able to each sign one message,
0:26:41.130,0:26:43.400
and then you have 8[br]corresponding public keys,
0:26:43.400,0:26:45.490
P1 through P8,
0:26:45.490,0:26:48.040
and then you hash together in a tree,
0:26:48.040,0:26:52.049
you hash together P1 and P2,[br]and P3 and P4
0:26:52.049,0:26:53.380
to form P9 and P10,
0:26:53.380,0:26:55.059
and hash those together to get P13,
0:26:55.059,0:26:58.510
and same over here to get[br]a final public key P15.
0:26:58.510,0:27:01.330
So just one hash value, that's your whole[br]public key.
0:27:01.330,0:27:03.679
And then you have to remember[br]lots of secrets,
0:27:03.679,0:27:06.040
but, okay, nobody has to see[br]those secrets,
0:27:06.040,0:27:08.150
you just keep them on your computer.
0:27:08.150,0:27:09.270
And now what does it look like to,
0:27:09.270,0:27:13.410
to hash, sorry, to sign one message?
0:27:13.410,0:27:17.140
Well, here's what it looks like signing[br]the first message.
0:27:17.140,0:27:18.760
That's when you use S1.
0:27:18.760,0:27:21.059
Once you use S1, you cross it out,
0:27:21.059,0:27:21.940
you never use it again,
0:27:21.940,0:27:23.419
you kill the secret.
0:27:23.419,0:27:25.910
You sign your message with S1,
0:27:25.910,0:27:27.200
and somebody can verify,
0:27:27.200,0:27:30.760
if they see the public key P1[br]for Lamport signatures.
0:27:30.760,0:27:32.309
Or whatever one-time signature system
0:27:32.309,0:27:33.709
you put at the top.
0:27:33.709,0:27:36.870
But, well, your public key[br]in Merkle systems is P15.
0:27:36.870,0:27:40.050
And how does somebody verify that[br]P1 and P15 are related?
0:27:40.050,0:27:44.770
Well, you show them the P2 and the P10[br]and the P14
0:27:44.770,0:27:47.049
that they need to hash together with P1
0:27:47.049,0:27:49.990
to get your public key, P15.
0:27:49.990,0:27:52.210
Alright, and that's as complicated
0:27:52.210,0:27:53.809
as the Merkle signature system gets,
0:27:53.809,0:27:55.880
if you want to be able to sign[br]a million messages,
0:27:55.880,0:27:57.340
you have to have a million secrets,
0:27:57.340,0:27:59.350
but, again, just put it on[br]your local hard drive,
0:27:59.350,0:28:00.900
you're not worried about the space.
0:28:00.900,0:28:03.580
It takes a few moments to generate the key,
0:28:03.580,0:28:06.059
but that's also not a problem.
0:28:06.059,0:28:07.620
Okay.
0:28:07.620,0:28:09.160
Good things about hash-based signatures,
0:28:09.160,0:28:10.490
and a few bad things.
0:28:10.490,0:28:12.309
Good things: It's post-quantum secure,
0:28:12.309,0:28:15.610
we totally understand what hash function[br]security looks like,
0:28:15.610,0:28:19.080
after quantum computers[br]and before quantum computers,
0:28:19.080,0:28:20.730
all you need is a good hash function,
0:28:20.730,0:28:21.830
and there's lots of hash functions
0:28:21.830,0:28:23.330
which have been thoroughly studied,
0:28:23.330,0:28:25.110
so, we're confident they're secure,
0:28:25.110,0:28:27.460
SHA-3 was the result of a long competition
0:28:27.460,0:28:28.990
with lots of people bashing on it,
0:28:28.990,0:28:30.850
and really has no problems.
0:28:30.850,0:28:32.220
The public key is very small,
0:28:32.220,0:28:34.419
just one hash value.
0:28:34.419,0:28:37.360
The security, as I said,[br]is well-understood.
0:28:37.360,0:28:39.840
All the computations are very fast,
0:28:39.840,0:28:41.860
and you can already find[br]standard proposals
0:28:41.860,0:28:42.900
for this system.
0:28:42.900,0:28:45.679
This is going to be the first standardised
0:28:45.679,0:28:50.470
and the first deployed[br]post-quantum public key system.
0:28:50.470,0:28:54.000
On the other hand,[br]if you look at the signature size,
0:28:54.000,0:28:55.380
it's kind of big,
0:28:55.380,0:28:56.740
and then the more scary thing
0:28:56.740,0:28:59.210
is the statefulness.
0:28:59.210,0:29:01.030
That you can only use S1 once,
0:29:01.030,0:29:02.850
and then you have to cross it out.
0:29:02.850,0:29:05.039
You can only use S2 once, and you have to[br]cross it out.
0:29:05.039,0:29:06.330
What if you clone your VM?
0:29:06.330,0:29:08.220
What if you have a backup and restore?
0:29:08.220,0:29:11.250
Then, you've forgotten that you've[br]used S2.
0:29:11.250,0:29:12.179
And then you use it again,
0:29:12.179,0:29:14.470
and then somebody can forge messages,
0:29:14.470,0:29:17.010
just like I was saying before.
0:29:17.010,0:29:18.760
Alright, so state is a problem,
0:29:18.760,0:29:20.130
actually some of you I'm sure were
0:29:20.130,0:29:22.289
in Rutkowska's talk earlier today
0:29:22.289,0:29:24.520
you also heard that[br]state is harmful there.
0:29:24.520,0:29:26.910
And the solution:
0:29:26.910,0:29:29.969
Eliminate the state!
0:29:29.969,0:29:36.360
applause
0:29:36.360,0:29:38.360
I think I only have[br]about three minutes left
0:29:38.360,0:29:41.210
for this, this section, well,[br]this slide,
0:29:41.210,0:29:45.450
but, let me try to briefly say, the idea[br]for getting rid of the state
0:29:45.450,0:29:47.929
is, you have, instead of signatures,
0:29:47.929,0:29:49.860
you have certificate chains.
0:29:49.860,0:29:53.110
So you have whole chain of CAs,
0:29:53.110,0:29:55.730
like, as a signer, you build[br]a whole bunch of CAs,
0:29:55.730,0:29:59.300
you build, say, 2^256[br]certificate authorities.
0:29:59.300,0:30:00.990
Now, that's too much computation to do,
0:30:00.990,0:30:03.010
but you do it on the fly,[br]as you need them.
0:30:03.010,0:30:04.900
So you say, I'm going to sign
0:30:04.900,0:30:08.450
using one of these bottom-level[br]certificate authorities,
0:30:08.450,0:30:10.580
that will sign my actual message.
0:30:10.580,0:30:13.200
And now, you don't have to know[br]anything about any of the others,
0:30:13.200,0:30:16.809
you just pick one and use that to[br]sign your message.
0:30:16.809,0:30:19.570
And then it has to be signed[br]by the parent CA,
0:30:19.570,0:30:20.850
and that's signed by the next parent,
0:30:20.850,0:30:22.870
and so on, up the tree, to the top level,
0:30:22.870,0:30:24.460
only 256 levels.
0:30:24.460,0:30:28.200
And then, okay, you have your[br]certificate chain,
0:30:28.200,0:30:30.950
how do you manufacture these[br]certificate authorities?
0:30:30.950,0:30:35.950
Well, a certificate authority is just[br]some bytes of code on disk,
0:30:35.950,0:30:37.450
that's what real CAs are like,
0:30:37.450,0:30:39.120
and you do the same thing signing,
0:30:39.120,0:30:41.330
and, those bytes of code, you can,
0:30:41.330,0:30:46.030
instead of storing the CA as a program[br]in a configuration file on disk,
0:30:46.030,0:30:48.590
you just generate it on the fly[br]when you need it,
0:30:48.590,0:30:52.370
by taking the position of the CA[br]within this huge tree
0:30:52.370,0:30:56.210
and then hashing that together with[br]some long-term secret.
0:30:56.210,0:30:59.419
That one long-term secret[br]is the only thing you remember.
0:30:59.419,0:31:01.809
So you can manufacture CAs on demand
0:31:01.809,0:31:03.100
in some huge tree
0:31:03.100,0:31:05.570
and have them sign[br]certificates for each other
0:31:05.570,0:31:08.020
only looking at a few CAs that you need
0:31:08.020,0:31:11.000
for the particular signature[br]that you want.
0:31:11.000,0:31:12.409
The reason for having this big tree
0:31:12.409,0:31:14.030
is that then you're never going
0:31:14.030,0:31:17.880
to randomly use the same CA[br]at the bottom twice.
0:31:17.880,0:31:20.470
So the problem of having[br]one-time signatures
0:31:20.470,0:31:21.690
is no longer a problem.
0:31:21.690,0:31:24.690
Each CA will only sign one message.
0:31:24.690,0:31:26.500
Okay, and this is something where
0:31:26.500,0:31:30.309
the original proposal[br]from Goldreich in 87,
0:31:30.309,0:31:32.440
if you use good one-time signatures,
0:31:32.440,0:31:33.809
Winternitz and all that stuff,
0:31:33.809,0:31:38.250
you get something like 0.6 megs[br]for a signature.
0:31:38.250,0:31:40.760
Now that's a little bit inconvenient,
0:31:40.760,0:31:43.130
for comparison, if you do an OS update,
0:31:43.130,0:31:45.580
you look at the average[br]Debian packet size,
0:31:45.580,0:31:47.700
then it's 1.2 megs.
0:31:47.700,0:31:49.900
And then, there is some[br]number of signatures
0:31:49.900,0:31:53.419
with each update, and some[br]of them are in packages,
0:31:53.419,0:31:55.490
and well, it's not inconceivable
0:31:55.490,0:31:57.460
to send 0.6 megs for each signature,
0:31:57.460,0:31:58.799
but it's kind of big.
0:31:58.799,0:32:00.940
And then if you look at, well,
0:32:00.940,0:32:03.470
web pages, say the Alexa top[br]million web pages,
0:32:03.470,0:32:06.860
that average is 1.8 megs.
0:32:06.860,0:32:09.150
And again there's several[br]signatures on the web page,
0:32:09.150,0:32:13.159
depending how many sites are providing[br]graphics for it and so on.
0:32:13.159,0:32:14.860
So, 0.6 megs is maybe a problem.
0:32:14.860,0:32:17.720
But, okay, we took a look at this and
0:32:17.720,0:32:21.520
a bunch of people[br]made the signature a lot smaller,
0:32:21.520,0:32:24.020
0.041 megabytes.
0:32:24.020,0:32:27.059
You know how to make a 41-kilobyte[br]signature sound small:
0:32:27.059,0:32:34.250
only 0.041 megabytes for a sphincs 2^128[br]post-quantum secure signature system.
0:32:34.250,0:32:36.080
If you're interested in more about[br]what sphincs does,
0:32:36.080,0:32:39.830
go to sphincs.cr.yp.to
0:32:39.830,0:32:41.500
Lange: Alright, so.
0:32:41.500,0:32:44.970
Now we have some idea of[br]how we can do signatures.
0:32:44.970,0:32:46.819
And signature's just the thing
0:32:46.819,0:32:48.760
that quantum crypto really[br]really can't do,
0:32:48.760,0:32:51.549
I mean, also, locked briefcases,
0:32:51.549,0:32:56.039
how do you trust that this is[br]actually your locked briefcase?
0:32:56.039,0:32:58.940
But also, public key crypto is a problem.
0:32:58.940,0:33:01.820
So, the one that we recommend
0:33:01.820,0:33:03.340
is code-based cryptography,
0:33:03.340,0:33:05.250
and code, in this context, is not like
0:33:05.250,0:33:07.309
code as in writing a program
0:33:07.309,0:33:10.220
but it comes from error-correcting codes.
0:33:10.220,0:33:12.140
So when you think about,[br]say, your computer,
0:33:12.140,0:33:13.960
you have RAM in there
0:33:13.960,0:33:17.750
and this RAM might get cosmic radiation
0:33:17.750,0:33:19.610
or just a bump somewhere,
0:33:19.610,0:33:20.730
might forget something.
0:33:20.730,0:33:22.280
Or, a more trivial example,
0:33:22.280,0:33:25.090
if you order a book, or, nowadays,
0:33:25.090,0:33:26.739
order any media,
0:33:26.739,0:33:29.280
it has an ISBN number.
0:33:29.280,0:33:32.950
This last digit is dependent on[br]the previous digits.
0:33:32.950,0:33:35.080
So they can figure out whether any[br]of the digits before
0:33:35.080,0:33:37.549
was mistransmitted
0:33:37.549,0:33:39.360
then then go like, hmm,
0:33:39.360,0:33:41.390
that number doesn't exist, try again.
0:33:41.390,0:33:44.990
With your ECC RAM it's actually[br]a little more sophisticated.
0:33:44.990,0:33:46.919
So you have your RAM sitting there,
0:33:46.919,0:33:50.190
and it stores 64 bits.
0:33:50.190,0:33:53.950
But it stores these 64 bits[br]with some redundancy.
0:33:53.950,0:33:57.360
Internally, it has some extra check bits.
0:33:57.360,0:34:00.600
It stores 8 extra bits
0:34:00.600,0:34:02.080
and those 8 extra bits allow you
0:34:02.080,0:34:05.850
to recover the 64[br]that you're interested in
0:34:05.850,0:34:08.190
in case there was some error.
0:34:08.190,0:34:09.339
Not in case of a massive error,
0:34:09.339,0:34:12.619
not in case somebody[br]took a screwdriver and hit it,
0:34:12.619,0:34:14.639
but if there was just one random bit flip,
0:34:14.639,0:34:16.268
you can recover it.
0:34:16.268,0:34:18.210
Also, if two bits flip,
0:34:18.210,0:34:20.289
you can at least figure out[br]that there was something
0:34:20.289,0:34:22.190
and raise a flag.
0:34:22.190,0:34:24.079
So the common scenario in error correction
0:34:24.079,0:34:30.319
is that we have a certain number, say, k[br]bits that we care about
0:34:30.319,0:34:34.199
and then in order to be able[br]to recover those,
0:34:34.199,0:34:35.199
to correct those,
0:34:35.199,0:34:37.248
we add some redundancy.
0:34:37.248,0:34:39.869
So we encapsulate, we encode those k bits
0:34:39.869,0:34:41.569
into n bits.
0:34:41.569,0:34:44.859
Now, we would like to have those n bits
0:34:44.859,0:34:48.109
be not too much larger than k.
0:34:48.109,0:34:50.029
We call those the parity check,
0:34:50.029,0:34:52.239
so this is like from the old days[br]where you check
0:34:52.239,0:34:55.599
"those two add up to zero,[br]zero zero zero...
0:34:55.599,0:34:58.819
oops! there's one, aha, there must[br]have been one bit flip."
0:34:58.819,0:35:03.630
So parity as in, it has to be[br]an even number at the end.
0:35:03.630,0:35:04.960
If you're talking about more positions
0:35:04.960,0:35:07.160
then it's obviously more[br]than just the parity
0:35:07.160,0:35:10.479
but it's parity of some[br]more complicated equations.
0:35:10.479,0:35:17.009
So, if no error occurred, if those 64 bits[br]in your ECC RAM are just fine,
0:35:17.009,0:35:21.969
then all those extra n-k[br]checks will be okay.
0:35:21.969,0:35:25.589
If there was an error,[br]then something will fail,
0:35:25.589,0:35:26.309
raise a flag,
0:35:26.309,0:35:29.180
1, 2, 3 of those will not be satisfied,
0:35:29.180,0:35:32.170
and depending on this error pattern,
0:35:32.170,0:35:36.619
you will be able to recover what[br]was going wrong in those bits.
0:35:36.619,0:35:39.289
It might actually be that[br]it was your parity check bits.
0:35:39.289,0:35:42.289
It might be that one of[br]those 8 extra bits flipped.
0:35:42.289,0:35:45.729
In which case, your 64 bits were just fine
0:35:45.729,0:35:49.649
but you don't know this when[br]you get the error message.
0:35:49.649,0:35:51.759
And, if you have a good code,
0:35:51.759,0:35:54.359
so the kind of code[br]that coding theorists study,
0:35:54.359,0:35:55.339
then you would like to have
0:35:55.339,0:35:59.890
your k pretty large, and the n[br]not too much larger.
0:35:59.890,0:36:02.549
Because that's the amount of storage
0:36:02.549,0:36:03.519
you actually have to afford
0:36:03.519,0:36:07.339
for just getting this much data out of it.
0:36:07.339,0:36:11.400
Now, we get some guarantees[br]when we design these,
0:36:11.400,0:36:14.269
there's a guarantee of getting t errors,
0:36:14.269,0:36:15.729
but for most of the codes that we know,
0:36:15.729,0:36:17.489
the guarantees are actually worse
0:36:17.489,0:36:19.029
than we get in practice,
0:36:19.029,0:36:21.729
so if something guarantees you 100 errors,
0:36:21.729,0:36:25.750
most of the time,[br]you can actually correct 203.
0:36:25.750,0:36:27.249
Um, to get a little bit further
0:36:27.249,0:36:32.930
we actually did to, um, represent[br]those equations with matrix,
0:36:32.930,0:36:37.349
um, not quite this one, sorry.
0:36:37.349,0:36:40.569
So, here's our equations.
0:36:40.569,0:36:45.440
So, small example,[br]we would like to encode 4 bits,
0:36:45.440,0:36:46.900
k is 4,
0:36:46.900,0:36:49.479
and we're adding 3 extra bits.
0:36:49.479,0:36:50.809
That's not very efficient,
0:36:50.809,0:36:54.789
but it's a very nice example[br]that one can see.
0:36:54.789,0:37:01.339
So, those rows there are[br]our parity equations.
0:37:01.339,0:37:03.160
So let's assume we have those 7 bits,
0:37:03.160,0:37:05.549
which add redundancy to it,
0:37:05.549,0:37:07.499
then let's translate this first row,
0:37:07.499,0:37:10.410
which is 1 0 0 1 1 0 1,
0:37:10.410,0:37:13.130
that means we take the first bit,
0:37:13.130,0:37:14.690
skip the second and third,
0:37:14.690,0:37:16.769
so, have be 0,
0:37:16.769,0:37:19.469
and then, bit 3, then the next bit is set
0:37:19.469,0:37:23.119
so bit 4, and then bit 6.
0:37:23.119,0:37:24.969
Second row, similarly,[br]we skip the first one,
0:37:24.969,0:37:26.859
so there's no bit 0, there's a bit 1,
0:37:26.859,0:37:28.479
no bit 2, there's a bit 3,
0:37:28.479,0:37:30.759
it was a 1 1 0 column,
0:37:30.759,0:37:32.979
and then bit 5 and bit 6,
0:37:32.979,0:37:33.930
and similarly.
0:37:33.930,0:37:38.279
So we have a nice diagonal[br]on the left-hand side,
0:37:38.279,0:37:41.589
and then the rest is determined[br]by these equations.
0:37:41.589,0:37:44.140
Now let's assume that[br]something went wrong.
0:37:44.140,0:37:46.049
So we have our 7 bits here,
0:37:46.049,0:37:48.509
and a few hours later we come back
0:37:48.509,0:37:50.630
and want to look at those 7 bits,
0:37:50.630,0:37:52.160
we check whether anything went wrong,
0:37:52.160,0:37:55.619
we run through this parity check program,
0:37:55.619,0:37:58.869
and we actually get a failure pattern.
0:37:58.869,0:38:01.790
If everything was fine,[br]we would have gotten 0 0 0,
0:38:01.790,0:38:05.900
but we're getting 1 0 1.
0:38:05.900,0:38:08.229
So the first equation doesn't hold,
0:38:08.229,0:38:10.219
the second one does hold,
0:38:10.219,0:38:13.349
and the third one does not hold.
0:38:13.349,0:38:17.239
Okay. Where could this come from?
0:38:17.239,0:38:19.239
We're pretty sure that b1 is okay
0:38:19.239,0:38:21.569
because otherwise the second[br]equation would be wrong
0:38:21.569,0:38:24.509
because b1 only appears there,
0:38:24.509,0:38:25.880
and we're also making the promise
0:38:25.880,0:38:27.729
that it would be only one error.
0:38:27.729,0:38:29.339
If you have two errors, three errors,
0:38:29.339,0:38:31.420
then lots of other combinations[br]could occur.
0:38:31.420,0:38:33.289
But it's much more likely that[br]one bit flipped
0:38:33.289,0:38:36.319
than that a whole bunch[br]of bits flipped at once.
0:38:36.319,0:38:39.779
Okay, so, tracing this[br]a little bit further,
0:38:39.779,0:38:42.739
yes, so the b3 would get[br]the two first equations,
0:38:42.739,0:38:45.059
b4, yes! b4 actually would get
0:38:45.059,0:38:48.219
that the first and the third[br]equations are false.
0:38:48.219,0:38:50.809
So by seeing the error pattern 1 0 1,
0:38:50.809,0:38:53.229
we know it was b4.
0:38:53.229,0:38:55.539
Now this is a very nice and small example,
0:38:55.539,0:38:57.710
which doesn't even cover like the ECC RAM,
0:38:57.710,0:39:00.680
but it gives you an idea of how to try it.
0:39:00.680,0:39:02.089
On the other hand, it also gives you
0:39:02.089,0:39:04.549
the idea that you need to do kind of
0:39:04.549,0:39:07.369
brute force search it.
0:39:07.369,0:39:10.549
So for just n=7, you have to[br]try up to 7 times.
0:39:10.549,0:39:12.410
If you now have two errors,
0:39:12.410,0:39:16.309
I would need to try every combination of 2
0:39:16.309,0:39:18.090
out of those n.
0:39:18.090,0:39:23.880
If I have a n which is like 2000 bits,[br]really long,
0:39:23.880,0:39:27.229
and I tell you there's 100 errors,
0:39:27.229,0:39:28.930
so you would need to try every combination
0:39:28.930,0:39:31.089
of 100 positions in there.
0:39:31.089,0:39:33.569
So that would be a huge number.
0:39:33.569,0:39:36.599
That's obviously not a good way[br]of error correction,
0:39:36.599,0:39:37.849
and that's certainly not how
0:39:37.849,0:39:39.690
DVDs and whatever else works.
0:39:39.690,0:39:41.859
Oh yeah, one bit of maths notation,
0:39:41.859,0:39:46.449
so, we call these things,[br]the parentheses up there, matrix,
0:39:46.449,0:39:47.869
and in order to have a shorthand,
0:39:47.869,0:39:54.589
because I can't quite put my 2000 bits[br]times 1000 bits matrix on the page,
0:39:54.589,0:39:57.480
I call this thing H,
0:39:57.480,0:40:01.239
and boldface b is such a bit vector.
0:40:01.239,0:40:04.839
So boldface b is that[br]bits that I'm storing,
0:40:04.839,0:40:08.519
and the combination of[br]applying this matrix,
0:40:08.519,0:40:11.130
wherever is 1, I take the variable,
0:40:11.130,0:40:13.059
where there's a 0, I don't write it,
0:40:13.059,0:40:15.380
that I write as H times b.
0:40:15.380,0:40:16.499
So in maths, if you have seen this,
0:40:16.499,0:40:19.549
this is just a matrix times[br]vector multiplication,
0:40:19.549,0:40:24.069
otherwise, just take this as[br]the instruction of evaluating
0:40:24.069,0:40:28.710
this, each row, as a set of equations.
0:40:28.710,0:40:31.089
Alright, so, to give this some names,
0:40:31.089,0:40:33.920
in coding theory we call c the code word,
0:40:33.920,0:40:37.209
so that's an element[br]which is not compromised,
0:40:37.209,0:40:38.299
which will give you 0,
0:40:38.299,0:40:40.229
then there might be an error vector,
0:40:40.229,0:40:42.180
that's the bits that flip,
0:40:42.180,0:40:44.059
and so, when you retrieve the memory
0:40:44.059,0:40:45.779
or when you have a transmission,
0:40:45.779,0:40:47.089
we call this the received word,
0:40:47.089,0:40:50.239
and that's my b from the previous slide.
0:40:50.239,0:40:52.259
We do like to save on space,
0:40:52.259,0:40:53.420
so when there's this diagonal
0:40:53.420,0:40:55.779
which has all 0s down there
0:40:55.779,0:40:58.019
we just skip it.
0:40:58.019,0:41:05.959
So instead of writing a 7-by-3,[br]we just write 4 columns and 3 rows.
0:41:05.959,0:41:08.200
Now there's lots of stuff[br]happening in coding theory,
0:41:08.200,0:41:10.660
it's a, well, 65 years old topic,
0:41:10.660,0:41:13.200
and we can go up to very large matrices,
0:41:13.200,0:41:16.119
and for some special codes,
0:41:16.119,0:41:17.799
these are the ones that coding theorists[br]come up with,
0:41:17.799,0:41:19.799
we actually have efficient methods.
0:41:19.799,0:41:23.359
Much much nicer than taking[br]every combination of 100 positions
0:41:23.359,0:41:26.549
out of 2000 positions.
0:41:26.549,0:41:29.200
Of course, if you get too many errors,
0:41:29.200,0:41:29.859
you can't correct.
0:41:29.859,0:41:32.680
You can only correct up to[br]whatever the promise is,
0:41:32.680,0:41:34.640
plus maybe a little bit later.
0:41:34.640,0:41:36.549
But if you don't know[br]any of the structure,
0:41:36.549,0:41:39.380
if you don't know what[br]the coding theorists put into it,
0:41:39.380,0:41:42.729
or if this H matrix got somewhat perturbed
0:41:42.729,0:41:47.439
by me giving a slightly[br]different representation,
0:41:47.439,0:41:50.709
I don't call this b1 anymore,[br]I call it now b17,
0:41:50.709,0:41:52.150
and let's flip those and so on,
0:41:52.150,0:41:55.250
suddenly it doesn't look like[br]the code that you're used to.
0:41:55.250,0:41:58.289
If it's a random matrix,
0:41:58.289,0:42:00.200
the best attacks are not quite as bad
0:42:00.200,0:42:02.999
as picking 100 out of 2000,
0:42:02.999,0:42:04.670
but they are close to that,
0:42:04.670,0:42:05.980
they're pretty slow attacks,
0:42:05.980,0:42:08.959
it's an exponential-time algorithm,
0:42:08.959,0:42:11.279
if you have a random matrix.
0:42:11.279,0:42:12.999
And so what we're doing[br]in code-based crypto
0:42:12.999,0:42:16.009
is to use this difference for encryption.
0:42:16.009,0:42:17.599
Now going back again to the 70s,
0:42:17.599,0:42:21.009
so, basically, yes, the stuff that we're[br]really confident in
0:42:21.009,0:42:22.829
that it will last another 100 years,
0:42:22.829,0:42:25.299
is the stuff from the 70s that lots of[br]people have looked at,
0:42:25.299,0:42:27.299
so, McEliece in 1978,
0:42:27.299,0:42:29.779
so just the year after RSA,
0:42:29.779,0:42:35.719
came up with a system[br]which is using encoding as encryption.
0:42:35.719,0:42:38.369
So your method is,
0:42:38.369,0:42:40.930
you just encode a vector, your message,
0:42:40.930,0:42:42.900
and then you add some errors to it.
0:42:42.900,0:42:44.880
And, if the other side doesn't have
0:42:44.880,0:42:47.379
an efficient algorithm to decode,
0:42:47.379,0:42:49.459
they actually can't break it.
0:42:49.459,0:42:51.700
They're using a special code in there,
0:42:51.700,0:42:53.449
so there's a code from Goppa
0:42:53.449,0:42:56.059
from a few years earlier than that,
0:42:56.059,0:42:58.029
and that code, so far, nobody has found
0:42:58.029,0:43:00.819
any way to take the perturbed,
0:43:00.819,0:43:03.119
this complicated way of representing it,
0:43:03.119,0:43:06.549
and coming up with[br]efficient decoding algorithm.
0:43:06.549,0:43:10.660
1986, Niederreither came up with[br]a version of McEliece
0:43:10.660,0:43:13.359
which is smaller,[br]the code size is smaller,
0:43:13.359,0:43:15.529
the public key size is smaller,
0:43:15.529,0:43:19.180
and we have similar things to
0:43:19.180,0:43:21.239
what you've seen before,[br]so we have those H matrix,
0:43:21.239,0:43:22.619
we skip the diagonal,
0:43:22.619,0:43:28.499
we just represent this H as our public key[br]as the remaining part of the matrix,
0:43:28.499,0:43:33.139
the secret key, that's the algorithm[br]that only I know.
0:43:33.139,0:43:34.769
It's a Goppa code,
0:43:34.769,0:43:35.890
but it's a Goppa code
0:43:35.890,0:43:39.259
and there's many many Goppa codes[br]for the same size.
0:43:39.259,0:43:40.549
So that's something that Goppa says,
0:43:40.549,0:43:41.829
well, if you want to have Goppa codes
0:43:41.829,0:43:46.969
with 2000 bits[br]that can correct 200 errors,
0:43:46.969,0:43:47.829
here's how you set it up,
0:43:47.829,0:43:51.200
but there's lots and lots and lots[br]of choices in there.
0:43:51.200,0:43:52.469
And your encryption is just,
0:43:52.469,0:43:54.910
take an error vector,
0:43:54.910,0:43:57.269
with a fixed number of bits,
0:43:57.269,0:43:59.479
and send me the error pattern of it.
0:43:59.479,0:44:04.049
So the outcome of multiplying H by this e.
0:44:04.049,0:44:05.509
And then we want to use this in crypto,
0:44:05.509,0:44:08.209
so we use the hash of this to encrypt it.
0:44:08.209,0:44:12.329
Um, then Peter Schwabe and[br]Tung Chou, our PhD student,
0:44:12.329,0:44:14.349
wrote a very efficient[br]implementation of this
0:44:14.349,0:44:15.729
called mcbits,
0:44:15.729,0:44:17.380
so if you want to have more detail
0:44:17.380,0:44:19.619
on how you could really[br]use this in practice,
0:44:19.619,0:44:21.350
then go to that url.
0:44:21.350,0:44:23.339
Um, but let me talk a little bit
0:44:23.339,0:44:26.130
about why we are confident in this.
0:44:26.130,0:44:28.180
Code-based crypto is less obvious[br]than hash-based,
0:44:28.180,0:44:30.420
I mean with hash-based it's like,
0:44:30.420,0:44:32.079
the, all we're doing is, hash.
0:44:32.079,0:44:35.569
A hash function by definition is[br]something which is one-way.
0:44:35.569,0:44:39.559
For this code-based crypto,[br]you need to think a little more,
0:44:39.559,0:44:41.170
to have people studying it
0:44:41.170,0:44:44.630
to figure out why this[br]actually can be secure.
0:44:44.630,0:44:47.619
Now, the attacks, if I may say so,
0:44:47.619,0:44:49.390
started before the cryptosystem[br]was proposed,
0:44:49.390,0:44:50.999
so it was another hard problem
0:44:50.999,0:44:53.410
that coding theorists were[br]studying naturally,
0:44:53.410,0:44:56.219
and then McEliece said, hey, we have[br]this hard problem here,
0:44:56.219,0:44:58.940
decoding a random code is not easy,
0:44:58.940,0:45:01.539
well, actually, afterwards, figuring out,
0:45:01.539,0:45:05.039
well, if you have a really random code,
0:45:05.039,0:45:07.569
even finding out whether there is[br]a smaller code word is NP-hard.
0:45:07.569,0:45:12.240
And then, once it was a cryptosystem,
0:45:12.240,0:45:14.890
so, Omura, Lee-Brickell, all of those,
0:45:14.890,0:45:17.519
those come after[br]it was proposed for crypto.
0:45:17.519,0:45:20.529
There's some which have an extra[br]parenthetic comment,
0:45:20.529,0:45:23.930
those are papers which study[br]the security of McEliece
0:45:23.930,0:45:25.420
if the attacker has a quantum computer,
0:45:25.420,0:45:27.329
so there's been lots and lots of work
0:45:27.329,0:45:30.420
for studying it[br]against a classical computer,
0:45:30.420,0:45:31.849
and there's been some work
0:45:31.849,0:45:33.719
studying it against quantum computers.
0:45:33.719,0:45:36.170
It's pretty clear that we can't use Shor,
0:45:36.170,0:45:37.390
but we can use Grover,
0:45:37.390,0:45:42.180
and it's not so easily obvious[br]how much Grover can give us.
0:45:42.180,0:45:44.359
However, the best that Grover can do
0:45:44.359,0:45:46.519
is basically halve the bit size.
0:45:46.519,0:45:49.140
So we had this AES-128,[br]leading to 64-bit security,
0:45:49.140,0:45:50.769
so if you're conservative,
0:45:50.769,0:45:54.430
if you want to be like really really[br]on the secure size,
0:45:54.430,0:45:58.559
then let's assume that we want to go for[br]pre-quantum security at least 256
0:45:58.559,0:46:02.469
in order to get post-quantum security 128.
0:46:02.469,0:46:04.440
So here are some key sizes,
0:46:04.440,0:46:07.759
so if you're okay with 1000 kilobytes,
0:46:07.759,0:46:14.690
then you're getting something[br]which is at least 131 post-quantum secure,
0:46:14.690,0:46:17.170
and that's actually very conservative,
0:46:17.170,0:46:20.289
most likely we can go much down[br]on the key size.
0:46:20.289,0:46:22.049
But that's where more research is needed.
0:46:22.049,0:46:25.660
If you need something where you can get[br]a guarantee of 100 years security,
0:46:25.660,0:46:27.349
take this one,
0:46:27.349,0:46:28.809
it's not small,
0:46:28.809,0:46:31.650
it's fast, but it's not small,
0:46:31.650,0:46:34.479
and hopefully in 5 years,[br]less than 5 years,
0:46:34.479,0:46:37.249
they can give you something[br]which is smaller
0:46:37.249,0:46:39.669
and still as secure.
0:46:39.669,0:46:40.380
djb: Okay.
0:46:40.380,0:46:45.079
There are lots of possibilities for[br]what the smaller things might be,
0:46:45.079,0:46:47.919
for instance, there's something[br]called QC-MDPC,
0:46:47.919,0:46:48.930
there's actually lots and lots
0:46:48.930,0:46:50.680
of variations of McEliece
0:46:50.680,0:46:51.599
that people have proposed,
0:46:51.599,0:46:53.849
and some of those variations have held up,
0:46:53.849,0:46:55.109
some of them haven't.
0:46:55.109,0:46:58.479
QC-MDPC is something that has[br]held up so far,
0:46:58.479,0:47:00.339
but how many people've looked at it,
0:47:00.339,0:47:03.539
and what's going to happen when[br]more attacks get optimised?
0:47:03.539,0:47:06.039
You can't be trusting something which
0:47:06.039,0:47:09.140
is new or hasn't been studied enough,
0:47:09.140,0:47:10.849
or hasn't been studied[br]in the right directions,
0:47:10.849,0:47:13.089
you also have to be sceptical[br]about crypto.
0:47:13.089,0:47:14.949
There's, well, lots of proposals,
0:47:14.949,0:47:17.759
QC-MDPC looks like one of the most[br]interesting ones,
0:47:17.759,0:47:20.930
that nobody's been able to damage[br]its security,
0:47:20.930,0:47:23.680
for 2^80 pre-quantum security,
0:47:23.680,0:47:24.819
which is not very good,
0:47:24.819,0:47:26.479
but, just as an example,
0:47:26.479,0:47:30.160
they have 0.6 kilobytes, or 600 bytes,
0:47:30.160,0:47:31.789
for the public key,
0:47:31.789,0:47:34.329
and that's a very reasonable size[br]for a public key,
0:47:34.329,0:47:35.449
not as small as ECC
0:47:35.449,0:47:37.039
but it's quite tolerable.
0:47:37.039,0:47:38.910
Um, lattice-based crypto,
0:47:38.910,0:47:40.009
there's NTRU, for example,
0:47:40.009,0:47:42.099
that's been around since the 1990s,
0:47:42.099,0:47:44.729
and maybe that's enough time to start[br]getting confident,
0:47:44.729,0:47:46.690
but, well, again, there's[br]lattice-based systems
0:47:46.690,0:47:48.079
that get proposed and broken,
0:47:48.079,0:47:52.009
for instance, there's a system from[br]Smart-Vercauteren in 2009,
0:47:52.009,0:47:54.699
that was, it's not broken pre-quantum,
0:47:54.699,0:47:58.749
but it was shown in 2014-2015,[br]some follow-up papers,
0:47:58.749,0:48:02.029
to be broken in polynomial time[br]by a quantum computer.
0:48:02.029,0:48:05.130
So, it's a lattice-based system which[br]sounded good at the beginning,
0:48:05.130,0:48:08.469
but is definitely not going to be part of[br]post-quantum cryptography.
0:48:08.469,0:48:09.529
There's multivariate-quadratic,
0:48:09.529,0:48:12.150
now those have[br]the interesting feature that
0:48:12.150,0:48:15.109
the signatures they provide[br]can be very very small,
0:48:15.109,0:48:17.289
like, you can have 100-bit signatures
0:48:17.289,0:48:19.239
and still get some reasonable security
0:48:19.239,0:48:20.989
that nobody knows how to break these,
0:48:20.989,0:48:22.759
well, there's lots and lots[br]of these proposals
0:48:22.759,0:48:24.819
and some of them are broken,[br]some of them...
0:48:24.819,0:48:27.680
HFEv-, that's a multivariate[br]quadratic system
0:48:27.680,0:48:31.140
that's been unbroken for 20 years.
0:48:31.140,0:48:32.489
Maybe it will continue holding up,
0:48:32.489,0:48:34.190
but, well, how many people have looked?
0:48:34.190,0:48:36.839
You have to make sure enough people[br]look at these things.
0:48:36.839,0:48:39.469
The reason we like these[br]simple systems from the 70s is
0:48:39.469,0:48:40.229
enough people have looked
0:48:40.229,0:48:42.910
but maybe if you've got more serious[br]performance constraints
0:48:42.910,0:48:44.319
you should look at these other things,
0:48:44.319,0:48:46.359
and of course we are looking at[br]these other things,
0:48:46.359,0:48:47.660
trying to figure out what's secure,
0:48:47.660,0:48:51.799
and how well we can actually, er,
0:48:51.799,0:48:54.179
choose among all these[br]different possibilities.
0:48:54.179,0:48:56.139
Something else, just last mention here,
0:48:56.139,0:48:57.299
is isogeny-based,
0:48:57.299,0:48:59.469
this is for people who like[br]elliptic curves,
0:48:59.469,0:49:02.930
that there is maybe a way to use[br]elliptic curves post-quantum,
0:49:02.930,0:49:04.289
and this has the interesting feature
0:49:04.289,0:49:07.690
that it does exactly the same data flows[br]as Diffie-Hellman.
0:49:07.690,0:49:09.599
So everything you're used to doing[br]with Diffie-Hellman,
0:49:09.599,0:49:11.709
and having, like, a secret key over here
0:49:11.709,0:49:13.109
and a public key over there,
0:49:13.109,0:49:15.940
agree on a shared secret,
0:49:15.940,0:49:18.279
that you can also do with[br]isogeny-based systems,
0:49:18.279,0:49:20.519
but only a few people[br]have studied the security
0:49:20.519,0:49:21.999
and maybe this'll also get broken.
0:49:21.999,0:49:25.000
So, a lots more work,[br]lots more possibilities.
0:49:25.000,0:49:27.969
Last slide, if you're interested[br]in more information
0:49:27.969,0:49:29.909
here are a few places to look,
0:49:29.909,0:49:32.209
first of all you can go to pqcrypto.org,
0:49:32.209,0:49:36.640
so this is our first survey site[br]for post-quantum cryptography,
0:49:36.640,0:49:38.269
and the biggest chunk of information there
0:49:38.269,0:49:42.369
is bibliography, and if anybody has[br]newer papers,
0:49:42.369,0:49:45.539
if you happen to write papers on[br]post-quantum crypto,
0:49:45.539,0:49:46.989
and you'd like us to add those,
0:49:46.989,0:49:48.119
then just let us know,
0:49:48.119,0:49:51.170
um, and then, well,[br]we also have on the front page
0:49:51.170,0:49:53.849
things like pointers to all[br]the PQCrypto conferences,
0:49:53.849,0:49:54.769
that's the main place to look,
0:49:54.769,0:49:57.150
go to pqcrypto.org and follow links to,
0:49:57.150,0:49:59.819
for instance, the February[br]Japan conference.
0:49:59.819,0:50:02.390
Then pqcrypto.eu.org, that's the main page
0:50:02.390,0:50:05.459
for the EU project that Tanja mentioned,
0:50:05.459,0:50:08.229
which is putting out as it progresses,
0:50:08.229,0:50:09.640
well, it just started this year, but
0:50:09.640,0:50:13.499
it's putting out, soon, free libraries!
0:50:13.499,0:50:16.439
Software libraries, for actually doing[br]post-quantum cryptography.
0:50:16.439,0:50:18.309
And benchmarking results,
0:50:18.309,0:50:19.199
so you can actually say
0:50:19.199,0:50:21.420
"Yeah, I've got the following performance[br]constraints here,
0:50:21.420,0:50:23.070
that's what I'm able to use."
0:50:23.070,0:50:25.039
And then in 2017, there's going to be
0:50:25.039,0:50:28.920
a workshop, and a summer school, maybe[br]it'll be a spring school, we'll see,
0:50:28.920,0:50:34.239
if you're interested in the Twitter feed[br]for that, then twitter.com/pqc_eu
0:50:34.239,0:50:37.190
and final resource on the slide is you.
0:50:37.190,0:50:40.130
You have the responsibility[br]if you care about crypto,
0:50:40.130,0:50:42.440
then you have to get used to this stuff.
0:50:42.440,0:50:43.699
You have to learn about hash-based,
0:50:43.699,0:50:47.029
code-based, maybe lattice-based,[br]multivariate quadratics,
0:50:47.029,0:50:49.529
these are the things which will be[br]the future of crypto.
0:50:49.529,0:50:53.819
In the future, all of crypto will be[br]post-quantum crypto,
0:50:53.819,0:50:56.569
because eventually the attackers[br]will have quantum computers.
0:50:56.569,0:50:58.479
If you want to adapt to that future,
0:50:58.479,0:51:00.369
then, well, take a look at these sytems
0:51:00.369,0:51:02.229
and see, maybe find improvements,
0:51:02.229,0:51:03.519
then, cool, then let us know,
0:51:03.519,0:51:05.539
and, you know, publish papers,
0:51:05.539,0:51:08.299
integrate them into real applications,[br]networking applications,
0:51:08.299,0:51:09.969
implement the things[br]that aren't implemented,
0:51:09.969,0:51:10.779
speed them up,
0:51:10.779,0:51:12.840
there's lots of work that[br]still has to be done.
0:51:12.840,0:51:15.050
That's it, thank you for your attention.
0:51:15.050,0:51:28.799
applause
0:51:28.799,0:51:33.589
Herald: Wow. Now we'll have some[br]short questions please.
0:51:33.589,0:51:35.660
Because we're a bit late on time.
0:51:35.660,0:51:39.559
Questioners, go around ahead,[br]there's a mike there,
0:51:39.559,0:51:41.749
talk into it please.
0:51:41.749,0:51:42.910
Can we have mike 1?
0:51:42.910,0:51:45.869
Q: Oh, okay. Uh, quick question.
0:51:45.869,0:51:50.239
So there was this result of[br]Laszlo Babai that there's a,
0:51:50.239,0:51:56.059
that graph isomorphism has a[br]quasipolynomial time algorithm,
0:51:56.059,0:52:00.219
um, not really knowing the subject at all,
0:52:00.219,0:52:04.260
there's some very, very[br]superficial similarities,
0:52:04.260,0:52:08.709
like, that is a hidden subgroup [br]problem, basically.
0:52:08.709,0:52:11.849
Um, is there going to be any, like,
0:52:11.849,0:52:14.289
is there any indication that the methods[br]he used in that proof
0:52:14.289,0:52:16.989
are relevant to breaking, like,
0:52:16.989,0:52:20.279
to weakening NTRU or things like this?
0:52:20.279,0:52:25.729
djb: That's a good question. So, the, um,[br]the graph isomorphism advance now,
0:52:25.729,0:52:27.069
is basically saying,
0:52:27.069,0:52:30.229
so, graph isomorphism is a problem[br]which was famous as being
0:52:30.229,0:52:32.619
not know to be solvable in polynomial
0:52:32.619,0:52:35.160
or even, like you said,[br]quasipolynomial time.
0:52:35.160,0:52:38.209
Um, except there were some really good[br]software algorithms
0:52:38.209,0:52:41.069
which would solve most cases of it,[br]really quickly.
0:52:41.069,0:52:42.680
There were just some really weird,
0:52:42.680,0:52:43.849
highly symmetric cases,
0:52:43.849,0:52:44.630
that were hard to solve
0:52:44.630,0:52:47.249
and that's what Babai managed[br]to completely kill now,
0:52:47.249,0:52:49.349
so he's handled all the cases.
0:52:49.349,0:52:51.949
But we try to stay away from[br]problems like that in crypto,
0:52:51.949,0:52:54.660
so, an example that's very closely[br]analogous to that is
0:52:54.660,0:52:56.589
what's called support splitting,
0:52:56.589,0:52:58.640
which is a certain type of attack strategy
0:52:58.640,0:53:00.599
against code-based crypto
0:53:00.599,0:53:03.190
if somebody gives away lots of information
0:53:03.190,0:53:05.039
from the legitimate user.
0:53:05.039,0:53:07.199
And that's something where the[br]support-splitting algorithm
0:53:07.199,0:53:09.420
works in most cases,
0:53:09.420,0:53:12.529
but it kind of fails in some corner cases,
0:53:12.529,0:53:16.079
and, well, we try to stay away from[br]thinking about this anyway,
0:53:16.079,0:53:18.690
because you just don't want to give[br]somebody that extra information,
0:53:18.690,0:53:23.249
but if you did, then maybe Babai's[br]technique could be useful there.
0:53:23.249,0:53:25.739
Herald: Thank you. This talk is not over.
0:53:25.739,0:53:30.009
If you're leaving, which is okay,[br]please be silent.
0:53:30.009,0:53:33.670
Next question, number 3, no, number 1.
0:53:33.670,0:53:35.779
Q: Uh, hello, thank you for the talk.
0:53:35.779,0:53:40.430
Um, how are the chances to have something[br]like forward secrecy with that?
0:53:40.430,0:53:43.729
I recognise the last algorithm[br]has a chance
0:53:43.729,0:53:45.339
to reuse Diffie-Hellman,
0:53:45.339,0:53:47.739
that's possibly the only one?
0:53:47.739,0:53:51.619
Lange: So, if you think that[br]forward secrecy means Diffie-Hellman,
0:53:51.619,0:53:55.759
you can have forward secrecy[br]from normal encryption algorithms,
0:53:55.759,0:53:58.249
at the expense of generating[br]a new key each time.
0:53:58.249,0:54:00.670
You can have forward secrecy with RSA,
0:54:00.670,0:54:03.140
if Alice talking to Bob starts by saying
0:54:03.140,0:54:06.440
"Okay, this is my one-time RSA key,
0:54:06.440,0:54:08.459
and I send this to Bob,
0:54:08.459,0:54:12.609
with a request to encrypt to this key."
0:54:12.609,0:54:16.099
If Alice never reuses this key,
0:54:16.099,0:54:18.170
then this method is forward-secure.
0:54:18.170,0:54:21.039
And similar to how you can[br]do this with RSA keys,
0:54:21.039,0:54:23.420
you can also do this with McEliece keys.
0:54:23.420,0:54:25.489
At the moment, there is a difficulty
0:54:25.489,0:54:29.449
that the keys are very large.
0:54:29.449,0:54:32.719
It is inconvenient when you want[br]to start talking,
0:54:32.719,0:54:35.849
"Hey, I'm a client, hello server,[br]please talk to me",
0:54:35.849,0:54:37.289
and the first thing you have to do
0:54:37.289,0:54:41.900
is transmit a megabyte of key.
0:54:41.900,0:54:44.229
On the other hand, you can do it.
0:54:44.229,0:54:47.719
It just requires you to engineer[br]your protocol to expect,
0:54:47.719,0:54:50.999
yes, you have to send a few packages.
0:54:50.999,0:54:53.959
And then it has all the[br]forward secrecy that you want.
0:54:53.959,0:54:58.180
Q: But, uh, a way without[br]transferring the key,
0:54:58.180,0:54:59.449
like Diffie-Hellman?
0:54:59.449,0:55:02.509
Lange: But, Diffie-Hellman[br]is transferring a key.
0:55:02.509,0:55:03.259
Q: Okay.
0:55:03.259,0:55:04.989
Lange: I mean, you're basically[br]transferring
0:55:04.989,0:55:07.349
the first part of a discrete log pair.
0:55:07.349,0:55:10.299
If Alice sends a*p, and there is[br]some one-time key,
0:55:10.299,0:55:12.219
she's sending a public key.
0:55:12.219,0:55:16.029
It's just that the method of how[br]those two public keys interact
0:55:16.029,0:55:19.279
is slightly different from how[br]RSA encryption works.
0:55:19.279,0:55:20.980
Q: Okay, thank you.
0:55:20.980,0:55:25.049
Herald: Thank you. Do we have[br]an Internet message? Question?
0:55:25.049,0:55:30.170
Signal Angel: Actually, we do. There are[br]two questions that are somehow related.
0:55:30.170,0:55:31.479
The first one is:
0:55:31.479,0:55:37.299
Given that there is no actual working[br]quantum computer,
0:55:37.299,0:55:40.619
how do you start developing[br]a crypto algorithm?
0:55:40.619,0:55:42.410
Where do you start, how do you design it,
0:55:42.410,0:55:46.140
how do you test it? Is there a way[br]to prove that it's secure?
0:55:46.140,0:55:49.349
And the second question is related:
0:55:49.349,0:55:55.079
The whole thing is based on the property[br]of the hash functions being one-way,
0:55:55.079,0:55:57.969
how does one know that there is no[br]quantum algorithm
0:55:57.969,0:55:59.920
that breaks this property?
0:55:59.920,0:56:01.859
Can you prove this?
0:56:01.859,0:56:03.729
djb: Okay. For both of these questions,
0:56:03.729,0:56:06.079
the technique that the community[br]goes through,
0:56:06.079,0:56:08.189
that we all go through,[br]is cryptanalysis.
0:56:08.189,0:56:11.219
So we have as many smart people as[br]we can find
0:56:11.219,0:56:12.989
focusing on these problems and saying
0:56:12.989,0:56:16.549
"Can you find an algorithm which is[br]breaking these problems
0:56:16.549,0:56:19.069
better than any previous algorithms can?"
0:56:19.069,0:56:20.999
and we put as many incentives as we can
0:56:20.999,0:56:23.099
so that we try to get as many smart people
0:56:23.099,0:56:25.299
to stay ahead of the bad guys,
0:56:25.299,0:56:27.299
and hopefully find the best algorithms.
0:56:27.299,0:56:28.709
But there's no guarantees in this.
0:56:28.709,0:56:30.449
And you do always have to be sceptical
0:56:30.449,0:56:33.140
about whether people have[br]actually looked at, for instance
0:56:33.140,0:56:35.359
quantum algorithms to attack systems.
0:56:35.359,0:56:36.829
And there is that extra difficulty
0:56:36.829,0:56:39.819
that the first part of the question,[br]at the beginning, was saying,
0:56:39.819,0:56:41.809
that we don't have a quantum computer.
0:56:41.809,0:56:45.339
So if we're trying to verify quantum[br]algorithms that we're developing,
0:56:45.339,0:56:47.589
we don't get to experiment with them.
0:56:47.589,0:56:50.549
That's the usual procedure for[br]making sure your algorithms work.
0:56:50.549,0:56:52.559
In state-of-the-art cryptanalysis,
0:56:52.559,0:56:55.029
like the number field sieve for factoring,
0:56:55.029,0:56:57.880
that does not have a proof that[br]it works in any particular,
0:56:57.880,0:56:59.789
well, at the speed that we think,
0:56:59.789,0:57:01.349
it works out from experiment.
0:57:01.349,0:57:03.329
So experiments are really important,
0:57:03.329,0:57:05.829
because we don't have proofs[br]for state-of-the-art cryptanalysis,
0:57:05.829,0:57:09.759
and that's something where it's actually[br]really tough for quantum computers.
0:57:09.759,0:57:11.859
Of course eventually we'll all have[br]quantum computers,
0:57:11.859,0:57:14.869
and there's ideas for simulating[br]quantum algorithms
0:57:14.869,0:57:18.359
which have had some success[br]at verifying that algorithms work
0:57:18.359,0:57:20.579
even though we can't actually[br]run them yet.
0:57:20.579,0:57:25.050
That we're actually able to verify[br]a simulation of those algorithms.
0:57:25.050,0:57:27.530
Lange: Let me do a second part of this.
0:57:27.530,0:57:30.769
Um, when we use quantum cryptanalysis,
0:57:30.769,0:57:33.189
for estimates, we usually go[br]for the worst-case estimate.
0:57:33.189,0:57:39.230
So we say, well, McEliece, at worst,[br]gets broken to half the security level.
0:57:39.230,0:57:41.380
Most likely it won't be that fast,
0:57:41.380,0:57:45.609
but we're staying on the side[br]where we're very confident.
0:57:45.609,0:57:48.349
Um, if I understood correctly[br]there was also the part of the question,
0:57:48.349,0:57:50.099
how can we test the algorithms?
0:57:50.099,0:57:52.670
If this is for[br]the constructive algorithms,
0:57:52.670,0:57:54.369
then all the algorithms we analyse,
0:57:54.369,0:57:56.900
all the algorithms we propose[br]for post-quantum crypto,
0:57:56.900,0:57:59.939
are algorithms that you can run on[br]your normal computer.
0:57:59.939,0:58:02.309
So, you can test those, you can run those,
0:58:02.309,0:58:04.189
we have benchmarking numbers from those,
0:58:04.189,0:58:07.219
on our current hardware.
0:58:07.219,0:58:12.019
Herald: We'll do two more questions,[br]please. Number 1.
0:58:12.019,0:58:15.630
Q: Yeah, I got a question on[br]the practicality of the attacks.
0:58:15.630,0:58:19.150
So, um, if we assume there is[br]a quantum computer,
0:58:19.150,0:58:21.729
how much time will it take in practice,
0:58:21.729,0:58:22.900
order of magnitude,
0:58:22.900,0:58:25.729
to break, let's say, RSA 2048-bit key?
0:58:25.729,0:58:28.829
Is it on the order of hours,[br]weeks, months, years?
0:58:28.829,0:58:31.169
Lange: snaps fingers Done.
0:58:31.169,0:58:32.349
Q: Okay, thanks.
0:58:32.349,0:58:32.939
laughter
0:58:32.939,0:58:36.289
djb: That was easy![br]Herald: Number 3.
0:58:36.289,0:58:36.869
Q: Okay.
0:58:36.869,0:58:38.599
Herald: Talk into the mike, please.
0:58:38.599,0:58:41.369
Q: Thank you. So, it's very,[br]very nice to have
0:58:41.369,0:58:45.789
both quantum encryption and signing,
0:58:45.789,0:58:48.650
but do you know anything about[br]some other cryptographic primitives,
0:58:48.650,0:58:52.499
such as zero-knowledge proofs?
0:58:52.499,0:58:53.499
Lange: Well, I mean, zero-knowledge proofs
0:58:53.499,0:58:56.920
are basically signatures[br]which are not interactive.
0:58:56.920,0:58:59.580
So if you have something which is, um,
0:58:59.580,0:59:02.249
a primitive for a signature is usually[br]very closely related
0:59:02.249,0:59:03.789
to zero-knowledge proofs.
0:59:03.789,0:59:05.739
So, there is work going on,
0:59:05.739,0:59:07.680
we are focusing on[br]the most important things
0:59:07.680,0:59:10.049
that we see on the Internet,
0:59:10.049,0:59:12.579
but, that shouldn't mean that people[br]shouldn't do research on it.
0:59:12.579,0:59:17.060
Please do research on[br]zero-knowledge proofs!
0:59:17.060,0:59:21.539
Herald: Okay. Last question. Number 1.
0:59:21.539,0:59:24.859
Q: So, why do you put so much emphasis
0:59:24.859,0:59:28.549
on smaller key sizes and[br]on performance in encryption,
0:59:28.549,0:59:34.529
um, especially in a delicate topic like[br]post-quantum computing?
0:59:34.529,0:59:37.269
Why can't we just use 1-megabyte keys
0:59:37.269,0:59:41.859
and why can't we just use a few seconds[br]instead of miliseconds
0:59:41.859,0:59:43.599
to compute those?[br]Lange: So...
0:59:43.599,0:59:44.949
Q: What's the the problem here?
0:59:44.949,0:59:47.660
Lange: We are suggesting[br]to use a key of 1 megabyte.
0:59:47.660,0:59:51.809
So, our recommendation that we have on[br]the Internet on the pqcrypto.org page
0:59:51.809,0:59:56.180
are precisely using this system[br]which has a 1-megabyte key.
0:59:56.180,0:59:58.329
The nice thing is, that actually
0:59:58.329,1:00:02.449
encryption and decryption[br]are very efficient.
1:00:02.449,1:00:03.579
But that was not our main goal,
1:00:03.579,1:00:06.430
our main goal was to get something[br]which is very secure,
1:00:06.430,1:00:11.329
and where we have a high confidence[br]that we actually understand the attack.
1:00:11.329,1:00:14.009
And then, well, once we have this system,
1:00:14.009,1:00:17.520
then you try to optimise[br]how to implement it,
1:00:17.520,1:00:19.279
and the implementation,[br]when we looked at the numbers
1:00:19.279,1:00:22.039
is actually faster than[br]elliptic curve implementations
1:00:22.039,1:00:23.910
except for the size.
1:00:23.910,1:00:26.329
So, you get a very nice speed,
1:00:26.329,1:00:31.790
even though it was not our[br]target for optimisation.
1:00:31.790,1:00:33.379
Herald: Okay, this is it.
1:00:33.379,1:00:35.430
Thank you very much,[br]let's have a final hand
1:00:35.430,1:00:38.479
for Tanja Lange and djb Bernstein!
1:00:38.479,1:00:46.360
applause
1:00:46.360,1:00:51.397
postroll music
1:00:51.397,1:00:58.000
Untertitel erstellt von c3subtitles.de[br]im Jahr 2016. Mach mit und hilf uns!