@@ -335,12 +335,13 @@ details of signing repository files and the types of keys used for each role.
335
335
336
336
Figure 2: An overview of the role metadata available on PyPI.
337
337
338
- The roles that change most frequently are *timestamp*, *snapshot* and delegated
339
- roles ( *bins* and its delegated roles ). The *timestamp* and *snapshot*
338
+ The roles that change most frequently are *timestamp*, *snapshot* and roles
339
+ delegated to by *bins* (i.e., *bin-n* ). The *timestamp* and *snapshot*
340
340
metadata MUST be updated whenever *root*, *targets* or delegated metadata are
341
341
updated. Observe, though, that *root* and *targets* metadata are much less
342
- likely to be updated as often as delegated metadata. Therefore, *timestamp*
343
- and *snapshot* metadata will most likely be updated frequently (possibly every
342
+ likely to be updated as often as delegated metadata. Similarly, the *bins* role
343
+ will only be updated when new bins are added. Therefore, *timestamp*,
344
+ *snapshot*, and *bin-n* metadata will most likely be updated frequently (possibly every
344
345
minute) due to delegated metadata being updated frequently in order to support
345
346
continuous delivery of projects. Continuous delivery is a set of processes
346
347
that PyPI uses produce snapshots that can safely coexist and be deleted
@@ -399,8 +400,8 @@ not have any of the keys required to sign for projects. However, it does not
399
400
protect projects from attackers who have compromised PyPI, since attackers can
400
401
manipulate TUF metadata using the keys stored online.
401
402
402
- This PEP proposes that the *bins* role (and its delegated roles) sign for all
403
- PyPI projects with an online key . The *targets* role, which only signs with an
403
+ This PEP proposes that the *bin-n* roles sign for all
404
+ PyPI projects with online keys . The *targets* role, which only signs with an
404
405
offline key, MUST delegate all PyPI projects to the *bins* role. This means
405
406
that when a package manager such as pip (i.e., using TUF) downloads a
406
407
distribution from a project on PyPI, it will consult the *bins* role about the
@@ -412,10 +413,10 @@ PyPI.
412
413
Metadata Expiry Times
413
414
---------------------
414
415
415
- The *root* and *targets* role metadata SHOULD expire in one year, because these
416
+ The metadata for the *root*, *targets*, and *bins* roles SHOULD each expire in one year, because these
416
417
two metadata files are expected to change very rarely.
417
418
418
- The *timestamp*, *snapshot*, and *bins * metadata SHOULD expire in one day
419
+ The *timestamp*, *snapshot*, and *bin-n * metadata SHOULD each expire in one day
419
420
because a CDN or mirror SHOULD synchronize itself with PyPI every day.
420
421
Furthermore, this generous time frame also takes into account client clocks
421
422
that are highly skewed or adrift.
@@ -545,10 +546,10 @@ monitoring, and auditing.
545
546
Managing offline keys
546
547
----------------------
547
548
548
- As explained in the previous section, the *root* and *targets* role keys MUST
549
- be offline for maximum security: these keys will be offline in the sense that
550
- their private keys MUST NOT be stored on PyPI, though some of them MAY be
551
- online in the private infrastructure of the project.
549
+ As explained in the previous section, the *root*, *targets*, and *bins* role
550
+ keys MUST be offline for maximum security: these keys will be offline in the
551
+ sense that their private keys MUST NOT be stored on PyPI, though some of them
552
+ MAY be online in the private infrastructure of the project.
552
553
553
554
There SHOULD be an offline key ceremony to generate, backup, and store these
554
555
keys in in such a manner that the private keys can be read only by the Python
0 commit comments