Offline GnuPG Master Key and Subkeys on YubiKey NEO Smartcard

Kas tas yra

Privatumo iliuzija apsauga, failų kodavimas, email, dokumentų pasirašymas, vėl kodavimas. Taip, elektroninis parašas + daugiau galimybių 😉 Be institucijų.

GPG naudojimas

Prašome atsakyti į kelis anketos klausimus. Ačiū.

Pirmiausiai reiktų pasigaminti raktus, o paskui naudoti buityje. Todėl jei dar neturite raktų, skaitykite nuo „Gaminam raktus“. „Pasigaminę“ ir sugrįžę čia rasite pagrindines reikalingiausias komandas.

Importuotiems raktams pasitikėjimo Trust nustatymas.  Savo raktams ir žmonių, kuriuos gerai žinote, raktus nustatome Ultimate trust lygį:

gpg --edit-key E31828C0
Secret key is available.
[...] dalis teksto praleista

gpg> trust
[...] dalis teksto praleista
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

[...] dalis teksto praleista
gpg> quit

Apsikeitimas raktais

Raktų siuntimas į serverius

Sukurtas raktas tėra tik jūsų kompe, todėl reikia nusiųsti public raktą į serverius. Geriausiai į serverių pools:

gpg --keyserver pool.sks-keyservers.net --send-key E31828C0

Galima įrašyti serverių eilutes į gpg.conf failą:

keyserver hkp://keys.gnupg.net
keyserver http://http-keys.gnupg.net

Įrašius nereiks siunčiant / gaunant raktus naudoti –keyserver serveris, nebent kitą norite naudoti. Geriau naudoti serverių pool`us. Nusiuntus į vieną serverį, jūsų raktą susinchronizuos į visus.

Analogiškai gauti raktus iš serverių:

gpg --keyserver pool.sks-keyservers.net --recv-key E31828C0

arba jei įrašyta į gpg konfigūracijos failą gpg.conf serveriai:

gpg --recv-key E31828C0

Raktų eksportas / importas

Galima nepublikuoti viešuose serveriuose raktų, o nusiųsti public key el. paštu ar kitomis priemonėmis. Viešo rakto eksportavimas:

gpg --export --armor --output vardenis.txt vardenis.pavardenis@servas.lt

Rakto imortavimas:

gpg --import vardenis.txt

Pasirašymas, kodavimas

Koduotas irba pasirašytas paštas

Thunderbird yra pluginas enigmail. Kitose pašto programose analogiški priedai yra. Šiuos pluginus galėtų instaliuoti ir neturintys savo raktų – matytų, ar laišką išsiuntė žinantis siuntėjo gpg  kodą, tai yra pats rakto savininkas.

Pluginus vieną kartą sukonfigūravus, automatiškai pagal turimus raktus, gavėjų email`ų adresus koduojama irba pasirašinėjama laiškai.
Kai kam iškyla klausimas „o kam to reikia?“. Šiom dienom skandalas su tagu #vilniusleaks. Po to visokie keisti susirašinėjimai pasiaiškinimai, razborkės prasideda. To nebūtų „nušvilpus“ koduotus laiškus.

Failų kodavimas:

gpg --output slaptas_dokumentas.doc.gpg --encrypt --recipient vardenis.pavardenis@servas.lt slaptas_dokumentas.doc

Bus sukurtas naujas failas slaptas_dokumentas.doc.gpg . Nepamirškite ištrinti nekoduotos dokumento versijos slaptas_dokumentas.doc .

–recipient nurodo kam skirtas dokumentas – tai yra tik privatų raktą su ID vardenis.pavardenis@servas.lt turintis žmogus galės iškoduoti dokumentą.
Tai dar vienas privalumas gpg sistemos koduojant paštą – nereikia perduoti jokiais slaptais, saugiais kanalais galiniam adresatui jokio privataus rakto – jis jį jau turi. Tereikia siuntėjui parsisiųsti iš serverių gavėjo public key ir pakabinti spyną , kurią atrakinti gali tik turintis raktą su ID vardenis.pavardenis@servas.lt

Failų iškodavimas:

gpg --output slaptas_dokumentas.doc --decrypt slaptas_dokuemtas.doc.gpg

Katalogų kodavimas

gpg nekoduoja katalogų, todėl pirmiausiai reikia suarchyvuoti. Tam panaudojame tar:

tar -c katalogas | gpg --encrypt --recipient vardenis.pavardenis@servas.lt > katalogas.gpg

Nepamirštam ištrinti katalogas.

Ir katalogo iškodavimas:

gpg --decrypt katalogas.gpg > katalogas && tar -xf katalogas

Dokumentų  pasirašymas

Sukurkite naują dokumentą ar pasirašykite jau turimą:

gpg --armor --detach-sig dokumentas.doc

Bus sukurtas failas dokumentas.doc.asc. Juos laikykite viename kataloge, o jei siunčiate kitam asmeniui, tai siųskite abudu. Kitaip nebus galimybės patikrinti pasirašymo fakto ir parašo galiojimo.

Parašo patikrinimas:

gpg --verify dokumentas.doc.asc
[...]dalis teksto praleista
gpg: Good signature from [...]dalis teksto praleista

„Good signature“ – šis dokumentas buvo pasirašytas, jokių modifikacijų neatlikta. Parašas galioja.

Pakeitus bent vieną simbolį dokumente, ar netgi modifikavimo laiką, parašas jau negalios. Dokumente parašykite vieną bet kokį simbolį, išsaugokite, ištrinkite tą simbolį, vėl išsaugokite. Dokumento turinys nepasikeitė – ką parašėt naujai, tą ištrynėte. Tačiau:

gpg --verify dokumentas.doc.asc
[...] dalis teksto praleista
gpg: BAD signature from[...] dalis teksto praleista.

Parašas šiam dokumentui jau nebegalioja – dokumentas po pasirašymo modifikuotas.

Web of Trust (WOT)

Importavę, atsisiuntę iš serverių raktą galite jį pasirašyti ir išsiųsti atgal pasirašytą į serverius. Taip kuriamas „pasitikėjimo tinklas“. Pasirašyti viešuosius raktus galima ir pageidautina asmenų, kuriuos gerai pažystate, arba kurių duomenis patikrinote pagal institucijų išduotus dokumentus (pvz. pasą). Prieš pasirašant labai gera praktika patikrinti rakto autentiškumą pagal rakto ilgį IR fingerprint – negalima aklai pasitikėti vien rakto ID. Daugiau apie tai skyriaus „Tips & Tricks“ nuorodoje „geriausia praktika“.

Rakto pasirašymo pavyzdžiui panaudotas PGP Global Directory 2048 bitų raktas ca57ad7c , kurio fingerprint 50BB 6FFC 9719 DFD2 BEBB 04C6 9710 B89B CA57 AD7C.

Rakto fingerprint patikrinimas, pasirašymas, pasitikėjimo nustatymas į didžiausią.

gpg --edit-key do-not-reply
gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

pub  2048R/CA57AD7C  created: 2004-12-06  expires: never       usage: SC
trust: unknown       validity: unknown
[ unknown] (1). PGP Global Directory Verification Key
[ unknown] (2)  DNR KS1 <do-not-reply@keyserver1.pgp.com>
[ unknown] (3)  DNR-KS2 <do-not-reply@keyserver2.pgp.com>
[ unknown] (4)  [jpeg image of size 3400]

gpg> fpr
pub   2048R/CA57AD7C 2004-12-06 PGP Global Directory Verification Key
Primary key fingerprint: 50BB 6FFC 9719 DFD2 BEBB  04C6 9710 B89B CA57 AD7C

gpg> sign
Really sign all user IDs? (y/N) y

pub  2048R/CA57AD7C  created: 2004-12-06  expires: never       usage: SC
trust: unknown       validity: unknown
Primary key fingerprint: 50BB 6FFC 9719 DFD2 BEBB  04C6 9710 B89B CA57 AD7C

PGP Global Directory Verification Key
DNR KS1 <do-not-reply@keyserver1.pgp.com>
DNR-KS2 <do-not-reply@keyserver2.pgp.com>
[jpeg image of size 3400]

Are you sure that you want to sign this key with your
key "Vardenis Pavardenis <vardenis.pavardenis@servas.lt>" (D485B76)

Really sign? (y/N) y

You need a passphrase to unlock the secret key for
user: "Vardenis Pavardenis <vardenis.pavardenis@servas.lt>"
4096-bit RSA key, ID E31828C0, created 2015-05-28

gpg> trust
pub  2048R/CA57AD7C  created: 2004-12-06  expires: never       usage: SC
trust: unknown       validity: unknown
[ unknown] (1). PGP Global Directory Verification Key
[ unknown] (2)  DNR KS1 <do-not-reply@keyserver1.pgp.com>
[ unknown] (3)  DNR-KS2 <do-not-reply@keyserver2.pgp.com>
[ unknown] (4)  [jpeg image of size 3400]

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu

Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

pub  2048R/CA57AD7C  created: 2004-12-06  expires: never       usage: SC
trust: ultimate      validity: unknown
[ unknown] (1). PGP Global Directory Verification Key
[ unknown] (2)  DNR KS1 <do-not-reply@keyserver1.pgp.com>
[ unknown] (3)  DNR-KS2 <do-not-reply@keyserver2.pgp.com>
[ unknown] (4)  [jpeg image of size 3400]
Please note that the shown key validity is not necessarily correct
unless you restart the program.

gpg> save

gpg --send-key CA57AD7C

Kaina

Kaina už šią paslaugą – jūsų laikas sukuriant raktus, sukonfigūruojant pašto programų pluginus, paeksperimentuojant koduojant.

Tai tiek, kiek vertinate savo keliasdešimt minučių / kelias valandas savo laiko. Serverius kažkas išlaiko, sąskaitų nebus.

Windows OS ir OS X naudotojams

gpg4win tai ko reikia ir dar daugiau. Instaliavę šią programą, command prompt`e galite naudotis visomis aprašytomis komandomis. Arba naudokitės grafine Kleopatrą raktų tvarkymo sąsaja.

Apple produktams yra GPG suite ir GnuPG for OS X.

Skirtumai tarp institucijų išduodamo elektroninio parašo ir GnuPG

GnuPG vs elektroninis parašas

Pagrindinis ir esminis GnuPG elektroninio parašo trūkumas: nepopuliarumas institucijų nepripažinimas (?).
PAPILDYMAS: daugiau skirtumų rasite kitame įraše.

Tips & Tricks

Geriausia praktika – įvairūs patarimai nuo saugumo padininimo iki socialinio aspektų, kaip raktų priežiūra.

gpg komandų sąrašas – visos galimos komandos. Naudojantiems ne grafinius gpg įrankius, verta peržiūrėti ir įsisavinti trumpinius – mažiau rašyti. Žemiau pateikta vienas ir tas pats ilgomis komandomis ir trumpomis:

gpg --armor --detach-sig dokumentas.doc
gpg -a -b dokumentas.doc

Raktus ir kitą info galite serveriuose. Paieškos laukelyje ieškant pagal Key ID, prieš raktą ID prirašykite 0x , pvz: 0xE31828C0.

Rakto info keitimui vietoje rakto ID galima naudoti dalinį pašto adresą:

gpg --edit-key vardenis.pavardenis

Gaminam raktus

Kramtantys English, gali skaityti originalų straipsnį. Skirtumas bus tarp debian ir arch, tiksliau tarp gpg 1 ir gpg 2.

Offline mašina

Būsto raktus saugot, telefoną saugot, piniginė irgi dėmesio nestinga, tad ir kompuose pakelti paranojos slinkiklio lygį reikia aukščiau 0. Pagrindinio master key laikymas darbiniame kompiuteryje yra bloga praktika – labai nesaugu. Geriausias variantas – master key laikyti kažkur saugioje tamsioje vietoje, jį naudoti tik koreguojant savo subraktus arba pasirašant kitų raktus, o kasdienai atskiri subkeys dokumentų / susirašinėjimų pasirašymui, kodavimui ar autentifikacijai.

Neturintiems laisvo kompo, offline mašiną nusipirkite už truputį savo laiko – ją puikiai atstos virtualkė. Susimeskit į virtualkę tą patį debian, archą ar kitą distrą, neduokit internetų ir turėsit offline mašiną 🙂

Originaliame straipsnyje pasirinkta debian su gnome desktopu, o gnome keyringas su Yubico NEO korta (arba bet kokia kita, palaikančia opengpg) nelabai draugauja. Padės internetuose straipsnis kaip gnome keyringą pakeisti gpg agentu.

Instrukcija rašyta naudojant arch 64 bitų, gpg  2.1.6. PASTABA: cutting edge distroje arche neveikia toggle komanda tvarkant raktus. Galimas workaround`as – downgradinti gpg.

Sukuriame namų aplanke katalogą raktų tvarkymui:

export GNUPGHOME=~/gnupghome
 mkdir $GNUPGHOME
 chmod 700 $GNUPGHOME
 cd $GNUPGHOME
mkdir backup

export GNUPGHOME=~/gnupghome  komandą reiks įvykdyti kiekvieną kartą perkrovus OS. Defaultinis katalogas kažkur kitur sistemoje yra, kas mums visai nerūpi, nes mes viską asmeninio laikome namuose žinomoje ir įprastoje vietoje.

Blogerių susitikime pas merą Nerius Jasinavičius sakė, kad GPG galima nulaužti. Išmanantys irba besidomintys parenka šiai dienai bent jau teoriškai nepažeidžiumus algoritmus ir chiper`s, nenaudoja defaultinių pažeidžiamų. Tam tiuninguojam gnupg.

Kopijuojam po vieną eilutę, po paskutinės Enter ir Ctrl+C:

cat > $GNUPGHOME/gpg.conf
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAMELLIA256 CAMELLIA192 CAMELLIA128 TWOFISH
cert-digest-algo SHA512
use-agent
lock-never

Generuojam master key

Darom tik pasirašymo raktą, o kodavimui, autentifikavimui bus subkeys.

Skirtumai nuo originalaus straipsnio:

Kompas galingas, tad nustatom paranojos lygį į maksimalų, ir naudojam 4096 bitų dydžio raktą. Tačiau pakanka ir mažesnio, turėtų būti kažkas tarp 2048 ir 4096.

Pagal gerąją  gnupg praktiką, rekomenduojama nustatyti riboto amžiaus raktus – ne ilgiau 2 metams. Tipo besinaudojantys gpg galės pasižiūrėti jūsų gyvumą – atnaujinate ar ne. Vėliau galiojimą pratęsite nesunkiai.

Generuojant raktą, kompas rinks atsitiktinius baitus. Jei ilgai niekas nevyksta, darykite įvairius veiksmu su kompu: daužykite trankykite kopijuokite piratinius fimus į kitą katalogą, paleiskite mėgstamą muziką, atidarykite sunkiasvorią nelegalią moterų gražinimo programą potošop, darykite daug skirtingų veiksmų. Kai užsimanys slaptažodžio, sukurkite jį. Tai bus jūsų pagrindinio rakto slaptažodis. Pagrindinis raktas bus naudojamas retai, slaptažodį sugalvokite ilgą, su skaičiais, didžiosiomis ir mažosiomis raidėmis.

Bold`u parašyta komandos, visa kita output`as.

gpg2 --gen-key
 gpg (GnuPG) 2.1.6; Copyright (C) 2015 Free Software Foundation, Inc.
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.
 gpg: keybox '/home/vardenis/gnupghome/pubring.kbx' created
 Please select what kind of key you want:
 (1) RSA and RSA (default)
 (2) DSA and Elgamal
 (3) DSA (sign only)
 (4) RSA (sign only)
 Your selection? 4
 RSA keys may be between 1024 and 4096 bits long.
 What keysize do you want? (2048) 4096
 Requested keysize is 4096 bits
 Please specify how long the key should be valid.
 0 = key does not expire
 <n> = key expires in n days
 <n>w = key expires in n weeks
 <n>m = key expires in n months
 <n>y = key expires in n years
 Key is valid for? (0) 2y
 Key expires at Thu 13 Jul 2017 10:42:31 PM EEST
 Is this correct? (y/N) y
 GnuPG needs to construct a user ID to identify your key.
 Real name: Vardenis Pavardenis
 Email address: pastas@servas.lt
 Comment:
 You selected this USER-ID:
 "Vardenis Pavardenis <pastas@servas.lt>"
 Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
 We need to generate a lot of random bytes. It is a good idea to perform
 some other action (type on the keyboard, move the mouse, utilize the
 disks) during the prime generation; this gives the random number
 generator a better chance to gain enough entropy.
 gpg: /home/vardenis/gnupghome/trustdb.gpg: trustdb created
 gpg: key D485B760 marked as ultimately trusted
 gpg: directory '/home/vardenis/gnupghome/openpgp-revocs.d' created
 public and secret key created and signed.
 gpg: checking the trustdb
 gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
 gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
 gpg: next trustdb check due at 2017-07-13
 Note that this key cannot be used for encryption. You may want to use
 the command "--edit-key" to generate a subkey for this purpose.
 pub rsa4096/D485B760 2015-07-14 [expires: 2017-07-13]
 Key fingerprint = DD22 1BCA 3100 9EAD 13A8 0307 1C00 2D2D D485 B760
 uid [ultimate] Vardenis Pavardenis <pastas@servas.lt>

Turim naują master key D485B760. Jūsų atveju nepamirštam vykdant komandas pakeisti į jums sugeneruotą.

Nuotraukos pridėjimą į raktą praleisiu – norintys parodyti save, konsultuokitės su originaliu straipsniu. Kaip ir kito email`o pridėjimą. Šituos dalykus galima vėliau susitvarkyti.

Sukuriam atšaukimo (revocation) sertifikatą. Jis reikaingas, jei jūsų privatų raktą nutekino , pavogė, pametėt ar tiesiog nenorite daugiau šito rakto  naudoti.

gpg --output $GNUPGHOME/revocation-certificate.txt --gen-revoke D485B760
sec rsa4096/D485B760 2015-07-14 Vardenis Pavardenis <pastas@servas.lt>

Create a revocation certificate for this key? (y/N) y
Please select the reason for the revocation:
0 = No reason specified
1 = Key has been compromised
2 = Key is superseded
3 = Key is no longer used
Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Nupyzdino rakta, naikinu galiojima
> Reason for revocation: Key is compromised
Nupyzdino rakta, naikinu galiojima
Is this okay? (y/N) y
ASCII armored output forced. Revocation certificate created.
Please move it to a medium which you can hide away; if Mallory gets
 access to this certificate he can use it to make your key unusable.
 It is smart to print this certificate and store it away, just in case
 your media become unreadable. But have some caution: The print system of
 your machine might store the data and make it available to others!

Failą  revocation-certificate.txt reikia saugoti ne mažiau, nei pagrindinį raktą. Kitaip kas nors gali tiesiog panaikinti jus jūsų rakto galiojimą.

Pagrindinio rakto kopija

Ir ateityje bus daug kopijų, tskant dėl viso pikto pasidarom galimybę GPG keliauti laiku:

gpg -a --export-secret-keys D485B760 > $GNUPGHOME/masterkey.txt
cp -a $GNUPGHOME $GNUPGHOME/backup/backup-masterkey

Sukuriam subkey

VIso jų bus 3: kodavimui, pasirašymui, autentifikavimui.

Naudojant YubikeyNeo, subraktų dydį rinkitės 2048 bitų raktą. Nebent naujesnės versijos palaikytų ilgesnius raktus. Arba jei nenaudosite smartcard`ų, galite nustatyti paranojos lygį daugiau nei 2048.

Reikės įvesti kelis kartus slaptažodį. 3 bus nauji subraktams, sugalvokite ką nors sudėtingiau už „123“. Ir reiks atrakinti pagrindinį raktą slaptažodžiu, kurį sugalvojote pagrindinio rakto kūrimo metu. Nepamiršote dar? 🙂

gpg --expert --edit-key D485B760

gpg (GnuPG) 2.1.6; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: ultimate validity: ultimate
[ultimate] (1). Vardenis Pavardenis <pastas@servas.lt>

gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 4
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at Sat 15 Jul 2017 10:10:48 PM EEST
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: ultimate validity: ultimate
sub rsa2048/10F4B59D
created: 2015-07-16 expires: 2017-07-15 usage: S
[ultimate] (1). Vardenis Pavardenis <pastas@servas.lt>

gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) EaddCC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 6
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at Sat 15 Jul 2017 10:19:41 PM EEST
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: ultimate validity: ultimate
sub rsa1024/10F4B59D
created: 2015-07-16 expires: 2017-07-15 usage: S
sub rsa2048/A4F78DFB
created: 2015-07-16 expires: 2017-07-15 usage: E
[ultimate] (1). Vardenis Pavardenis <pastas@servas.lt>

gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
Your selection? 8

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Sign Encrypt

(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished

Your selection? s

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Encrypt

(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished

Your selection? e

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions:

(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished

Your selection? a

Possible actions for a RSA key: Sign Encrypt Authenticate
Current allowed actions: Authenticate

(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished

Your selection? qsave
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 2y
Key expires at Sat 15 Jul 2017 10:21:13 PM EEST
Is this correct? (y/N) y
Really create? (y/N) y
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: ultimate validity: ultimate
sub rsa2048/10F4B59D
created: 2015-07-16 expires: 2017-07-15 usage: S
sub rsa2048/A4F78DFB
created: 2015-07-16 expires: 2017-07-15 usage: E
sub rsa2048/6E470D14
created: 2015-07-16 expires: 2017-07-15 usage: A
[ultimate] (1). Vardenis Pavardenis <pastas@servas.lt>

gpg> save

Žiūrim ką turim:

gpg --list-keys
/home/vardenis/gnupghome/pubring.kbx
-----------------------------------
pub   rsa4096/D485B760 2015-07-14 [expires: 2017-07-13]
uid       [ultimate] Vardenis Pavardenis <pastas@servas.lt>
sub   rsa2048/10F4B59D 2015-07-16 [expires: 2017-07-15]
sub   rsa2048/A4F78DFB 2015-07-16 [expires: 2017-07-15]
sub   rsa2048/6E470D14 2015-07-16 [expires: 2017-07-15]

gpg --list-secret-keys
/home/vardenis/gnupghome/pubring.kbx
-----------------------------------
sec   rsa4096/D485B760 2015-07-14 [expires: 2017-07-13]
uid       [ultimate] Vardenis Pavardenis <pastas@servas.lt>
ssb   rsa2048/10F4B59D 2015-07-16 [expires: 2017-07-15]
ssb   rsa2048/A4F78DFB 2015-07-16 [expires: 2017-07-15]
ssb   rsa2048/6E470D14 2015-07-16 [expires: 2017-07-15]

sec ir ssb reiškia, kad pagrindinis ir subraktai yra pasiekiami.
Eksportuojam juos ir padarom dar vieną atsarginę kopiją:

gpg -a --export-secret-keys D485B760 > $GNUPGHOME/mastersubkeys.txt
gpg -a --export-secret-subkeys D485B760 > $GNUPGHOME/subkeys.txt
cp -a $GNUPGHOME $GNUPGHOME/backup/backup-mastersubkeys

Perkeliam public master key ir subkeys į darbinę online mašiną

Turintys Yubico Neo kortą (ar kitą smartcardą, palaikantį openpgp, toliau skaityti „Perkeliam raktus į NEO“.

cd $GNUPGHOME
gpg --armor --export pastas@servas.lt > publickey.txt

Perkelti reikia viešą raktą public_key.txt ir privačius subraktus – failas subkeys.txt. Iš offline mašinos galite perkelti naudodami USB raktą, jei dirbate virtualkėje, galima sumažinti paranojos lygį ir įjungti bendrus katalogus su host mašina, arba leisti virtualkei naudoti bendrą clipboard.

Visa kita lieka offline kompe, kuri įjungiama tik norint pasirašyti kitų žmonių raktus, koreguoti savo raktų info, ir pan.

Darbiniame online kompe galite taip pat galite nustatyti raktų saugojimo vietą įvykdę komandą export (žr. straipsnio pradžioje). Arch distribucijoje ji yra namų aplanko kataloge .gnupg. Pilnas kelias ~/.gnupg  Tačiau pakeitę raktų vietą į kitą, nepamirškite kiekvieną kartą perkrovus kompiuterį, nustatyti šią vietą iš naujo. Arba padarykite automatinį gpg raktų vietos nustatymą.

Online mašinoje importuojam public raktą ir subraktus:

Nukopijuojame du failus publickey.txt ir subkeys.txt į gpg katalogą (defaultinį ~/.gnupg ar jūsų nustatytą).

cd $GNUPGHOME
gpg --import publickey.txt
gpg --import subkeys.txt

Nustatome pilną pasitikėjimą raktu:

gpg --edit-key D485B760

gpg (GnuPG) 2.1.6; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: unknown validity: unknown
sub rsa2048/10F4B59D
created: 2015-07-16 expires: 2017-07-15 usage: S
sub rsa2048/A4F78DFB
created: 2015-07-16 expires: 2017-07-15 usage: E
sub rsa2048/6E470D14
created: 2015-07-16 expires: 2017-07-15 usage: A
[ unknown] (1). Vardenis Pavardenis <pastas@servas.lt>

gpg> trust
pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: unknown validity: unknown
sub rsa2048/10F4B59D
created: 2015-07-16 expires: 2017-07-15 usage: S
sub rsa2048/A4F78DFB
created: 2015-07-16 expires: 2017-07-15 usage: E
sub rsa2048/6E470D14
created: 2015-07-16 expires: 2017-07-15 usage: A
[ unknown] (1). Vardenis Pavardenis <pastas@servas.lt>

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu

Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

pub rsa4096/D485B760
created: 2015-07-14 expires: 2017-07-13 usage: SC
trust: ultimate validity: unknown
sub rsa1024/10F4B59D
created: 2015-07-16 expires: 2017-07-15 usage: S
sub rsa1024/A4F78DFB
created: 2015-07-16 expires: 2017-07-15 usage: E
sub rsa1024/6E470D14
created: 2015-07-16 expires: 2017-07-15 usage: A
[ unknown] (1). Vardenis Pavardenis <pastas@servas.lt>
Please note that the shown key validity is not necessarily correct
unless you restart the program.

gpg> quit

Pasiržiūrim slaptus raktus:

gpg --list-secret-keys
/home/vardenis/gnupghome/pubring.kbx
-----------------------------------
sec#  rsa4096/D485B760 2015-07-14 [expires: 2017-07-13]
uid       [ultimate] Vardenis Pavardenis <pastas@servas.lt>
ssb   rsa1024/10F4B59D 2015-07-16 [expires: 2017-07-15]
ssb   rsa1024/A4F78DFB 2015-07-16 [expires: 2017-07-15]
ssb   rsa1024/6E470D14 2015-07-16 [expires: 2017-07-15]

Prie pagrindinio rakto sec ženklas # reiškia, kad čia nėra pagrindio privataus rakto. Jis liko offline mašinoje. Reiktų saugiai laikyti offline mašiną, ar virtualkę apsaugoti įmetus į kokį truecrypt koduotą konteinerį, ar pasidaryti apsaugotą stipriu slaptažodžiu archyvą gnupghome ir visų backup`ų.

