WEBVTT

00:04.360 --> 00:06.020
I'm sorry I'm late.

00:08.630 --> 00:13.490
You know, yesterday a lot of people told me I was supposed to speak at 11 o'clock.

00:14.210 --> 00:19.410
And so I didn't actually look on the DEF CON website to see if that was actually true.

00:20.350 --> 00:22.690
So here I am at 11 o'clock.

00:25.010 --> 00:27.050
I'm sorry for the inconvenience.

00:39.080 --> 00:42.500
By the way, I don't mind if anyone takes my photos.

00:45.080 --> 00:52.300
Yeah, either John Callis, John Callis is CTO of PGP, or me, doesn't matter.

00:52.740 --> 00:54.680
We get photoed all the time.

00:55.220 --> 01:01.120
I figure I've already gotten in enough trouble with the Fed so it can't get any worse, right?

01:10.440 --> 01:11.840
Let's see if this comes up.

01:11.840 --> 01:12.520
Yep.

01:12.660 --> 01:16.500
Wow, that's a little bit lower resolution than usual, but that's alright.

01:21.060 --> 01:24.040
I'm going to...

01:27.860 --> 01:29.040
Okay.

01:29.040 --> 01:31.640
I'm going to demo my new project today.

01:31.640 --> 01:34.840
My new project is Secure VoIP.

01:36.880 --> 01:40.180
I think it's about time we had Secure VoIP.

01:40.760 --> 01:43.140
How many people here use VoIP?

01:44.100 --> 01:47.520
Oh, you guys are so geeky.

01:47.520 --> 01:49.240
The early adopters.

01:50.300 --> 01:50.920
Um...

01:52.960 --> 01:53.580
Well...

01:54.240 --> 01:55.240
You know...

01:56.140 --> 02:00.760
For years we've enjoyed the relative safety of the public switch telephone network.

02:00.760 --> 02:02.420
I say relative safety.

02:02.420 --> 02:04.940
I'm only speaking relative to the Internet.

02:05.500 --> 02:12.510
Of course, we all know that phone calls on the public switch telephone network can be intercepted.

02:13.720 --> 02:14.340
But...

02:16.120 --> 02:17.820
It's a lot harder to do.

02:17.820 --> 02:25.280
You have to be like the government or somebody who's willing to physically go to a place and clip on some alligator clips.

02:26.840 --> 02:32.320
Or you have to have access to the phone company or the cooperation of the phone company.

02:32.320 --> 02:49.200
But with VoIP, it's possible for somebody in Malaysia to hack into a machine somewhere and install a piece of software that will intercept all the VoIP calls on your network.

02:49.340 --> 02:52.340
And organize them like a TiVo player.

02:52.340 --> 02:54.340
And so...

02:55.780 --> 03:10.920
To move our precious phone calls from the sort of well-manicured neighborhood of the public switch telephone network to the sort of crime-ridden slum that is now the Internet, I think would be unwise without protecting it with encryption.

03:14.540 --> 03:15.100
So...

03:15.100 --> 03:19.380
First I'm going to do a little demo here and then I'm going to explain how it works.

03:21.060 --> 03:29.320
Somewhere in a soundproof booth is an accomplice who will now call me on my VoIP phone.

03:31.880 --> 03:33.980
Steve, call me.

03:36.940 --> 03:40.560
He said he's watching this, so he'll be able to tell.

03:41.180 --> 03:41.940
Yep, here it is.

03:41.940 --> 03:42.760
It's ringing.

03:42.760 --> 03:44.180
So now I'm going to answer.

03:45.040 --> 03:47.160
This is a regular SIP phone, by the way.

03:47.160 --> 03:48.640
You can call any other SIP phone.

03:49.940 --> 03:51.060
Great.

03:52.200 --> 03:53.260
Okay.

03:55.220 --> 03:57.360
I was afraid this would happen.

03:59.700 --> 04:03.420
Let me just say... I'm going to exit and relaunch.

04:04.820 --> 04:07.660
I'm using an open-source VoIP client.

04:08.560 --> 04:11.520
And then I added crypto to it.

04:11.720 --> 04:17.220
And so, there are some issues with the open-source VoIP client that I'm using.

04:19.380 --> 04:23.670
And sometimes it has difficulty with NAT firewall traversal.

04:25.110 --> 04:27.140
Okay, I'm ready again.

04:27.140 --> 04:30.630
Steve, I hope you've exited and relaunched.

04:32.320 --> 04:34.020
Call me again.

04:38.480 --> 04:39.710
What I did was...

04:40.560 --> 04:46.140
You know, many of you are aware of PGP Phone, a project that I did about nine years ago.

04:46.140 --> 04:48.920
At that time, the Internet wasn't ready.

04:49.180 --> 04:50.740
No one had broadband.

04:50.740 --> 04:54.720
There were no protocols that were standardized for VoIP.

04:54.840 --> 04:56.600
SIP wasn't invented yet.

04:57.560 --> 04:59.300
Steve, you're supposed to call me now.

05:07.090 --> 05:09.090
Maybe if I try calling him.

05:11.430 --> 05:12.930
Come on, Steve.

05:15.890 --> 05:16.370
Anyway...

05:16.870 --> 05:19.370
Oh, he's calling me on my cell phone.

05:19.810 --> 05:20.810
To tell me...

05:23.310 --> 05:24.270
Yes?

05:32.170 --> 05:34.250
You had to reboot your machine?

05:35.190 --> 05:36.590
Oh, man.

05:37.350 --> 05:39.110
That would explain a lot.

05:39.110 --> 05:39.730
Okay.

05:42.570 --> 05:43.530
Alright.

05:46.170 --> 05:48.510
Okay, I'll leave this open here.

05:49.210 --> 05:51.290
I'm going to put you on the little speakerphone.

05:52.770 --> 05:58.170
Okay, so you just yell into your speakerphone or into your phone whenever you want to talk to me.

06:01.410 --> 06:03.070
Or you could just call me.

06:04.270 --> 06:05.810
Okay, well, anyway...

06:05.810 --> 06:07.530
So, what I did was...

06:08.690 --> 06:12.370
Back in the days of PGP Phone, I had to improvise my own protocols.

06:12.370 --> 06:14.470
There was no SIP, there was no RTP.

06:14.770 --> 06:17.190
It was just the beginnings of RTP at that time.

06:17.190 --> 06:19.210
They were just starting to design it.

06:19.590 --> 06:24.010
And so I had to just sort of improvise my own.

06:24.150 --> 06:28.610
And it wasn't so bad for the time, but the Internet just wasn't ready.

06:28.610 --> 06:31.850
The bandwidth wasn't anywhere near what it had to be.

06:32.230 --> 06:37.550
So, it was a neglected product for many years.

06:37.830 --> 06:38.470
What?

06:39.530 --> 06:40.990
You ready to call?

06:44.700 --> 06:45.660
Okay.

06:46.660 --> 06:47.100
What?

06:47.100 --> 06:47.520
Okay.

06:47.520 --> 06:48.840
Just call when you're ready.

06:51.240 --> 06:55.940
So, fast forward nine years, and now the Internet is ready for this.

06:56.140 --> 06:58.460
Maybe this is not ready, but...

07:00.820 --> 07:05.960
So, there's still some NAT firewall traversal things in the open source VoIP plan.

07:05.960 --> 07:10.780
I'm using an open source VoIP plan called Stoom, which is written, oddly enough, in Python.

07:11.840 --> 07:14.860
And so, we had to write our crypto in Python.

07:15.340 --> 07:19.260
It's kind of a new experience to do that, to do a secure phone in Python.

07:19.260 --> 07:21.200
Or any kind of SIP phone in Python.

07:23.800 --> 07:27.660
And so, there are some problems with that.

07:27.660 --> 07:30.440
So, this is why... See, I didn't feel I was ready for this.

07:30.460 --> 07:36.320
But, Nico Sell persuaded me to unveil this at the Black Hat conference.

07:36.320 --> 07:37.940
And I said, no, no, I'm not ready.

07:38.140 --> 07:43.400
And so, she kind of, you know, kept pushing me to do it until finally I had to do it.

07:43.400 --> 07:46.280
Because the press started...

07:46.280 --> 07:47.000
What?

07:49.500 --> 07:50.920
Yeah, well, it's not.

07:54.500 --> 07:56.240
I would notice if it was.

07:57.860 --> 07:59.140
Oh, there it is.

07:59.940 --> 08:01.840
By the way, we don't have any audio.

08:03.040 --> 08:04.720
Oh, I didn't plug in the audio.

08:11.380 --> 08:13.780
Oh, it's... Just a minute.

08:14.220 --> 08:16.540
I'm gonna... We're gonna exit now.

08:18.120 --> 08:19.920
This is terribly embarrassing.

08:20.040 --> 08:23.880
This is the... You know, it worked the first time at Black Hat.

08:24.540 --> 08:26.700
When we were on an outside IP address.

08:26.700 --> 08:28.800
We couldn't get it to work inside the firewall.

08:28.800 --> 08:29.340
But...

08:30.340 --> 08:31.920
But we got some...

08:31.920 --> 08:34.280
But we got an outside IP address and it worked.

08:34.300 --> 08:36.200
Okay, now I'm ready, so call me.

08:37.100 --> 08:38.440
Oh, there we go.

08:42.630 --> 08:43.930
Oh, man, this is...

08:46.570 --> 08:48.010
This is not working.

08:49.310 --> 08:50.010
Okay.

08:50.290 --> 08:52.670
You know, the crypto is in pretty good shape.

08:52.670 --> 08:54.770
It's a good thing they gave me an hour to talk, right?

08:54.770 --> 08:56.610
So I can try this several times.

08:56.610 --> 09:00.430
I actually got here a little while ago and I wanted to test and test and test.

09:00.930 --> 09:04.110
But the Ethernet cable for this was right here at the podium.

09:04.110 --> 09:04.930
And so...

09:05.470 --> 09:07.070
I couldn't...

09:10.120 --> 09:11.960
Did you exit and relaunch?

09:15.440 --> 09:16.680
This is why I...

09:17.340 --> 09:19.860
This is why I never use...

09:19.860 --> 09:23.000
Why I never bring a laptop to a talk.

09:33.910 --> 09:36.090
All right, I'm gonna abort this.

09:36.090 --> 09:38.130
I'm just gonna explain how it works.

09:38.270 --> 09:38.930
Goodbye.

09:40.630 --> 09:41.390
Okay.

09:50.180 --> 09:52.900
Now I can get away from the...

10:10.390 --> 10:11.550
I'll just use this one.

10:12.350 --> 10:13.090
Okay.

10:14.950 --> 10:16.090
How humiliating.

10:16.690 --> 10:19.450
You have to believe me that it worked at Black Hat yesterday.

10:20.230 --> 10:21.690
I might try it again.

10:26.940 --> 10:27.900
Oh, yeah?

10:29.440 --> 10:30.580
It's tempting.

10:31.640 --> 10:34.300
If you want to bring it up here, maybe we can try it again.

10:37.880 --> 10:39.840
But do you have broadband?

10:41.360 --> 10:43.260
Okay, that's pretty impressive.

10:45.980 --> 10:47.460
All right.

10:48.920 --> 10:54.380
I looked at various other protocols that are currently being considered for secure VoIP.

10:55.440 --> 11:01.500
There is some IETF RFCs that define various ways of doing it.

11:01.500 --> 11:11.000
Most of them rely on external sources of a centrally controlled public key infrastructure with a certificate authority.

11:11.500 --> 11:16.700
I think that two people who want to talk to each other should not need permission from someone else to do it.

11:18.280 --> 11:22.060
And so I just do like I did with PGP Phone.

11:22.060 --> 11:24.000
I do a Diffie-Hellman key exchange.

11:31.480 --> 11:32.700
Yeah, okay.

11:32.700 --> 11:44.360
I do a Diffie-Hellman key exchange with hash commitment so that this means that I can read an authentication digest aloud that gets displayed.

11:44.360 --> 11:46.540
And the two people read it to each other.

11:46.540 --> 11:49.820
And if it matches, that means there's no man-in-the-middle attack.

11:50.140 --> 11:56.100
This eliminates the need for a certificate authority, a public key infrastructure.

11:56.160 --> 11:57.900
Boy, there's a lot of feedback here.

12:00.940 --> 12:01.740
The other way.

12:01.740 --> 12:02.560
Turn it the other way.

12:14.550 --> 12:17.230
Yes, I'm using a Macintosh.

12:19.130 --> 12:21.070
For security reasons.

12:26.220 --> 12:27.340
Yep.

12:28.080 --> 12:30.120
Alright, that's just not going to work.

12:36.520 --> 12:40.940
There are other approaches that don't use a public key infrastructure necessarily.

12:40.940 --> 12:52.240
They send SIP packets that use TLS connections and they put the session key right there in the SIP packet, not encrypted.

12:52.240 --> 12:54.960
They'll just send that, but they'll send it through a TLS connection.

12:54.960 --> 12:59.600
The problem is it's going through multiple TLS connections from server to server to server.

