summaryrefslogtreecommitdiff
path: root/2020-09-28-yubikey.md
blob: f8de40652aa135cf0951a32e8e848d350cb934f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
# Password strength

* 2010 study: strong passwords need to be at least 12 random
  characters, 8 will soon not be strong enough.

* 2012: Attackers can brute force every 8 character password in less
  than 6 hours using 25 GPUs.

* It's 2020. Everything gets more scary now.


-----------------------------------------------------------------------------

# This remembers about 8 random characters


![](Human_Brain.png)

<!--

* Passwords can be brute force guessed by an attacker.
* The only thing that helps is length.
  - rules for what characters don't help nearly enough
  - minimum (2010): 12 random characters
* Human-invented passwords are rarely strong.
* Humans can rarely memorise more than a couple strong passwords.
  - never mind typing them correctly
* Attacker gain more raw computing power every year. Human ability to
  remember longer passwords has already reached its limit.

Conclusion: we can't rely on passwords for security.

* Possible solutions: hardware token, password managers.

-->


-----------------------------------------------------------------------------

Passwords are passé*

\ 

\ 

\ 

\ 

\ 

\ 

*not entirely true

-----------------------------------------------------------------------------

# What are hardware security tokens?

![Nano](YubiKey-5-Nano.png)

<!--


* A small bit of physically secured computer that can do some
  cryptography operations.
  - can store secrets
  - secrets can't be extracted - modulo bugs
* Typically a USB connected smart card of sort.
* Some kind of button for user interaction.

-->

-----------------------------------------------------------------------------

# Why a Yubikey specifically

![Big](YubiKey-4.png)

-----------------------------------------------------------------------------

# Use case: Log into web site

Demo

<https://demo.yubico.com/>

<https://gitlab.com/>

-----------------------------------------------------------------------------

~~~plantuml
@startuml
hide footbox

actor Alice
control Token
participant Browser
database Website

Alice -> Browser : log me in
Browser -> Website : username, password
Website -> Browser : token needed, here is a nonce
Browser -> Token : need this nonce encrypted
Token -> Alice : make LED blink
Alice -> Token : press button
Token -> Browser : here is nonce encrypted
Browser -> Website : here is nonce encrypted
Website -> Browser : login OK
Browser -> Alice : WE'RE IN!!!!!
@enduml
~~~

-----------------------------------------------------------------------------

# Use case: Full disk encryption

* Linux: yubico-luks

* Mac, Windows: something, I don't know

-----------------------------------------------------------------------------


~~~plantuml
@startuml
hide footbox

actor Alice
control Token
participant Laptop
database "LUKS disk" as Disk

Alice -> Laptop : boot
Laptop -> Laptop : start boot loader
Laptop -> Alice : need challenge password for hard drive
Alice -> Laptop : challenge password
Laptop -> Token : here is challenge
Token -> Laptop : here is response
Laptop -> Disk : open up, here is password
Disk -> Laptop : LGTM
Laptop -> Laptop : boot
Laptop -> Alice : please to be logging in now
@enduml
~~~


-----------------------------------------------------------------------------

# Use case: Log into system

* can be 1FA or 2FA

* Linux: libpam-u2f, libpam-yubico

* local logins: getty, su, sudo, desktop

* also SSH or any other service

-----------------------------------------------------------------------------


~~~plantuml
@startuml
hide footbox

actor Alice
control Token
participant Laptop

Alice -> Laptop : username, password
Laptop -> Token : here is nonce
Token -> Alice : make LED blink
Alice -> Token : press button
Token -> Laptop : here is nonce encrypted
Laptop -> Alice : welcome
@enduml
~~~

-----------------------------------------------------------------------------

# Use case: OpenPGP

* Private subkeys stored on token

* All operations involving private keys happen on token

-----------------------------------------------------------------------------

~~~plantuml
@startuml
hide footbox

actor Alice
control Token
participant Laptop

Alice -> Laptop : show me this encrypted email
Laptop -> Token : decrypt this
Token -> Alice : make LED blink
Alice -> Token : push button
Token -> Laptop : here you are
Laptop -> Alice : your email, if you please
@enduml
~~~

-----------------------------------------------------------------------------

# Use case: SSH

* OpenPGP authentication subkey on token

* `gpg-agent` acts as an SSH agent

-----------------------------------------------------------------------------

~~~plantuml
@startuml
hide footbox

actor Alice
control Token
participant Laptop
participant Server

Alice -> Laptop : login to server
Laptop -> Server : Alice wants to log in
Server -> Laptop : here is a nonce
Laptop -> Token : encrypt this nonce with authn subkey
Token -> Laptop : here you are
Laptop -> Server : encrypted nonce
Server -> Laptop : here is a shell
Laptop -> Alice : WE'RE IN!!!!
@enduml
~~~

-----------------------------------------------------------------------------

# Here how you configure everything

Not part of this talk.

Sorry.

-----------------------------------------------------------------------------

# SEE ALSO

Password strength:

* [`http://web.cs.wpi.edu/~guttman/cs557_website/ papers/passwords/MorrisThompsonPasswordSecurity.pdf`](http://web.cs.wpi.edu/~guttman/cs557_website/papers/passwords/MorrisThompsonPasswordSecurity.pdf)
* [`https://en.wikipedia.org/wiki/Password_strength`](https://en.wikipedia.org/wiki/Password_strength)
* [`https://arstechnica.com/information-technology/  2012/12/25-gpu-cluster-cracks- every-standard-windows-password-in-6-hours/`](https://arstechnica.com/information-technology/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/)
* [`https://arstechnica.com/information-technology/ 2013/03/how-i-became-a-password-cracker/`](https://arstechnica.com/information-technology/2013/03/how-i-became-a-password-cracker/)

Configure Yubikeys and operating systems:

* [`https://github.com/drduh/YubiKey-Guide`](https://github.com/drduh/YubiKey-Guide>)
* [`https://infosec-handbook.eu/blog/yubikey-luks/`](https://infosec-handbook.eu/blog/yubikey-luks/)
* [`https://infosec-handbook.eu/blog/yubikey-2fa-pam/`](https://infosec-handbook.eu/blog/yubikey-2fa-pam/)



-----------------------------------------------------------------------------

# Legalese

Copyright 2020 Wikimedia Foundation

This content is licensed under the Creative Commons
Attribution-ShareAlike 4.0 International ([CC BY-SA 4.0][]) licence.

[CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/

Images from Injurymap,
<https://www.injurymap.com/free-human-anatomy-illustrations>, and
Yubico.com.




---
title: "Yubikey hardware security tokens"
subtitle: "Lunch and learn"
author: "Lars Wirzenius"
date: "2020-09-28"
...