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

Somewhat stabilize repository metadata format #2

Closed
lberrymage opened this issue Feb 28, 2022 · 2 comments
Closed

Somewhat stabilize repository metadata format #2

lberrymage opened this issue Feb 28, 2022 · 2 comments
Assignees
Milestone

Comments

@lberrymage
Copy link
Member

lberrymage commented Feb 28, 2022

The Problem

Accrescent needs repository metadata to find and download apps in the store. The current repodata format (as described by the data classes found here and the JSON files here and here) comes with strong cryptographic guarantees of app validity. However, it has a few significant limitations, namely:

  • It expects developers to maintain a signify key for signing subrepodata and use it when updating their apps. This both raises the barrier to entry for app developers unfamiliar with signify (presumably most of them) and complicates the app upload process.
  • It pins developer usernames, meaning developers would need to request the root repodata signer (myself) to change their username every time they changed their GitHub username since we use GitHub as our authentication provider. This is unnecessary and unsustainable.

New Format Goals

A new format is in order for the stable release. It should (ideally) accomplish the following:

  • Protect new and existing users from malicious downloads in the event the repository is compromised
    • Validate first-time app installations, improving on Android's TOFU model for app signatures
    • Be resistant to downgrades
  • Be usable for developers
    • Allow developers to upload updates to existing apps without waiting for external review/signatures (provided the update meets our eligibility requirements for unreviewed uploads, documentation for which is in-progress at App Quality Control devconsole#1
    • Only require developers to use their existing tools (i.e. not require them to use signify)
  • Provide a way to fetch split APKs generated by bundletool

Non-goals

This repodata format overhaul will not define an absolutely final format, so a few things are out-of-scope for this overhaul. To name a few:

  • App descriptions
  • App categorization or tagging system
  • App developer information
  • Different release channels
  • Install-time feature modules

New design (so far)

An informal proposal of the new format is being put together at https://hackmd.io/@lberrymage/accrescent-repodata. It will eventually be moved elsewhere.

Related: accrescent/accrescent#9

@lberrymage lberrymage self-assigned this Feb 28, 2022
@lberrymage lberrymage changed the title Repository Metadata Format Overhaul Somewhat stabilize repository metadata format Feb 28, 2022
@lberrymage lberrymage added this to the Alpha Release milestone Feb 28, 2022
@lberrymage lberrymage pinned this issue Mar 3, 2022
lberrymage added a commit to accrescent/accrescent that referenced this issue Mar 11, 2022
To summarize, developers no longer need to maintain and use their own
signify keys for their own repodata. Instead, app signing keys are
pinned in a single piece of signed repodata. Details for this commmit's
goals and changes can be found at
accrescent/meta#2.

Closes #20
@lberrymage
Copy link
Member Author

This is now implemented in accrescent/accrescent@c317c28. All that's left to do is the following:

  • Update doc to reflect changes in how unsigned repodata is handled
  • PDF-ify and host doc on Accrescent website
  • Get doc reviewed by someone knowledgeable in cryptography

@lberrymage
Copy link
Member Author

I'm closing this issue with the argument that the repodata format has been "somewhat stabilized." It would still be good to have Accrescent's repodata verification and other inner workings reviewed before the public beta. However, the project is rapidly changing at the moment and it wouldn't make sense to have current processes/code undergo extensive review when they may change significantly in the near future as new needs are discovered and addressed.

@lberrymage lberrymage unpinned this issue May 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
No open projects
Status: Done
Development

No branches or pull requests

1 participant