Perkeliam raktus į NEO

Pirmiausiai paruošiam offline kompą smartcardams. Debian atveju aprašyta originaliame straipsnyje, čia sutvarkysime arch`ą.

Arch wiki sako, kad reikia suinstalinti ir paleisti pcsclite ir libusb-compat, taip pat startuoti reikia pcscd.service:

pacman -S pcsclite libusb-compat pcsc-tools
systemctl enable pcscd.service
systemctl start pcscd.service

Po šito negalėjau pasiekti smart card kaip reguliarus useris, tad dar suinstalinau iš AUR šiuos:
yubikey-neo-manager-git (manau šito vieno pakaktų, jei ne, likusius instaliuoti reikia):

yubico-c , yubico-c-client, yubikey-personalization-git

Paruošiam YubikeyNeo:

Reikalinga įjungti OTP/CCID:

ykpersonalize -m82

Keičiam defaultinius user PIN 123456 ir admin PIN 12345678 į savo. Jei naujasis PIN netiks, bandykite ilgesnį – bent jau 6 skaitmenų.
ATSARGIAI su admin PIN – suvedus 3 kartus neteisingai, išmesit keliasdešimt dolerių! Kortelė užblokuota bus negrįžtamai. User pin suklydus galima atblokuoti žinant admino pin.

Changing the user and admin pin on the NEO
Use of the gpg key stored on the NEO requires you to enter a pin code (default is normally 123456). Getting the pin code wrong 3 times locks the user pin. The default admin pin is normally 12345678. Getting the admin pin code wrong 3 times will lock the card and cannot be reset. Make sure you remember these pin codes!

https://JusuURL/public.txt – jei įkėlėt į internetus savo public key, galite nurodyti tikslų URL. Arba vėliau pridėsite.

gpg --card-edit

Application ID ...: D2760001240102000060000000420000
Version ..........: 2.0
Manufacturer .....: unknown
Serial number ....: 00000042
Name of cardholder: [not set]
Language prefs ...: [not set]
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card> admin
Admin commands are allowed

gpg/card> passwd
gpg: OpenPGP card no. D2760001240102000060000000420000 detected

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 3
PIN changed.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 1
PIN changed.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? q

gpg/card> name
Cardholder's surname: Pavardenis
Cardholder's given name: Vardenis

gpg/card> lang
Language preferences: en

gpg/card> url
URL to retrieve public key: https://JusuURL/public.txt
gpg/card> sex
Sex ((M)ale, (F)emale or space): m

gpg/card> login
Login data (account name): varpav (login i ka nors useris)

gpg/card> 

Application ID ...: D2760001240102000060000000420000
Version ..........: 2.0
Manufacturer .....: unknown
Serial number ....: 00000042
Name of cardholder: Vardenis Pavardenis
Language prefs ...: sv
Sex ..............: male
URL of public key : https://JusuURL/public.txt
Login data .......: varpav
Signature PIN ....: forced
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

gpg/card> quit

Keliam raktus. Pvz panaudotas iš originalaus straipsnio, esmė ta pati:

gpg --edit-key D485B760
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26  usage: SC  
                     trust: ultimate      validity: ultimate
sub  2048R/72D5245B  created: 2014-06-18  expires: 2014-09-26  usage: S   
sub  2048R/A11F46D2  created: 2014-06-18  expires: 2014-09-26  usage: E   
sub  2048R/D6987A02  created: 2014-06-18  expires: 2014-09-26  usage: A   
[ultimate] (1). Simon Josefsson <simon@josefsson.org>
[ultimate] (2)  [jpeg image of size 6048]
[ultimate] (3)  Simon Josefsson <simon@yubico.com>

gpg> toggle

sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> key 1

sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb* 2048R/72D5245B  created: 2014-06-18  expires: never     
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> keytocard
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]

Please select where to store the key:
   (1) Signature key
   (3) Authentication key
Your selection? 1

You need a passphrase to unlock the secret key for
user: "Simon Josefsson <simon@josefsson.org>"
2048-bit RSA key, ID 72D5245B, created 2014-06-18


sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb* 2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> key 1

sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> key 2

sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb* 2048R/A11F46D2  created: 2014-06-18  expires: never     
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> keytocard
Signature key ....: EF34 D1F7 95C0 3392 E52A  54FE DFF1 6372 72D5 245B
Encryption key....: [none]
Authentication key: [none]

Please select where to store the key:
   (2) Encryption key
Your selection? 2

You need a passphrase to unlock the secret key for
user: "Simon Josefsson <simon@josefsson.org>"
2048-bit RSA key, ID A11F46D2, created 2014-06-18


sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb* 2048R/A11F46D2  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> key 2

sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> key 3

sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb* 2048R/D6987A02  created: 2014-06-18  expires: never     
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> keytocard
Signature key ....: EF34 D1F7 95C0 3392 E52A  54FE DFF1 6372 72D5 245B
Encryption key....: E24D 5135 C2FC 905C 8995  ACD8 EC96 9E77 A11F 46D2
Authentication key: [none]

Please select where to store the key:
   (3) Authentication key
Your selection? 3

You need a passphrase to unlock the secret key for
user: "Simon Josefsson <simon@josefsson.org>"
2048-bit RSA key, ID D6987A02, created 2014-06-18


sec  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb  2048R/72D5245B  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb  2048R/A11F46D2  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
ssb* 2048R/D6987A02  created: 2014-06-18  expires: never     
                     card-no: 0060 00000042
(1)  Simon Josefsson <simon@josefsson.org>
(2)  [jpeg image of size 6048]
(3)  Simon Josefsson <simon@yubico.com>

gpg> save

Pasižiūrėjus slaptus raktus, matome ssb> ženklą – tai slaptų raktų stub`s (galai?) yra smart card`e.

gpg --list-secret-keys
/home/vardenis/gnupghome/secring.gpg
--------------------------------------
sec   3744R/D485B760 2014-06-18 [expires: 2014-09-26]
uid                  Simon Josefsson <simon@josefsson.org>
uid                  [jpeg image of size 6048]
uid                  Simon Josefsson <simon@yubico.com>
ssb>  2048R/72D5245B 2014-06-18
ssb>  2048R/A11F46D2 2014-06-18
ssb>  2048R/D6987A02 2014-06-18

Dar vienas backup:

gpg -a --export-secret-keys D485B760 > $GNUPGHOME/masterstubs.txt
gpg -a --export-secret-subkeys D485B760 > $GNUPGHOME/subkeysstubs.txt
gpg -a --export D485B760 > $GNUPGHOME/publickey.txt
cp -a $GNUPGHOME $GNUPGHOME/backup/backup-masterstubs

Perkeliam USB raktu, tinklu, copy/paste principu ar kitaip publickey.txt į darbinę mašiną ir importuojam:

gpg --import < publickey.txt

Prijungiam Neo kortą ir sugeneruojam slaptų raktų stub`us.

gpg --card-status
[..]praleista daug output teksto

sec#  3744R/1C5C4717  created: 2014-06-18  expires: 2014-09-26
ssb>  2048R/72D5245B  created: 2014-06-18  expires: 2014-09-26
                      card-no: 0060 00000042
ssb>  2048R/A11F46D2  created: 2014-06-18  expires: 2014-09-26
                      card-no: 0060 00000042
ssb>

Ženklai # ir > reiškia, kad pagrindinio rakto nėra, o subraktai tėra „galai“ smartcarde.

Troubleshoot

gpg –send-key neišsiunčia raktų į serverius. Firewall gali blokuoti gpg portą 11371 TCP. Sprendimai: atverti TCP portą 11371.

Eksportuotus armored ASCII formatu raktus įkopijuoti tiesiogiai per www naršyklę langelyje „Submit a Key„.

Share on Google+Share on FacebookTweet about this on TwitterShare on Reddit

Parašykite komentarą

Popo.lt tinklaraščiai. Hosting powered by   serverių hostingas - Hostex
Eiti prie įrankių juostos