Skip to content

Commit 4d1e05c

Browse files
committed
Merge pull request #1 from mnm678:bins_offline
2 parents 2bf2c95 + 8e30797 commit 4d1e05c

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

pep-0458-2.png

4.75 KB
Loading

pep-0458.txt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -335,12 +335,13 @@ details of signing repository files and the types of keys used for each role.
335335

336336
Figure 2: An overview of the role metadata available on PyPI.
337337

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*
340340
metadata MUST be updated whenever *root*, *targets* or delegated metadata are
341341
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
344345
minute) due to delegated metadata being updated frequently in order to support
345346
continuous delivery of projects. Continuous delivery is a set of processes
346347
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
399400
protect projects from attackers who have compromised PyPI, since attackers can
400401
manipulate TUF metadata using the keys stored online.
401402

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
404405
offline key, MUST delegate all PyPI projects to the *bins* role. This means
405406
that when a package manager such as pip (i.e., using TUF) downloads a
406407
distribution from a project on PyPI, it will consult the *bins* role about the
@@ -412,10 +413,10 @@ PyPI.
412413
Metadata Expiry Times
413414
---------------------
414415

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
416417
two metadata files are expected to change very rarely.
417418

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
419420
because a CDN or mirror SHOULD synchronize itself with PyPI every day.
420421
Furthermore, this generous time frame also takes into account client clocks
421422
that are highly skewed or adrift.
@@ -545,10 +546,10 @@ monitoring, and auditing.
545546
Managing offline keys
546547
----------------------
547548

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.
552553

553554
There SHOULD be an offline key ceremony to generate, backup, and store these
554555
keys in in such a manner that the private keys can be read only by the Python

0 commit comments

Comments
 (0)