12:59.600 --> 13:05.300
And each one of them, it's decrypted and then re-encrypted in another TLS connection.

13:05.300 --> 13:12.920
So that means that each of those servers has access to the session key and is in a position to compromise the call.

13:13.480 --> 13:32.800
There's another scheme that actually takes the session key, encrypts it as an SMIME email message, and sticks that into the SIP packet and sends that to set up the call.

13:32.800 --> 13:38.760
And the other side receives it, decrypts it like it was a piece of email, extracts the session key, and then uses that.

13:39.440 --> 13:45.180
To use an email encryption standard... I mean, it's bad enough they're not using PGP for that, right?

13:45.460 --> 13:48.500
But even if it was PGP, I would still be complaining.

13:48.780 --> 13:50.480
Because it's just the wrong approach.

13:50.480 --> 13:55.140
You don't send an encrypted email to somebody to set up a phone call.

13:55.280 --> 13:58.320
It just feels wrong.

13:59.260 --> 14:07.780
And not only that, but it means that at the end of the call, you have persistent key material around that you can use to retroactively reconstruct the call.

14:07.780 --> 14:19.220
If somebody intercepted the call and recorded all the packets, they would be able to decrypt them after the fact if they could somehow later obtain the key that was sent through the SIP packet.

14:19.960 --> 14:23.000
In other words, it doesn't have perfect forward secrecy.

14:23.780 --> 14:30.100
Well, you know, I just can't imagine designing a secure phone that doesn't have perfect forward secrecy.

14:31.100 --> 14:37.180
Let's see, there's another one that has self-signed certificates, but you have to use a trusted server to get them.

14:37.520 --> 14:40.440
Or you don't know who they are, and it could be a man in the middle.

14:40.840 --> 14:44.760
So all of the other schemes that I looked at have problems.

14:45.600 --> 14:54.020
And almost all the problems come from trying to get somebody else involved in setting up a secure call between Alice and Bob.

14:54.500 --> 14:56.980
And it just seemed the wrong approach.

14:56.980 --> 15:01.740
So with my approach, just the two people are involved.

15:01.760 --> 15:05.320
It doesn't use anything involving another external server.

15:05.320 --> 15:08.860
It doesn't send anything in the SIP packet that relates to the crypto.

15:08.860 --> 15:17.580
Of course, it uses SIP to set up the call, like any SIP phone, but not to set up the encryption, not to set up the key agreement.

15:19.340 --> 15:29.480
Instead, you get the SIP call started, and then the RTP packets start flowing, and then it inserts a Diffie-Hellman exchange in the stream.

15:30.060 --> 15:37.160
Gets the key agreement, and then starts encrypting it using SRTP, secure real-time protocol.

15:37.980 --> 15:45.360
When I first started working on this, I thought I was going to have to encrypt my own packets with my own protocol, like I did with PGP Phone.

15:45.360 --> 15:53.420
But I discovered something called secure RTP, or SRTP, and I read the spec for it, and it looks a lot like PGP Phone.

15:54.020 --> 15:59.600
It encrypts the packets in a manner that is nearly identical to the way it was done in PGP Phone nine years ago.

15:59.600 --> 16:02.460
And I thought, this saves me a lot of trouble.

16:02.700 --> 16:04.720
I was going to do it this way already.

16:04.720 --> 16:07.540
So I'm going to use SRTP.

16:07.580 --> 16:13.140
This is actually one part of the protocol that is predefined in an RFC.

16:16.100 --> 16:20.460
But I do one more thing that I did not do in PGP Phone.

16:23.440 --> 16:32.240
At the end of the call, I erase all the keys, but I keep a hash of the shared secret that we used.

16:32.240 --> 16:35.900
I keep a hash of it around for the next phone call.

16:36.680 --> 16:48.800
And then when the next phone call happens, I do a fresh Diffie-Hellman key exchange, like I do with every call, but I also take one more step and mix in the retained shared secret from the last phone call.

16:49.660 --> 17:00.620
This means that there is sort of a key continuity model, which Peter Gutman, I see in the audience right here, he has called this the baby duck security model.

17:00.620 --> 17:02.540
He was referring to SSH.

17:02.820 --> 17:11.100
With SSH, you have an exchange of key material at the first session, and that's locally cached.

17:11.100 --> 17:15.720
And you assume that the man in the middle is not present in the first session.

17:16.080 --> 17:20.740
And if he's not present in the first session, it's too late for him to get involved in later sessions.

17:21.280 --> 17:23.780
Well, that's the same thing I'm using here.

17:25.120 --> 17:30.140
So, remember when I said about reading the hash aloud?

17:30.440 --> 17:32.360
Unfortunately, I can't show it to you.

17:33.780 --> 17:53.760
But, for those of you who have seen secure phones, like Eric Blossom's secure phone from back in the mid-90s, and the AT&T 3600, developed in the early 90s, they all involve displaying a short hash code that you read aloud to the other person to verify there's no man in the middle.

17:53.780 --> 18:03.420
Well, if you forget to do that, it's probably okay, because the attacker is afraid that you will do that, and so he won't attack.

18:03.720 --> 18:09.960
But, if he knows that you're lazy, he might be tempted to attack, knowing that you might not check it.

18:10.420 --> 18:15.340
But suppose you made 100 phone calls to your friend, and you didn't check.

18:15.340 --> 18:23.160
You just kept making phone calls, and you just forgot to check, or you were too lazy to check, by reading aloud the authentication digest.

18:23.860 --> 18:39.120
Well, if on the 50th call, you suddenly remember that, you know, I really ought to check this, and you read it aloud, and the other person reads it theirs aloud, and it checks, and it compares, and everything is good, it means that not only is this call secure,

18:39.120 --> 18:48.160
but every other call, all the way back in the previous 50 calls, to the first call you ever made to him, it proves that all of them were secure.

18:48.280 --> 18:51.660
It retroactively proves there was no man in the middle.

18:52.940 --> 18:55.500
That's really good for peace of mind.

18:55.620 --> 18:57.760
It means that you can be lazy most of the time.

18:58.280 --> 19:06.160
And then finally, one day, when you're diligent about it, your diligence assures you that all the other times you were lazy, it was okay.

19:06.780 --> 19:11.560
Of course, if it doesn't match, it means that there was a man in the middle all the way back to the beginning of time.

19:13.600 --> 19:16.020
That's a real, oh shit, moment, you know.

19:20.340 --> 19:28.620
But that's something that other secure phones don't do, and that my protocol does, and so I'm feeling pretty good about that feature.

19:30.080 --> 19:42.380
Now, if somebody were to kick the door in, and come in with guns, and pin you against the wall, and take your computer, and suck all the bits out of the computer, they're not going to be able to retroactively reconstruct the call.

19:42.460 --> 19:45.360
Not even with the retained shared secrets I just described.

19:46.020 --> 19:51.060
Because what doesn't actually retain the shared secret that was used in the call, it hashes it.

19:51.120 --> 19:53.260
So you can't go backwards in the hash.

19:56.480 --> 19:59.800
I'll be publishing a document describing this protocol.

20:00.280 --> 20:03.600
I think this is a better way to do secure void.

20:03.660 --> 20:12.440
This is a much better way than the other protocols currently being considered in various IETF RFCs.

20:12.440 --> 20:18.420
You know, designs tend to resemble the institutions that give birth to them.

20:18.660 --> 20:33.600
And I think that the centrally managed approaches that we're seeing right now sort of reflect the sort of institutional thinking that went into making them.

20:33.960 --> 20:39.720
And I tend to be more libertarian in my approach.

20:39.720 --> 20:44.200
I'm not a big L libertarian, but I'm a civil libertarian.

20:44.560 --> 20:52.200
But it's not only my political instincts, it's also, from a design perspective, simpler.

20:52.280 --> 20:57.440
To add a certificate authority to a SIP server adds immense complexity.

20:57.480 --> 21:03.500
We've seen many companies go bankrupt in the 1990s trying to build public key infrastructure.

21:03.860 --> 21:09.360
There are companies that try to create the technology for building certificate authorities.

21:09.720 --> 21:11.280
Those companies are now bankrupt.

21:11.380 --> 21:16.560
And sure, you can explain some of that by saying the internet bubble burst, but I don't think it's always from that.

21:16.560 --> 21:20.780
Some of them went bankrupt just because of the difficulty of building public key infrastructure.

21:20.880 --> 21:25.640
Not only the companies that were providing that technology, but the companies that were trying to use the technology.

21:25.880 --> 21:32.820
They didn't go bankrupt necessarily, but their IT departments almost went under trying to deploy public key infrastructure.

21:33.240 --> 21:38.780
So I think that if we were to learn from our mistakes, we should stop trying to do it that way.

21:38.780 --> 21:48.320
And when we have a new opportunity to deploy something with a new technology like VoIP, the last thing we should do is go back and take a proven technology.

21:48.320 --> 21:51.200
When I say proven, I don't mean proven successful.

21:51.200 --> 21:57.600
I mean a proven failure of public key infrastructure and try to apply it to VoIP.

21:58.100 --> 22:00.660
And so, my design doesn't do that.

22:03.400 --> 22:19.300
So, for those of you that would like to see this prototype work better than what we just witnessed, this thing is built around an open source VoIP client called Stoom, written in Python.

22:19.340 --> 22:22.460
And if you Google for Stoom, you can find the homepage for it.

22:22.580 --> 22:40.100
And for those of you who are Python weenies, if you go out and try to fix the open source VoIP client and make it work on all platforms, PC, Windows platforms too, and get it a little bit more stable, then this thing will benefit from that.

22:40.200 --> 22:51.560
All the problems that we just saw relate to the state machine in the VoIP client and how they interact with a firewall.

22:53.000 --> 22:56.320
So, I'd like to open it up for questions.

23:00.800 --> 23:01.760
Yeah.

23:13.910 --> 23:17.950
You're asking me to elaborate on my remark that PKI is a failure.

23:18.790 --> 23:21.730
Well, you know, I don't think PKI is completely a failure.

23:21.730 --> 23:25.290
I think it's actually worked pretty well for web browsers and web servers.

23:25.430 --> 23:30.950
I think SSL connections between your browser and the server seems to work pretty well.

23:34.030 --> 23:36.470
But it doesn't work that well for email.

23:38.530 --> 23:44.290
Well, the PGP PKI works a lot better for email.

23:45.270 --> 23:46.870
But, you know, take S-MIME.

23:47.230 --> 23:51.810
S-MIME is widely deployed and is in fact embedded in a lot of Microsoft products.

23:51.810 --> 23:54.190
I mean, bundled, I should say, with Microsoft products.

23:54.190 --> 23:55.250
And yet no one uses it.

23:55.250 --> 23:55.870
Why?

23:55.870 --> 24:00.370
Because to make S-MIME work, you have to have a PKI up and running already.

24:00.370 --> 24:02.870
So the activation energy is too high.

24:03.090 --> 24:05.730
With PGP, you can run right out of the box.

24:06.850 --> 24:10.030
You don't need a PKI to be running first.

24:10.170 --> 24:15.450
And I think that it would be crazy to try to burden VoIP with that same high activation energy.

24:17.010 --> 24:19.850
That's what I mean by PKI is a failure.

24:30.660 --> 24:33.840
Well, let's talk about how a man-in-the-middle attack would work.

24:36.320 --> 24:39.540
Let's imagine that this was actually in a hardware phone.

24:39.640 --> 24:42.900
You had a phone on your desk that did this protocol.

24:42.900 --> 24:45.820
And you bought that phone at Walmart for $100.

24:47.220 --> 24:50.920
So imagine that your friend also has a phone like that.

24:50.920 --> 24:54.720
And you want to call and it sets up a Diffie-Hellman exchange and now you're talking, right?

24:54.840 --> 24:59.580
But imagine that an eavesdropper went down to Walmart and bought two of these phones.

25:01.200 --> 25:04.840
And brought them home and set up the two phones side by side.

25:05.060 --> 25:10.100
And had one of the phones interposed between you and the other person.

25:10.100 --> 25:11.540
And the other phone too.

25:11.540 --> 25:18.500
So that when you're calling your friend, you're not actually calling your friend, you're calling this eavesdropper's phone right here.

25:18.500 --> 25:19.720
The one on the left.

25:21.240 --> 25:29.080
And the eavesdropper knows you're going to do this and has your friend's phone number on the speed dial on this phone here on the right.

25:29.800 --> 25:40.720
And so when he sees the phone ring and sees that you're calling and you're calling your friend, hits the speed dial, waits for your friend to answer, and as soon as your friend answers, he answers you.

25:40.720 --> 25:45.280
And now he's got these two phones and he holds the two phones together like this.

25:45.780 --> 25:48.840
So that the earpiece and the mouthpiece are connected.

25:49.140 --> 25:52.860
In this kind of sort of lewd and lascivious kind of connection there.

25:53.340 --> 26:00.580
And now you think you're talking to your friend, but in fact you're talking to the man in the middle.

