Out-of-process Ed25519 signing extension that closes provenance-gate's in-process adversary gap
Project description
provenance-gate-signer
Out-of-process Ed25519 signing extension that closes the in-process adversary gap in provenance-gate without modifying the core package.
The problem it solves
Core provenance-gate signs captured evidence with a process-local HMAC key
(see capture.py / SECURITY.md). Any code running inside the same process
can read that key and forge T1 evidence. provenance-gate-signer moves signing
to a separate privileged process that holds an Ed25519 private key the agent
process never sees.
How it works
agent process signing service (separate, privileged)
-------------- ---------------------------------------
CaptureClient --request--> SigningService
(pubkey only) <--signed-- runs cmd, signs with PRIVATE key
real output
- The signing service is the only place the private key exists.
- The agent can only request capture; it cannot mint a valid signature.
- Verification uses the service's public key (
ServiceVerifier), so verifiers never need the private key.
Usage
# terminal A — run the privileged signing service (key never leaves here)
from provenance_gate_signer import run_service
run_service("/tmp/sign.sock") # generates + holds Ed25519 key
# terminal B — agent side (public key only)
from provenance_gate_signer import CaptureClient, ServiceVerifier
client = CaptureClient(sock_path="/tmp/sign.sock")
cap = client.capture(["pytest", "-q"]) # runs in the service, signed
assert ServiceVerifier(cap.pubkey).verify(cap) # True
# drop into core's governance unchanged:
artifact = cap.to_t1_artifact() # core EvidenceArtifact(T1)
A compromised agent process holding only the client + public key cannot
forge a passing T1 capture: it lacks the private key (see
tests/test_signer.py::test_inprocess_adversary_cannot_forge).
Status
v0.1.0 — functional sketch, fully tested. Core provenance-gate is not
modified; this is a composable extension.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file provenance_gate_signer-0.1.1.tar.gz.
File metadata
- Download URL: provenance_gate_signer-0.1.1.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
161fbdf8a3c2f955687c6c6c88ecdb5f895246614b8cd3387eaa00e38337684c
|
|
| MD5 |
7eb5d8b5897a55b87db6e550a6a0c338
|
|
| BLAKE2b-256 |
46e2610842b80d08b46d5acdce40488c270e4dc57682e988a77ebfb2ed7be535
|
File details
Details for the file provenance_gate_signer-0.1.1-py3-none-any.whl.
File metadata
- Download URL: provenance_gate_signer-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bf52af5994a551152908046371a6fe499a180520adca8356b8bad4e90470bc1
|
|
| MD5 |
915cd52c42472e7474fa2f2d7dfd6b86
|
|
| BLAKE2b-256 |
38b58ad9a58dfb3e47e692c19f9f1f773016c9386d3582ccd0fd6fd18b4aa409
|