clojars

http://clojars.org discussion and “support”, see http://status.clojars.org for status.
onetom 2016-09-12T03:46:45.000024Z

@micha im also thinking about these trust questions for many years. i've even participated in the http://cacert.org movement and got an assurer status > You have made 28 assurances which ranks you as the #1791 top assurer. > Total Points Issued: 901

onetom 2016-09-12T03:48:45.000025Z

i think the main problem is that trust is not a binary quantity and im not sure what the measure of trust should be. i understand proof of work is one proxy for this, but it's rather complicated infrastructure to setup, maintain, etc.

onetom 2016-09-12T03:52:07.000026Z

i have a gut feeling that mirroring how we gauge trust in real-world context every day would be a good enough solution. that could be done by 1. visualizing a trust network 2. calculate a trust score 3. allow hinting the calculation based on our preferences (eg. i dont really trust microsoft or verisign, but i trust micha) 4. visualizing/monitoring changes in the web of trust over time

onetom 2016-09-12T03:52:40.000027Z

it all hinges on what do we consider the electronic representation of identity of course

onetom 2016-09-12T03:53:31.000028Z

this was quite well summarized in this famous keynote https://www.youtube.com/watch?v=RrpajcAgR1E

onetom 2016-09-12T03:54:27.000030Z

so to me it's clear that identity can be a set of interconnected identity representations, which all add to the overall trust level

onetom 2016-09-12T03:55:33.000031Z

pgp signatures can prove that an avatar and an email address are indeed represent a real individual

onetom 2016-09-12T03:57:18.000032Z

imean i can just choose to accept it as a proof and for example i would sign your gpg key based on the fact i've seen you in youtube talks and we had skype video chats and conversations about specific commits which bear your github username.

onetom 2016-09-12T03:58:42.000033Z

to me having such proof shown from a couple of community members who also trust each other would make your software a lot more trustable than being signed by come centralized CA with questionable security practices and opaque internal processes...

onetom 2016-09-12T04:01:41.000034Z

but i think the main problem is the lack of good UX for all this in the 1st place as @danielcompton points it out on https://github.com/clojars/clojars-web/issues/560

onetom 2016-09-12T04:04:06.000037Z

iirc the debian ecosystem was quite successfully maintaining a gpg ecosystem for their packager

onetom 2016-09-12T04:05:02.000038Z

the 2nd problem could be the lack of protocol for representing such claims that i just made about micha for example. but let me know if you know about any good ones.

richiardiandrea 2016-09-12T04:06:11.000039Z

Agree on this latter point, and specifically, PGP done right works with actual I'd checks and of course is only an identity check. Then there is the "how much I trust you as a dev" part, and this can be a custom metric (# of project downloads on Clojars maybe) . This point for me is the part noone has yet solved, but GitHub is pretty much the implicit CA here. Everything coupled with ipfs to avoid dependency tampering (distributed, signed, high available deps)

onetom 2016-09-12T04:06:41.000040Z

im still not sure though how to trust the public keys from the various keyservers though... 😕

richiardiandrea 2016-09-12T04:07:13.000041Z

Keys could reside on ipfs as well?

richiardiandrea 2016-09-12T04:07:35.000042Z

Do you mean in terms of trust or tampering?

onetom 2016-09-12T04:07:46.000043Z

just trust

richiardiandrea 2016-09-12T04:09:28.000044Z

Yeah trust as a "good dev" is a difficult concept to measure, but there can be ways imho, we have so much info on GitHub/BitBucket..of course nothing really as accurate as coding shoulder to shoulder..

onetom 2016-09-12T04:09:31.000045Z

like if none of my trusted identities are transitively trusting an identity, how do i know it's not someone impersonating a specific email and natural-name combination?

onetom 2016-09-12T04:11:42.000046Z

well, i think trust is difficult to measure on a unified scale, BUT that's why in point 2 & 3 i proposed having parametric algorithms which everyone / every organization can customize/tune for themselves

onetom 2016-09-12T04:12:34.000047Z

they can combine extra rules, like github metrics into their /user or /org trust score formula and thats it

onetom 2016-09-12T04:13:16.000048Z

it helps to compare libraries against each other and also monitor over time the trust level of the various software components within the organization

richiardiandrea 2016-09-12T04:13:52.000049Z