26:00.580 --> 26:06.300
And the man in the middle can listen in the air gap between the two mouthpieces, whatever.

26:06.300 --> 26:14.160
And now notice that the eavesdropper didn't have to have any special knowledge of mathematics.

26:14.160 --> 26:16.960
Didn't have to know anything about how Diffie-Hellman works.

26:17.640 --> 26:24.480
The only important thing is that there's these two phones that they bought at Walmart, right?

26:24.560 --> 26:32.000
And now there's a random session key between you and one of the phones, and there's a different random session key between the other phone and your friend, right?

26:32.720 --> 26:41.480
Well, if you could figure out a way of discovering the fact that the two session keys aren't the same, you would know there was a man in the middle.

26:42.480 --> 26:52.520
Well, what if the two phones could hash the session key and display that on the little display, and you read it aloud to your friend?

26:52.580 --> 26:56.680
Well, they better match, because if they don't match, that means there's a man in the middle.

26:57.640 --> 26:59.180
And that's what we do here.

26:59.580 --> 27:00.980
Only I couldn't show it to you.

27:02.180 --> 27:03.800
It did work yesterday.

27:03.800 --> 27:05.380
I swear it worked yesterday.

27:05.780 --> 27:07.420
It's worked in a lot of places.

27:07.820 --> 27:12.200
But in some places, there's some firewall problems, and I can't get it to work.

27:12.600 --> 27:20.680
You know, a lot of the SIP phones out there have difficulty with firewall NAT traversal, but there's better protocols coming out all the time.

27:20.680 --> 27:26.780
You know, Skype does overcome these firewall problems, and I think we can overcome them in the SIP world, too.

27:29.780 --> 27:31.000
Back there.

27:34.490 --> 27:36.590
Could you yell really loud?

27:44.740 --> 27:50.580
No, unfortunately, it's written in Python, so it would have to be, you know, sort of refactored into C.

27:51.880 --> 27:56.320
The question was, can this code be ported to other open source clients?

27:56.840 --> 27:59.520
Yeah, but it has to be rewritten in C.

27:59.520 --> 28:02.440
In fact, I'm looking for volunteers to do that.

28:05.160 --> 28:08.020
I've actually got a series of products on the roadmap.

28:08.200 --> 28:10.420
You know, this is starting out just like PGP.

28:10.420 --> 28:15.260
Remember, PGP was started out as a private project without any money, you know.

28:15.360 --> 28:17.360
I paid for all this myself.

28:17.720 --> 28:18.980
Actually, I did get some help.

28:18.980 --> 28:23.640
Jeff Culver, who is well-known in the VoIP world, put in some of his own money, too.

28:23.720 --> 28:26.040
But most of it came from me paying.

28:26.040 --> 28:29.200
I hired an engineer full-time to work on it for a few months.

28:29.540 --> 28:33.100
But I was paying him, you know, really very low wages.

28:33.800 --> 28:38.580
And eventually, he had to take a job with a real company that paid him good money.

28:39.200 --> 28:43.520
So the development has slowed down.

28:43.520 --> 28:47.540
There is some development still going on with it, but it's at a slower pace.

28:48.880 --> 28:51.560
And I am going to try to start a company for this.

28:51.560 --> 28:55.360
And I'm actually talking to some investors to get some funding for this.

28:55.780 --> 29:00.880
And I got funding now from two sources so far.

29:00.880 --> 29:02.860
Jeff Culver put some of his own money in.

29:03.100 --> 29:05.400
And I got a little bit of money from Dick Clark.

29:05.960 --> 29:08.540
I don't mean the guy from American Bandstand.

29:08.980 --> 29:10.320
The other Dick Clark.

29:11.480 --> 29:13.600
Cyber security czar, you know.

29:13.600 --> 29:18.300
He left the Bush White House and wrote a book called Against All Enemies.

29:18.300 --> 29:20.880
It's a really good book, but anyway, it's too late now.

29:26.020 --> 29:29.020
So I'm going to start a new company and commercialize this.

29:29.340 --> 29:32.480
But I will publish the source code, because that's what I did with PGP.

29:33.100 --> 29:35.580
And I believe it's necessary to get people to trust it.

29:43.600 --> 29:45.120
So, more questions.

29:46.520 --> 29:47.260
Yeah.

29:52.480 --> 29:54.280
Could you yell really loud?

29:54.280 --> 29:56.260
Could you get up and just absolutely yell?

30:10.550 --> 30:12.750
You mean the retain shared secrets?

30:13.310 --> 30:15.510
You just need a little bit of memory for that.

30:24.280 --> 30:25.600
Yeah, okay, yes.

30:25.600 --> 30:29.400
You want to be able to take sort of an identity with you from one machine to another.

30:29.400 --> 30:31.500
Well, I've thought about doing that.

30:31.500 --> 30:37.000
You could put your configuration files in a USB drive and carry that around and copy it.

30:37.500 --> 30:39.420
But, I don't know.

30:39.420 --> 30:43.260
I think we'd have to do something more elaborate to do what you're talking about.

30:43.540 --> 30:49.520
Because, do you really want to copy that onto a computer in a cyber cafe, you know?

30:55.890 --> 31:01.390
Well, it's okay, because the first time you call somebody, there isn't any retained shared secrets.

31:01.390 --> 31:04.810
So, you just read the hash aloud and it just works.

31:05.350 --> 31:09.350
The retained shared secret feature is an extra feature.

31:09.370 --> 31:11.010
It kind of makes it nicer.

31:11.230 --> 31:13.030
But, it isn't necessary.

31:16.350 --> 31:17.490
Yes.

31:23.160 --> 31:24.720
Right, yes.

31:25.200 --> 31:26.060
That's right.

31:26.060 --> 31:28.020
I'm using SHA-256.

31:28.960 --> 31:30.760
SHA-256.

31:31.240 --> 31:32.380
Yes.

31:32.380 --> 31:38.060
And, for the Diffie-Hellman exchange, I'm using a 4000-bit Diffie-Hellman.

31:38.300 --> 31:49.340
And, for the block cipher, I'm using AES-256 running in counter mode, as defined by the SRTP protocol.

31:51.080 --> 31:55.180
So, I think I'm doing... I picked the right algorithms for this.

31:56.100 --> 32:07.810
And, actually, you know, even the collision problems that we've seen in some of the hash functions, I think, are not likely to be exploitable in the particular scenario that we're using them here.

32:07.970 --> 32:10.690
Even if I were using one of the weaker hash functions.

32:15.370 --> 32:16.790
John, do you want to say anything?

32:19.070 --> 32:19.770
Yeah.

32:19.990 --> 32:29.310
We've been working with Phil on this, too, and supporting him, and getting him contact with VCs, and I've been cajoling him into demoing at places like this, as well.

32:30.670 --> 32:31.330
Okay.

32:31.330 --> 32:44.830
I've been saying that, you know, we at PGP have been helping Phil with this, that we've been getting him with VCs, cajoling him to demo the thing, because I believe that getting some exposure to this is going to be important to get it properly funded and out there.

32:44.830 --> 32:50.070
The really important thing in what he's doing is that this will go nearly anywhere.

32:50.070 --> 32:55.630
I mean, it can go in a handset, it can go in a handheld computer, it can go on a laptop.

32:56.050 --> 33:02.790
The protocols are also directly layerable on top of what's going on.

33:02.790 --> 33:11.410
Sorry that we don't have a good network here to do the demo, but the system that he's running is an ordinary VoIP phone.

33:11.410 --> 33:14.110
You can call any other VoIP phone in the world with it.

33:14.110 --> 33:20.990
And it just so happens that if somebody else has one that has this security in there, poof, now all of a sudden you've got a secure phone call.

33:20.990 --> 33:31.110
And that's a really important aspect of what this does, because it means that the network effect of getting people to get secure phones is lower.

33:31.110 --> 33:42.530
That if you build a infrastructure that is a secure phone infrastructure that doesn't interoperate with regular phones, it makes it increasingly hard for people to go on because they have to make a decision.

33:42.530 --> 33:44.850
Do I want secure or do I want easy?

33:44.850 --> 33:54.390
Well, this gives you both easy and secure and other things like, you know, that you only really need to do the hash once or maybe even not do that.

33:54.390 --> 33:59.430
It's like I make phone calls all the time and I can tell from the person's voice whom I'm talking to.

33:59.690 --> 34:07.790
And you know from the sharing shared secret that you are talking to the end point that you were talking to last time.

34:08.190 --> 34:14.430
So, you know, if you have anything that tells you that that was a good phone call, you know that you are in the same state you were before.

34:14.430 --> 34:20.950
So again, this makes it be very easy and very understandable for people who are not crypto savvy, who are not security savvy.

34:20.950 --> 34:24.290
It can be put into all sorts of devices.

34:42.640 --> 34:43.560
That's right.

34:43.560 --> 34:47.600
The question is, what about a non-technical person using this phone?

34:47.940 --> 34:54.260
If your mother wants to use this phone, she doesn't have to read aloud the little hash digits that are displayed.

34:54.260 --> 34:56.880
She could just talk on the phone.

34:58.040 --> 35:00.340
The protocol would work the same way.

35:00.340 --> 35:03.700
The packets going back and forth are still, you know, the same kind of packets.

35:03.860 --> 35:10.040
It's just that final check that you do to verify to yourself, to assure yourself that there's no man in the middle, you would skip it.

35:10.260 --> 35:15.440
And presumably the man in the middle doesn't know that you're going to be lazy and you're going to skip it.

35:15.440 --> 35:18.380
So he's afraid to do his attack.

35:18.380 --> 35:19.420
It's an active attack.

35:19.420 --> 35:23.320
He has to actually sit in there and generate packets and inject them.

35:23.340 --> 35:29.860
He's going to be afraid to do that, because he's afraid he'll be discovered, because maybe your mom isn't as lazy as he thinks.

35:32.600 --> 35:39.680
One of the other advantages of this is that you know that if there is anybody listening to a phone call, they've always been there.

35:39.900 --> 35:45.640
So this also makes it very difficult for the attacker, because there is no way for them to get in and get out.

35:45.640 --> 35:51.760
They have to be in at the beginning and stay in, because the minute they drop out, they are also detected.

35:51.760 --> 35:59.840
This is a non-cryptographic security property that is very nice, because it serves as a real deterrent to the attacker.

35:59.840 --> 36:01.820
It makes their life really difficult.

36:04.380 --> 36:05.260
Yeah.

36:14.800 --> 36:22.840
Well, the question is, what happens if you try to call somebody who's using a regular POTS phone on the public switch telephone network?

36:24.560 --> 36:29.680
In that case, you would have to go through a gateway that connects the VoIP world to the PSTN world.

36:30.180 --> 36:34.560
And that means that you're not going to be able to make it a secure call end-to-end.

36:34.580 --> 36:39.380
Now theoretically, at least, you could make it a secure call between your phone and the gateway.

36:39.620 --> 36:41.780
Where it touches the PSTN.

36:41.780 --> 36:48.120
And then that last mile, hopefully it's only a mile, would be in the clear.

36:48.500 --> 36:53.320
But that gets you across the Atlantic, or across national borders.

36:57.500 --> 37:02.360
In the worst case, it's no less secure than a regular PSTN call.

37:02.360 --> 37:11.620
So that means that the new vulnerabilities that come from being in a VoIP world have been largely solved by this.

37:29.440 --> 37:31.420
The question is, the U.S.

37:31.420 --> 37:36.940
government is requiring people to put back doors in their VoIP software.

37:36.940 --> 37:39.340
I believe you're probably referring to CALEA.

37:40.220 --> 37:53.620
Well, they may change the way CALEA works, but I'm not a lawyer, and I don't have the most perfect understanding of this.

37:53.780 --> 38:00.140
But my limited understanding of CALEA is that it largely applies to the service providers.

38:00.220 --> 38:06.140
It largely applies to the people who have gateways to the PSTN, or the servers.

38:06.140 --> 38:11.140
I don't think it applies to end users.

38:11.880 --> 38:32.760
So if you're running some software on your laptop computer, and it sets up an encrypted link between you and the other party, without the involvement of the service provider, and you're not going through a gateway to the PSTN, then I'm going to go out on a limb here and suggest that CALEA doesn't apply to that case.

38:32.760 --> 38:37.240
Now it's possible that they could change the laws, make it more aggressive.

38:37.740 --> 38:41.080
But we'll have to worry about that when that happens.

38:50.850 --> 38:54.770
I haven't worked out the protocol to make this an anonymous system.

38:58.510 --> 39:03.310
It's peer-to-peer, unless you have to go through a proxy because of some firewall problems.

39:06.750 --> 39:13.970
Yeah, probably if you do the anonymous part, you're probably going to sacrifice your man-in-the-middle protection.

39:23.230 --> 39:25.950
There's not that much overhead for the encryption.

39:26.030 --> 39:38.350
The SRTP adds a little bit of extra to each packet for an HMAC, an authentication code, that gets stuck onto each packet.

39:38.350 --> 39:42.650
It's 80 bits long, but it can be shortened to 32 bits.

