I maintain web forum software, which is accessible via NNTP and e-mail (as mailing lists). Since NNTP by design allows anyone to spoof their e-mail address, message signing can be used instead to verify identities of posters.
Thus, I would like to integrate optional PGP message signing and verification into the web UI, in a way that's reasonably secure but doesn't get in your way. Verification probably wouldn't be too difficult - the key could be looked up on keyservers, and perhaps the web UI could display the linked keybase.io identities once that opens up.
The more difficult problem is signing the message. Essentially, the workflow would need to be somewhat along these lines:
- The user composes the message in the web UI.
- Once the user is ready to post the message, it is compiled into an RFC-850 message, then somehow signed.
- The signed message is stored and e.g. sent to the mailing list subscribers.
I can think of a few ways to sign the message:
Have the user upload their private key.- This is out, of course.
- Use a JavaScript PGP implementation and store the user's private key in
localStorage
.- An XSS vulnerability in the forum software would mean compromising the private key.
- Have the forum software maintain its own key pair for each user (encrypted with their login password), which the user then somehow links to their identity.
- I'm not sure about the details for this idea. The user should probably be able to revoke the key somehow too.
- Present the user with the text that they would need to copy from their web browser, sign on their machine, then paste the signed message back into the web browser.
- Having to do this for every forum post will quickly become tiresome.
- Write browser extensions to sign the message.
- I don't look forward to maintaining multiple browser extensions for this purpose.
- Write a signing service, which runs as a web server on localhost. Thus, the web forum software would e.g. POST to http://localhost:8081/, where the signing service would display the message and allow the user confirm that this is the message they wish to sign, which would then POST the signed message to a callback URL.
- Perhaps something like this already exists?
Is there a better way?