\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}