Yeah well, impersonation is very very complicated to ascertain in the digital world..and maybe a bit off here, at the end of the day we want to first of all be sure that the coder is trustful and she is not including strange stuff in the oss library I am using..

richiardiandrea 2016-09-12T04:14:02.000050Z

Yeah I like the above

onetom 2016-09-12T04:14:32.000051Z

so we don't have to tackle the problem of globally understood and accepted trust score calculation...

onetom 2016-09-12T04:15:34.000052Z

yet it would be very useful and already better that what we have right now, which roughly equals to: 1. blind trust 2. trust central corporations because we have to pay them for witnessing information...

richiardiandrea 2016-09-12T04:16:50.000053Z

Agree, also successful peer reviews could increase the "trust score"

onetom 2016-09-12T04:17:08.000054Z

and what we havent talked about yet is digitally signed timestamps which should ideally accompany all signatures, so we can't cheat on time either...

onetom 2016-09-12T04:18:42.000055Z

it should be easy to setup a time stamping service just for being able to fully dissolve centralization, but a few years ago when i checked i havent found any easy solution to this either...

richiardiandrea 2016-09-12T04:20:24.000056Z

Uhm yeah nothing comes to mind actually, the signed timestamp is implicit when you deploy an artifact right? It would be implicit in ipfs

onetom 2016-09-12T04:24:55.000057Z

@richiardiandrea which part of IPFS ensures trustable time stamping?

onetom 2016-09-12T04:25:19.000058Z

(i still don't know the whole IPFS in and out, that's why im asking)

onetom 2016-09-12T04:27:30.000059Z

just to be clear im talking about https://en.wikipedia.org/wiki/Trusted_timestamping#Trusted_.28digital.29_timestamping specifically

onetom 2016-09-12T04:30:47.000060Z

so i imagine an interface which shows all of the players in a trust network, assigns default scores to them, but presents a list where you can override these. for example if something is timestamped with a privately operated timestamp server, i could say i don't trust it, but if i happen to trust the operator of it, then it's default wouldn't be "dont trust"

richiardiandrea 2016-09-12T04:34:28.000061Z

Reading

richiardiandrea 2016-09-12T04:36:25.000062Z

Oh ok that's a different UX, I was just thinking of an implicit stamped timestamp as part of the (immutable) metadata sent over with an artifact..I see you are talking about something else ;)

miikka 2016-09-12T18:08:41.000065Z

Regarding the security discussion: here's a specification for securing package indexes like Clojars. https://theupdateframework.github.io

miikka 2016-09-12T18:08:58.000066Z

And here's a summary about it in the context of Python: https://lwn.net/Articles/629426/

miikka 2016-09-12T18:09:42.000068Z

Other languages have investigated it as well - at least Ruby, Haskell and Rust - but I can't tell if any of the implementations is complete

miikka 2016-09-12T18:12:36.000069Z

I'm not sure how easy it would be to adapt to Maven repos, but it's worth taking a look.

flyboarder 2016-09-12T19:08:52.000072Z

A few thoughts RE: Security: 1. The repo is your only real source of truth, packages and even compilers can be hacked. 2. That means that the only way to really validate code is to a. trust a developer (and the access control on the repo) and b. content address the code to make sure your getting what the trusted dev was intending. 3. Ideally at the repo level trust is established socially via real world interactions which could also be related to online activity like github data (this is kinda what we already do, for better or worse) 4. In order to validate the packages content, you cannot receive the verification data and the package from the same source, this is a basic single point of failure in any architecture. It’s not that I don’t trust clojars, it’s that it makes them a single point of failure and also means they are the ones telling me what my trusted developers packages are. 5. Whats needed is a way to verify from the developer what the data should be (or from the repo directly) or any other distributed trust, and then verify that against the packages, in transit security is “good enough” already if you are using certificates 6. none of this takes into account the versioning or human readable layer to all this, versions would basically be sugar on top of all the verification, since it’s still needed in a package manager.

2016-09-12T19:31:38.000076Z

> Whats needed is a way to verify from the developer what the data should be (or from the repo directly) or any other distributed trust, and then verify that against the packages, in transit security is “good enough” already if you are using certificates Okay, as I have pointed out elsewhere, IPFS literally dogfoods itself in its source code to get upstream dependencies and avoids trusting certs - https://github.com/ipfs/go-ipfs/blob/0e2b4eb4eb68fab5497d0e8f8472d025b5c1d431/core/corenet/net.go#L7

flyboarder 2016-09-12T19:33:05.000079Z

I agree IPFS is probably the way to go

2016-09-12T19:35:10.000080Z

Now, registries can also be hacked, but you could write an append-only registry on a blockchain.

flyboarder 2016-09-12T19:35:42.000081Z

couldnt you just use ipfs as the registry

2016-09-12T19:35:52.000082Z

Yeah, they have a nameservice thingy

2016-09-12T19:35:59.000083Z

I'm not sure how to make it append-only

flyboarder 2016-09-12T19:36:47.000084Z

i think that would be more for the ipfs app to handle

2016-09-12T19:38:18.000085Z

IPFS isn't a consensus layer, it's a content addressable storage and delivery mechanism with a distributed hash table.

flyboarder 2016-09-12T19:38:20.000086Z

@xcthulhu there is this also https://github.com/ipfs/notes/issues/148

2016-09-12T19:38:37.000088Z

Yeah, it's a TODO

2016-09-12T19:38:53.000089Z

But as far as I know it's not part of the white paper or anything

flyboarder 2016-09-12T19:40:43.000090Z

Yeah seems very concept

2016-09-12T19:41:36.000091Z

You can already make a registry using a blockchain

2016-09-12T19:41:48.000092Z

It's just a lot of work to get integration.

2016-09-12T20:12:10.000093Z

wow, lots of activity around securing clojars while I was on vacation. That's great that folks are interested!

2016-09-12T20:12:31.000094Z

there's lots to reply to here, but a few initial thoughts:

2016-09-12T20:14:13.000095Z

clojars is currently a standard maven repo (from a read point of view). Moving away from that to some custom format or distribution protocol would mean providing plugins for any build tool that would access it (currently maven, boot, lein, gradle, plus scripts that wget/curl deps directly)

2016-09-12T20:16:23.000096Z

IIUC, IPFS would provide immutability and distribution, but couldn't guarantee that version X+1 was published by the same party as version X. All we can know is the version X that we pulled yesterday is the same as the version X we pulled today (which can only be done currently by keeping the hash of X local, so when you pull it again you can verify you are getting the same thing)

2016-09-12T20:16:46.000097Z

please correct me if I'm wrong, my understanding of IPFS is surface

2016-09-12T20:17:48.000098Z

we're working towards putting the repo behind a CDN, and have been working towards that for 9 months. That's a simple change when compared to moving to IPFS, so I can only imagine that transition would take years to implement

2016-09-12T20:18:50.000099Z

we actually don't want true immutability, given that there are legitimate reasons to remove artifacts (which are all handled by the admins, never by users directly)

2016-09-12T20:20:03.000100Z

we use gpg because maven does, but gpg is nothing without a WoT and a way to verify that (which has been touched on several times)

2016-09-12T20:21:32.000101Z

