Sign in
P-7ProposedGlobal, Registry Council

Accounts and access

Version
v1
In force since
Not yet
Next review
At adoption
Snapshot
None yet
Adopted by
Proposed for founding adoption
Signature
At adoption
Log entry
Not appended yet
Binding text
English

Proposed, not in force

Open for comment until 28 October 2026, 00:00 UTC. Nothing here binds anyone until it is adopted.

1

Scope

1.1
Bindingp7-c1

This policy sets how people sign in to GOpenCDR, how long they stay signed in, and what they must confirm again before sensitive actions.

2

Signing in

2.1
Enforced settingp7-c2

A password has at least 15 charactersfloor, counted by code point after NFKC normalisation, with no rules about kinds of characters. It is stored only as an argon2id hash.

2.2
Enforced settingp7-c3

After 5 wrong passwordsfloor in a row, an account is locked for 15 minutesfloor.

2.3
Enforced rulep7-c4

Anyone may sign in with a passkey alone, since a passkey with user verification is both factors. Root and TLD people who sign in with a password finish with a passkey.

Rule signin.passkey_for_roles.

2.4
Enforced settingp7-c5

A root person keeps at least 2 passkeysfloor and a TLD operator at least 1 passkeyfloor, so that losing one device never locks the root out.

3

Verifying an address

3.1
Enforced settingp7-c6

A registrant verifies an address with a 6-digit code valid for 15 minutesfloor, or with a link valid for 24 hoursfloor; root and TLD people verify with the link only. An address gets at most 5 wrong codes per 24 hoursfloor, counted by its keyed hash whether or not an account has it. A password reset link is valid for 1 hourfloor.

4

Sessions

4.1
Enforced settingp7-c7

A registrant's session ends after 7 daysfloor without use and after 30 daysfloor at most. A session of anyone holding a root or TLD role ends after 30 minutesfloor without use and after 12 hoursfloor at most.

4.2
Enforced settingp7-c8

Every root change, from a proposal or an invitation to an approval or a role grant, needs a passkey confirmation from the last 5 minutesfloor, and so do rollovers, new API keys, votes, emergencies, and nameserver and DS changes made in a browser. An API key cannot confirm with a passkey, so it never carries any of these but nameserver and DS changes.

5

API keys

5.1
Enforced settingp7-c9

An API key names what it may do and lives at most 400 daysfloor. Its secret is shown once and stored only as a keyed hash.

5.2
Enforced rulep7-c10

An API key never carries a root permission, never decides an approval and never manages keys.

Rule api_key.no_root. Limits: A non-negotiable.

6

Who may do what

6.1
Enforced rulep7-c11

Every action names the permission it needs, and each permission names the roles that grant it, whether the address must be verified first, whether an API key may carry it and whether it needs a passkey confirmation. Code sets the widest and the narrowest grant each permission may ever have; the grants in force sit between them.

Rule access.grants.

6.2
Bindingp7-c12

A policy may define a role made of existing permissions, never more than its author's scope may grant, and may ask for a passkey confirmation on more actions, never on fewer.