Zdar,

k tomuto prispevku ma viedlo to, ze par clenov brmlabu pouziva GnuPG
(typicky s enigmailom) a ze ked zmenim pocitac, tak mam problem najst
verejne kluce, pokial si ich nevyexportujem z keyringu na nejakom inom
kompe.

1. Majte kluc najditelny, idealne vygooglitelny podla mailu a potom
podla fingerprintu

2. Na to sa hodi mat kluc publikovany napr. na user stranke brmlab wiki,
vlastnu VPS, alebo keybase.io. Kluc sa da publikovat na PGP keyserver
cez 'gpg --send-keys', potom to umoznuje ludom kluc importovat cez 'gpg
--recv-keys'. Mat fingerprint na separatnej stranke umoznuje mat iny
kanal, jak overit fingerprint.

Velmi dobry napad je mat na tej stranke https, takze to nikto nemoze
jednoducho vymenit. V pripade vlastnej VPS/vlastnej domeny je dobre, ked
si clovek moze overit cez whois, komu to patri.

Web-of-trust je failed concept, nefunguje to v praxi.

PGP keyservers (tych asi 6 hlavnych) si medzi sebou synchronizuju kluce,
takze prakticky by malo byt jedno, z ktoreho tahate tie kluce (inak je
na to parameter --keyserver).

Keybase.io umoznuje cloveku pouzit niekolko kanalov na publikaciu kluca
(github, twitter, vlastny web, atd.)

V skutocnosti jeden z najtazsich problemov public key encryption je
distribuovanie tych klucov spolahlivo.

3. Bez tych postupov vyssie to nuti ludi random akceptovat kluce (lebo
ich nevedia "aspon +/- spolahlivo najst"), ktore niekde najdu a bolo uz
par pripadov, ze pre "vysoko profilovych ludi" (napr. developerov Tor
Project) niekto zverejnil svoje fake kluce. Dolezite je pri hladani
pouzit a/alebo skontrolovat fingerprint, pretoze to kratke 32-bitove ID
ide bruteforcovat. Sice to chvilu trva, a pre bezneho clena brmlabu by
sa na to nikto neobtazoval, ale ide to.

4. Ked uz sifrujete, podpisujte. Pointa je, ze ziskat public key a
zasifrovat nan dokaze kazdy. Preto vsetky dnes moderne schemy su tzv.
AEAD (=authenticated encryption)

PGP/GnuPG je spravene tak, ze dokym sa sprava nerozsifruje prijemcom,
tak sa neda zistit, kto ju podpisal. Viz nizsie o formatovani PGP sprav.

5. Niektore tieto vlastnosti mozem demonstrovat na ukazani, jak su
formovane PGP spravy (RFC 4880). Napr viz v prilohe dump sifrovanej
spravy, ktora bola podpisana, ale kvoli sifrovaniu neni videt jej podpis.

Da sa na to pouzit 'gpg --list-packets' alebo 'pgpdump -ilmp
message.asc' (pgpdump je separatna utilita, nie priamo sucastou GnuPG).

Keby bol zaujem, mozem o tom spravit talk, jak to interne je implementovane.

5a. GnuPG by default nechava vidiet, na ktore kluce bola sprava
sifrovana. Da sa to vypnut cez '--hidden-recipient' (vsetky tieto veci
sa daju by default zapnut v configu ~/.gnupg/gpg.conf). Pokial ID kluca
prijemcu neni urcene, GPG vyskusa vsetky private keys.

Na druhej strane ma tento option dost obmedzene prakticke pouzitie,
pretoze ten, kto vam sleduje emaily, vidi odosielatela a prijemcu.

6. Nepouzivajte outdated schemy ako DSA a El-Gamal. Minimalna dlzka RSA
kluca 2048 bit.

7. Co sa tyka tej poslednej zranitelnosti "E-fail" (efail.de), tak trik
spociva v tom, ze je to "decrypting oracle". Niekto vam posle vas
zasifrovany email a mail klienti nemaju dostatocne dobre filtrovanie na
remote contect - tj. napr Thunderbird a dalsie sice filtruju remote
images, ale ked pouzijete nejke zverstva s CSS, tak tam utocnik namiesa
tu spravu tak, ze tam da link napr. ako CSS backgroud
"https://attackes.picus/bullshit/"; + zasifrovanu spravu a email klient
na to spravi request. Klient spravu rozsifruje a posle request, ked cast
URL je ta desifrovana sprava.

Nevedel som zatial na 100% zistit, ci nejak staci vypnut renderovanie
html mailov, zatial sa to riesi. Problem je v tom, ze ti ludia
nezverejnuju PoC, takze sa blbo testuje, co vlastne problem je a co ne.

7a. Na ten "decrypting oracle vulnerability" zda sa je potreba aspon v
niektorych pripadoch, aby sprava mala chybu v overovani integrity (sa to
vola MDC), ktory je ale zapnuty be default, takze triggernutie tej chyby
neni zas tak jednoduche.


OM
OM
Old: Public-Key Encrypted Session Key Packet(tag 1)(526 bytes)
        New version(3)
        Key ID - 0x1111111111111111
        Pub alg - ElGamal Encrypt-Only(pub 16)
        ElGamal g^k mod p(2047 bits) - 5a 17 72 63 fd a0 6e 5b 75 77 02 f8 7e 
