Skip to content
GitLab
    • GitLab: the DevOps platform
    • Explore GitLab
    • Install GitLab
    • How GitLab compares
    • Get started
    • GitLab docs
    • GitLab Learn
  • Pricing
  • Talk to an expert
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
    • Switch to GitLab Next
    Projects Groups Snippets
  • Sign up now
  • Login
  • Sign in / Register
  • sequoia sequoia
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 255
    • Issues 255
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 5
    • Merge requests 5
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • sequoia-pgp
  • sequoiasequoia
  • Issues
  • #595
Closed
Open
Issue created Oct 21, 2020 by Neal H. Walfield@nwalfieldOwner

SHA1 Policy

StandardPolicy rejects SHA1, and considers it to be broken since 2013. Unfortunately, this results in a fair amount of breakage:

  • Secure Drop, apparently, doesn't have processes in place to update keys stored on offline computers (or the users are unwilling to do so)

  • Microsoft's security notification key, which was created in 2019, uses SHA1 for the self signatures.

$ sq inspect /tmp/ms.pgp 
/tmp/ms.pgp: OpenPGP Certificate.

    Fingerprint: 2D34 1B18 A749 D00E 0D12  B60E 6CC7 3355 668F 7B75
                 Invalid: No binding signature at time 2020-10-21T08:24:54Z
Public-key algo: RSA (Encrypt or Sign)
Public-key size: 2048 bits
  Creation time: 2019-10-31 17:09:23 UTC

         UserID: Microsoft Security Notifications <securitynotifications@e-mail.microsoft.com>
                 Invalid: Policy rejected non-revocation signature (GenericCertification)
                 because: SHA1 is not considered secure since 2013-01-01T00:00:00Z

(The use of the preferred-email-encoding@pgp.com notation suggests that this certificate was generated by a Symantec PGP product.)

  • Examining the Debian Keyring, we see:

    • 63 out of 778 certificates (8%) use SHA1 to protect at least one User ID, and
    • 19 of the 234 certificates with a non-revoked, live, signing-capable subkey protect the subkey using SHA1 (9 use something stronger than SHA1 for the binding signature, but SHA1 for the backsig; this is probably due to GnuPG reusing backsigs when updating signatures).
$ dpkg -l debian-keyring
...
ii  debian-keyring 2020.09.24
$ keyring-linter /usr/share/keyrings/debian-keyring.gpg
...
885 certificates.
778 certificates valid under the standard policy.
884 certificates valid under the standard policy + sha1.
Of the 778 certificates valid under the standard policy:
  778 have >0 user ids under the standard policy
  778 have >0 user ids under the standard policy + sha1
  63 have >0 user ids that are only protected by SHA1
  0 have all user ids only protected by SHA1
Of the 778 certificates valid under the standard policy:
  234 certificates have >0 non-revoked, live, signing-capable subkeys under the standard policy
    Of these 234 certificates, 19 have >0 subkeys protected by SHA1
      Of these 19, 10 use SHA1 for the binding signature
      Of these 19, 9 use something strong for the binding signature, but SHA1 for the backsig

Given that many Debian Developers, who are probably the most sophisticated OpenPGP users, still use SHA1, we need to reevaluate our decision to de facto unconditionally bad list SHA1.

As I understand the attacks on SHA1, SHA1 is susceptible to collisions, but not preimage attacks. This means that an attacker can create two different documents with the same SHA1 hash, but they can't create, say, a subkey that has the same SHA1 hash as some other subkey. Thus, it is still okay to rely on SHA1 to authenticate binding signatures.

Given this, I propose that we change the StandardPolicy to use different policies depending on how a hash is used. Concretely, instead of just having (StandardPolicy::accept_hash)[https://docs.sequoia-pgp.org/sequoia_openpgp/policy/struct.StandardPolicy.html#method.accept_hash], we'd have, say: StandardPolicy::accept_collision_resistent_hash and StandardPolicy::accept_second_preimage_resistent_hash. We'd use the former when checking signatures over documents, and the latter when checking binding signatures, self signatures, etc.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking