How would this work when the package manager can be run by anyone?
2FA is an authentication method (akin to asking for a password, albeit a special one). It's not a digital signature.
How would this work when the package manager can be run by anyone?
2FA is an authentication method (akin to asking for a password, albeit a special one). It's not a digital signature.
You’re correct that it’s not a digital signature. You have to be able to trust the registry (whose communications to you are signed, via HTTPS).
The signatures are an end-to-end thing. As long as you can trust the signer at time of signing, you can trust the package. No matter what happened to that package in the meantime, or what shady people were in charge of transmitting it to you. Be that five minutes after uploading or fifty years.
2FA and HTTPS only do anything extra on top of that for you, if you trust the whole chain of transmission at all times, and all custodians of the data.
Adding 2FA and HTTPS might still be a good idea as a second line of defense. But it's not a replacement for signed packages.
With a centralized registry model I already trust the registry anyway. It’s not like I’m typically going out and verifying people’s keys by emailing them to check what their real key should be or whatever.
You'd want https://en.wikipedia.org/wiki/Reproducible_builds for a clear relation between source and artefacts. Then build-server hacking would be slightly less problematic: at least anyone would be able to check whether the server had produced any compromised builds.
And you could have multiple independent entities producing builds in parallel for your open source projects that need to agree. So a hacker would need to take control of all of them.
(You don't need to figure out byzantine fault tolerance or something like that: if there's any discrepancy, sound the alarm bells and have humans investigate.)
Every build server would sign their artefacts, but the signature would just certify that some specific sources compile to some specific artefact. Not that the sources are trustworthy.
Now you need to trust: the author of the sources of the packages at the times of signing, and that at least one of the all agreeing build servers that you ever collected signatures from for the package was not compromised at the time of signing.
That signing build server doesn't even have to be the same server that build your binary packages, the latter could be run by Satan for all you care.
Yes, in practice you will trust a central registry. The benefit of the signature model is that you don't have to trust the whole chain of provenance, but only at specific points in time.