Setup Keybase.io, GPG and Git to sign commits on GitHub
github.com
github.com
1. Make git aware of your signing key
git config user.signingkey "..."
2. Sign the commit
git commit -S ...
That's it.
https://harryrschwartz.com/2014/11/01/automatically-signing-...
Not faulting them, they provide the steps needed, but it might be annoying enough for some people to start uploading private keys.
But their website works 100% and provides all the functionality if you don't let them host the private key (they give you an easy-to-inspect snippet to paste into your terminal that downloads/signs/uploads things for them. Note, it does do anything when you paste - you need to manually hit enter)
Not disagreeing with you - Just adding my 2c.
http://git.661346.n2.nabble.com/GPG-signing-for-git-commit-t...
Consider: You've just written 20 lines of code, and you're creating a commit. Can you validate that all 20 lines were created by you before you commit?
Now, consider that you're looking to create a tag for version 2.0, coming from 1.4, with a net 4,000 new lines of code. Can you quickly and confidently validate that all 4,000 lines of code are as expected?
Clearly, the frequent, small validations are much simpler than infrequently signing huge releases. When integrity matters and humans are involved, small batches win.
1. Someone got access allowing them to push commits.
2. Someone got access allowing them to push commits and also got unrestricted access to the trusted PGP key.
In the first case, auto-signing will expose the issue. In the second, not. But in the second case, you're likely screwed in many other ways.
This raises the question, though; how do you know when you reach that golden commit? Is the signer responsible for auditing every commit since the last signature, every line of code? If he doesn't, what does the signature prove?
That's what Linus has wrong; The signatures aren't about proof, they're about audit trail. For Linus and the kernel.org use case, this isn't necessary. They've already built tooling, and most importantly structure around the code auditing. Every commit that goes into the mainline is somewhat audited by Linus himself. There's a whole layer of competent release engineers in front of him. Code doesn't make it onto the kernel.org repos without having been trusted by a very select group, and doesn't get pulled to master without the word of God.
I suggest, for the average developer, having two keys. One online, to verify that the commit was developed on your computer. One offline, that is only used for releases. One for audit trail, one for golden.
Please note that this was initially written as a reference for myself, being relatively inexperienced with the keybase client and gpg tooling in general. There are certainly different ways to accomplish the same and you don't have to use keybase, but I wanted to. Please keep this in mind.
Ironically, only the first commit is signed.
Yeah, and even though I had set this up myself just a few minutes before I submitted PR #3, I ended up committing on the web UI as well, with no signature :D
Does anyone know what happens when commit signatures don't match?
They could verify who pushed it to github, since that action is authenticated, but restricting pushing other people's commits would break many workflows (eg, a bot pushing from a local git server), or a reviewer pushing code sent to a mailing list, or resolving conflicts in a merge locally.
You can also verify the GPG key independently of Github. Perhaps your CI system could verify all commits it builds are signed, and your deployment system could too. There's no need to use Github as the authoritative source for that sort of thing.
[Edit: all used up.]
Each works for only one signup, so hurry up :-)
By the way, most users get around 20 free invites shortly after signing up. If one of the links above opened your account, why not share five of your own invites afterwards?
Edit: 25 people from HN now have a keybase account.
Should anyone care, you can use:
$.makeArray($("input.form-control[value]").map(function() {return $(this).val();})).join(" ")
To produce a list of your active invites from the invite page.https://keybase.io/inv/d1439a90ad
https://keybase.io/inv/19ff7aba7d
https://keybase.io/inv/214f008a4f
https://keybase.io/inv/19949fe9a1
https://keybase.io/inv/8c0d7ab033
https://keybase.io/inv/6e0e648a78
https://keybase.io/inv/02bfae461c
https://keybase.io/inv/b643f5505
Ehh screw that. I'll write it in plaintext.
It's right in the key!
> Do I really need to copy the key or .asc address, wget it and import?
Is this a failure of keybase? You import it as with any other key, "decrypt from clipboard" in your favorite manager, or similar.
> How do I know if that's your latest key?
I don't know, how do you know that with a keyserver?
> Did not you revoke it last week and forgot to update keybase but didn't forget to update your blog?
Again, same as any other keyserver.
> THERE MUST BE AN EASIER WAY!
It seems that the frustration is with the PGP client, rather than keybase or the server, though.
It should probably be easy to presume that if a user gives you their Keybase username they are telling you it's the easiest way to get their most up-to-date key(s) and revocations and that they are actively managing it. (Pretty much the same assumption any time anyone ever suggests to you a specific keyserver over just a fingerprint and keyserver roulette; that's probably the keyserver they actively check/update/revoke and will be the timeliest.)
Another example of the walled garden. You need their tool, whereas you can just use gpg with every other keyserver.
Maybe consider contributing to the effort?
Quick searched turned up several issues tracking the question:
https://github.com/keybase/keybase-issues/issues/327
Or if you read the issues you can see that there are some genuine concerns in there that you could help contribute to that would benefit the open source community as a whole, with the side effect of simplifying things for Keybase "as well". Primarily, from skimming, it sounds like the keyserver protocols are not as well documented and standardized as one would assume, running a keyserver from a fresh/new code base is a non-trivial matter with a lot of quirks/bugs to handle. So, who knows, maybe you could contribute to better documenting keyserver quirks, and pushing for better, less quirky, keyserver standards.
Revocations are a big problem.
As browser PKIs have demonstrated, revocation lists are basically insane and absolutely Do Not Work at scale when keys are able to live for years.
The endgame with browsers was that the cert revocation lists basically aren't checked. Hooray.
More fundamentally, revocation (even if it was scalable) is fail-unsafe. If someone can block your connections to revocation info sources, they can get you to perform unsafe operations. It's not a stretch to say that this is an absurd problem when we're trying to roll out secure cryptosystems: a network DoS should not crack open my security.
This is something TUF -- http://theupdateframework.com/ -- tackles with their timestamped re-assertions. It limits the amount of time that you can fail-unsafe by after seeing a revocation... to a tunable parameter, perhaps days or even hours, instead of years. At the same time, you get to keep your long-lived keys (you don't have to constantly update everyone on new keys).
We should learn some tricks from TUF for our personal comms PKIs. It would solve a lot of problems.
If you are in Enigmail's Keymanager you can import from a URL when the content is well-formatted.
Examples that work:
https://keybase.io/snassar/key.asc https://pgp.samirnassar.com http://keys.gnupg.net/pks/lookup?op=get&search=0x69A75542488...
It would be nice if Keybase made the URL more easily "gettable" instead of hiding it behind 2 clicks.
Keybase was built to solve the "web of trust" bootstrap problem [1] by leveraging the web of social media profiles a user typically has with simple replicable proofs of social media identity.
[1] Arguably the hardest problem in PKI: how do you get user to trust that a public key is for the right person? In the classic PGP/GPG web of trust you do things like "key signing parties" and physical in real life interactions and deciding your threshold for how far you trust the friend of my friend signed this key. In the Keybase model you can see that the key (or family of keys) are tied to a certain combo of Twitter, Facebook, HN, et al accounts/profiles and generally trust that the person with all those accounts is the person you are trying to communicate with.
I still do not know what problem keybase.io solves when they allow uploading of private keys.
When the "right" answer includes "Print out this long thing, put it in a safe deposit box, and pray you never have to type in this long string of numbers", you immediately lose a lot of potential users; it doesn't quite fit the "Grandparent test" (could your Grandparent use it?).
Absolutely there's a trade-off in trusting a 3rd Party key escrow, but there's an immense usability benefit to average users that want something easier to do and "some security" really can be better than "no security", even if a lot of hard-line paranoid wonks have good reason to believe otherwise.
I got really frustrated by this a couple weeks ago when I needed to get a key from a contractor but it was only on Keybase, which at the time I thought could be used as a GPG keyserver.
http://superuser.com/questions/227991/where-to-upload-pgp-pu...
Can someone please give examples of key-exchange services or server applications? I am getting a bunch of Microsoft exchange results when I try to google it.
Things to know about keyservers such as SKS: There is no way to remove keys or a way to really delete information. Uploading to know server will propagate that information to all SKS servers in the network over time.
16 used, here are more
https://keybase.io/inv/b24a826ad7
https://keybase.io/inv/6875c4bf5a https://keybase.io/inv/16bbae7280
https://keybase.io/inv/ca4549544a
https://keybase.io/inv/666215bb91
https://keybase.io/inv/417ae3ff89 https://keybase.io/inv/943528e525
https://keybase.io/inv/fa145b0e59
https://keybase.io/inv/3e259244ad
https://keybase.io/inv/cfddcccc32Why don't you like Homebrew?
What's the purpose of this? What attack vectors does it expose?
I don't use that feature, because I can't see an advantage to it. I can keep a paper copy of my private key in a safety deposit box, if I'm worried about having a secured backup of it that's out of my hands.
You can also do everything on the command line without trusting Keybase's server or their frontend JS.
In some ways that's worse than actively trojaning their JavaScript since there's no possible way for the target to know that's happened whereas the fronted at least has the low but non-zero chance of someone noticing the malicious code.
https://keybase.io/inv/23d5ce3afc
https://keybase.io/inv/bb28df44d6
https://keybase.io/inv/bb9c4fffa8
https://keybase.io/inv/471c1f67b7
https://keybase.io/inv/44968be986
https://keybase.io/inv/cd6c91d01e
https://keybase.io/inv/cdc45eb48f
https://keybase.io/inv/41d268d0d6
Tangentially on topic, when did keybase get that terrible logo? It looks like it'd be the mascot for an off-brand bag of potato chips.
Signing every commit is a much easier guarantee to make: "this change was made by me and I trust this change". In aggregate it's much better than just having signed releases (though of course you should sign releases in addition to this).
Edit: All invites taken
Send a note to hi at myusername [dot] co
Gpg is the flossing of encryption. It has great efficacy and terrible efficiency.
If anyone wants an invitation: username at protonmail.ch.