feat: release OTP and Passkey Tools 0.1.0
This commit is contained in:
+40
@@ -0,0 +1,40 @@
|
||||
# Security model
|
||||
|
||||
## Data flow
|
||||
|
||||
All inputs are processed in the browser tab. There are no application `fetch`, WebSocket, beacon, analytics, service-worker, credential-storage or remote-metadata paths. OTP secrets, OCRA PIN input, imported files, WebAuthn responses and live test credential metadata are React/session memory and disappear on reload or **Clear session**.
|
||||
|
||||
Downloads and clipboard writes require a user action. Exports are not encrypted. The UI masks OTP secrets and provisioning URIs by default, but masking is not memory protection.
|
||||
|
||||
## Trust boundaries
|
||||
|
||||
- The static release and its hosting origin are trusted code. A compromised host can alter JavaScript and steal subsequently entered material; verify the release SHA-256 when this matters.
|
||||
- Imported URIs, CSV, XML, protobuf, JSON, Base64url and CBOR are untrusted. Size/depth/count limits are applied before or during decoding. Imported text is rendered by React, never as markup. The only generated markup insertion is the project-owned QR SVG serializer, which receives an already serialized provisioning URI and emits path coordinates only.
|
||||
- WebAuthn client data is verified as exact strings/bytes. Origins and RP IDs are not suffix-matched. The expected challenge is caller-supplied ceremony state; the tool cannot prove that a server generated or consumed it once.
|
||||
- Signature verification establishes consistency with the supplied COSE public key, not account ownership or attestation trust.
|
||||
|
||||
## Origin isolation
|
||||
|
||||
`toolbox.add-ideas.de/apps/auth/` shares an origin with every other Portal app. Live registration/assertion is therefore disabled there. It is enabled only for localhost development or exact host `auth.toolbox.add-ideas.de`. Deploy the dedicated host top-level with `frame-ancestors 'none'`; do not change its RP ID to the parent domain.
|
||||
|
||||
## Cryptography
|
||||
|
||||
HMAC, digest, random generation, public-key import and signature verification use the browser Web Cryptography API. No custom cryptographic primitive is implemented. OTP dynamic truncation and OCRA data-input assembly are project code covered by RFC vectors.
|
||||
|
||||
SHA-1 remains available only where HOTP/TOTP/OCRA interoperability standards require it; it is used inside HMAC or as an explicitly selected OCRA PIN digest, not as a collision-resistant document signature.
|
||||
|
||||
## Parser limits
|
||||
|
||||
- Provisioning URI: 16 KiB.
|
||||
- Migration/CSV/PSKC input: 4 MiB.
|
||||
- Google protobuf: bounded input, varints at most 10 bytes, supported wire types only.
|
||||
- CBOR: 4 MiB, depth 32, 10,000 items, definite lengths only, duplicate map keys rejected.
|
||||
- OTP secret: 1 KiB; random generation: 16–1,024 bytes.
|
||||
- Verification windows: TOTP 100 steps maximum; HOTP 10,000 counters maximum.
|
||||
- QR encoder: version 10 maximum.
|
||||
|
||||
## Not a vault or identity provider
|
||||
|
||||
Do not use this app as the only copy of a credential. It does not offer encrypted persistence, recovery codes, account recovery, server-side challenge state, rate limiting, audit logging, device attestation policy, FIDO certification, or phishing protection outside normal browser WebAuthn behavior.
|
||||
|
||||
Report vulnerabilities through the repository issue tracker without including real secrets or production assertions.
|
||||
Reference in New Issue
Block a user