39:43.290 --> 39:47.350
And it's not that much of a bandwidth hit.

39:47.450 --> 40:02.710
And the only reason why that's there is actually not to encrypt it, but to authenticate, to prevent someone from sending in packets in a denial-of-service attack, so that the packets can be rejected because they don't authenticate.

40:02.750 --> 40:05.510
It's not actually necessary for the encryption.

40:06.350 --> 40:16.830
It's necessary, it's part of the extra protection you get from SRTP against a hacker coming in and injecting packets that aren't part of your phone call.

40:17.930 --> 40:19.770
I don't know if that's very clear.

40:19.950 --> 40:21.930
We can talk about it later if you want more details.

40:21.930 --> 40:26.110
Or go ahead and read the spec for SRTP, there's an RFC for it.

40:26.110 --> 40:29.730
It'll explain why you want to have that extra stuff.

40:33.390 --> 40:41.570
You know, it isn't only political reasons why I'm doing this.

40:41.570 --> 40:43.290
It's also business reasons.

40:43.410 --> 40:53.050
I think that if we're going to successfully migrate our phone calls to VoIP, to the internet, we're going to need this kind of protection.

40:53.810 --> 41:00.390
And in order to make a simpler design, I'm doing it this way.

41:01.290 --> 41:10.050
And so it isn't just my instincts for civil liberties, it's also my instincts for simple design.

41:10.190 --> 41:13.310
And the need for having secure calls.

41:14.790 --> 41:17.810
We need to protect critical infrastructure.

41:18.270 --> 41:19.990
And this is a good way to do it.

41:22.110 --> 41:25.630
That wasn't in response to any question, but I just wanted to add that.

41:26.590 --> 41:30.210
I don't want everybody to just think I do everything for political reasons.

41:33.310 --> 41:34.270
Yeah.

41:37.940 --> 41:41.820
Well, you know, the question is, what's the timing on the release of the source code?

41:41.820 --> 41:43.900
First, there has to be some source code.

41:44.720 --> 41:49.860
What you just didn't see is a demo of my prototype.

41:49.860 --> 41:50.560
It's a prototype.

41:50.560 --> 41:52.440
It's written in Python, you know?

41:52.440 --> 41:54.320
It's not the product.

41:55.000 --> 41:56.240
And it does work.

41:56.240 --> 41:57.520
I swear it works.

41:57.520 --> 41:59.240
It just doesn't work here.

41:59.240 --> 42:05.380
But what I want is a product where you can see.

42:06.140 --> 42:07.620
And there isn't one.

42:08.320 --> 42:11.220
To get one, I'm going to need funding.

42:11.700 --> 42:13.760
So I don't have a timetable for that.

42:13.760 --> 42:16.220
But what I might do, a lot of people have been asking me.

42:16.220 --> 42:21.920
I've gotten a tremendous number of requests to just release the prototype for people to play with.

42:22.400 --> 42:27.120
And for that, I'm looking at... I've got a whole lot of travel in August.

42:27.780 --> 42:30.560
And so I'm going to really try to get it out by the end of August.

42:30.560 --> 42:34.000
I actually considered trying to get it out yesterday for Black Hat.

42:34.340 --> 42:39.560
But I called a law office for... there's a lawyer I'm talking to about the export controls.

42:39.780 --> 42:43.280
Well, I had to file documents with the Commerce Department to tell them about it.

42:43.280 --> 42:46.900
Because, you know, there's still a little tiny bit of export controls left.

42:46.940 --> 42:51.460
I mean, we fought to get rid of the export controls in the 1990s.

42:51.520 --> 42:53.000
And we won.

42:53.000 --> 42:55.200
They got rid of the export controls.

42:55.340 --> 42:56.800
But there's just a little bit left.

42:57.400 --> 43:04.400
The only thing that you're required to do is that you just have to tell them about a product like this.

43:04.400 --> 43:06.120
You don't have to ask their permission.

43:06.120 --> 43:07.520
You just have to inform them.

43:07.520 --> 43:08.520
Well, I've done that.

43:08.520 --> 43:11.460
I've filed documents with them telling them about the product.

43:11.600 --> 43:15.940
But there's one other last vestigial remnant of the export controls.

43:15.940 --> 43:27.600
You're not allowed to export it to about six or seven countries like North Korea and Iran and Sudan and, you know, those countries.

43:27.600 --> 43:29.260
They're the embargoed countries.

43:29.260 --> 43:37.900
And so to put it on a web server, I have to put in special checks to make sure that it's not being downloaded by someone in one of those countries.

43:38.120 --> 43:40.460
And I don't know how to do that.

43:41.360 --> 43:45.520
And so I couldn't figure out how to do it in time for Black Hat yesterday.

43:45.940 --> 43:49.860
If I could have done it in time for Black Hat, you would have been able to download it today.

43:51.020 --> 43:56.280
If anybody wants to give me a hand on that, contact me and I'll put you to work.

43:57.060 --> 43:59.380
There's a lot of Unix weenies in here.

43:59.680 --> 44:06.120
And I'm sure that somebody in here can help me set up a server to do the reverse DNS lookups and all that kind of stuff.

44:06.880 --> 44:09.700
There's even some commercial packages that'll do it for you.

44:09.700 --> 44:11.520
But I don't want to have to pay for them.

44:16.870 --> 44:17.670
Yes?

44:18.550 --> 44:20.290
I've got to yell really loud.

44:20.290 --> 44:27.290
We've got this loud air conditioner and we've got a lawnmower and whatever else is going on.

44:27.290 --> 44:28.770
So I can't really hear you.

44:30.450 --> 44:31.210
Conference calls.

44:31.210 --> 44:32.710
What about conference calls?

44:35.130 --> 44:39.370
Well, in order to do a conference call, you would have to do one of these calls here.

44:39.370 --> 44:44.270
Just take this exact protocol and you'd have to do it between you and a server.

44:44.270 --> 44:49.070
And every other person who participates would all have to do it to the same server.

44:49.230 --> 44:51.350
The server would mix the audio together.

44:52.570 --> 44:54.670
And you've got to trust the server also.

44:55.270 --> 44:57.150
Which isn't so bad, you know.

45:00.810 --> 45:05.110
Now, each person would have a different encrypted Diffie-Hellman exchange.

45:05.730 --> 45:07.670
There would be a different session key.

45:08.150 --> 45:14.990
And the server would just treat them like they were all separate phone calls and then mix the audio together and distribute it back out.

45:14.990 --> 45:17.790
At least that's one way to do it.

45:25.320 --> 45:27.740
Alright, now let's not always see the same hands.

