jenkins: include local bin directory in PATH
[gnupg-doc.git] / misc / blog.gnupg.org / 20160922-gnupg-this-summer.org
1 # GnuPG this Past Summer
2 #+STARTUP: showall
3 #+AUTHOR: Neal
4 #+DATE: September 22, 2016
5
6 ** GnuPG this Past Summer
7
8 *** Development
9
10 As usual, Werner has made a cornucopia of contributions.  He improved
11 ~--quick-addkey~ and ~--quick-gen-key~, he changed ~gpg-agent~ and
12 ~dirmngr~ to exit if their sockets disappear, he added an assuan
13 logging monitor, he implemented new export and import filters, he did
14 some work on ~g13~, he added ~/run/user/UID/gnupg~ sockets, he
15 introduced an option (~--recipient-file~) to work directly with keys
16 stored in a file, and he made a number of improvements to GPGME
17 including adding TOFU support.
18
19 The filtering changes allow controlling what packets are imported or
20 exported.  For instance, if you want to only keep a single user id
21 when exporting a key, you could use:
22
23 #+BEGIN_SRC
24   gpg --no-options --import-options import-export       \
25       --import-filter keep-uid='mbox = joe at example.org' \
26       --import  < full-key.pub > key-with-one-uid.pub
27 #+END_SRC
28
29 More information about this feature is available in his [[https://lists.gnupg.org/pipermail/gnupg-devel/2016-July/031294.html][note]] to the
30 GnuPG mailing list or ~gpg~'s documentation.
31
32 The ~--recipient-file~ option is an oft-requested feature, which
33 allows [[https://lists.gnupg.org/pipermail/gnupg-devel/2016-July/031308.html][working with keys without importing them]].
34
35 Werner also fixed a critical bug in the way the mixer in the random
36 number generator stirred the pool.  Specifically, the bug allowed an
37 attacker who obtains 580 bytes from the standard random number
38 generator (RNG) to trivially predict the next 20 bytes of output.
39 Fortuitously, [[https://lists.gnupg.org/pipermail/gnupg-devel/2016-August/031507.html][this bug does not affect the default generation of keys]]
40 ([[https://lists.gnupg.org/pipermail/gnupg-devel/2016-August/031516.html][more details]]).
41
42 Justus continued to improve our new test suite for GnuPG.  The
43 improvements included not only fixes to the new scheme-based driver,
44 but also a bunch of new tests.  A couple of the changes included [[https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=history;f=tests/gpgscm/scheme.c;h=5a85063eeb3aef98bde640bca11d84173ebb6a51;hb=HEAD][bug
45 fixes to TinySCHEME]].  Unfortunately, the upstream developers don't
46 appear to be interested in the fixes.
47
48 Most of Justus' time recently has been focused not on the test suite,
49 but on improving the Python bindings for GPGME.  This work was started
50 by Ben McGinnes, who contributed an initial port of the [[https://bitbucket.org/malb/pyme][PyME bindings]]
51 to Python 3.  Justus finished this port, restored Python 2
52 compatibility, and added more pythonic interfaces (e.g., making
53 everything work with objects implementing the buffer protocol like
54 byte strings).  The low-level interface has, however, been retained
55 and existing applications should continue to work (if not, this is a
56 bug, please [[https://bugs.gnupg.org][file a bug report]]).  He also ported the GPGME test suite
57 to the Python bindings.  This uncovered a number of latent bugs in the
58 bindings, which he fixed.  From our perspective, these are now the
59 official Python bindings for GPGME: we've added them to the GPGME
60 repository, and we will continue to maintain them in the foreseeable
61 future.  Nevertheless, to be more compatible with Python developers'
62 work flow, we are also packaging ~pyme3~ for [[https://pypi.python.org/pypi/pyme3][~pypi~]], which means that
63 the bindings can be installed using ~pip install pyme3~.  More
64 information is available in Justus' [[https://www.gnupg.org/blog/20160921-python-bindings-for-gpgme.html][blog post]].
65
66 Justus also set up a Jenkins host for continuous integration.  In
67 addition to running ~make check~ for each commit under several
68 configurations, it also runs the checks with various sanitizers
69 enabled.  This has already prevented a number of minor bugs from
70 making it into releases.
71
72 Andre has made a number of end-user facing contributions.  The most
73 notable is for users of Kleopatra, which now has new dialogs for File
74 Encryption and Decryption / Verification.  These greatly reduce the
75 number of required interactions to perform these operations.  He also
76 worked on the new file type registration on Windows so that decrypting
77 a file only requires a double click.  Additionally, he has continued
78 his work on the [[GnuPG%20plugin%20for%20Outlook][GnuPG plugin for Outlook]], which should be released
79 with gpg3win-3 this fall.  The code is already in good form, and
80 testers are encouraged to check it out together with the new Kleopatra
81 (see [[https://wiki.gnupg.org/Gpg4win/Testversions][Test version of Gpg4win-3]].)  Andre has also been working on
82 improving KMail's ~gpg~ support.  One of the focuses of this work has
83 been adding TOFU support to the libraries used by KMail.  Andre also
84 merged the C++ and Qt bindings for GPGME from KDE into the official
85 GPGME repository.  This included a port of the C++ API to pure
86 standard C++ without boost, and the removal of some KDE-Framework use
87 in the Qt bindings so that the bindings now only require Qt 5 base.
88 This should make working with ~gpg~ in a Qt application even more
89 convenient.  In particular, executing operations asynchronously is
90 very easy.  Finally, Andre fixed some CRL-related bugs in ~dirmngr~.
91
92 Kai's recent work has focused on porting [[https://www.mailpile.is/][Mailpile]] [[https://github.com/mailpile/Mailpile/pull/1621][to use GPGME]] rather
93 than its own wrapper, which only works with GnuPG 1.4.  Unfortunately,
94 many projects decide to take a similar approach to Mailpile, and write
95 their own code to interact with ~gpg~.  As a reminder, we strongly
96 encourage all developers to not directly interact with ~gpg~, but to
97 use [[https://www.gnupg.org/documentation/manuals/gpgme/][GPGME]], which is not only more complete, but also has seen a lot of
98 testing.  We realize that GPGME's interface's are not always ideal,
99 however, we are open to suggestions for improvements, and feature
100 requests.  Similarly, if you don't understand how to do what you want
101 using GPGME, we encourage you to ask for help on the [[https://lists.gnupg.org/mailman/listinfo/gnupg-devel][gnupg-devel
102 mailing list]].
103
104 Jussi Kivilinna has continued his work optimizing libgcrypt.  In the
105 recent past, most of his effort was spent on implementing assembly
106 versions of various cryptographic functions for the ARMv8/AArch32
107 architecture.
108
109 Niibe worked on mitigating the recently published [[https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/razavi][Flip Feng Shui]]
110 exploit.  Flip Feng Shui uses a cross-VM, row hammer-based exploit to
111 change the ~trusted.gpg~ file, which is used by Debian's package
112 manager apt to verify downloads, and apt's ~sources.list~ file, which
113 determines where packages are downloaded from, in a controlled manner.
114 This allows attackers to replace packages that are installed with
115 their own versions.  The [[https://git.gnupg.org/cgi-bin/gitweb.cgi?p%3Dgnupg.git%3Ba%3Dcommit%3Bh%3De32c575e0f3704e7563048eea6d26844bdfc494b][fix]] is to make sure that ~gpgv~ always checks
116 that self-signatures are valid.
117
118 Niibe also spent time improving GnuPG's smartcard support.  This has
119 primarily consisted of many small, but important improvements
120 including smartcard support for ECC keys and various bug fixes.
121 Further, Niibe investigated adding signature verification for ssh keys
122 stored in the authorized_keys file.  This would allow detecting
123 corrupted keys, which could happen via a Flip Feng Shui-type attack.
124 Although there is some support for [[http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?annotate%253DHEAD%5D%5Bas][signature verification in ssh]],
125 Niibe discovered that this particular mode of operation is not yet
126 supported by ssh-agent.
127
128 Finally, Niibe has released [[https://www.fsij.org/gnuk/version1_2_1.html][a new version of GnuK (1.2.1)]].  GnuK is a
129 fully free cryptographic token (hardware and software).  Not only is
130 GnuK based on free software, but the entire hardware specification is
131 open, and the parts are relatively easy to buy and assemble.  The GnuK
132 token can be ordered from [[https://www.seeedstudio.com/FST-01-without-Enclosure-p-1276.html][seeed]] or the [[https://shop.fsf.org/storage-devices/neug-usb-true-random-number-generator][FSF]].
133
134 As usual, dkg contributed various clean ups and bug fixes.  He
135 contributed a patch to avoid publishing the GnuPG version by default,
136 and another to improve ~--quick-revuid~.  He also provided a patch to
137 reenable exporting secret keys without a passphrase, which was
138 possible in ~gpg~ 1.4 and 2.0, but, due to various technicalities, was
139 not possible in 2.1.  dkg also started a [[https://lists.gnupg.org/pipermail/gnupg-devel/2016-August/031478.html][discussion about having
140 systemd manage ~gpg~'s daemons]].  This would ensure that GnuPG's
141 daemons are stopped when the user logs out.  He provided patches, but
142 so far these changes have not yet been accepted.
143
144 Ben Kibbey made a number of contributions.  Among his bug fixes and
145 clean ups, he fixed the OpenIndiana (Solaris) builds.
146
147 I (Neal) returned from a several month sabbatical.  My first order of
148 business was to tie up some loose ends with the TOFU support in GnuPG.
149 Among other things, I added several checks to reduce the number of
150 gratuitous conflicts.  In particular, if two keys have the same email
151 address and are cross signed, then they are almost certainly
152 controlled by the same person.  In fact, this is a usual way of
153 indicating key rotation.  I also set the default policy to "good" for
154 keys that the user has directly signed.
155
156 *** Releases
157
158 There have been several GnuPG releases since the last status update:
159 [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q2/000390.html][2.1.13]], [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q3/000393.html][2.1.14]], [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q3/000396.html][2.1.15]], and [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q3/000395.html][1.4.21]]; and two releases of libgcrypt
160 [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q2/000389.html][1.7.1]] and [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q3/000396.html][1.7.2]].  Finally, a new version of GPGME is available, [[https://lists.gnupg.org/pipermail/gnupg-announce/2016q3/000397.html][1.7.0]],
161 which includes the newly upstreamed Python, C++ and Qt bindings as
162 well as a number of bugs fixes and various improvements.
163
164 *** Public Appearances
165
166 Werner held a [[keynote%20at%20GUADEC][keynote at GUADEC]], "We Want More Centralization, Do
167 We?."  His talk was [[https://lwn.net/Articles/697450/][covered by LWN]].
168
169 In May, Neal held his "An Advanced Introduction to GnuPG" talk at
170 INRIA, and again at GHM in August.  Neal will hold the same talk on
171 October 3rd at 18:00 at the ACM chapter at Johns Hopkins University in
172 Baltimore, and again on October 5th at 18:30 at the [[http://www.meetup.com/nylug-meetings/][NYLUG]] (you need to
173 RSVP for this event).
174
175 In August, we took part in the GUUG-hosted [[https://www.gnupg.org/conf/index.html][OpenPGP.conf]].  I've already
176 posted a [[https://www.gnupg.org/blog/20160921-openpgp-conf.html][report]] to our blog.
177
178 Note: We are looking to interview representatives from organizations
179 who rely on GnuPG, e.g., journalists, lawyers, NGOs, governmental
180 organizations, software distributors, companies, etc., for some
181 publicity material that we are producing.  If you fall into this
182 category, or know someone who does, and would be willing to be
183 interviewed, [[mailto:neal-nospam@gnupg.org][please get in touch with me]]!