# Verifizierbare Nachweise (JWT VC)

TrustOriginality stellt **W3C Verifiable Credentials** als ES256-signierte JWTs aus, basierend auf der bestehenden Datenstruktur `trustoriginality-attestation/1.0` und denselben Signaturschlüsseln.

**Status:** nicht qualifizierter Aussteller (QEAA / QTSP ist ein separater Roadmap-Schritt).

> VC-Ausgaben sind **entscheidungsunterstützende Dokumentation** – keine QEAA, keine qualifizierten eIDAS-Vertrauensdienste, keine behördliche Zertifizierung und ohne qualifizierte Prüfung auch kein alleiniger Gerichtsbeweis.

## Auffindbarkeit

| Ressource | URL |
|-----------|-----|
| Issuer-Metadaten | `GET /.well-known/trustoriginality-credential-issuer.json` |
| Content-Schema | `GET /.well-known/vc-schemas/content-authenticity.json` |
| Analyse-Schema | `GET /.well-known/vc-schemas/analysis-report.json` |
| Legacy-Attestation-Schlüssel | `GET /.well-known/trustoriginality-attestation.json` |

## Credential-Typen

| Typ | `vct` | Quelldaten |
|-----|-------|------------|
| `TrustOriginalityContentAuthenticityCredential` | `https://trustoriginality.ai/credentials/v1/content-authenticity` | Provenance-Register |
| `TrustOriginalityAnalysisReportCredential` | `https://trustoriginality.ai/credentials/v1/analysis-report` | Analyseaktivität |

Formatkennung: `trustoriginality-jwt-vc/1.0`

## Ausstellung (authentifiziert – nur Ressourceninhaber)

Für die Ausstellung ist `AnalyzeAccess` erforderlich (Panel-Sitzung oder API-Schlüssel). Der authentifizierte Nutzer muss Eigentümer der zugrunde liegenden Provenance-Registrierung oder Analyseausführung sein.

```bash
# Inhaltsauthentizität (registrierter SHA-256-Hash, nur Eigentümer)
curl -sk "https://panel.trustoriginality.ai/api/credentials/content/{sha256}.jwt" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Analysebericht (nur Eigentümer)
curl -sk "https://panel.trustoriginality.ai/api/credentials/analysis/{runId}.jwt" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Panel-Nutzer können Analyse-VCs auch im **Activity Log** herunterladen (`Download VC`).

Antwort:

```json
{
  "format": "trustoriginality-jwt-vc/1.0",
  "jwt": "eyJhbGciOiJFUzI1NiIs...",
  "credentialType": "TrustOriginalityContentAuthenticityCredential",
  "subject": "https://panel.trustoriginality.ai/verify/content/{hash}",
  "issuedAt": "2026-06-16T12:00:00Z",
  "expiresAt": "2027-06-16T12:00:00Z",
  "jti": "vc-...",
  "verifyUrl": "https://panel.trustoriginality.ai/api/credentials/verify",
  "legacyAttestationUrl": "https://panel.trustoriginality.ai/api/attestation/content/{hash}.json",
  "nonQualifiedDisclaimer": "..."
}
```

Jede Ausstellung wird in `Tbl_VerifiableCredentials` protokolliert (Audit-Log mit `jti`).

## Verifizierung (öffentlich)

Jede Person kann ein JWT ohne Authentifizierung verifizieren:

```bash
curl -sk -X POST https://panel.trustoriginality.ai/api/credentials/verify \
  -H "Content-Type: application/json" \
  -d '{"jwt":"eyJhbGciOiJFUzI1NiIs..."}'
```

Zurückgegeben werden Signaturgültigkeit, Ablaufdatum, Credential-Typ, Subject und Widerrufsstatus.

## Widerruf (authentifiziert – Aussteller-Eigentümer)

Ein zuvor ausgestelltes Credential kann per `jti` widerrufen werden (aus der Ausgabeantwort oder dem JWT-Payload):

```bash
curl -sk -X POST https://panel.trustoriginality.ai/api/credentials/revoke \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jti":"vc-...","reason":"key rotation"}'
```

Widerrufene Credentials schlagen bei der Verifizierung mit `revoked: true` fehl.

## Konfiguration

```json
{
  "Credentials": {
    "IssuerBaseUrl": "https://panel.trustoriginality.ai",
    "TtlDays": 365,
    "IssuerDisplayName": "TrustOriginality.ai",
    "LegalEntityName": "Soluzyn OÜ"
  }
}
```

`IssuerBaseUrl` dient als kanonischer `iss`-Claim in JWTs (für lokale Tests in `appsettings.Development.json`, z. B. `https://localhost:7270`, überschreibbar).

Es wird derselbe ECDSA-P256-Schlüssel wie für Attestierungen genutzt (`Attestation:PrivateKeyPem` oder `keys/attestation-signing.pem`).

## Rechtlicher Hinweis

Siehe `legal/ACCEPTABLE-USE-POLICY.md` §5 und die öffentliche AUP unter `/docs/regulatory/acceptable-use-policy.md`.

## Roadmap (noch nicht implementiert)

- SD-JWT selective disclosure (`_sd` claims)
- OID4VCI issuance protocol + credential offer
- OID4VP presentation exchange
- W3C Status List 2021 (Batch-Widerrufsliste)
- QEAA / qualifizierter Vertrauensdienst (eIDAS 2)

## Code

| Komponente | Pfad |
|------------|------|
| JWT-VC-Issuer/Verifier | `TrustOriginality_Global/Credentials/JwtVerifiableCredentialIssuer.cs` |
| VC-Service | `TrustOriginality_ai_dashboard/Services/VerifiableCredentialService.cs` |
| API-Routen | `TrustOriginality_ai_dashboard/Program.cs` |
| Ausstellungsprotokoll / Widerruf | `TrustOriginality_ai_db/Scripts/CreateTbl_VerifiableCredentials.sql` |
