git / moonbite-core / contrib/verify-commits/README.md · raw
Tooling for verification of PGP signed commits----------------------------------------------This is an incomplete work in progress, but currently includes a pre-push hookscript (`pre-push-hook.sh`) for maintainers to ensure that their own commitsare PGP signed (nearly always merge commits), as well as a Python 3 script to verifycommits against a trusted keys list.Using verify-commits.py safely------------------------------Remember that you can't use an untrusted script to verify itself. This meansthat checking out code, then running `verify-commits.py` against `HEAD` is_not_ safe, because the version of `verify-commits.py` that you just ran couldbe backdoored. Instead, you need to use a trusted version of verify-commitsprior to checkout to make sure you're checking out only code signed by trustedkeys: ```sh 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 improvementsto make it more convenient and reduce the chance of errors; pull-reqsimproving 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.Import trusted keys-------------------In order to check the commit signatures, you must add the trusted PGP keys to your machine. [GnuPG](https://gnupg.org/) may be used to import the trusted keys by running the following command:```shgpg --keyserver hkp://keyserver.ubuntu.com --recv-keys $(<contrib/verify-commits/trusted-keys)```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 bysaid 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 verifiedbut no new commits can be signed by any expired/revoked key. To easily build alist of commits which need to be added, verify-commits.py can be edited to testeach commit with BITCOIN_VERIFY_COMMITS_ALLOW_REVSIG set to both 1 and 0, andthose which need it set to 1 printed.