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

Updates to README #279

Merged
merged 2 commits into from
Jul 19, 2022
Merged

Updates to README #279

merged 2 commits into from
Jul 19, 2022

Conversation

david-christiansen
Copy link
Contributor

When I was first trying to understand this framework, I had a hard time understanding the contents of the README, which seemed to assume more background knowledge than I had.

I've attempted to write up that background knowledge for inclusion here, so that other new readers have an easier time.

These updates to the README are based on my reading the TUF spec and
talking to knowledgable people. I had a hard time understanding the
original README, and I hope that this helps others who follow after
me.
Copy link
Member

@Mikolaj Mikolaj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you so much. It's all rather new to me, so I haven't verified the subject matter, but if it's not completely made up, it's invaluable. :)

If nobody with a clue reviews shortly, I will merge.

@david-christiansen
Copy link
Contributor Author

Thanks! It's based on a mix of reading the linked blog post and some verbal Q&A with @gbaz and @dcoutts . Mistakes are mine, of course, but they at least caught some of the mistakes that were there before :-)

Copy link
Member

@andreasabel andreasabel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have no clue, but given that this is correct, it is very helpful!

@hasufell
Copy link
Member

Thanks @david-christiansen ...am I assuming correctly your next PR will fix #249 ? 😅

@Mikolaj
Copy link
Member

Mikolaj commented Jul 19, 2022

In that case, let me merge so that David is free to work on #249. David, thank you very much!

@Mikolaj Mikolaj closed this Jul 19, 2022
@Mikolaj Mikolaj reopened this Jul 19, 2022
@Mikolaj
Copy link
Member

Mikolaj commented Jul 19, 2022

Doh.

@Mikolaj Mikolaj merged commit 1cee235 into haskell:master Jul 19, 2022
Copy link
Member

@adamgundry adamgundry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry I'm a bit late to the party...

### Root Keys

The Hackage root keys are held by trusted members of the Haskell community. A
signature is valid when three keyholders have signed. This means that the
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth remarking that the number three is configurable (specifically via the threshold field)? Perhaps not here, but somewhere the page could explain the semantics of thresholds.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems like a valuable change. I'll make it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #280

4. Delete the existing signatures.

Each holder of root keys should do the following:
1. Install `hackage-root-tool` on the signing machine and ensure that the key is present.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Verify to their satisfaction that the new root.json is correct. (Perhaps we should specify more precisely what the root keyholders are checking?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I'll submit a new PR with a revision.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #280


### Operational Keys

The operational keys do not presently require regeneration, unless the private keys have been lost or compromised.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make any sense to rotate the operational keys occasionally anyway, in case of undetected compromise?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that it would, but I want this text to document what is done. I think that this policy should be changed in the way you suggest, and that the README should be updated at that time.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall we open a ticket with that proposal? In which repo?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's fair. Do we have an issue tracker for recording such unresolved policy questions? I'm not certain whether to use this repo or https://github.com/haskell-infra/hackage-root-keys/issues for example.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honestly, I think the whole thing needs a bit of an overhaul, and I'd like to collect discussion on that somewhere. Some things I think we need to discuss:

  1. Rotation of root keyholders to ensure robustness in the face of people being busy or otherwise unavailable (perhaps, we expect all keyholders to sign all rounds, even above the threshold - if you don't sign two rounds in a row, then you get replaced)
  2. Key rotation for operational keys, and coordination of operational key renewal with root re-signing
  3. Explicit responsibility for getting re-signings going in time, and reminding everyone (my suggestion is that HF sends the reminder emails)
  4. Techniques for ensuring bootstrappability by older clients in the face of root key changes (e.g. if I wake an old VM image up, how do we ensure it can stack build or cabal update if there's been root keyholder changes?)

@david-christiansen
Copy link
Contributor Author

Unfortunately, I don't have time to do #249. These are docs that I am producing as a side effect of running the process, and it seems useful to put them where others will see them rather than saving them for myself. :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants