Skip to main content

Known limits

This page lists what Certichain does not do yet, what is built but switched off, and what waits on a decision or a review. It is a snapshot as of 2026-10-24, taken from the code and the handbook's progress tracker. Each item says where to look for more.

Readiness​

LimitDetail
Test network onlyDeployed on Sepolia with synthetic data. No production deployment exists.
No external auditThe external smart contract audit and the external zero-knowledge audit are planned roadmap steps and not started.
No independent cryptography review yetThe encryption and key-derivation design was meant to be reviewed independently; the reviewer and date are still to be named.
Manual checks pendingSeveral browser checks with MetaMask (admin registration, upload, verify page states, the v0.3 screens, /access) and a two-phone test of the phone wallet are recorded as waiting for the owner.
Live storage smoke for sharingSharing by grant and link, key replacement and removal of old copies have passed automated tests; a live run against Pinata with the right token scopes is still open.

Contracts and governance​

LimitDetail
Admin handover to the timelockSet 0.5.0 is administered by the timelock. For the active set 0.3.0 the timelock was nominated on 2026-10-17 and could accept from 2026-10-20 08:42 UTC; completion is not recorded in the handbook. See Access control and governance.
Set 0.5.0 not activeKey retirement with a successor and guardian unpause exist only in contract version 0.5.0, which is deployed on Sepolia but not the active set. Activating it is a separate decision; some test issuers still need registering in it.
Guardian cannot unpause in 0.3.0Only the admin (a multisig) can lift a pause in the active set.
Expiry not offered in the formContracts support validUntil; the issue form always sets 0 (no expiry).
Issue time set by the issuerissuedAt is set by the issuer's browser, so the contract accepts a time earlier than the block (accepted by design).
Zero commitments not refused on chainThe registry does not reject a zero subjectCommitment or metadataHash; the app never produces them.
Access groups are smallAt most 64 commitments per credential ever (removal does not free a slot); proofs for group depth above 6 are not served.

Wallets and keys​

LimitDetail
Contract-wallet issuers in the appA Safe or other ERC-1271 wallet can be an issuer on chain, but the site cannot derive student salts or document keys for it and refuses with a clear message. Such an issuer cannot invite students or protect documents through the site.
Deterministic signing requiredFeatures that derive keys need a wallet that signs the same typed data the same way twice (RFC 6979). Other wallets are refused.
Issuer key changesA new issuer wallet means new student salts, a new encryption key and a new badge key. Retirement in 0.5.0 keeps credentials valid, but encrypted documents and custom record types stay with the old key. See Key management.
Phishing for key signaturesA site that gets a user to sign the EncryptionKey typed data can derive that user's encryption key.

Documents and storage​

LimitDetail
Access cannot be withdrawn retroactivelyA recipient or link holder who already read the document, or kept the key and a copy, keeps access. Key replacement protects only new copies.
Capability links are bearer keysAnyone with the link can read the document.
Metadata visible on stored containersThe header shows the issuer and document hash; the size is visible to the nearest 64 KiB.
Erasure is best effortUnpinning removes Pinata's copy; other IPFS nodes or gateway caches may keep ciphertext for a while.
No second pinning service yetThe machinery exists, but no adapter is registered; naming any service in SECOND_PIN_PROVIDER fails.
File types and sizePDF, PNG and JPEG only, up to 3.5 MB per file (4 MB per encrypted upload).
Not post-quantumX25519 and ECDSA are not resistant to quantum computers; the container format is versioned so the suite can change.

Verification and standards​

LimitDetail
Reads trust the RPC endpointsSeveral endpoints are used for failover, not compared. Status reads can lag a just-mined change briefly.
Offline checks cannot see statusAn offline package check or a phone QR code checked offline proves the signature, not the current status; status needs a chain read.
Built but off until configuredThe verification API (needs API_SIGNER_KEY), status lists (need STATUS_LIST_SIGNER_KEY and two public settings) and the monitor (needs CRON_SECRET, OPS_WEBHOOK_URL and a schedule) are switched off until the owner sets them. The canary probe and monitor history also need Redis and OPS_PROBE_*.
Custom cryptosuiteGeneric VC libraries need a plugin to check the certichain-eip712-2026 proof. The plain status list entries in an exported VC are not themselves signed (the lists are).
Standard badge proof scopeThe eddsa-rdfc-2022 proof alone does not show that the key belongs to a registered institution or that the credential is still valid.
Open Badges validatorChecked against the vendored 1EdTech schema; a run through an official validator is still open.
Future validFromThe VC check does not reject a validFrom in the future.
Trusted setup evidenceThe key checks show the Semaphore keys are consistent with the circuit source and the public Powers of Tau, not that the ceremony was honest; the ceremony outcome page and the Semaphore v4 audit report are still to be located.

Web application and server​

LimitDetail
Content security policyThe policy has no script-src directive yet; a strict script policy needs nonces.
No hosted indexerLists are rebuilt from logs in the browser; v0.2 lists need NEXT_PUBLIC_START_BLOCK. Long histories can make first loads slow.
Bulk import paceOne wallet prompt per row; a try that was never sent waits for a manual choice. A 50-row run with a funded wallet on Sepolia is still open.
Legacy v0.2 pathWhen the app is configured for v0.2 it reads and writes plaintext personal data on chain and accepts plaintext uploads. Use synthetic data only.

Privacy and compliance​

LimitDetail
DPIA not reviewedThe data protection impact assessment is a draft awaiting legal review. See Privacy design.
Access receipts show the senderThe access gate hides which admitted identity proved, not the address that sent the proof.
Issuer can link enrolled studentsThe issuer can re-derive a student's stable salt and so link that student's commitments.

Source files​

  • docs/progress/PROGRESS.md (handbook tracker, status as of 2026-10-24)
  • src/lib/security-headers.ts, src/lib/doc-crypto/constants.ts, src/lib/upload-limits.ts
  • src/lib/server/pinning/providers.ts
  • src/services/domain/enrolment-service.ts, src/services/documents/document-errors.ts
  • blockchain/contracts/v03/IssuerRegistry.sol, blockchain/contracts/zk/CertichainAccessGate.sol
  • src/contracts/v03/deployment.11155111.json