kxco-pq-agent 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/ASSESSMENT.md +107 -0
  2. package/README.md +43 -4
  3. package/package.json +5 -3
package/ASSESSMENT.md ADDED
@@ -0,0 +1,107 @@
1
+ # Assessment notes
2
+
3
+ Where this package's boundary falls, what agility it has, and what constrains
4
+ its lifecycle.
5
+
6
+ Algorithm conformance belongs to
7
+ [`kxco-post-quantum`](https://www.npmjs.com/package/kxco-post-quantum) and is
8
+ published in that package's evidence bundle. It is referenced here, never
9
+ restated.
10
+
11
+ ## Boundary
12
+
13
+ **What the assessed thing is.** An identity for a non-human actor: a
14
+ KYC-verified institution sponsors an ML-DSA-65 keypair for an agent and binds a
15
+ capability scope to it at issuance.
16
+
17
+ **Where the containment properties are actually enforced. This is the boundary
18
+ statement that matters most in this package.** The README states three
19
+ properties: an agent cannot widen its own authority, cannot mint another agent,
20
+ and always traces to a named institution. They hold, and a buyer needs to know
21
+ *what* holds them, because it is not this library.
22
+
23
+ - *Scope is enforced relay-side, and only relay-side.* An out-of-scope
24
+ operation is refused before it reaches the chain. There is no client-side
25
+ equivalent: `src/scope.js` exports `validateScope`, which checks the shape of
26
+ a manifest at issuance, and `hashScope`, which binds it to the credential.
27
+ Neither evaluates a proposed action against the scope. So the boundary that
28
+ contains a compromised agent is a KXCO service, not a property of this
29
+ library and not something the agent's own process could apply even if it
30
+ wanted to.
31
+ - *The scope is signed by the sponsor at issuance and cannot be changed.*
32
+ Widening requires revoke and re-issue. That part is cryptographic.
33
+ - *Sponsorship requires KYC.* That is an operational control at KXCO, not a
34
+ protocol one.
35
+
36
+ The honest summary: the cryptography proves which agent acted and under whose
37
+ sponsorship; the limits on what that agent may do are enforced by our relay. An
38
+ assessment that credits this package with the enforcement has misplaced it.
39
+
40
+ **Required service connection.** `relay.kxco.ai`, which negotiates the hybrid
41
+ key exchange group `X25519MLKEM768` under TLS 1.3, measured 7 September 2026
42
+ with OpenSSL 3.5.6:
43
+
44
+ ```
45
+ echo | openssl s_client -connect relay.kxco.ai:443 -servername relay.kxco.ai \
46
+ -groups X25519MLKEM768 -tls1_3 2>&1 | grep "Negotiated TLS1.3 group"
47
+ ```
48
+
49
+ The certificate is ECDSA P-384 from Let's Encrypt, so endpoint authentication
50
+ is classical, as it is across the public WebPKI. Since scope enforcement
51
+ happens at the far end of that connection, availability of the relay is a
52
+ functional dependency and not merely a convenience: no relay, no enforced
53
+ action.
54
+
55
+ **Retain history.** Nothing stored here. An agent's actions are recorded where
56
+ they land, on Armature L1 or in whatever audit log the sponsor keeps.
57
+
58
+ **Start and update.** No release signing of its own. Published through CI with
59
+ npm provenance.
60
+
61
+ ## Agility
62
+
63
+ **Inherited, and coordinated.** Signing primitives belong to
64
+ `kxco-post-quantum`. Because an agent's identity is registered on Armature L1
65
+ and its scope is checked by the relay, a parameter-set change here is a
66
+ chain-and-relay change before it is a client change. See the same constraint in
67
+ `kxco-pq-chain`.
68
+
69
+ **The scope manifest is a data format and it has no version field.** The scope
70
+ object carries `payments`, `attestations`, `auditLog` and `credentials` keys.
71
+ It is signed at issuance, so it cannot be altered, and there is no version
72
+ marker inside it to distinguish a future shape from the current one. Adding a
73
+ capability class later is therefore a change that both signer and enforcer must
74
+ agree on out of band. Worth noting beside the version prefixes that
75
+ `kxco-pq-attest` and `kxco-pq-tls` do carry.
76
+
77
+ ## Lifecycle
78
+
79
+ **This package has an unpublished release.** The tree is at **1.0.8** and npm
80
+ carries **1.0.7**. So the source here is ahead of what anyone can install, and
81
+ an assessment reading this repository is not reading the shipped artefact
82
+ unless that is reconciled. It is the only package in the family in this state.
83
+
84
+ **Supported versions.** One line moving forward, matching the family.
85
+
86
+ **Pins.** `kxco-post-quantum` is declared `^1.3.0` and the tree the evidence
87
+ bundle was last built from resolved it to **1.3.0**, against a current
88
+ primitives release of 1.7.2. `02-primitives.json` records the resolved version.
89
+
90
+ **Ceiling.** No hardware or runtime ceiling. Signing is one ML-DSA-65 operation
91
+ per action. The practical limits are the relay's rate limits and the scope
92
+ caps themselves, which are policy rather than performance.
93
+
94
+ **Blocking dependencies.** The upstream library, and the relay service, which
95
+ is ours and which is where enforcement lives. For this package the relay
96
+ dependency is stronger than elsewhere: `kxco-pq-network` can fall back to
97
+ `anchored` and lose only revocation checking, whereas an agent with no relay
98
+ has no enforced scope.
99
+
100
+ **Roadmap.** No external audit, no bug bounty. No published availability target
101
+ for the relay.
102
+
103
+ ## Correcting this document
104
+
105
+ The TLS measurement is reproducible with the command given. Everything else is
106
+ checkable against `src/` and the README. If a claim does not match, that is a
107
+ defect worth reporting through the repository's issues.
package/README.md CHANGED
@@ -4,6 +4,33 @@ Post-quantum identity for AI agents and autonomous systems.
4
4
 
5
5
  ---
6
6
 
7
+ ## Release integrity
8
+
9
+ Every release of this package is checkable without asking us for anything.
10
+
11
+ - **Provenance.** Each release carries a SLSA provenance attestation tying the
12
+ published tarball to the commit and workflow that built it. Verify with
13
+ `npm audit signatures`, or read it directly from
14
+ `registry.npmjs.org/-/npm/v1/attestations/kxco-pq-agent@<version>`.
15
+ - **Bill of materials.** A CycloneDX SBOM is published as a GitHub Release asset
16
+ at `releases/download/v<version>/sbom.cyclonedx.json`, a permanent
17
+ unauthenticated URL. Not an expiring build artifact.
18
+ - **Pinned where it matters.** Third-party dependencies are pinned to exact
19
+ versions, never ranges, so the code that performs the cryptography cannot
20
+ change without a release. Sibling `kxco-*` packages sit on caret ranges
21
+ deliberately: it means a correctness fix in the base package reaches you
22
+ without a release of every package above it. That is not theoretical. When
23
+ `@noble/post-quantum` 0.7.1 was found to fail NIST SLH-DSA verification
24
+ vectors, the revert in the base package propagated here on the next install.
25
+ Every GitHub Action is pinned by 40-character commit SHA.
26
+ - **Conformance underneath.** The cryptography comes from
27
+ [`kxco-post-quantum`](https://www.npmjs.com/package/kxco-post-quantum), which
28
+ is run against **2,103 NIST ACVP vectors: 1,793 passed, 0 failed, 310 skipped** and a **225-check
29
+ cross-implementation interoperability matrix** against liboqs, Bouncy Castle
30
+ and two pure-Python implementations, in both directions and with negative
31
+ controls. Its published tarball also rebuilds bit-for-bit from its own tag,
32
+ verified in CI on every run.
33
+
7
34
  ## The problem it solves
8
35
 
9
36
  AI systems cannot pass KYC. An LLM, robot, IoT device, or daemon has no legal standing to authenticate itself to a regulated network. This package solves that with a delegation model: a KYC-verified institution sponsors the agent by signing its ML-DSA-65 public key alongside a locked capability scope. The agent then signs its own relay operations independently, presenting the sponsor's credential as proof of authority. The KXCO relay validates both signatures before accepting any intent — the institution's approval is cryptographically bound to every action the agent takes.
@@ -162,11 +189,23 @@ Submits a payment intent. `to` is an EVM address or KXCO kid. `amount` is in ARM
162
189
 
163
190
  ---
164
191
 
165
- ## What this does NOT do
192
+ ## The containment model
193
+
194
+ Three properties hold for every agent identity, and they are the reason to use
195
+ this rather than handing an agent a key.
196
+
197
+ **An agent can never widen its own authority.** The capability scope is fixed
198
+ at issuance and enforced relay-side, so an out-of-scope operation is refused
199
+ before it reaches the chain. Compromising the agent does not enlarge what the
200
+ agent may do.
201
+
202
+ **An agent can never mint another agent.** Only a KYC-verified sponsor issues
203
+ an identity, so there is no path from one compromised agent to a population of
204
+ them.
166
205
 
167
- - Agents cannot issue credentials to other agents. Only a KYC-verified sponsor can create an agent identity.
168
- - Agents cannot exceed the scope declared at issuance. The relay enforces scope server-side; attempting an out-of-scope operation returns an error.
169
- - Agents cannot operate without a sponsor. There is no anonymous or self-signed credential mode.
206
+ **Every agent traces to a named, KYC-verified institution.** There is no
207
+ anonymous or self-signed mode, which is what makes an agent's action
208
+ attributable to a legal entity when a supervisor asks who authorised it.
170
209
 
171
210
  ---
172
211
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kxco-pq-agent",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "Post-quantum identity for AI agents and autonomous systems: a KYC-verified institution sponsors an ML-DSA-65 keypair and locked capability scope for any agent that cannot pass KYC itself.",
5
5
  "keywords": [
6
6
  "post-quantum",
@@ -48,7 +48,8 @@
48
48
  },
49
49
  "files": [
50
50
  "src",
51
- "LICENSE"
51
+ "LICENSE",
52
+ "ASSESSMENT.md"
52
53
  ],
53
54
  "engines": {
54
55
  "node": ">=20.19"
@@ -57,7 +58,8 @@
57
58
  "kxco-post-quantum": "^1.3.0"
58
59
  },
59
60
  "scripts": {
60
- "test": "node --test --test-timeout=30000 test/agent.test.js"
61
+ "test": "node --test --test-timeout=30000 test/agent.test.js",
62
+ "evidence": "node scripts/build-evidence.mjs"
61
63
  },
62
64
  "funding": "https://kxco.ai",
63
65
  "publishConfig": {