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

How to perform modifications on bins handled by succinct hash bin delegations? #2052

Open
MVrachev opened this issue Jul 7, 2022 · 5 comments
Labels
discussion Discussions related to the design, implementation and operation of the project

Comments

@MVrachev
Copy link
Collaborator

MVrachev commented Jul 7, 2022

Description of issue or feature request:
Currently, I am working to support succinct hash bin delegation as described in TAP 15 in Repository Editor for TUF.
Repository Editor for Tuf is a CLI tool that tests the usability of the public API calls provided by python-tuf while also providing a good hands-on visualization approach to learn about python-tuf and the TUF specification as a whole.

While working on it I came up with the following question:
how do we want to approach changes related to delegated bins represented by succinct_roles dictionary inside a targets role?

For example, what should we do when a user wants to do the following in a bin metadata file:

  1. add/remove a new key
  2. change threshold
  3. bump expiry
  4. add/remove a target
  5. add/remove/edit delegation
  6. bump version

I want to discuss it with everyone who is interested but will especially love to hear the opinions of the maintainers.

@MVrachev MVrachev added the discussion Discussions related to the design, implementation and operation of the project label Jul 7, 2022
@MVrachev
Copy link
Collaborator Author

MVrachev commented Jul 7, 2022

Currently, I think that:

  • changes 1 and 2 can currently be made with Targets API calls

    def add_key(self, key: Key, role: Optional[str] = None) -> None:
    and
    def revoke_key(self, keyid: str, role: Optional[str] = None) -> None:

    What probably is missing and can be a repository feature is resigning all of the bins and adding the corresponding signatures to each of the bins.

  • changes 3 to 6 all should be individually handled by the corresponding bin without the need to do anything to the delegating metadata class containing the succinct_roles dict information.

What do the others think?
Do I have the right inituition?

@MVrachev
Copy link
Collaborator Author

@mnm678 and @lukpueh I am especially curious in hearing your opinions on the matter.

@mnm678
Copy link
Contributor

mnm678 commented Jul 13, 2022

Good question. I think that anything that is included in the succinct_roles definition should be changed with Targets API calls, like the ones you show above.

But something that only affects one bin (like adding a target) can be handled directly by that bin, just like a normal role adding a target.

@lukpueh
Copy link
Member

lukpueh commented Jul 19, 2022

Sounds right to me, and I would even say that, in terms of metadata update chains, there is nothing special about hash bin delegation when compared to any other delegation. This means whenever you change the keys or thresholds in delegating metadata (root or targets), you likely want to resign the delegated metadata, if you control the signing keys, which should always be true for hash bin delegation.

And you are right, 3 to 6 shouldn't affect the delegating role, but they do usually entail a chain of updates in snapshot and timestamp.

I left a similar comment a while ago in #958 (comment)

@jku
Copy link
Member

jku commented Aug 9, 2022

Documenting the experiments on target adding and removal in repository-editor: https://github.com/vmware-labs/repository-editor-for-tuf/blob/main/tufrepo/librepo/repo.py#L131: both need a delegation search to be ergonomic (user should not need to know the exact bin role name to be able to add or remove a target) but interestingly the search can not be the same one in both cases

Expiry and version changes need to be automated anyway so the succinct delegation case isn't special.

Key changes should not have complications -- although the "succinct private key" might be useful to take into account when looking at key management: it's a single key that signs potentially tens of thousands of roles. repository-editor currently brute forces this with a tufrepo sign --all-targets which tries to sign all targets that it has keys for. This is obviously "a bit" inefficient.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion Discussions related to the design, implementation and operation of the project
Projects
None yet
Development

No branches or pull requests

4 participants