Skip to content

Refresh the bundled key and align the security documentation - #4

Merged
Aevust merged 6 commits into
mainfrom
security/key-channels
Jul 24, 2026
Merged

Refresh the bundled key and align the security documentation#4
Aevust merged 6 commits into
mainfrom
security/key-channels

Conversation

@Aevust

@Aevust Aevust commented Jul 24, 2026

Copy link
Copy Markdown
Owner

Six commits, one theme: the key material, SECURITY.md and README.md
are brought back into agreement with the ratified text and with what
the code and the chain actually do.

Force-pushed on 2026-07-23 after an interactive rebase. Two commit
bodies were corrected and one sentence in SECURITY.md changed with
them; the other four commits are unchanged.

1  chore(security): refresh the bundled public key
2  docs(security): document the retrieval channels and fix citations
3  docs(readme): bring the README into line with the record
4  docs(readme): stop restating RIP statuses in prose
5  docs(readme): name the Core staging repository
6  docs(security): correct the repository labels in Canonical Sources

Key distribution (commits 1–2)

security/aevust.asc is refreshed rather than removed; SECURITY.md
positions it as the offline fallback behind the keyserver and WKD
rather than as the primary route.

The previous copy predated two changes: the 2026-06-26 signing
subkey and the 2026-07-20 primary-user-ID change. Every signature
made since 2026-06-26 comes from that subkey, so the stale copy
verifies nothing signed since then, and it presents the superseded
primary identity. The new file is the keys.openpgp.org copy, LF,
2,024 bytes armored, decoding to 1,308 bytes of OpenPGP data. The
primary fingerprint is unchanged:

ED20 B635 4EE4 526D 01F8 3B53 8B6E 3BF4 5C71 4ECA

SECURITY.md now documents all three retrieval channels — keyserver,
WKD, repository copy — with an explicit fingerprint check, a note on
the signing subkey, and a note that the channels may serve
byte-different copies of the same key: the keyserver and this
repository carry a superseded self-signature that the WKD response
does not, so the fingerprint rather than a file digest is what to
verify. That difference is exactly one packet — a superseded
2026-04-10 self-signature on the info@rincoin.org user ID — while
key material, subkeys and fingerprint are identical across channels
and either copy verifies the same signatures. Both WKD methods were
checked on 2026-07-23 and serve identical bytes.


Citations (commits 2–3)

The governance sections were relocated from RIP-0001 to GOVERNANCE.md
on 2026-07-07 (95c135c), incorporated by reference and without
normative change. Citations in SECURITY.md and README.md that still
pointed at RIP-0001 section names now point at GOVERNANCE.md.
Only the pointers move.


Factual corrections in README.md (commits 3–5)

  • The Block 840,000 note described a "minimum-peer-version floor
    (PROTOCOL_VERSION 70018)" activating at that height. No such gate
    is adopted — a standing decision, not a deferral. What ships in
    v1.1.0 is capability signaling, the PROTOCOL_VERSION bump to
    70018 and the NODE_RIN3 service bit, and it ships with the
    release rather than activating at a height.
  • The RIP-0002 status paragraph credited two phase boundaries as
    validated in production. The chain is past all three (210,000 /
    420,000 / 630,000), and the paragraph now says so.
  • Core release references used the pre-rename numbering (v1.0.7,
    v1.0.8); they now read v1.1.0 and v1.1.1. The rincoin-sim archived
    artifact remains v1.0.7, the simulator's own version.
  • The prose no longer restates RIP statuses. It had already drifted
    from the index — RIP-0004 was missing from the Draft enumeration —
    and each RIP's preamble is authoritative per RIP-0001 §RIP Status.
    What the prose keeps is what the index cannot carry: the evidence
    for RIP-0002 being Active and the reference-implementation state.
  • The Core staging repository (rincoin-core/rincoin) is now named.
    The RIP-0009 and RIP-0010 reference implementations the text
    describes live there and have not reached the canonical
    repository, so the only Core link offered could not show them.
    The pointer states the authority relationship: staging carries no
    governance authority of its own, and only the canonical
    repository is authoritative for released Core software.

Repository labels (commit 6)

Canonical Sources in SECURITY.md labelled the canonical RIPs
repository "Development", contradicting RIP-0001 §Security
Considerations, the DNS TXT record published in the same file, and
the README; the Core entry named only the canonical repository. The
staging repository is now listed beside it with its standing stated
— no governance authority of its own; changes reach the canonical
repository only as reviewed pull requests, per GOVERNANCE.md
§Change Submission Discipline and Emergency Exception — and all
three repositories in the section carry an explicit label.