I think the best approach here is to enumerate the real problems here as gh issues (https://github.com/clojars/clojars-web/issues), without discussing technologies initially - we need a clear statement of what the issues actually are

2016-09-12T20:23:47.000103Z

and, tbh, if users have to understand IPFS and/or blockchains to build, then we're here: http://howfuckedismydatabase.com/nosql/fault-tolerance.png

👌 1
🦜 3
micha 2016-09-12T20:46:55.000105Z

@tcrawley are there really cases where you must delete an artifact after it's been published? like i see reasons why it's desired, but i'm not aware of any real need?

micha 2016-09-12T20:47:33.000106Z

like if i accidentally push an artifact, like boot with version 9999.0.0 by accident

micha 2016-09-12T20:47:47.000107Z

it's not awesome, but it's also just a number

micha 2016-09-12T20:48:11.000108Z

i could push the next artifact with version 10000.0.0

2016-09-12T20:50:52.000109Z

@micha: the "must" case is when a user accidentally pushes private code or credentials in a jar

2016-09-12T20:51:12.000110Z

those generally don't even show up as gh issues, they mail <mailto:contact@clojars.org|contact@clojars.org>

2016-09-12T20:52:04.000111Z

I don't delete in the case of "version X is broken and I want to replace it"

micha 2016-09-12T21:25:49.000112Z

ah, private code is an interesting case

micha 2016-09-12T21:26:35.000113Z

credentials i don't really think is a problem that needs deletion because you must assume they've been compromised anyway. if you don't you're negligent imo

micha 2016-09-12T21:27:38.000114Z

but private code though, that's interesting, or i guess code you aren't authorized to upload to clojars in the first place

2016-09-12T21:28:36.000115Z

yeah, good point re: credentials. I don't think we've ever had that case, it's always been code you don't have rights to release

micha 2016-09-12T21:29:12.000116Z

i wonder if a cooling-off period would be sufficient?

micha 2016-09-12T21:29:30.000117Z

like a level 1 cache that isn't in the immutable store for some amount of time

micha 2016-09-12T21:29:46.000118Z

only visible to the user who uploaded the artifact or something?

micha 2016-09-12T21:30:29.000119Z

perhaps like the "promote" button we currently have

micha 2016-09-12T21:31:17.000120Z

i guess the legal situation maybe makes immutability a no-go fundamentally

juhoteperi 2016-09-12T21:33:03.000121Z

(There has not been promote button in nearly a year)

micha 2016-09-12T21:33:37.000122Z

oh wow

micha 2016-09-12T21:33:58.000123Z

so it wasn't immutable

2016-09-12T21:34:14.000124Z

what wasn't immutable?

micha 2016-09-12T21:34:26.000125Z

sorry bad joke

2016-09-12T21:34:30.000126Z

ah :)

2016-09-12T21:34:53.000127Z

the promote button was part of the trusted repo feature that was never finished and never used

2016-09-12T21:35:02.000128Z

it just led to confusion

2016-09-12T21:35:45.000129Z

that's how http://oss.sonatype.org works - you deploy to a staging repo, then manually release once you are happy with it

2016-09-12T21:36:06.000130Z

but maven users hated that step so much that sonatype released a plugin that auto-releases for you

micha 2016-09-12T21:36:13.000131Z

clojars can still be directed by a court to remove something or sued if you can't do it

2016-09-12T21:36:16.000132Z

doing away with some of the value of the staging repo

micha 2016-09-12T21:36:41.000133Z

so it seems that immutablility is a pipe dream for a real repo

2016-09-12T21:36:52.000134Z

yes, and at this point, that would mean I would get sued directly. which is fun to think about

2016-09-12T21:37:06.000135Z

THANKS FOR BRINGING IT UP

😜 3
micha 2016-09-12T21:37:12.000136Z

oh man sorry

2016-09-12T21:37:15.000137Z

:)

micha 2016-09-12T21:37:33.000138Z

i'll send you a file in a cake

2016-09-12T21:38:19.000139Z

a jar file?

micha 2016-09-12T21:38:30.000140Z

hahahaha

micha 2016-09-12T21:38:49.000141Z

most disappointing mail call ever

micha 2016-09-12T21:39:11.000142Z

jars got me in here, jars will get me out

2016-09-12T21:39:19.000143Z

heh

micha 2016-09-12T21:40:16.000144Z

things like poms can be stored immutably though

micha 2016-09-12T21:40:29.000145Z

or metadata

micha 2016-09-12T21:40:50.000146Z

it's only the actual artifacts that are a liability, maybe

2016-09-12T21:42:52.000147Z

what does that buy us?

micha 2016-09-12T21:43:35.000148Z

the ability to verify that an artifact at some URL has the right contents

micha 2016-09-12T21:44:10.000149Z

and also the history of contents that have ever been at that URL

micha 2016-09-12T21:44:26.000150Z

so you'd at least be able to know if an artifact has been modified

micha 2016-09-12T21:47:07.000151Z

like if there was a repo-wide metadata file in git, sort of

micha 2016-09-12T21:47:19.000152Z

when something is changed or added you make a commit

micha 2016-09-12T21:47:55.000153Z

tools could then refuse to use artifacts that aren't in the metadata file or have the wrong hash or whatever

micha 2016-09-12T21:48:27.000154Z

you could still delete the artifact from storage if you need to

micha 2016-09-12T21:49:34.000155Z

without deleting the metadata from git, you just make a revert instead, so you preserve the ability to audit

flyboarder 2016-09-12T22:26:04.000157Z

@danielcompton nice summary

danielcompton 2016-09-12T22:26:14.000158Z

thanks