aboutsummaryrefslogtreecommitdiff
path: root/2023-linuxdays/usbkey/pres.tex
blob: 443437d09e98689cf9e5327ba55ec76c882ba570 (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
\documentclass[aspectratio=169]{beamer}
\usetheme{metropolis}
\usepackage{lmodern}
\usepackage[czech]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{color}
\usepackage{mathtools}
\usepackage{hyperref}
\usepackage{epstopdf}
\usepackage{amsmath}
\usepackage{minted}
\hypersetup{
    colorlinks,
    citecolor=black,
    filecolor=black,
    linkcolor=black,
    urlcolor=black
}
\usepackage{pdflscape}

\title{USBKey}
\author{Karel Kočí}
\date{7.10.2023}

\begin{document}

\frame{\titlepage}

\begin{frame}[fragile]
	\begin{center}
		\includegraphics[height=\textheight]{./where_are_my_keys.jpg}
	\end{center}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Požadavky}
	\begin{itemize}
		\item Jednoduché ovládání
		\item Minimum hesel
		\item Stále k dispozici
		\item Zálohované
		\item Práce na více počítačích
		\item Možnost umístit soubory nespravované nástrojem
		\item Nezávislé na nastavení systému (FAT)
		\item Nenahradit pass
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
	\frametitle{První implementace}
	\begin{minipage}{0.5\textwidth}
		\begin{itemize}
			\item 200 řádek kódu v Bash
			\item Podpora OpenVPN a SSH
		\end{itemize}
	\end{minipage} \hfill
	\begin{minipage}{0.45\textwidth}
		\begin{itemize}
			\item Synchronizace pomocí Rsync
			\item Hardcoded UUID mých klíčenek
		\end{itemize}
	\end{minipage} \hfill
	\begin{minted}{bash}
#!/bin/sh
set -e
UUID_KKEY="a960e5b8-364f-4604-9d1b-f4f6407a0330"
UUID_WKEY="9fcaf42a-86d5-4e70-828d-fd90aad2d964"
CRYPT_NAME="usbkey"
MOUNT_PATH="/media/usbkey"
op_mount() {
	# First check if we have key drive
	if [ ! -e "/dev/disk/by-uuid/$UUID_KKEY" ]; then
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Nová implementace}
	\begin{itemize}
		\item Rozšířitelná pomocí modulů
		\item Historie a synchronizace pomoci Git
		\item Konfigurační soubor
		\item Podpora dalších klíčů
		\item Zbytek požadavků stejných jako stará verze
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Pojďme na to}
	Minimální závislosti: bash, core-utils, util-linux, sudo, cryptsetup, exfat, git
	\begin{minted}{console}
$ git clone https://github.com/Cynerd/usbkey
$ ln -sf $PWD/usbkey/usbkey ~/.local/bin/usbkey
$ usbkey -h
Usage: usbkey [OPTION].. OPERATION ..
USB key manager
...
$ truncate -s 1G usbkey.img
$ sudo losetup -Pf usbkey.img
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0         7:0    0     1G  0 loop
$ usbkey format /dev/loop0
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Přistupujeme}
	\begin{minted}{console}
$ lsblk --fs
NAME        FSTYPE      FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0       crypto_LUKS 2           76dfcb49-343f-4601-aa04-bf749464db1b
$ echo 'uuid_keys+=( "76dfcb49-343f-4601-aa04-bf749464db1b" )' > ~/.usbkey
$ usbkey mount
$ ls -a /media/usbkey/
.  ..  .git
$ usbkey umount
$ usbkey git status
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{SSH}
	\begin{minted}{console}
$ usbkey mount
$ usbkey ssh -n test
Comment: Some
...
$ ls /media/usbkey/ssh
test  test.pub
$ usbkey git log
$ usbkey ssh test
$ ls ~/.ssh
test  test.pub
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Synchronizace}
	\begin{minted}{console}
$ truncate -s 1G usbkey_back.img
$ sudo losetup -Pf usbkey_back.img
$ usbkey format /dev/loop1
$ echo 'uuid_keys+=( "76dfcb49-343f-4601-aa04-bf749464db1b" )' >> ~/.usbkey
$ usbkey sync
$ usbkey umount
$ sudo losetup -d /dev/loop0
$ usbkey mount
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Syncthing}
	\begin{minted}{console}
$ usbkey syncthing -n test
$ ls /media/usbkey/syncthing/test/
cert.pem  deviceid  key.pem
$ usbkey syncthing test
$ usbkey syncthing -p test
AKXQ23B-XLB7W55-TIV4GD6-L2XYHNT-KHBQNY6-CZG7UCX-XIWHI4X-QSTL3QR
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Wireguard}
	\begin{minted}{console}
$ usbkey wireguard -n test
$ ls /media/usbkey/wireguard/test/
key  pub
$ usbkey wireguard -p test
JAK2lKo7mFBS86zb83IO2UNHrZvYXKMz8UgicS8eMh0=
$ usbkey wireguard -s test
cCnFVNaMFJkNvPWEZwUYHJzKKlp3Ed44fqJxmhGc+kY=
$ usbkey wireguard -ng home test
$ usbkey wireguard -eg home test
6Vsz5f40pAkre59BrfTH80+Rx0rjEmcMJPMFHMHdmCA=
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{OpenVPN}
	\begin{minted}{console}
$ usbkey openvpn -n test
$ usbkey openvpn test
$ ls openvpn-test
ca.crt  test.crt  test.key
$ usbkey openvpn -s servrik
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{pass (passwordstore)}
	\begin{minted}{console}
$ usbkey pass -u
$ ls /media/usbkey
openvpn  ssh  syncthing  wireguard
$ usbkey gitg
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{GPG}
	\begin{minted}{console}
$ usbkey gpg -n
$ ls /media/usbkey/gpg
59AC9766C3CDD8059699F2B57EB58B6FEC61207C.key
	\end{minted}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Bezpečnost}
	\begin{itemize}
		\item Při propojení má ke klíčům přístup root a celý uživatelský účet
		\item Klíče se importují na počítač bez hesla
		\item Vše je pod jedním heslem
		\item Certifikáty na 50 let
		\item USBKey není jediná cesta jak data zpřístupnit
	\end{itemize}
\end{frame}

\begin{frame}[fragile]
	\frametitle{Závěr}
	\begin{itemize}
		\item \textasciitilde1500 řádek v Bashi
		\item Podpora SSH, GPG, OpenVPN, Wireguard, Syncthing, Pass
		\item Uložené na discích šifrovaných pomocí LUKS a exFAT
		\item Možnost přidávat další moduly
	\end{itemize}
	\url{https://gitlab.com/cynerd/usbkey}
\end{frame}

\begin{frame}
	\Large Děkuji za pozornost.

	\vspace{1cm}

	\url{git.cynerd.cz}

	\url{https://gitlab.com/cynerd}
\end{frame}

\end{document}