Out of scope, tracked separately

  • RIP-0001 §Repository Structure lists security/*_public.asc; the
    actual file is aevust.asc. /rip-0001/ is gated, so aligning the
    pattern with the file is a separate PR through the review path.
  • fix(ci): restrict GITHUB_TOKEN permissions in rip-check
    (CodeQL warning actions/missing-workflow-permissions).
  • The @ysmreg fingerprint row remains (to be added) pending the
    Founder's input.

Neither GOVERNANCE.md nor anything under /rip-0001/ is touched.

Aevust added 6 commits July 23, 2026 22:06
Replaces security/aevust.asc with a current export. The previous
copy predated two changes to the certificate and could not verify
anything signed after either of them:

  2026-06-26  signing subkey 0ED9 9C46 B219 2E37 5381 EF4A
              C5BE F8A9 FA06 C16F was added, and all signatures
              since that date are made by it
  2026-07-20  the primary user ID became Aevust <info@rincoin.org>

The primary key fingerprint is unchanged:

  ED20 B635 4EE4 526D 01F8 3B53 8B6E 3BF4 5C71 4ECA

The file is the keys.openpgp.org copy, LF, 2,024 bytes armored:

  4c28e68d76798efe440fb504a59a4738dbc3192f91a95e2a0c56689bed09fcd8

decoding to 1,308 bytes of OpenPGP data:

  53d2953431e8a5790eb9281519a993875c741f1af3719188f231b35219a1b0cb

The rincoin.org Web Key Directory serves 1,153 bytes for
info@rincoin.org, verified 2026-07-23 against both the direct and
the advanced method. The two differ by exactly one packet: a
superseded 2026-04-10 self-signature on the info@rincoin.org user
ID, which the keyserver retains and the WKD copy does not. The key
material, the subkeys and the fingerprint are identical, and either
copy verifies the same signatures.
Rewrites the key-retrieval section around the three channels that
actually serve the key: keys.openpgp.org, the rincoin.org Web Key
Directory, and the copy in this repository. The keyserver is listed
first because it needs no clone; the repository copy is positioned
as the offline fallback rather than the primary route.

The signed provenance certificate names the keyserver and WKD as the
retrieval paths for this key. Until now this file described neither
WKD nor any verification step, so the canonical security policy was
narrower than the artifact that cites it.

Adds three things the section was missing:

  - an explicit fingerprint check after import, which is the point
    of publishing a fingerprint at all
  - a note that signatures since 2026-06-26 come from a signing
    subkey, so a copy imported before that date must be refreshed
  - a note that the channels may serve byte-different copies: the
    keyserver and the repository copy carry a superseded
    self-signature that the WKD response does not, so the
    fingerprint rather than a file digest is what to verify

The last point is deliberate. Three independently operated channels
cannot be held byte-identical, and an OpenPGP fingerprint covers only
the primary key packet, so the differences are expected rather than
evidence of tampering. Publishing a digest here would have made a
routine difference look like a discrepancy.

Separately, two citations named sections that no longer exist under
the document they named. The Core Role structure, the Version
Numbering Scheme and Version Authority, Network Ratification of
Release Candidates, the Change Submission Discipline and Emergency
Exception, Vacancy Determination, and Succession were relocated from
RIP-0001 to GOVERNANCE.md on 2026-07-07 without normative change:

  RIP-0001 §Version Authority
  RIP-0001 §Boundary of Official Support and Liability

Nothing normative changes. GOVERNANCE.md is incorporated by reference
into RIP-0001 and carries the same force, so both statements were
already correct; only the pointers were dangling. Canonical Sources
now lists the governance framework and the RIP process as separate
entries, since they are separate documents.

Also states that the roster table is authoritative for verification
keys while governance/core-role.md remains authoritative for role
assignment, matching the allocation in GOVERNANCE.md, and corrects
"the public keys listed above" to the singular, since one key is
listed.
Four statements no longer matched their sources.

The Core Role Governance section cited RIP-0001 for the Core Strategic
Authority, the version-numbering scheme and the succession procedure.
Those sections were relocated to GOVERNANCE.md on 2026-07-07 without
normative change. GOVERNANCE.md is incorporated by reference into
RIP-0001, so the statement was already correct; only the pointer was
dangling.

The note on the Block 840,000 hard fork described a
"minimum-peer-version floor (PROTOCOL_VERSION 70018)" activating at
that height. A MIN_PEER_PROTO_VERSION gate is not adopted, and the
decision is a standing one rather than a deferral: RIN3 is a soft
fork, so excluding older peers would manufacture the split the flag
day exists to prevent, and a peer's protocol version is self-reported
and therefore unenforceable against a hostile fork. What ships in
v1.1.0 is capability signaling — the PROTOCOL_VERSION bump to 70018
and the NODE_RIN3 service bit — following the pattern of NODE_WITNESS
for SegWit and NODE_MWEB for Litecoin's MWEB. It ships with the
release; it does not activate at a height.

The RIP-0002 status paragraph credited two phase boundaries as
validated in production. The emission schedule places boundaries at
blocks 210,000, 420,000 and 630,000, and the chain is past all three,
so the 2 to 3 boundary belongs in that list as well.

Core release references still use the pre-rename numbering. The
release formerly prepared as v1.0.7 is v1.1.0, and the wallet-layer
guard formerly planned for v1.0.8 is planned for v1.1.1. The
rincoin-sim archived artifact remains v1.0.7, which is the simulator's
own version and is unaffected by the Core renaming.
The paragraph under the Activation Timeline restated the Status
column of the index and had already drifted from it: RIP-0004 is
Draft in the index and was absent from the prose enumeration.
RIP-0001 §RIP Status places the authoritative status in each RIP's
own preamble, and the index is this file's designated job per
RIP-0001 §Repository Structure, so a third copy in prose can only
fall out of date as RIPs are added or advance.

The prose now carries only what the index does not:

  - the evidence for RIP-0002 being Active — enforcement from
    genesis via Core v1.0.6, with the Phase 0-1, 1-2 and 2-3
    boundaries validated in production
  - the reference-implementation state, which RIP-0001 §RIP Status
    ties to advancement past Draft: where each implementation
    lives, the commits that carry the RIP-0011 mainnet seal, and
    which RIPs have none yet

A pointer notes that statuses live in the index above and that each
RIP's preamble is authoritative.
The paragraph above states that the RIP-0009 and RIP-0010 reference
implementations are in progress in Core v1.1.0, and the only Core
repository linked was the canonical one. That work is in staging and
has not reached the canonical repository yet, so a reader following
the link could not find what the text said was there.

GOVERNANCE.md §Change Submission Discipline and Emergency Exception
already describes this two-repository model: development and
validation occur in a Core Role holder's working repository, and the
official repository is a verified record of reviewed changes rather
than a direct editing surface. Naming the staging repository makes
that model checkable instead of leaving the reader to infer it.

The pointer states the authority relationship rather than only the
URL. Staging permits direct commits, which is correct for a working
repository and would look otherwise on a repository named rincoin
under an organization named rincoin-core. This file already declares
that unauthorized forks carry no governance authority, so a second
Core repository linked from it has to be positively classified: it
carries no governance authority of its own, and only the canonical
repository is authoritative for released Core software.

This also restores the symmetry SECURITY.md already has on the RIPs
side, where the canonical and development repositories are listed
separately.
Two of the five entries did not say what the repository they named
actually is.

The Core entry named only the canonical repository. Core development
and staging take place in rincoin-core/rincoin, and the README now
names it, so a reader comparing the two documents would find a
repository in one that the security policy does not account for. It
is listed here with the authority relationship stated, not just the
URL: staging carries no governance authority of its own, and changes
reach the canonical repository only as reviewed pull requests, per
GOVERNANCE.md §Change Submission Discipline and Emergency Exception.

The RIPs entry was labelled "Development". Three sources say
otherwise, one of them further down this same file:

  rip-0001 §Security Considerations names both rips.rincoin.org and
  github.com/Aevust/rincoin-rips as the authoritative source for all
  official RIPs

  the DNS TXT record published below carries
  canonical-rips=https://github.com/Aevust/rincoin-rips

  the README describes the repository as the canonical source

A section titled Canonical Sources calling the canonical RIPs
repository a development repository is the kind of discrepancy this
file exists to prevent. Both repositories are now labelled explicitly
rather than one carrying an unqualified name and the other a
qualifier that contradicted the record.
@Aevust
Aevust merged commit 7cf47e9 into main Jul 24, 2026
3 checks passed
@Aevust Aevust mentioned this pull request Jul 24, 2026
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant