Hi Alex

> How is your signing proposal different than the signing process already
available in Maven and in use in (for example) Maven Central repository
(and in use for Clojure itself and contrib releases)?

The mechanical part of GPG signing is likely to be exactly the same, it’s
the surrounding verification and distribution of keys that would be
improved. I’ve never published anything to Maven Central, but when Clojars
was verifying GPG signing, anyone who had a user’s Clojars credentials to
upload a JAR could change the authorised GPG key to their own. Without a
set of trusted GPG keys, signing JARs on upload and verifying signatures on
download doesn’t buy you very much security.

One option I am looking at is using The Update Framework (TUF) to help
manage these trust relationships. TUF is used by Docker and Pip.

The high level overview of TUF applied to Clojars would be:

   - There is a root (offline) key of trust managed by Clojars used for
   signing other keys
   - A publisher (library developer) has an offline master key and online
   keys for signing releases. When they deploy a new release, they sign their
   new JAR with an online key.
   - When a user downloads a JAR or metadata from Clojars, the tooling
   (e.g. leiningen), verifies a freshness timestamp signed by Clojars. This
   ensures that the view of the world being presented is current, *and
   protects against replay attacks.*
   - The first time a user downloads a JAR, leiningen would keep a record
   of the association between the signing key identity, and that artifact. Any
   future downloads of the same artifact would need to be signed by the same
   key. This is Trust on first use
   <https://en.wikipedia.org/wiki/Trust_on_first_use>. Also, nothing would
   stop very security conscious users from preloading keys obtained directly
   from the developer, e.g. served over GitHub.
   - Even if an attacker gained a privileged position on Clojars
   infrastructure, they would have no way to sign JARs, so clients would
   detect a signing problem. *This protects against infrastructure
   compromise.*
   - The publisher’s online tagging keys can be rotated without disruption
   to users, but not the offline master key. If that was lost then they would
   need to communicate out of band to people what happened and which key to
   trust. *This enables protection against key compromise.*

See https://blog.docker.com/2015/08/content-trust-docker-1-8/ and
https://docs.docker.com/engine/security/trust/content_trust/ for a better
explanation than mine.

Thanks, Daniel.

On Tue, Feb 7, 2017 at 8:32 AM Chad Stovern <c...@stovern.me> wrote:

Daniel and Toby,

I do DevOps-y things for a living and would be more than willing to help
with ansible stuff or potentially anything else.  Feel free to contact me
directly.

- Chad


On Thursday, February 2, 2017 at 1:47:00 PM UTC-6, Daniel Compton wrote:

Hi folks

In 2016, thanks to the generous sponsors on our Bountysource program and
open source contributors, Clojars was able to:

* Move our hosting from Linode to servers sponsored by Rackspace
* Define the server on Rackspace with Ansible so it is easy to rebuild
* Validate deploys are correct and complete
* Store JARs in Rackspace Cloudfiles for greater reliability
* Serve JARs from a Fastly CDN (sponsored). This takes the Clojars servers
completely out of the critical path of serving files, and should result in
Clojars being very highly available
* Switch from Yeller to Sentry for exception tracking
* Make many smaller improvements as well

As we look towards 2017, there are a number of issues on the Clojars issue
tracker, but most of them are of low priority. We're interested in feedback
from you the community as to where you see problems or room for
improvements to Clojars.

There is one major issue which I think has the potential to greatly improve
security in the Clojure community: JAR signing. Previously Clojars required
JAR signing to promote releases into a special repository. This only served
to confuse most people, not many people promoted their artifacts, and there
were minimal security benefits from signing the JARs, as people didn't have
a web of trust to validate that the GPG signatures actually chained to
people that they trusted.

Clojars is in a very privileged position in your infrastructure, as many of
you use it to directly download JARs to run on your production machines and
developer infrastructure. It would be great if there was an option for
security conscious organisations to be able to validate that all of the
JARs they are using came from developers that they trusted. It would also
be a goal that even if Clojars was compromised, clients would reject
malicious code that didn't come from their expected sources.

I feel that this would be useful for the Clojure (and wider JVM) ecosystem.
However doing this will require a fair amount of time and effort, and it's
only worth doing if people are interested and want a higher security option
available to them. If you are interested, I encourage you to contribute to
https://github.com/clojars/clojars-web/issues/562,
https://github.com/clojars/clojars-web/issues/560, or this thread to share
your perspective, requirements, and threat models that you think we should
be working with.

We're also interested in hearing what else you think is valuable for
Clojars to focus on in 2017. Please reply on this thread with your thoughts.

Thanks, Toby and Daniel.
-- 

Daniel

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with
your first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

-- 

Daniel

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to