Stále ma fascinuje OpenPGP smartkarta. Viem, že je určite oveľa horšia ako YubiKey. Má oveľa, oveľa menej funkcií a jej implementácia GnuPG je dokonca plná závažných chýb, ktorých obchádzanie môže trvať dni. Jej najlepšie roky má určite za sebou. Ale nech je akokoľvek zlá, jednoducho sa mi páči jej tvarový faktor.
Nemôžem to zdôrazniť dosť. Páči sa mi, ako sa zmestí do peňaženky spolu s ostatnými predmetmi podobnej kategórie, napríklad kreditnými kartami alebo elektronickým občianskym preukazom. Tiež oveľa menej výrazne vyčnieva z laptopa, pekne a celkom nenápadne. Nezaberá žiadne USB porty, čo je to, čo mi na YubiKey najviac vadí. YubiKey existuje v miliónoch tvarových faktorov a všetky musia ísť do nejakého USB portu. Keď je môj laptop v doku, musím dosiahnuť, aby som sa ho dotkol (to je dôležité, k tomu sa dostaneme o chvíľu). Keď nie je v doku, ľahko sa ho dotknem, ale vyčnieva neohrabane a môže viesť k nehodám.
Git rebase a automatické podpisovanie #
Stále teda používam oboje a snažím sa zistiť všetky dobré, zlé aj škaredé stránky. Keďže som investoval toľko času do nastavenia GnuPG, rád mám globálne zapnuté automatické podpisovanie commitov. Pre mňa osobne je to skvelý pocit.
git config --global commit.gpgSign true
git config --global user.signingkey 0xA44B03E642BB42236780FEA43A1381FCF2738E75
Pamätajte: Použitie dlhého, 32-bitového ID kľúča môže byť uprednostňované, aby sa potenciálne predišlo spoofingu, kolíziám alebo iným možným problémom s kľúčom. Viac informácií tu.
So vyššie uvedeným nastavením môže rebasovanie (ktoré môže byť v niektorých git pracovných postupoch veľmi časté) viesť k situácii, keď je od nás požadovaný PIN pri každej po sebe nasledujúcej operácii. Toto je predvolená konfigurácia pre GnuPG smartkartu.
GnuPG a možnosť forcesig #
Dôvod, prečo je PIN požadovaný zakaždým, je možnosť forcesig, ktorá je
nastavená na samotnej smartkarte/zariadení a núti požadovanie PIN-u
zakaždým, keď je vyžiadaný podpisový pin, čím sa rušia akékoľvek možnosti
cachovania v agentovi. Vložte GnuPG kompatibilné zariadenie a spustite:
gpg --edit-card
Toto by malo zobraziť Signature PIN ....: forced. Teraz možno už viete,
že intenzívne používam KeePassXC. Pozrite sa na tag
keepass, ak vás zaujímajú nejaké ďalšie súvisiace alebo
čiastočne súvisiace články. KeePassXC (a aj KeePassDX so Syncthing) robím
neoddeliteľnou súčasťou prakticky všetkého, čo sa týka hesiel, prístupových
fráz, autentifikácie a bezpečnosti.
Nastavenie auto-type pre akékoľvek okná, výzvy a dialógy v KeePassXC je veľmi jednoduché. Stačí občas stlačiť globálnu klávesovú skratku a mať vyplnený správny PIN, čo nie je až taká veľká vec. Ale keď to musíte robiť mnohokrát opakovane, je to otravné. Dá sa to však zmeniť.
V rozhraní na úpravu karty napíšte admin, za ktorým nasleduje forcesig.
Vložte admin PIN a napíšte list. Teraz by ste namiesto toho mali vidieť
Signature PIN ....: not forced. Predpokladajme, že som túto zmenu
vykonal. Teraz som vymenil bezpečnosť za pohodlie. Bezpečnosť v zmysle, že
škodlivý proces by teraz mohol teoreticky podpísať niečo naším podpisovým
kľúčom, čím by ukázal, že daný kus kódu alebo dokonca celý balík vydal som
ja, čím by oklamal ľudí do falošnej dôvery a teda možno aj spustil škodlivý
kód. Alebo aspoň takto to momentálne chápem. Neškodilo by urobiť tu trochu
viac výskumu.
gpg-agent a cachovanie PIN-u #
Akonáhle je PIN cachovaný cez gpg-agent, je to zjavne
ťažké dostať ho z cache,
pričom najlepším súčasným riešením je odpojiť zariadenie. Existuje síce
možnosť agenta ignore-cache-for-signing, ale neprišiel som na to, ako
alebo kedy ju použiť. A viem, že existujú možnosti default-cache-ttl a
max-cache-ttl v agentovi
options,
ktoré by mali ísť do ~/.gnupg/gpg-agent.conf, ale vzhľadom na obrovské
množstvo hlásených problémov pravdepodobne nefungujú tak, ako by väčšina
ľudí očakávala. Pozrite sa na sekciu s odkazmi pre niektoré vlákna.
Tento problém sa týka OpenPGP smartkarty a podobných zariadení, dokonca aj GNUK flash kľúčov, zariadení bez akéhokoľvek vstupu od používateľa mimo USB komunikácie. Situácia je odlišná s YubiKey, obzvlášť YubiKey NEO, ktorý má kapacitívnu oblasť dotyku.
Podpisovanie s YubiKey a dotykom #
S YubiKey a jeho schopnosťou dotyku možno problém zmierniť alebo vyriešiť
správnou konfiguráciou. Je to zámerné. Najprv nainštalujte balík
yubikey-manager, pozrite sa na
dokumentáciu
a zvážte spustenie nasledujúceho:
ykman openpgp keys set-touch sig cached
Upozornenie: Nepoužívajte politiku
fixedanicached-fixed, pretože zámerným dizajnom je nemožné toto nastavenie vrátiť späť bez úplného resetu, čo je v prípade bezpečnej aplikácie GnuPG pomerne zdĺhavý proces. Vždy začnite experimentovať s menej trvalou politikou, ako napríkladonalebo spomínanoucached. Neskôr, keď budete absolútne istí, čo robíte, môžete vždy prejsť na pevnú politiku.
To čo sa stane je, že keď je vyžadovaný podpisový kľúč, vloží sa PIN a YubiKey bliká svojou LED, čakajúc na dotyk. Teraz každý rebase v nasledujúcich 15 sekúnd nebude vyžadovať žiadnu interakciu používateľa. Po 15 sekundách je potrebný iba ďalší dotyk.
Keby sa škodlivý program pokúsil podpísať niečo našimi prihlasovacími údajmi, vzbudilo by to u mňa veľké podozrenie a ťažko by sa mu podarilo vytiahnuť ten dotyk nečakane odo mňa (pokiaľ by to nespustilo v tom 15-sekundovom okne).
Vidíme, že funkcia dotyku je vítaným doplnkom. Ale prináša so sebou ďalší problém: ako spoľahlivo vedieť, že zariadenie žiada našu pozornosť a čaká na dotyk? Áno, LED na ňom bliká. Ale čo ak je YubiKey zapojený niekde, kde ho nie je ľahko vidno, napríklad v doku? To nás dostáva do situácie uvedenej na začiatku tohto príspevku.
Notifikácia dotyku YubiKey v Gnome #
Áno, existuje projekt YubiKey touch detector zameraný na poskytovanie signálu používateľskému rozhraniu, že YubiKey vyžaduje dotyk. Vo svojom návode na inštaláciu konkrétne spomína Arch, čo je pekné. Stručne:
sudo pacman -S yubikey-touch-detector
export yubipath="$HOME/.config/yubikey-touch-detector"
mkdir -p "$yubipath"
echo "YUBIKEY_TOUCH_DETECTOR_LIBNOTIFY=true" > "$yubipath/service.conf"
systemctl --user daemon-reload
systemctl --user enable yubikey-touch-detector.service --now
Existujú aj niektoré pekné funkcie súvisiace s UNIX socketom, choďte sa pozrieť. Notifikácia v Gnome vyzerá nasledovne:

A teraz to najlepšie: vedľajším efektom vyššie uvedeného je, že notifikácia
sa nezobrazuje len vtedy, keď YubiKey skutočne čaká na dotyk, ale
notifikácia sa zobrazí aj pri podpisovaní OpenPGP smartkartou. Karta
samozrejme nečaká na žiadny dotyk, ale je to vlastné tomu, ako bol
yubikey-touch-detector vytvorený, využívajúc gpg --card-status.
Takto môžem vidieť, že sa s mojou kartou deje niečo podozrivé, ak by sa toto zrazu začalo objavovať, aj bez oblasti dotyku. Bolo to nečakané, ale páči sa mi to tak, ako to je. Užite si!
Odkazy #
- https://dev.gnupg.org/T3362
- https://security.stackexchange.com/q/147267/226580
- https://spin.atomicobject.com/2014/02/09/gnupg-openpgp-smartcard/
- https://stackoverflow.com/q/49107180/1972509
- https://superuser.com/q/624343/440086
- https://unix.stackexchange.com/a/141599/109352
- https://wiki.debian.org/Smartcards/OpenPGP