Ditching OpenPGP, a new approach to signing APT repositories
Doesn&#x27;t appear to have any domain separation. This means that if a common private key is reused in another application you may be able to use that application as an oracle to produce signatures it doesn&#x27;t intend to use.  Say you later want to have packagers sign with the same keys for security announcements. Obviously not reusing keys is good but there are reasons people do that (e.g. to share the trust of an existing key).  The lack of domain sep means stuff like a subkey itself is a valid payload signed by the master key. The modern advice is to personalize the hash function for each distinct application and use within the application.<p>Signer is setup to have the whole input in memory at once. The protocol design makes it tricky to do otherwise without using two passes at best. This could be avoided if anyone cared, e.g. using a signing scheme with prehashing (which has its own obscure tradeoffs).<p>This text says very little about validating trusted keys. A signature where you just take the pubkey from the input and don&#x27;t validate it is essentially just a really computationally expensive hash and doesn&#x27;t itself provide security.  The text about validating all signatures regardless of trusted or not could be read as saying that you just accept stuff with valid signature regardless if they were being signed by the Evil League of Evil instead of an approved source. :)<p>It uses ed25519 but doesn&#x27;t do anything about inconsistent validation criteria ( <a href="https:&#x2F;&#x2F;hdevalence.ca&#x2F;blog&#x2F;2020-10-04-its-25519am" rel="nofollow">https:&#x2F;&#x2F;hdevalence.ca&#x2F;blog&#x2F;2020-10-04-its-25519am</a> ), different implementations consider non-overlapping sets of signatures valid.  If you want to have automated klaxons on signature failures, this ought to be addressed for the same reason as &quot;repositories do not fail for a subset of users&quot;. (though it&#x27;s not fatal in this application as it is in consensus systems).<p>The format will be a little clunky if used with post-quantum signatures, e.g. sphincs+ would have a couple kilobytes of signature data stuffed on a line.  I don&#x27;t have a real recommendation there other than saying you should probably have test vectors that have some couple-kilobyte-long examples.<p>No obvious affordance for additional signed metadata, which is useful for forensics.  So, for example, if a project has multiple parties with access to the keys they may want to tag which user(s) authorized the signature or included a timestamp. If their signing is performed by a HSM (e.g. something like USB armory that allows no user access) the consistency of their metadata could be preserved. This could probably be kludged on by requiring the metadata just be inside the payload somewhere.<p>I like that there are subkeys with expiration. It&#x27;s not entirely clear to me that it&#x27;s supported to hand out multiple subkeys to different parties all with the same serial, and they stay all equally valid until a key is observed with a newer serial (at which point all subkeys need to be updated)? &quot;Subkeys may reuse&#x2F;share serial numbers provided&quot; is confusing on this point.  Good security practices suggest that if there are multiple places that can sign each should get its own subkey (so if there is a compromise you can isolate it), and this might mean that there are multiple subkeys in parallel all valid for a given trusted master.<p>Personally, I&#x27;m a little disappointed to see a proposal for repository signing that doesn&#x27;t include affordances for something like opentimestamps or a certificate-transparency like facility (e.g. to validate that parties aren&#x27;t making backdoored alternative versions for private distribution).  But I guess these could be overlaid as additional signature types and the idea is just to phase out pgp, not advance the security state of the art forward.<p>Authors of this proposal should be aware the NSA has made a formal recommendation against the use of ECC with curves smaller than 384-bits.  There are plenty of applications where compatibility, performance, or computational constraints make it attractive to stay with 256 bit options.  But if I were doing something entirely greenfield where a double size key&#x2F;signature would be a non-issue, I&#x27;d be really tempted to use ed448 instead: If nothing else, at least if there are problems in the future you at least didn&#x27;t violate existing credible advice. :)  (Really I&#x27;d want to use sphincs+ for something like this, but it&#x27;s probably too premature).  Considering how close to security theater package signing often is in practice, I&#x27;m not sure if it&#x27;s worth worrying too much that the underlying cryptosystem might be stronger-- it&#x27;s not the limiting factor.