e7 6d 8c 83 b9 41 6f 2c 55 05 2c b5 a7 93 4b 09 39 ff 6f 4b 62 b7 c6 30 d7 32 
0b 02 fb 88 3b 9a 50 b2 f7 8f f2 b0 a3 02 f5 f5 ad 28 1e 59 b4 a5 10 5b bc 09 
fc d1 f3 8b f3 49 33 9d 50 30 30 f8 d2 13 d0 53 c9 34 5f b4 c8 a2 47 0a c7 fb 
b4 37 19 d6 f3 9a 49 f2 de 29 4b 59 54 29 12 ec 66 56 ea d0 34 ff 57 40 01 e1 
62 6f 1a 45 3e 3f 39 c7 45 0c 50 b5 b9 55 fb c0 30 0e c4 a7 ca 4a ad d5 13 ed 
a1 af 9d fa 93 bf cd 14 08 c1 e9 5a 3b ce 91 cf 6a a7 c6 a0 e5 de df b6 10 67 
95 aa 57 41 c3 fc ad 0e d5 46 cc 38 70 50 5d 7a 59 6d 24 0c 73 38 c9 87 46 28 
bb 4b a8 81 74 ab fd 2a ce d8 e0 5e 61 e1 2f 7b 45 66 73 01 04 56 c4 5e 2b 3d 
8a be 99 61 60 04 9a f1 a5 a2 65 a7 e4 6c ed 05 26 21 5c a5 65 69 a5 e4 3c d3 
52 52 06 32 5e 6e 61 a0 ff 
        ElGamal m * y^k mod p(2045 bits) - 19 08 03 99 58 c3 97 4b 87 35 33 41 
0c 32 95 6b 1f 67 ba 0b 96 3f 1b f6 10 af c9 ca c1 3f 56 b7 15 a2 f5 c5 37 36 
0c d1 d0 e2 87 39 4a d7 21 03 d7 44 ee 69 c2 e4 97 54 30 23 5d 9e b2 00 85 08 
f2 43 8a 7d c7 bd 3e a3 6b f7 05 18 09 f9 9e e8 80 6d 41 b1 75 51 75 f6 8f bb 
6d f6 b6 17 dc 09 bb 68 63 2a 84 5e 4c 19 28 38 3e 60 fe 26 ac f6 eb c8 90 e6 
f6 f8 91 f8 e2 14 00 49 52 97 c9 70 05 89 ed 6f f4 da 9e a5 13 3b 5d bc 89 67 
b9 4f cf 74 94 cb 58 8c 2a 47 c3 18 b2 2a 2b cb 5a 88 79 8b 7d ad 7e 57 75 97 
bf 81 f5 68 cc bf 2d a0 7d f5 92 90 a9 c8 ae e1 da 2b 48 c4 5c e0 62 9e 4f 9e 
25 eb b0 49 07 6d ef 45 08 bf d8 b3 63 57 1d 3b 6c 27 d4 0a 02 a2 31 09 13 c4 
58 be 50 c6 95 d7 2e b9 75 a8 07 43 66 76 b5 2e 07 4a cb 4f 74 f3 c9 47 b2 23 
4f 3b c5 bf 5a 4d 0a d5 fe 7f 
                -> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 
02
Old: Public-Key Encrypted Session Key Packet(tag 1)(268 bytes)
        New version(3)
        Key ID - 0x1111111111111111
        Pub alg - RSA Encrypt or Sign(pub 1)
        RSA m^e mod n(2046 bits) - 21 32 00 02 41 c6 58 d7 df 42 70 17 e1 f8 0f 
29 e0 89 ad 95 b0 6d c2 cb 49 b6 d7 de fc b2 5a 05 cd 97 7b 27 85 f9 53 3f 3f 
4d 63 68 82 d8 4b a4 0c 64 92 be 47 97 46 3f ae 21 75 15 da c0 40 2b 35 1a 7a 
69 4f 2d 1c fa 19 9c 2b d7 1d d8 3a 05 ec e6 26 ab 67 93 db 98 c2 1d b0 85 be 
37 b0 06 73 e6 09 f8 62 8d 9c 85 e8 47 16 04 bc 7e 80 3c 08 7b f6 2a c5 3d 34 
84 8f 98 4a 78 dc f7 0b 4e 76 12 a8 e7 59 57 b0 ad 1f e6 c1 bf 96 ca 51 65 27 
71 cb 2b fd 8a 77 70 48 d8 77 58 dd f6 4d 16 7c 27 0d 3b 22 e8 fb 24 e5 7f 86 
b6 0d ec 12 ca 71 83 ac 1f c8 06 4c 56 ba 0d d5 01 68 83 cc 7a 39 17 55 b2 0e 
46 8c 89 dc 51 b2 35 cf 06 96 88 3f 00 4e 80 8d 41 24 91 9c c7 6d b8 2c 3e 53 
4b 7f 7d af 9e 6f 67 b2 5c 90 d0 85 6a e6 81 0b 87 8a 7b 6c 22 f2 06 15 3a fd 
0c e3 9d 83 a7 38 cc 
                -> m = sym alg(1 byte) + checksum(2 bytes) + PKCS-1 block type 
02
New: Symmetrically Encrypted and MDC Packet(tag 18)(1024 bytes) partial start
        Ver 1
        Encrypted data [sym alg is specified in pub-key encrypted session key]
                (plain text + MDC SHA1(20 bytes))
New:    (512 bytes) partial continue
New:    (390 bytes) partial end

_______________________________________________
Brmlab mailing list
[email protected]
https://brmlab.cz/cgi-bin/mailman/listinfo/brmlab

Odpovedet emailem