SaQura Crypto API · REST · v1
SaQura Crypto API
Einführung
Die SaQura Crypto API ist eine gehostete REST-Schnittstelle für Post-Quanten-Kryptographie über HTTPS — ohne SDK, aus jeder Sprache nutzbar. Sie nutzt dieselbe SaQura-Engine (1.0.11) wie die SDKs.
- Base URL:
https://crypto.saqura.de - Algorithmen: AES-256-GCM, RSA-4096 (OAEP/PSS), PBKDF2-SHA512, PQC-KEM (FrodoKEM / Classic-McEliece / X25519+ML-KEM FIPS 203), PQC-Signaturen (ML-DSA FIPS 204 / SLH-DSA FIPS 205)
- Datenschutz: Inhalte werden im Arbeitsspeicher verarbeitet, nicht gespeichert; Klartext/Schlüssel erscheinen weder in Antworten noch in Logs.
Fähigkeiten abfragen (ohne Key): GET /v1/capabilities · GET /health
curl https://crypto.saqura.de/v1/capabilitiesAuthentifizierung
Alle /v1-Krypto-Endpoints erfordern einen API-Key im Authorization-Header (Bearer, Stripe-Stil):
Authorization: Bearer sk_live_…sk_live_…= Produktion,sk_test_…= Test.- Key beziehen über saqura.de/pricing (SaQura-Crypto-Abo).
- Fehlender/ungültiger Key →
401. Tarif deckt Funktion nicht →403.
Schnellstart
AES-256-GCM
# Encrypt (key optional — omit and the API returns a fresh key)
curl -X POST https://crypto.saqura.de/v1/aes/encrypt \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"plaintext":"hello"}'
# -> {"ciphertext":"…","key":"…"}
# Decrypt
curl -X POST https://crypto.saqura.de/v1/aes/decrypt \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"ciphertext":"…","key":"…"}'
# -> {"plaintext":"hello"}Endpoints
Alle Pfade sind relativ zu https://crypto.saqura.de. JSON-Felder in camelCase.
| Methode & Pfad | Request | Response | Tarif |
|---|---|---|---|
GET /v1/usage | — | {plan, period, used, includedPerMonth, remaining, rateLimitPerMinute, overage} | Alle |
POST /v1/aes/encrypt | {plaintext, key?} | {ciphertext, key} | Standard |
POST /v1/aes/decrypt | {ciphertext, key} | {plaintext} | Standard |
POST /v1/password/hash | {password} | {hash} | Basic |
POST /v1/password/verify | {password, hash} | {valid} | Basic |
POST /v1/rsa/keypair | {} | {publicKey, privateKey} | Basic |
POST /v1/rsa/encrypt | {plaintext, publicKey} | {ciphertext} | Basic |
POST /v1/rsa/decrypt | {ciphertext, privateKey} | {plaintext} | Basic |
POST /v1/rsa/sign | {data, privateKey} | {signature} | Basic |
POST /v1/rsa/verify | {data, signature, publicKey} | {valid} | Basic |
POST /v1/quantum/keypair | {strength?, generation?} | {publicKey, privateKey, strength, generation} | Pro |
POST /v1/quantum/encrypt | {plaintext, publicKey} | {ciphertext, encapsulatedSecret} | Pro |
POST /v1/quantum/decrypt | {ciphertext, privateKey, encapsulatedSecret} | {plaintext} | Pro |
POST /v1/quantum/sign/keypair | {strength?, algorithm?} | {publicKey, privateKey, strength, algorithm} | Pro |
POST /v1/quantum/sign | {data, privateKey, algorithm?} | {signature} | Pro |
POST /v1/quantum/verify | {data, signature, publicKey, algorithm?} | {valid} | Pro |
Eigene Nutzung
GET /v1/usage gibt den Verbrauch des eigenen API-Keys im laufenden Monat zurück (Plan, genutzte Anfragen, Inklusivkontingent, Rest, Limit, Overage). Authentifiziert wie alle /v1-Endpoints, aber selbst NICHT abgerechnet — Sie sehen ausschließlich Ihre eigenen Werte.
# Your own usage for the current month (authenticated, NOT billed)
curl https://crypto.saqura.de/v1/usage \
-H "Authorization: Bearer sk_live_…"
# -> {"plan":"Pro","period":"2026-06","used":1234,
# "includedPerMonth":2000000,"remaining":1998766,
# "rateLimitPerMinute":1200,"overage":{"requests":null,"per1000":1,"note":"…"}}Post-Quanten (KEM + Signaturen)
KEM-Verschlüsselung (Pro+). Generationen: Gen4–7 (BSI-Profil) und Gen8 (X25519 + ML-KEM, FIPS 203). Entschlüsseln benötigt ciphertext UND encapsulatedSecret.
# 1) key pair (Gen4 default; Gen8 = X25519 + ML-KEM / FIPS 203)
curl -X POST https://crypto.saqura.de/v1/quantum/keypair \
-H "Authorization: Bearer sk_live_…" -H "Content-Type: application/json" \
-d '{"strength":"Highest","generation":"Gen8"}'
# -> {"publicKey":"…","privateKey":"…","strength":"Highest","generation":"Gen8"}
# 2) encrypt to the public key
curl -X POST https://crypto.saqura.de/v1/quantum/encrypt \
-H "Authorization: Bearer sk_live_…" -H "Content-Type: application/json" \
-d '{"plaintext":"secret","publicKey":"…"}'
# -> {"ciphertext":"…","encapsulatedSecret":"…"}
# 3) decrypt (needs both ciphertext and encapsulatedSecret)
curl -X POST https://crypto.saqura.de/v1/quantum/decrypt \
-H "Authorization: Bearer sk_live_…" -H "Content-Type: application/json" \
-d '{"ciphertext":"…","privateKey":"…","encapsulatedSecret":"…"}'
# -> {"plaintext":"secret"}Signaturen (ML-DSA / SLH-DSA)
# ML-DSA (FIPS 204) — pass "SLH-DSA" for FIPS 205
curl -X POST https://crypto.saqura.de/v1/quantum/sign/keypair \
-H "Authorization: Bearer sk_live_…" -H "Content-Type: application/json" \
-d '{"strength":"Highest","algorithm":"ML-DSA"}'
curl -X POST https://crypto.saqura.de/v1/quantum/sign \
-H "Authorization: Bearer sk_live_…" -H "Content-Type: application/json" \
-d '{"data":"document","privateKey":"…","algorithm":"ML-DSA"}'
# -> {"signature":"…"}
curl -X POST https://crypto.saqura.de/v1/quantum/verify \
-H "Authorization: Bearer sk_live_…" -H "Content-Type: application/json" \
-d '{"data":"document","signature":"…","publicKey":"…","algorithm":"ML-DSA"}'
# -> {"valid":true}Tarife & Kontingente
Funktionen werden pro Tarif freigeschaltet. Es gibt zwei Limits: ein Durchsatz-Limit pro Minute (pro API-Key, anonym pro IP) und — bei Monatstarifen — ein Inklusivkontingent pro Monat.
| Tarif | Funktionen | Kontingent (Anf./Min.) | Inkl./Monat |
|---|---|---|---|
| Basic | RSA · Password | 300 | 50.000 |
| Standard | + AES | 600 | 250.000 |
| Pro | + Quantum (KEM · ML-DSA · SLH-DSA) | 1200 | 2 Mio. |
| Scale | + Quantum (hohes Volumen) | 6000 | 10 Mio. |
| Enterprise | alle | 12000 | individuell |
| kein/ungültiger Key | — (401) | 60 | — |
Bei Monatstarifen wird Nutzung über dem monatlichen Inklusivkontingent nutzungsbasiert abgerechnet: 1 € je 1.000 Anfragen (in der gewählten Währung entsprechend). Jahrestarife haben keine nutzungsbasierten Zusatzkosten. Werte sind Startkontingente und können angepasst werden.
Hinweis: Rechenintensive Schlüsselerzeugung (RSA-/Post-Quantum-Keypair, Passwort-Hashing) ist zusätzlich in der Gleichzeitigkeit begrenzt, damit der Dienst unter Last stabil bleibt. Bei Lastspitzen kann eine solche Anfrage daher auch innerhalb deines Minuten-Kontingents mit 429 (Header Retry-After) beantwortet werden — kurz warten und mit exponentiellem Backoff erneut versuchen.
Fehler
Fehler folgen dem Problem-Details-Format (RFC 7807):
400— ungültige Eingabe (z. B. "Invalid base64 input."). Payload wird nie zurückgespiegelt.401— Key fehlt/ungültig.403— Tarif deckt die Funktion nicht.429— Kontingent überschritten (Header Retry-After).
Fragen? Kontaktformular. Niemals Schlüssel/Klartext in Tickets mitsenden.