Audit-keys-mekanismen låter externa revisorer ladda ner Ed25519 public keys per kund, oberoende av Kapaciti, och verifiera att audit-bundles inte manipulerats. Nycklar publiceras enligt .well-known-konvention. Listan nedan visar nycklar som är publicerade idag.
Algoritm Ed25519. Public keys är 32-byte hex-kodade. Endpoint returnerar plain text default, JSON vid Accept: application/json. Just nu publiceras en demo-fixture (Acme Bank), riktiga kundnycklar tillkommer per pilot.
Varje org får ett Ed25519-nyckelpar som signerar audit-entries i den orgens chain. Public key publiceras här och via .well-known-endpointen, privat nyckel lämnar aldrig customer keyspace. Listan nedan innehåller en demo-fixture, produktionskunder publiceras vid go-live per pilot.
Fiktiv svensk SME-bank, demo-fixture för Kapaciti audit-chain. Inga riktiga kunder.
ed25519Public key34cd58b018c65a20d5c2d0e480f3530fbe25789d0d64573ef58edff08851efb4sha256:362a86ea4b2bd495e76519d3b0e9e5673bfa98733370eb1df2bf5f507b8a298c2026-05-18T00:00:00ZBundledemo.kapaciti.se/audit/acme-bankTre kommandon räcker. Hämta key, hämta bundle, verifiera Ed25519-signaturer och hash-länkning. Inga proprietära verktyg, ingen Kapaciti-runtime.
# Plain text, 32-byte hex public key curl https://kapaciti.se/.well-known/audit/acme-bank # JSON med fingerprint och metadata curl -H 'Accept: application/json' \ https://kapaciti.se/.well-known/audit/acme-bank
# Sanitiserad demo-bundle, samma format som production curl https://kapaciti.se/audit-evidence/acme-bank-sample.json \ -o acme-bank.json
Iterera varje entry, kontrollera att prev_hash matchar föregående entrys this_hash, och verifiera signature med Ed25519 mot org public key. Genesis-entry har prev_hash = 64 nollor.
# Node, Python eller valfri Ed25519-lib fungerar
node -e "
const nacl = require('tweetnacl');
const fs = require('fs');
const bundle = JSON.parse(fs.readFileSync('acme-bank.json'));
const pk = Buffer.from('98381a87...3ea0a9f6', 'hex');
for (const e of bundle.entries) {
if (!e.signature) continue;
const msg = Buffer.from(e.this_hash, 'hex');
const sig = Buffer.from(e.signature, 'hex');
const ok = nacl.sign.detached.verify(msg, sig, pk);
if (!ok) throw new Error('TAMPERED entry ' + e.seq);
}
console.log('chain valid, ' + bundle.entries.length + ' entries');
"Endpointen följer .well-known-konvention enligt RFC 8615. Plain text default, JSON-content-negotiation via Accept-header. CORS-tillåtet för audit-tooling i browser.
https://kapaciti.se/.well-known/audit/<org-id>
Content-Type text/plain. Body är 32-byte hex public key, en rad, avslutad med newline.
Med Accept: application/json. Returnerar org_id, algorithm, public_key, fingerprint (sha256), issued_at, verification_url, verification_doc, bundle_url.
Access-Control-Allow-Origin: *. Audit-tooling i browser kan hämta utan proxy.
Cache-Control public, max-age 300 vid edge, 3600 vid CDN. Rotation propagerar inom en timme.
Discovery av alla keys via /.well-known/audit/ (JSON-listning) eller /.well-known/audit-keys-index.json (statisk).
Femton sanitiserade entries från Acme Bank-fixture, hash-länkade, EU AI Act-artikel-mappade. Samma format som production.
● Nyhetsbrev
En sammanfattning ungefär en gång i månaden. Vad förändrats i regelverket, vilka pilot-cases vi sett och vilka vendor-shifts som påverkar svenska bolag. Skickas av oss, inte av en automation som låtsas vara oss.