45:30.700 --> 45:32.480
Okay, well maybe I finished early.

45:34.260 --> 45:36.860
If you've got any other questions, you can ask me later.

45:37.520 --> 45:38.500
So what do you think?

45:38.500 --> 45:39.520
Is it going to work?

45:43.480 --> 45:45.960
I'd like to get your opinion about one thing.

45:45.960 --> 45:52.460
Is this going to... do you think that this is a better architecture than the other architectures?

45:52.460 --> 45:56.740
For those of you that have been reading about the encrypted VoIP approaches.

45:57.980 --> 45:59.140
What do you think?

46:14.230 --> 46:16.730
Oh hey, they opened up something in the firewall.

46:16.730 --> 46:18.870
We're going to try one more time to do the demo.

46:21.230 --> 46:22.730
Okay, alright.

46:25.600 --> 46:26.560
Just a minute.

46:26.560 --> 46:31.400
If you want to wait one more time and see another spectacular failure, just wait a second.

46:34.740 --> 46:35.620
What?

46:47.260 --> 46:48.920
Okay, I'm going to try calling them

47:00.560 --> 47:01.000
.

47:01.220 --> 47:02.440
Okay, you ready?

47:02.640 --> 47:03.360
You ready?

47:04.380 --> 47:06.100
Okay, let's see if this works.

47:16.560 --> 47:17.660
I did.

47:19.320 --> 47:21.120
You know, I hit the call button.

47:21.780 --> 47:23.220
We're not getting any evidence that...

47:25.580 --> 47:27.880
Okay, I'm going to hang up.

47:32.850 --> 47:34.310
Oh, incoming call.

47:36.270 --> 47:37.090
Unsecured call.

47:37.090 --> 47:38.070
Hey, it's secure.

47:38.070 --> 47:38.630
Hey!

47:39.110 --> 47:40.790
Look at that, going secure.

47:40.790 --> 47:42.090
But we have no audio.

47:57.400 --> 47:58.240
No audio.

47:58.240 --> 47:59.240
We're not getting any audio.

47:59.240 --> 48:03.520
Okay, what we're going to do is we're going to hold the microphone up to the little tiny speaker on here.

48:05.460 --> 48:07.620
Where's the... okay, yell it.

48:10.580 --> 48:11.420
Yell.

48:12.940 --> 48:14.220
Say something.

48:19.040 --> 48:21.900
I don't hear anything now.

48:24.420 --> 48:27.140
Yeah, okay, yes, there's sound coming out here.

48:27.540 --> 48:29.300
Alright, now listen to this.

48:29.380 --> 48:32.260
You see this secure button, this secure light here?

48:32.260 --> 48:32.940
Watch this.

48:32.940 --> 48:33.940
I'm going to press this.

48:33.940 --> 48:35.800
And this is what a wiretapper hears.

48:35.800 --> 48:38.100
This is a little Easter egg in the program.

48:38.240 --> 48:40.000
Okay, watch.

48:45.380 --> 48:50.260
That's taking the encrypted packets and playing them without decrypting them first.

48:52.440 --> 48:55.000
It sounds like white noise.

48:56.060 --> 48:57.680
I'm going to do that again.

48:58.280 --> 49:00.440
Wiretapper hears this.

49:01.680 --> 49:06.360
And that little staccato, you know, there's a lot of gaps there.

49:06.360 --> 49:09.760
It's because of jitter and bandwidth problems.

49:11.360 --> 49:16.700
Anyway, so encrypted text, encrypted voice sounds like white noise.

49:17.020 --> 49:19.280
So let them eat cipher text.

49:20.820 --> 49:25.660
And we have a go clear button here for the weenies here.

49:26.540 --> 49:30.420
And now it's just like making a normal plain text call.

49:30.440 --> 49:35.380
And if we hit go secure, it goes back to secure mode.

49:36.340 --> 49:39.180
Alright, but I'm sorry we have no audio.

49:54.420 --> 49:57.600
Say something, Steve, say something.

49:59.020 --> 50:01.220
No, no audio, sorry.

50:01.220 --> 50:02.060
No

50:08.320 --> 50:08.840
audio.

50:25.140 --> 50:28.000
Okay, so this is a secure call.

50:28.000 --> 50:30.300
Nobody can listen to this call.

50:31.620 --> 50:32.980
Say something.

50:34.440 --> 50:35.280
Hey, Phil, how you doing?

50:35.280 --> 50:36.600
You look great on TV.

50:36.900 --> 50:41.520
Alright, now I'm going to click that little indicator light that says secure.

50:41.520 --> 50:42.000
Alright

50:52.870 --> 50:55.830
, now we're going to actually...

50:55.830 --> 51:04.410
These buttons here, go clear and go secure, are not necessary in the real product, but we put them in because we're engineers and we like to fool around.

51:05.230 --> 51:07.630
So I'm going to say go secure here.

51:08.210 --> 51:11.630
And it does a little calculation for Diffie-Hellman.

51:11.650 --> 51:16.310
And now that little bong that you just heard is the bong that says you're now secure.

51:18.090 --> 51:18.890
Anyway.

51:20.090 --> 51:20.970
3U8.

51:21.630 --> 51:22.630
Oh, the hashes.

51:22.630 --> 51:24.650
Let's see, is there a man in the middle?

51:24.710 --> 51:27.430
I say 5SZ.

51:29.050 --> 51:29.930
3U8.

51:30.470 --> 51:31.010
3U8.

51:31.010 --> 51:31.790
That's right.

51:31.790 --> 51:33.350
There's no man in the middle.

51:34.450 --> 51:35.230
Alright.

51:35.750 --> 51:36.750
So it's great.

51:36.750 --> 51:39.310
No one knows what we're talking about.

51:39.410 --> 51:41.210
We have a secure call here.

51:41.210 --> 51:43.210
Do you have anything secret you want to tell me?

51:45.790 --> 51:46.530
Alright.

51:46.530 --> 51:47.650
So we're done.

51:47.650 --> 51:50.290
I'm going to hang up and that's it.

51:50.290 --> 51:51.150
See you later.

51:51.150 --> 51:52.050
Thanks, Steve.

51:53.270 --> 51:58.740
Alright, finally, we got it to work.

51:58.740 --> 51:59.940
We got it to work!

52:00.140 --> 52:01.880
I told you it worked.

52:02.580 --> 52:04.500
I wasn't just making this up.

52:13.420 --> 52:16.140
Oh, yeah, you had one more question?

52:16.860 --> 52:17.780
What?

52:23.300 --> 52:25.200
The open-source VoIP we're using...

