Hi everyone,
sequoia-autocrypt contains a parser bug, which an attacker can exploit
to cause the library to panic.
sequoia-autocrypt incorrectly indexes a UTF-8 string using byte
indices instead of grapheme cluster indices. This subtlety is
discussed here:
https://doc.rust-lang.org/book/ch08-02-strings.html#slicing-strings
This bug can be exploited by an attacker to cause a program that uses
an affected version of sequoia-autocrypt to crash. The attacker is
not, however, able to read from or write to the process's address
space. Consequently, we have classified this issues as low severity.
The fix is:
- autocrypt: Account for multi-byte characters when parsing a string.
It was found by Alexander Kjäll (capitol) and patched by
Neal H. Walfield.
0.25.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/c1894b180ef3fea4d066f1fad24…
This issue is fixed in sequoia-autocrypt 0.25.1, which I published on
crates.io:
https://crates.io/crates/sequoia-autocrypt
You can also fetch version 0.25.1 using the autocrypt/v0.25.1 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/autocrypt%2Fv0.25.1
which I signed:
$ git verify-tag autocrypt/v0.25.1
gpg: Signature made Mon May 22 11:15:33 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
sequoia-openpgp and buffered-reader contain several bugs, which an
attacker can exploit to cause the libraries to panic.
The bugs are all parsing errors. Attacker-controlled input can cause
different parsers to access an array using an out-of-range array
index. Because, Rust detects the use of out-of-range indices, and
panics, these bugs can be exploited by an attacker to cause a program
that uses an affected version of sequoia-openpgp or buffered-reader to
crash, but they are not able to read from or write to the process's
address space. Consequently, we have classified these issues as low
severity.
With one exception, the issues are all present in sequoia-openpgp and
buffered-reader since their initial 1.0 releases. We recommend
upgrading.
The errors are:
- buffered-reader: Fix returning partial reads ending in errors.
Found independently by Justus Winter and kpcyrd, patched by Justus
Winter.
1.2.0: https://gitlab.com/sequoia-pgp/sequoia/-/commit/f6307652fb2cbf4e0fbd3f897b1…
1.1.5: https://gitlab.com/sequoia-pgp/sequoia/-/commit/7507807dce6b87e7a1397a6414b…
1.0.2: https://gitlab.com/sequoia-pgp/sequoia/-/commit/4b02ccc1d1dcd5a105d4bb6fd32…
- openpgp: Fix crash in the packet parser.
Found independently by Paul Schaub (vanitasvitae) and Alexander
Kjäll (capitol), patched by Justus Winter.
1.16.0: https://gitlab.com/sequoia-pgp/sequoia/-/commit/b9badbdd2e9bd996fa6afd8187f…
1.8.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/e6ea6cbe12598ec50a07af4bf19…
1.1.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/17e7c8c5f5960ea05b68cbbbc27…
- openpgp: Fix a crash related to stray signatures.
Found by Justus Winter, patched by Justus Winter.
1.16.0: https://gitlab.com/sequoia-pgp/sequoia/-/commit/cce50ad4f3645011b5f8b473f6e…
1.8.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/c6cc5f4bfb6bfb55def8bce4ffe…
1.1.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/789b0d0698d65b6372c563c36d7…
- openpgp: Fix a crash in the Cleartext Signature Framework.
This error was introduced in 1.11.0.
Found by Justus Winter, patched by Justus Winter.
1.16.0: https://gitlab.com/sequoia-pgp/sequoia/-/commit/586bde682c0525175c03f9eb847…
1.8.1: Not impacted.
1.1.1: Not impacted.
- openpgp: Fix a crash in the Cleartext Signature Framework.
Found by Justus Winter, patched by Justus Winter.
1.16.0: https://gitlab.com/sequoia-pgp/sequoia/-/commit/c82beb9b30ec77b6edc291516bb…
1.8.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/976695ea2be6b6772b41adb72aa…
1.1.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/93b16c32e50b69962fef2380342…
- openpgp: Fix mapping of synthetic packets.
Found by Justus Winter, patched by Justus Winter.
1.16.0: https://gitlab.com/sequoia-pgp/sequoia/-/commit/b6388f0906315d2de7164bae36f…
1.8.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/da12da88fb9d27d11b0b347ab5a…
1.1.1: https://gitlab.com/sequoia-pgp/sequoia/-/commit/43532470f25d1df39f5ca704cd9…
The backstory of these issues is that the first issue was found by
Paul Schaub (vanitasvitae). Independently, Justus Winter, Alexander
Kjäll (capitol), and kpcyrd fuzzed the sequoia-openpgp library, and
discovered additional issues.
The sequoia-openpgp related issues are fixed in sequoia-openpgp
1.16.0, which I published on crates.io:
https://crates.io/crates/sequoia-openpgp
You can also fetch version 1.16.0 using the openpgp/v1.16.0 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/openpgp/v1.16.0
which I signed:
$ git verify-tag openpgp/v1.16.0
gpg: Signature made Tue May 16 12:46:41 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
I've backported these fixes to 1.1.0, which is the version that is
shipped by Debian stable, and released it as version 1.1.1.
I've published version 1.1.1 on crates.io, and you can fetch it using
the openpgp/v1.1.1 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/openpgp/v1.1.1
which I signed:
$ git verify-tag openpgp/v1.1.1
gpg: Signature made Tue May 16 15:08:46 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
I also backported these fixes to 1.8.0, which is the version that is
in Debian Testing, and will go into the next version of Debian Stable.
I released it as version 1.8.1
I've published version 1.8.1 on crates.io, and you can fetch it using
the openpgp/v1.8.1 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/openpgp/v1.8.1
which I signed:
$ git verify-tag openpgp/v1.8.1
gpg: Signature made Wed May 17 10:19:35 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
The buffered-reader related issue is fixed in buffered-reader 1.2.0,
which I published on crates.io:
https://crates.io/crates/buffered-reader
You can also fetch version 1.2.0 using the buffered-reader/v1.2.0 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/buffered-reader/v1.2.0
which I signed:
$ git verify-tag buffered-reader/v1.2.0
gpg: Signature made Wed May 17 13:34:13 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
I also backported these fixes to 1.0.1, which is the version that is
in Debian Stable. I released it as version 1.0.2.
I've published version 1.0.2 on crates.io, and you can fetch it using
the buffered-reader/v1.0.2 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/buffered-reader/v1.0.2
which I signed:
$ git verify-tag buffered-reader/v1.0.2
gpg: Signature made Fri May 19 15:33:25 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
I also backported these fixes to 1.1.4, which is the version that is
in Debian Testing, and will go into the next version of Debian Stable.
I released it as version 1.1.5.
I've published version 1.1.5 on crates.io, and you can fetch it using
the buffered-reader/v1.1.5 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/buffered-reader/v1.1.5
which I signed:
$ git verify-tag buffered-reader/v1.1.5
gpg: Signature made Fri May 19 14:26:17 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce the release of version 0.30.0 of Sequoia sq,
our general-purpose command-line tool for Sequoia PGP.
I have published sequoia-sq on crates.io:
https://crates.io/crates/sequoia-sq
You can also fetch version 0.30.0 using the v0.30.0 tag:
https://gitlab.com/sequoia-pgp/sequoia-sq/-/tags/v0.30.0
which I signed:
$ git verify-tag v0.30.0
gpg: Signature made Mon May 08 11:44:09 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
This release of sq was primarily motivated by an issue with `cargo
install sequoia-sq`. An indirect dependency released a new version of
their crate with a semver incompatible change, but didn't adjust the
version correctly. This release updates `sq`'s dependencies, which
fixes this issue. Details are here:
https://gitlab.com/sequoia-pgp/sequoia-sq/-/issues/2
`sq` now includes support for using pEp's certificate store. A pEp
certificate store can be used by specifying `sq --pep-cert-store PATH`
or setting the environment variable `PEP_CERT_STORE`.
https://gitea.pep.foundation/pEp.foundation/pEpEngine
This release also adds two improvements to `sq key adopt`. `sq key
adopt` now honors `--time`, and the new `--expire` flag can be used to
set the key's expiration time.
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce the release of version 0.2.7 of
sha1collisiondetection, our low-level library that implements SHA-1,
which also detects and foils known SHA-1 collision attacks.
I have published sha1collisiondetection on crates.io:
https://crates.io/crates/sha1collisiondetection
You can also fetch version 0.2.7 using the v0.2.7 tag:
https://gitlab.com/sequoia-pgp/sha1collisiondetection/-/tags/v0.2.7
which I signed:
$ git verify-tag v0.2.7
gpg: Signature made Fri May 5 11:15:31 2023 CEST
gpg: using EDDSA key
E7E2B84A36457BEA3F43692DE68BE3B312FA33FC
gpg: issuer "wiktor(a)metacode.biz"
gpg: Good signature from "Wiktor Kwapisiewicz <wiktor(a)metacode.biz>"
There is one significant change in this release: we fixed the code that
incorrectly assumed that unaligned memory accesses are okay on x86 and
x86_64 [0]. The nightly version of the Rust compiler started checking
for this kind of issue recently [1][2] and because of that any code that
transitively depended on sha1collisiondetection (e.g. crates using
sequoia-openpgp) panicked when running tests.
The underlying issue [3] was reported to us by Sosthene from Nitrokey as
well as Kushal Das. Thank you!
Wiktor on behalf of the whole Sequoia PGP team
[0]:
https://gitlab.com/sequoia-pgp/sha1collisiondetection/-/merge_requests/13
[1]:
https://gitlab.com/sequoia-pgp/sha1collisiondetection/-/merge_requests/13
[2]: https://github.com/rust-lang/rust/pull/98112
[3]: https://gitlab.com/sequoia-pgp/sha1collisiondetection/-/issues/7
Hi everyone,
I'm pleased to announce the release of version 1.15.0 of
sequoia-openpgp, our low-level OpenPGP library.
I have published sequoia-openpgp on crates.io:
https://crates.io/crates/sequoia-openpgp
You can also fetch version 1.15.0 using the openpgp/v1.15.0 tag:
https://gitlab.com/sequoia-pgp/sequoia/-/tags/openpgp/v1.15.0
which I signed:
$ git verify-tag openpgp/v1.15.0
gpg: Signature made Fri May 05 16:57:20 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)g10code.com>"
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
There are two notable changes in this release: the Windows CNG, and
the Rust Crypto backends have been updated to use their latest
versions. When using the Rust Crypto backend, this increases
sequoia-openpgp's MSRV to 1.65.0. Otherwise, sequoia-openpgp's MSRV
remain 1.60.0.
This release also includes a number of bug fixes and several
performance improvements.
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce the release of version 0.8.0 of the Sequoia
Web of Trust crate, sequoia-wot.
I have published sequoia-wot on crates.io:
https://crates.io/crates/sequoia-wot
You can also fetch version 0.8.0 using the v0.8.0 tag:
https://gitlab.com/sequoia-pgp/sequoia-wot/-/tags/v0.8.0
which I signed:
$ git verify-tag v0.8.0
gpg: Signature made Tue Apr 18 14:12:35 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
This release updates a number of dependencies including updating the
sequoia-cert-store dependency to version 0.3.0, which is needed,
because users of sequoia-wot have to use the same version of
sequoia-cert-store as sequoia-wot.
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce the release of version 0.3.0 of the Sequoia
Certificate Store crate, sequoia-cert-store.
I have published sequoia-cert-store on crates.io:
https://crates.io/crates/sequoia-cert-store
You can also fetch version 0.3.0 using the v0.3.0 tag:
https://gitlab.com/sequoia-pgp/sequoia-cert-store/-/tags/v0.3.0
which I signed:
$ git verify-tag v0.3.0
gpg: Signature made Tue Apr 18 11:37:13 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
sequoia-cert-store provides a unified, high-level API for different
certificate stores via its `Store` and `StoreUpdate` traits.
This version includes a new backend, `Pep`. This backend supports the
certificate store format used by the pEp Engine:
https://gitea.pep.foundation/pEp.foundation/pEpEngine
And, we added functionality to directly add OpenPGP keyring files to a
`CertStore` using `CertStore::add_keyring` and
`CertStore::add_keyrings`.
We also fixed a few minor bugs.
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce v1.4.0 of the RPM Sequoia crate.
I have published rpm-sequoia on crates.io:
https://crates.io/crates/rpm-sequoia
You can also fetch version 1.4.0 using the v1.4.0 tag:
https://github.com/rpm-software-management/rpm-sequoia/releases/tag/v1.4.0
which I signed:
$ git verify-tag v1.4.0
gpg: Signature made Thu Apr 13 23:10:27 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
The most notable change in this release is better error reporting.
Based on feedback from users of rpm on Fedora 38 beta, we learned that
many certificates, and many packages use outdated cryptography, or are
generated from broken OpenPGP implementations. As sequoia-openpgp is
more strict in what it accepts than rpm's deprecated internal OpenPGP
implementation, installing these packages now results in an error.
Although rpm-sequoia often knows in detail why a certificate or
signature is invalid, rpm did not have a way to return this
information. As such, rpm could only print out that the package could
not be installed, like this:
```
$ rpm -i google-chrome-stable-109.0.5414.119-1.x86_64.rpm
warning: google-chrome-stable-109.0.5414.119-1.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 7fac5991: NOTTRUSTED
package google-chrome-stable-109.0.5414.119-1.x86_64 does not verify: Header V4 DSA/SHA1 Signature, key ID 7fac5991: NOTTRUSTED
```
This release introduces two new functions, which are identical to
existing functions in their functionality, but also return rich error
messages, which will hopefully help users more easily diagnose the
underlying problem. For instance, using a patched version of rpm,
which uses these new interfaces, here's what happens when trying to
install a package whose signature can't be verified:
```
$ rpm -i google-chrome-stable-109.0.5414.119-1.x86_64.rpm
error: Verifying a signature using certificate 4CCA1EAF950CEE4AB83976DCA040830F7FAC5991 (Google, Inc. Linux Package Signing Key <linux-packages-keymaster(a)google.com>):
1. Signature 02b3 created at Mon Jan 23 21:23:32 2023 invalid: signature relies on legacy cryptography
because: Policy rejected non-revocation signature (Binary) requiring collision resistance
because: SHA1 is not considered secure since 1970-01-01T00:00:00Z
2. Certificate A040830F7FAC5991 invalid: policy violation
because: No binding signature at time 2023-01-23T21:23:32Z
because: Policy rejected non-revocation signature (PositiveCertification) requiring second pre-image resistance
because: SHA1 is not considered secure since 1970-01-01T00:00:00Z
warning: google-chrome-stable-109.0.5414.119-1.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 7fac5991: NOTTRUSTED
error: Failed dependencies:
rpmlib(PayloadIsXz) <= 5.2-1 is needed by google-chrome-stable-109.0.5414.119-1.x86_64
$ rpm -i anydesk-6.1.1-1.el7.x86_64.rpm
error: Verifying a signature using certificate D56311E5FF3B6F39D5A16ABE18DF3741CDFFDE29 (philandro Software GmbH <info(a)philandro.com>):
1. Signature 9b8f created at Tue Apr 13 11:08:37 2021 invalid: signature relies on legacy cryptography
because: Policy rejected non-revocation signature (Binary) requiring collision resistance
because: SHA1 is not considered secure since 1970-01-01T00:00:00Z
2. Certificate 18DF3741CDFFDE29 invalid: policy violation
because: No binding signature at time 2021-04-13T11:08:37Z
error: anydesk-6.1.1-1.el7.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID cdffde29: BAD
error: anydesk-6.1.1-1.el7.x86_64.rpm cannot be installed
```
And here's what rpm emits when trying to install a package with an
incorrectly generated signature:
```
$ rpm -i intel-oneapi-common-licensing-2023.1.0-2023.1.0-43473.noarch.rpm
error: intel-oneapi-common-licensing-2023.1.0-2023.1.0-43473.noarch.rpm: Header RSA signature: BAD (package tag 268: invalid OpenPGP signature: Parsing an OpenPGP packet:
Failed to parse Signature Packet
because: Signature appears to be created by a non-conformant OpenPGP implementation, see <https://github.com/rpm-software-management/rpm/issues/2351>.
because: Malformed MPI: leading bit is not set: expected bit 8 to be set in 101 (5))
error: intel-oneapi-common-licensing-2023.1.0-2023.1.0-43473.noarch.rpm cannot be installed
```
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce the release of version 0.29.0 of Sequoia sq,
our general-purpose command-line tool for Sequoia PGP.
I have published sequoia-sq on crates.io:
https://crates.io/crates/sequoia-sq
You can also fetch version 0.29.0 using the v0.29.0 tag:
https://gitlab.com/sequoia-pgp/sequoia-sq/-/tags/v0.29.0
which I signed:
$ git verify-tag v0.29.0
gpg: Signature made Fri Apr 07 23:52:44 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
sq version 0.29.0 is packed full of exciting, user-visible changes.
This release of sq is the culmination of two years of work, and
includes several major user-visible improvements. To date, sq has
operated in a stateless manner: users explicitly passed the keys and
certificates that it should operate on, and implemented their own
trust model by maintaining an ad-hoc curated keyring. Version 0.29.0
of sq adds support for a certificate store, includes a powerful
web-of-trust engine based on flow networks, and introduces an
easier-to-use interface, sq link, to manage authentication decisions
based on concepts from how people use address books.
Here's a quick demo of downloading a certificate from
keys.openpgp.org:
$ sq keyserver get neal(a)sequoia-pgp.org
Recorded provenance information for DC09F5862D531848CBC4C0D8C6AD186AB030E354,
"Downloaded from the keyserver keys.openpgp.org"
Created the local CA "Downloaded from the keyserver keys.openpgp.org" for
certifying certificates downloaded from this service. The CA's trust amount
is set to 1 of 120.
Use `sq link add --ca '*' --amount N DC09F5862D531848CBC4C0D8C6AD186AB030E354`
to override it. Or `sq link retract DC09F5862D531848CBC4C0D8C6AD186AB030E354`
to disable it.
Recorded provenance information for 8F17777118A33DDA9BA48E62AACB3243630052D9, "Neal H. Walfield <neal(a)gnupg.org>"
Recorded provenance information for 8F17777118A33DDA9BA48E62AACB3243630052D9, "Neal H. Walfield <neal(a)pep-project.org>"
Recorded provenance information for 8F17777118A33DDA9BA48E62AACB3243630052D9, "Neal H. Walfield <neal(a)sequoia-pgp.org>"
Recorded provenance information for 8F17777118A33DDA9BA48E62AACB3243630052D9, "Neal H. Walfield <neal(a)walfield.org>"
Importing 1 certificates into the certificate store:
1. 8F17777118A33DDA9BA48E62AACB3243630052D9 Neal H. Walfield <neal(a)walfield.org>
Imported 1 new certificates, updated 0 certificates, 0 certificates unchanged, 0 errors.
After checking that a certificate really belongs to the stated owner, use
"sq link add FINGERPRINT" to mark the certificate as authenticated.
We see that `sq` has saved the provenance information, and explains
how to link the certificate and the identity. When we now look up the
certificate associated with neal(a)sequoia-pgp.org, we see that it has
been certified by a minimally trusted, local, shadow CA for
keys.openpgp.org, which is in turn certified by the local trust root:
$ sq wot lookup --email neal(a)sequoia-pgp.org
[ ] 8F17777118A33DDA9BA48E62AACB3243630052D9 Neal H. Walfield <neal(a)sequoia-pgp.org>: marginally authenticated (0%)
◯ 15BEF9EDD4759647BE5F008AAD0B4189CE8A7D1B ("Local Trust Root")
│ partially certified (amount: 1 of 120) the following certificate on 2023-04-07 as a partially trusted (1 of 120) introducer (depth: 1)
├ DC4981E703D4448C778396EDA349F3FA419E04AC ("Downloaded from the keyserver keys.openpgp.org")
│ certified the following binding on 2023-04-07
└ 8F17777118A33DDA9BA48E62AACB3243630052D9 "Neal H. Walfield <neal(a)sequoia-pgp.org>"
Could not authenticate any paths.
If we are convinced that keys.openpgp.org is reliable, then we can
easily change how much we rely on the the shadow CA to check email
addresses:
$ sq link add --ca \* DC4981E703D4448C778396EDA349F3FA419E04AC --all
DC4981E703D4448C778396EDA349F3FA419E04AC, Downloaded from the keyserver
keys.openpgp.org was already linked at 2023-04-07 22:34:48 UTC.
Updating trust amount: 1 -> 120.
Update trust depth: 1 -> 255.
Updating exportable flag: true -> false.
Link parameters changed, updating link.
Linking DC4981E703D4448C778396EDA349F3FA419E04AC and
"Downloaded from the keyserver keys.openpgp.org".
Now, that certificate and any user IDs that were returned by
keys.openpgp.org are considered fully authenticated:
$ sq wot lookup --email neal(a)sequoia-pgp.org
[✓] 8F17777118A33DDA9BA48E62AACB3243630052D9 Neal H. Walfield <neal(a)sequoia-pgp.org>: fully authenticated (100%)
◯ 15BEF9EDD4759647BE5F008AAD0B4189CE8A7D1B ("Local Trust Root")
│ certified the following certificate on 2023-04-07 as a fully trusted meta-introducer (depth: unconstrained)
├ DC4981E703D4448C778396EDA349F3FA419E04AC ("Downloaded from the keyserver keys.openpgp.org")
│ certified the following binding on 2023-04-07
└ 8F17777118A33DDA9BA48E62AACB3243630052D9 "Neal H. Walfield <neal(a)sequoia-pgp.org>"
And we can address the certificate by user ID or email:
$ echo 'Hi Neal!' | sq encrypt --recipient-email neal(a)walfield.org
-----BEGIN PGP MESSAGE-----
...
If we ever change our mind about how much we are willing to rely on
keys.openpgp.org, we can easily modify the link, or even retract it:
$ sq link retract DC4981E703D4448C778396EDA349F3FA419E04AC
DC4981E703D4448C778396EDA349F3FA419E04AC, Downloaded from the keyserver
keys.openpgp.org was linked at 2023-04-07 22:37:52 UTC.
Updating trust amount: 120 -> 0.
Update trust depth: 255 -> 0.
Link parameters changed, updating link.
Breaking link between DC4981E703D4448C778396EDA349F3FA419E04AC and
"Downloaded from the keyserver keys.openpgp.org".
$ sq link list
DC4981E703D4448C778396EDA349F3FA419E04AC, "Downloaded from the keyserver
keys.openpgp.org"'s link was retracted.
I've published an introduction to all the new functionality as well as
the motivation for some of our unconventional design decisions in a
blog post:
https://sequoia-pgp.org/blog/2023/04/08/sequoia-sq/
The list of changes in 0.29 is:
* New functionality
- `sq` now supports and implicitly uses a certificate store. By
default, `sq` uses the standard OpenPGP certificate directory.
This is located at `$HOME/.local/share/pgp.cert.d` on XDG
compliant systems.
- `sq --no-cert-store`: A new switch to disable the use of the
certificate store.
- `sq --cert-store`: A new option to use an alternate certificate
store. Currently, only OpenPGP certificate directories are
supported.
- `sq import`: A new command to import certificates into the
certificate store.
- `sq export`: A new command to export certificates from the
certificate store.
- `sq encrypt --recipient-cert`: A new option to specify a
recipient's certificate by fingerprint or key ID, which is then
looked up in the certificate store.
- `sq verify --signer-cert`: A new option to specify a signer's
certificate by fingerprint or key ID, which is then looked up in
the certificate store.
- `sq verify` now also implicitly looks for missing certificates in
the certificate store. But, unless they are explicitly named
using `--signer-cert`, they are not considered authenticated and
the verification will always fail.
- `sq certify`: If the certificate to certify is a fingerprint or
Key ID, then the corresponding certificate is looked up in the
certificate store.
- Add a global option, `--time`, to set the reference time. This
option replaces the various subcommand's `--time` argument as
well as `sq key generate` and `sq key userid add`'s
`--creation-time` arguments.
- Add top-level option, `--trust-root`, to allow the user to
specify trust roots.
- Extend `sq encrypt` to allow addressing recipients by User ID
(`--recipient-userid`) or email address (`--recipient-email`).
Only User IDs that can be fully authenticated are considered.
- Extend `sq verify` to verify certificates looked up from the
certificate store using the web of trust. If the signature
includes a Signer's User ID packet, and the binding can be fully
authenticated, consider the signature to be authenticated. If
there is no Signer's User ID packet, consider the signature to be
authenticated if any binding can fully be authenticated.
- Add `sq link add`, which uses the local trust root to
certify the specified bindings.
- Add `sq link retract`, which retracts certifications made by the
local trust root on the specified bindings.
- Add `sq link list`, which lists the links.
- Add a top-level option, `--keyring`, to allow the user to specify
additional keyrings to search for certificates.
- Import web of trust subcommands from sq-wot. Specifically, add:
- `sq wot authenticate` to authenticate a binding.
- `sq wot lookup` to find a certificate with a particular User ID.
- `sq wot identify` to list authenticated bindings for a
certificate.
- `sq wot list` to list authenticated bindings.
- `sq wot path` to authenticate and lint a path in a web of trust.
- `sq keyserver get`, `sq wkd get`, and `sq dane get` now import any
certificates into the certificate store by default instead of
exporting them on stdout. It is still possible to export them
using the `--output` option.
- When `sq keyserver get` (for verifying key servers), `sq wkd get`,
or `sq dane get` saves a certificate to the local certificate
store, `sq` certifies the validated User IDs (all returned User
IDs in the case of verifying key servers; User IDs that contain
the looked up email address in the case of WKD and DANE) using a
local service-specific proxy CA. If the proxy key doesn't exist,
it is created, and certified as a minimally trusted CA (trust
amount 1 of 120) by the local trust root. The proxy certificates
can be managed in the usual way using `sq link add` and `sq link
retract`.
- Extend `sq inspect` to inspect certificates from the certificate
store using the `--cert` option.
* Deprecated functionality
- `sq key generate --creation-time TIME` is deprecated in favor of
`sq key generate --time TIME`.
- `sq key user id --creation-time TIME` is deprecated in favor of
`sq user id --time TIME`.
Neal on behalf of the whole Sequoia PGP team
Hi everyone,
I'm pleased to announce the release of version 0.7.1 of the Sequoia
Web of Trust crate, sequoia-wot.
I have published sequoia-wot on crates.io:
https://crates.io/crates/sequoia-wot
You can also fetch version 0.7.1 using the v0.7.1 tag:
https://gitlab.com/sequoia-pgp/sequoia-wot/-/tags/v0.7.1
which I signed:
$ git verify-tag v0.7.1
gpg: Signature made Fri Apr 07 21:31:36 2023 +02:00
gpg: using RSA key C03FA6411B03AE12576461187223B56678E02528
gpg: Good signature from "Neal H. Walfield <neal(a)walfield.org>" [ultimate]
gpg: "Neal H. Walfield <neal(a)gnupg.org>"
gpg: "Neal H. Walfield <neal(a)pep-project.org>"
gpg: "Neal H. Walfield <neal(a)pep.foundation>"
gpg: "Neal H. Walfield <neal(a)sequoia-pgp.org>"
This release fixes a minor bug. Unfortunately, certifications of User
IDs that are not self-signed were ignored. This feature is useful for
implementing petnames. This is now fixed.
https://en.wikipedia.org/wiki/Petname
Neal on behalf of the whole Sequoia PGP team