dash/contrib/verify-commits
Wladimir J. van der Laan 876a5075fe Merge #16162: scripts: add key for Michael Ford (fanquake) to trusted keys list
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 8081927c33
  IlyasRidhuan:
    ACK. 8081927c33299e82498a85ac773c9f162e69ecaf matches the key I have.

Tree-SHA512: 63c390f5ede316263def2f9a897a1046d4ae58e4ea758f379164c6c5afce4928e2c9463fbcac004742838fd4ac1e48679e7a2a0f9095fd134a900f9064584056
2021-07-12 17:11:12 -05:00
..
allow-incorrect-sha512-commits Merge #13066: Migrate verify-commits script to python, run in travis 2021-05-06 12:06:09 +03:00
allow-revsig-commits Merge #7713: Fixes for verify-commits script 2017-12-28 11:44:59 +01:00
allow-unclean-merge-commits Merge #13066: Migrate verify-commits script to python, run in travis 2021-05-06 12:06:09 +03:00
gpg.sh Merge #13454: Make sure LC_ALL=C is set in all shell scripts 2020-07-28 21:35:31 -05:00
pre-push-hook.sh Merge #13066: Migrate verify-commits script to python, run in travis 2021-05-06 12:06:09 +03:00
README.md Merge #13066: Migrate verify-commits script to python, run in travis 2021-05-06 12:06:09 +03:00
trusted-git-root Merge #7713: Fixes for verify-commits script 2017-12-28 11:44:59 +01:00
trusted-keys Merge #16162: scripts: add key for Michael Ford (fanquake) to trusted keys list 2021-07-12 17:11:12 -05:00
trusted-sha512-root-commit Merge #9940: Fix verify-commits on OSX, update for new bad Tree-SHA512, point travis to different keyservers 2019-02-26 16:41:05 -06:00
verify-commits.py Merge #14128: lint: Make sure we read the command line inputs using utf-8 decoding in python 2021-07-07 12:04:53 -04:00

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.