<pre> http://www.guckes.net/ubucon2014/vortrag.mutt+gpg.txt http://www.guckes.net/ubucon2014/vortrag.mutt+gpg.txt.html (bunt) Latest change: Mi Okt 15 20:23:42 CEST 2014 (text will be translated to english for T-DOSE when this workshop has been given at UbuCon and has received some feedback. thank you for your patience! :) = EVENT = 2014-10-17/19 Fri-Sun Ubuntu Conference 2014 in Katlenburg-Lindau an der Burgbergschule http://ubucon.de/ - cfp: http://ubucon.de/2014/cf = ANGEBOT = ein vortrag und workshop zu mutt+gpg (sowie ein bischen screen+vim+zsh) = AUTOR = Sven Guckes mailto:ubucon2014@guckes.net crypto: 1024R/57F77F09 8000R/0185391B old key: .________________________________________________________________________. |pub 1024R/57F77F09 1995-01-30 | | Key fingerprint = 11 28 37 E2 CB 46 72 67 9E 8E 22 18 DA F9 C0 96| |uid Sven Guckes <pgp@guckes.net> | |uid Sven Guckes | `------------------------------------------------------------------------' new key: .__________________________________________________________________________. |pub 8000R/0185391B 2014-03-11 | | Key fingerprint = 32CE 5648 6E6D 6D6D 33E5 3A38 EAB9 7F20 0185 391B| |uid Sven Guckes <keysigningparty@guckes.net> | `--------------------------------------------------------------------------' = PROGRAMM = so steht's im Programm: http://ubucon.de/2014/programm Titel: Emails mit mutt+gpg (Vortrag) Referent: Sven Guckes Typ: Vortrag Dauer: 1h Zielgruppe: alle Praeferenz: Samstag mittag Titel: Emails mit mutt+gpg (Workshop) Referent: Sven Guckes Typ: Workshop Dauer: 2h (3h) Zielgruppe: Fortgeschrittene Praeferenz: Samstag nachmittag oder Sonntag = VORTRAG = dauer: 30-40min Inhalt: Dies ist ein Feature Show fuer mutt+gpg, dh ich zeige die Eigenschaften des Mailers "mutt" *live* in meinem account. Ziel: Wie sehen mails in diesem Mailer aus? "wie fuehlt sich dieser mailer an?" Plazierung: der vortrag sollte am *ersten* tag sein (Samstag) und der workshop danach - entweder ebenfalls am Samstag (mit einer Stunde Zwischenraum) - oder am Sonntag. = START = Bitte das Textpad benutzen zum Sammeln der Fragen! https://events.titanpad.com/30 = Intro = Hinweis: 2014-10-18 Sa 10:00-11:00 Hardy Olaf Bialas: Verschlüsselung und Signatur von E-Mails 2014-10-19 So 13:00-14:00 Hardy Olaf Bialas: Die eigene Cloud mit ownCloud 2014-10-19 So 14:00-15:00 Hardy Olaf Bialas: ownCloud-Server von/mit Client-Geräten nutzen Im Vortrag von Olaf Bialas über Verschlüsselung wurde schon die *asymmetrische* Verschlüsselung erklärt, dh die Zuhörer sollten wissen, daß man mithilfe des geheimen Schlüssels (secure key, *seckey*) signiert bzw ENTschlüsselt, und mithilfe der öffentlichen Schlüssels (public key, *pubkey*) die Daten (Dateien, Emails) VERschlüsselt. kurz: pubkey: zum VERschlüsseln ("Schloss") seckey: zum ENTschlüsseln ("Schlüssel") = Mailbox = Emails in der INBOX anzeigen (per "limit" Kommando): ~g - limitiert auf alle signierten mails ~G - limitiert auf alle verschlüsselten mails ~k - limitiert auf alle mails mit schlüssel 10532 s+ 10591 NsT 10821 Ns! 10901 NsX *der* Indikator: S -> mit guter Signatur P -> PGP verschlüsselt s -> signiert K -> Key ist angehängt Es gibt nur ein zeichen dafür; die letzte Eigenschaft gewinnt. see also: file "hdrline.c" "case 'Z':" == INLINE vs PGP/MIME == Die INLINE Nachrichten haben *keine* Indikation im header und sind daher über das "limit" nicht erkennbar -- bis man in jede Nachricht einzeln hineinschaut. Und das kann bei großen Mailfoldern dauern.. Darum: PGP/MIME verwenden -> Indikation im header! = Schlüssel = * Wie sieht ein Schlüssel aus? $ gpg -a --export $MYKEY | less -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 [leer] ....... cNSPb3soTU8Jkub6LCKMoK5u9bmcwNgVOw== =s91U -----END PGP PUBLIC KEY BLOCK----- = Nachricht = * Wie sieht eine verschlüsselte Email eigentlich aus? -> edit_message -> header, body, codierung. * Header: Content-Type: multipart/encrypted; protocol="application/pgp-encrypted"; boundary="123456789012345678901234567890123" * Body: This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156) --123456789012345678901234567890123 Content-Type: application/pgp-encrypted Content-Description: PGP/MIME version identification | Version: 1 | --123456789012345678901234567890123 Content-Type: application/octet-stream; name="encrypted.asc" Content-Description: OpenPGP encrypted message Content-Disposition: inline; filename="encrypted.asc" | -----BEGIN PGP MESSAGE----- Version: GnuPG/MacGPG2 v2.0.22 (Darwin) Comment: GPGTools - https://gpgtools.org | qgNKnAr7dI9k =8pez -----END PGP MESSAGE----- | --123456789012345678901234567890123-- * Ansicht in mutts "pager": (Ungefilterte Ansicht mit ":unset display_filter") * Anzeige einer "good signature": "PGP message successfully decrypted." [-- PGP output follows (current time: So 31 Aug 2014 02:22:22 CEST) --] gpg: Signature made Fri Aug 31 01:11:11 2014 CEST using RSA key ID DEADBEEF gpg: Good signature from "FIRSTNAME LASTNAME (some comment) <user1@domain1>" gpg: aka "FIRSTNAME LASTNAME (some comment) <user2@domain2>" [-- End of PGP output --] [-- The following data is PGP/MIME encrypted --] ... [-- Attachment #1 --] [-- Type: text/plain, Encoding: quoted-printable, Size: 1.2K --] ... [-- End of PGP/MIME encrypted data --] = Versenden = Beispiele zum Versenden: PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (c)lear? * Signieren einer Nachricht. * Verschlüsseln einer Nachricht. * Signieren und Verschlüsseln ("both") * Schlüssel anhaengen ("mail-key" - <Esc>k). Terminologie: * Daten - sind verpackt in Dateien oder sind Nachrichten in Emails. * pubkey vs seckey: pubkey = Schloss zum ABschliessen seckey = Schlüssel zum AUFschliessen * Digitale Signaturen: seckey = wird benutzt zum Unterschreiben pubkey = zur Verifikation der Signaturen Bemerkungen: * Schlüsselerzeugung ist notwendig. wer keinen schlüssel anbietet, kann nicht mitspielen. * kein schlüssel -> keine vertraulichkeit. andere können keine vertrauliche nachricht versenden. * Sollte man nur die wirklich wichtigen Nachrichten verschlüsseln? NEIN! * "und wenn die anderen nicht mitspielen wollen?" - dann lasst sie postkarten verschicken! * "bringt doch eh nix. ist doch eh egal." ist es nicht. Zeitvorteil! * von wem kommt diese nachricht? * "wer erst verschlüsselt, wenn er definitiv *weiss*, dass er es braucht, der hat bereits verloren." ;-) Weitere Themen: * Keyserver = Telephonverzeichnis * Angriffe eines man-in-the-middle (MITM) * Key Signing Party: Mensch<->Schlüssel * Web of Trust (WoT) - reiner *Graph*, kein Vertrauen * Cryptoparties - let's talk about Crypto! Zukunft: * Betriebssysteme nur noch *mit* Crypto ausliefern * Verschlüsselung ist kein Verbrechen. * Für diese Freiheit muß man kämpfen! * Hinweis auf den Workshop (14-17h) Weitere Vorschlaege sind sehr willkommen! mailto:ubucon2014@guckes.net note bene: die tasten, die ich druecke, erklaere ich hier NICHT. die tasten stehen sowieso in der kontexthilfe bzw in der dokumentation. und natuerlich laesst sich das einstellen, wie man moechte. "gute programme sind an den benutzer anpassbar." letztendlich lassen sich diese Fragen auch noch im Workshop klaeren. = WORKSHOP = Dauer: eine bis drei Stunden. (Hier auch mit Erklaerung aller Tasten, Dateinamen.. usw). Zielgruppe: "Fortgeschrittene", dh die Teilnehmer sollte einen (irgendeinen) Texteditor beherrschen, sowie einige Unix Befehle auf der Shell (cd, mv, rm, ls, etc). Die Kenntnis des Prinzips des "piping" ist definitiv von Vorteil, zB: $ echo eine schnelle email | mail -s "email schnell" user@domain Inhalt: Vorbereitung: Bitte schon moeglichst zuhause die programme mutt und gpg, sowie einen Editor und eine Shell installieren. Empfohlene Editoren: elvis,nvi,vim; jed,jove,emacs; nano Empfohlene Shells: bash, ksh, tcsh, zsh Beispiel: $ sudo apt-get install gpg mutt nano vim zsh Server: Accounts auf dem Server einrichten. Per ssh auf dem Server einloggen. Vor Ort: Möglichst nach vorne setzen, den Laptop auspacken, erst mit Strom, dann mit dem lokalen Netz verbinden. Eventuell einen window manager (screen,tmux) starten. gpg: anfang: * Generation eines Schlüsselpaars: $ gpg --gen-key * Anzeige des Schlüssels mit Fingerprint $ gpg --list-key $keyID * Visitenkarte mit keyID und Fingerprint (Beispiele) TODO Anzeige/Display: * Schlüssel - ja, wo sind sie denn? $ ls -lh ~/.gnupg/*ring.gpg -rw------- 1 guckes guckes 46M Aug 27 02:19 .gnupg/pubring.gpg -rw------- 1 guckes guckes 11K Mär 12 10:43 .gnupg/secring.gpg * Anzeige meines eigenen Schlüssels: $ gpg --list-key $MYKEY pub 1024R/57F77F09 1995-01-30 uid Sven Guckes <pgp@guckes.net> uid Sven Guckes * Anzeige meines eigenen Schlüssels mit Fingerprint: $ gpg --fingerprint $MYKEY pub 1024R/57F77F09 1995-01-30 . Key fingerprint = 11 28 37 E2 CB 46 72 67 9E 8E 22 18 DA F9 C0 96 uid Sven Guckes <pgp@guckes.net> uid Sven Guckes * Wie sieht ein Schlüssel aus? $ gpg -a --export $MYKEY | less -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 [leer] ....... cNSPb3soTU8Jkub6LCKMoK5u9bmcwNgVOw== =s91U -----END PGP PUBLIC KEY BLOCK----- * Anzeige eines Schlüssels mit Fingerprint: $ gpg --fingerprint $keyID * Signieren anderer schlüssel $ gpg --sign-key $keyID * (mehrere) schlüssel auf einen keyserver hochladen $ gpg --send-keys $keyID1 $keyID2 ... Demo [optional]: Schlüssel vom keyserver herunterladen+verifizieren Text schreiben, dann verschlüsseln und versenden. Empfangene Nachricht entschlüsseln. Signatur pruefen. = Konfiguration von GnuPG = * Konfigurationsdatei: $ ls -lh ~/.gnupg/options # old $ ls -lh ~/.gnupg/gpg.conf # new ("default" = "voreingestellt") * Einstellen des default Keyservers: keyserver hkp://keys.gnupg.net * Einstellen des default Schlüssels: default-key 0185391B * Jede Verschlüsselung auch mit dem eigenen Schlüssel durchführen: default-recipient-self * Lästige Nachrichten abstellen: no-auto-check-trustdb no-greeting no-secmem-warning = Konfiguration von mutt = * Konfigurationsdatei: $ ls -l ~/.muttrc # default $ ls -ld ~/.mutt # useful * voreingestellte kommandos verwenden: source gpg.rc Nachricht versenden: * Nachricht signieren * Nachricht verschlüsseln * Nachricht signieren+verschlüsseln * Nachricht als inline vs PGP/MIME Nachrichten anzeigen: * Nachricht vor dem Lesen verifizieren (":set pgp_verify_sig") * Farbe zu Standardtext hinzufuegen ("color body..") * Einsatz eines display_filter: text korrigieren+loeschen * inline data -> Kommando "check-traditional-pgp" (<ESC>P) = Kür = gpg: * verwendung von photos in schlüsseln (photo-viewer) mutt. * verhalten bei verschiedenen tests Szenarien -> http://www.guckes.net/email_crypto_interfaces.txt vim: * Datei mit Signaturen erstellen (sigdashes als trenner) * Finde alle Signaturen nach Stichwort (agrep) * Signature in vim auswaehlen (copy, undo, paste) zsh: * nuetzliche aliase und funktionen gs='gpg --search-keys' gpgh='gpg --help|$PAGER' glist='gpg --list-keys --with-fingerprint' grecv='gpg --recv-keys' gsend='gpg --send-keys' gsign='gpg --sign-key' gsigs='gpg --list-sigs' = MATERIAL = Wenn es ein schnelles und ungefiltertes Internet mit freier Verwendung gibt, dann braucht jeder Teilnehmer nur eine kiste mit nem mosh bzw ssh - und der rest der software liegt dann halt auf dem server. Gibt es vielleicht einen Server mit Ubuntu, der für Konferenzen zu benutzen waere? = TODO = troubleshooting: gpg: WARNING: message was not integrity protected = Links = Wikipedia: * http://de.wikipedia.org/wiki/PGP/MIME * http://de.wikipedia.org/wiki/S/MIME * http://de.wikipedia.org/wiki/PGP/INLINE * http://de.wikipedia.org/wiki/OpenPGP * http://de.wikipedia.org/wiki/GNU_Privacy_Guard * http://de.wikipedia.org/wiki/Pretty_Good_Privacy Wikis: * http://wiki.debianforum.de/GnuPG Docs: * https://www.gnupg.org/documentation/howtos.html Articles: * http://codesorcery.net/old/mutt/mutt-gnupg-howto * http://dev.mutt.org/trac/wiki/MuttGuide/UseGPG * http://jasonwryan.com/blog/2013/07/20/gnupg/ * http://www.infodrom.org/~joey/Writing/freeX/mutt-gpg/ * http://www.kubieziel.de/computer/gpg-mutt.html * http://www.spocom.com/users/gjohnson/mutt/ * http://www.guckes.net/agrep/ * http://www.guckes.net/sig/ = To Add = == Adding Keys from webpage == adding a key from a webpage to your keyring: $ wget -O - $URL | gpg --import example: URL=http://samthetechie.com/files/key.asc receiving test data from a mailing list: $ wget ftp://lists.gnu.org/coreutils/2014-09 $ mutt -f 2014-09 adding missing keys from a list of signatures: $ gpg --list-sigs $key | grep not.found | grep -o '[0-9A-F]\{8\}' | gpg --recv-keys example1: key=felix(at)fefe.de example2: key=57E37087 (should add this as a function to my zsh setup. it#s just missing a good name ;) == Toggle INLINE and PGP/MIME == the Encrypt+Sign Interface: Security: Sign, Encrypt (PGP/MIME) PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline format, or (c)lear? the 'i' toggles this to: Security: Sign, Encrypt (inline PGP) PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, PGP/M(i)ME format, or (c)lear? use 'a' ["sign (a)s"] to choose one of your private keys for signing: [__input] Sign as: 0185391b [display] sign as: 0x0185391B enter your pgp passphrase to unlock your secret key: Enter PGP passphrase: mind you - no echoing of any characters. someone looking over your should never be able to see how fast or how many keys you type. every one of these observations can be an attack to guess your passphrase! use a screen filter to make it hard to look at your screen. ask people to back off when you enter a passphrase. == Piping == importing an attached key by piping the message to gpg: |gpg --import RET a response would look like this: gpg: key 0185391B: "Sven Guckes <keysigningparty@guckes.net>" 1 new signature gpg: Total number processed: 1 gpg: new signatures: 1 Press any key to continue... == Key Stats == http://pgp.cs.uu.nl/stats/57F77F09.html http://pgp.cs.uu.nl/stats/0185391B.html == Checking Signature == $ gpg --verify mutt-1.5.23.tar.gz.asc mutt-1.5.23.tar.gz gpg: Signature made Wed Mar 12 17:28:18 2014 CET using RSA key ID 3DBDDC68 gpg: Good signature from "Brendan Cully <brendan@cs.ubc.ca>" gpg: aka "Brendan Cully <brendan@kublai.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. . Primary key fingerprint: 1768 3D40 3386 05D1 F663 34C7 2228 2C8A 3585 3032 . Subkey fingerprint: 0A15 8D86 E823 3240 916B FC50 51E4 D24F 3DBD DC68 </pre> <!-- vim: set ft=sven: EOF -->