876a5075fe
8081927c33299e82498a85ac773c9f162e69ecaf scripts: add key for fanquake to trusted keys list (fanquake)
Pull request description:
Adding my key to the [trusted keys list](https://github.com/bitcoin/bitcoin/blob/master/contrib/verify-commits/trusted-keys) to join the maintainer group. I'll gain merge access and will continue with all triage/repo management work. I'll be focusing primarily on build system development with some guidance from theuni.
Some maintainer related discussion from the Core Dev meetup in Amsterdam is available [here](http://diyhpl.us/wiki/transcripts/bitcoin-core-dev-tech/2019-06-06-maintainers/).
ACKs for commit 808192:
MarcoFalke:
ACK 8081927c33299e82498a85ac773c9f162e69ecaf
laanwj:
ACK, this matches the key I have 8081927c33299e82498a85ac773c9f162e69ecaf:
meshcollider:
ACK, this matches the key I have from the CoreDev New York 2018 keysigning party
|
||
---|---|---|
.. | ||
allow-incorrect-sha512-commits | ||
allow-revsig-commits | ||
allow-unclean-merge-commits | ||
gpg.sh | ||
pre-push-hook.sh | ||
README.md | ||
trusted-git-root | ||
trusted-keys | ||
trusted-sha512-root-commit | ||
verify-commits.py |
Tooling for verification of PGP signed commits
This is an incomplete work in progress, but currently includes a pre-push hook
script (pre-push-hook.sh
) for maintainers to ensure that their own commits
are PGP signed (nearly always merge commits), as well as a script to verify
commits against a trusted keys list.
Using verify-commits.py safely
Remember that you can't use an untrusted script to verify itself. This means
that checking out code, then running verify-commits.py
against HEAD
is
not safe, because the version of verify-commits.py
that you just ran could
be backdoored. Instead, you need to use a trusted version of verify-commits
prior to checkout to make sure you're checking out only code signed by trusted
keys:
git fetch origin && \
./contrib/verify-commits/verify-commits.py origin/master && \
git checkout origin/master
Note that the above isn't a good UI/UX yet, and needs significant improvements to make it more convenient and reduce the chance of errors; pull-reqs improving this process would be much appreciated.
Configuration files
trusted-git-root
: This file should contain a single git commit hash which is the first unsigned git commit (hence it is the "root of trust").trusted-sha512-root-commit
: This file should contain a single git commit hash which is the first commit without a SHA512 root commitment.trusted-keys
: This file should contain a \n-delimited list of all PGP fingerprints of authorized commit signers (primary, not subkeys).allow-revsig-commits
: This file should contain a \n-delimited list of git commit hashes. See next section for more info.
Key expiry/revocation
When a key (or subkey) which has signed old commits expires or is revoked,
verify-commits will start failing to verify all commits which were signed by
said key. In order to avoid bumping the root-of-trust trusted-git-root
file, individual commits which were signed by such a key can be added to the
allow-revsig-commits
file. That way, the PGP signatures are still verified
but no new commits can be signed by any expired/revoked key. To easily build a
list of commits which need to be added, verify-commits.py can be edited to test
each commit with BITCOIN_VERIFY_COMMITS_ALLOW_REVSIG set to both 1 and 0, and
those which need it set to 1 printed.