Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Federated access #210

Closed
FruityWelsh opened this issue Mar 12, 2021 · 8 comments
Closed

Feature Request: Federated access #210

FruityWelsh opened this issue Mar 12, 2021 · 8 comments

Comments

@FruityWelsh
Copy link

FruityWelsh commented Mar 12, 2021

Reasons for doing so:

  1. In order to prevent a single point of organizational failure some form of federated services would be useful.
  2. Allows for network sharding to deal with temporary or permanent network sharding, to match the real world conditions more accurately.

Some options:
Either allowing for a store to point to another (i.e. RedHat could host a keystore that points to the KDE store). Some issues become people having to figure out which servers to use, much like DNS, likely leading to the use of defaults.

The other option is to use something like ActivityPub (or other gossip protocol) like Mastadon, where a signature could include which server it is posted to (so if a server is known to be untrusted everyone could choose to blacklist it) and know it would need to regather need signatures for software packages hosted from there.

If this already is in use, then maybe more adding documentation on what solution was chosen and how to use it.

@dlorenc
Copy link
Member

dlorenc commented Mar 12, 2021

Can you clarify what you mean by federated access? There are a few different approaches I can imagine so I want to understand the use-case a bit more.

Do you mean federated access to the transparency log itself? Or some kind of multi-log gossip system with quorum?

@lukehinds
Copy link
Member

I am not sure if I am following correctly, there is a gossip protocol that was defined and played with to distribute tree(s) in certificate transparency.

@dlorenc
Copy link
Member

dlorenc commented Mar 12, 2021

After rereading - I think you might be suggesting that we would want signatures to be present in multiple transparency logs. CT works this way - CAs must publish certs to two separate logs. Multiple logs for redundancy is something we'd eventually like to support.

I'd really rather avoid federating the data itself though - all public data should be in as many public logs as possible. Users should be able to look up public metadata for any public artifact in any public log.

The logs can gossip and follow and mirror entries amongst themselves.

@FruityWelsh
Copy link
Author

Ok, yeah that seems what I would want/expect.

How would a private rekor server work in this scenario? Could it pick and choose what to publish publically?

The quorum question would probably be more on the client software right or this provided/proven somehow from the server as well?

@dlorenc
Copy link
Member

dlorenc commented Mar 12, 2021

Yes - the quorum one could be enforced in a few ways. Publishers could write signatures to a few logs and get inclusion proofs before distributing signatures/artifacts. Clients could check this. Auditors/monitors should also check that publishers are actually doing this.

For private instances, I honestly haven't thought a ton about how they would interact. I could imagine organizations running a private mirror of only public data, so they have a single API they can refer to behind their firewall. Requesting data on hashes from the public log would in some ways leak information on what artifacts an entity is using, so they could bypass this by mirroring the ENTIRE log and consulting that. Relying on the public log also introduces a point of failure - Apple ran into both of these issues last year here: https://developer.apple.com/forums/thread/124773. Their notary server had some trouble, resulting in most laptops hanging as they consulted the server for signatures.

Something like #102 could help with availability, performance and the "leaking usage information" issue. It's conceptually similar to OCSP-stapling (or pre-certificates) in the web PKI world. Publishers can sign an artifact, upload that signature to the log, get a signed proof that the signature is in the log, and bundle all of that up and "staple" it onto the artifact itself. Then clients can verify everything locally with no outside dependencies.

Some artifact formats might allow for this bundling - RPMs, JARs have unsigned metadata portions where we could stick this stuff. We can make up something for containers (similar to how cosign works today). Others like standard tar archives or binaries don't have any way to do this.

@dlorenc
Copy link
Member

dlorenc commented Mar 12, 2021

At the same time, I think a lot of "internal mirror" setups don't need to be transparent. They're behind a firewall and operating on a trusted compute base for most organizations. There's nothing wrong with using one internally, but you could just dump entries into an plain old database with more indexes and flexible querying.

@FruityWelsh
Copy link
Author

I know a some organizations are moving towards a "trustless" model, to be more flexible in how they get their services, while trying to preserve a good security posture.

@haydentherapper
Copy link
Contributor

Closing this since it's been awhile - #1067 tracks the technical blocker for quorum with witnesses, and private instances can always be spun up to host entries in addition to the public instance

lance pushed a commit to lance/rekor that referenced this issue Feb 26, 2024
This PR contains the following updates:

| Package | Change |
|---|---|
| quay.io/redhat-appstudio-tekton-catalog/task-buildah | `351af2c` ->
`00402c6` |
| quay.io/redhat-appstudio-tekton-catalog/task-clair-scan | `63b42c0` ->
`9d0f4fa` |
| quay.io/redhat-appstudio-tekton-catalog/task-clamav-scan | `3a546fe`
-> `144c1ab` |
| quay.io/redhat-appstudio-tekton-catalog/task-deprecated-image-check |
`a299ff5` -> `724c2c0` |
| quay.io/redhat-appstudio-tekton-catalog/task-git-clone | `b8fddc2` ->
`e13f6e9` |
| quay.io/redhat-appstudio-tekton-catalog/task-prefetch-dependencies |
`0b7bec2` -> `a0d054a` |
| quay.io/redhat-appstudio-tekton-catalog/task-sast-snyk-check |
`47515cb` -> `e06d355` |
| quay.io/redhat-appstudio-tekton-catalog/task-sbom-json-check |
`bf49861` -> `be8d2e7` |
| quay.io/redhat-appstudio-tekton-catalog/task-summary | `f65a69a` ->
`29a64be` |

---

To execute skipped test pipelines write comment `/ok-to-test`

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNTIuMSIsInVwZGF0ZWRJblZlciI6IjM3LjE1Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: red-hat-konflux <123456+red-hat-konflux[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants