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                        |
|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              |
`--------------------------------------------------------------------------'


= 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) "
  gpg:                 aka "FIRSTNAME LASTNAME (some comment) "
  [-- 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" - 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 
  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 
  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" (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 " 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 "
  gpg:                 aka "Brendan Cully "
  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

= TODO =

SMIME signatures...