KI-Kennzeichnung
Avas Antworten sind maschinenlesbar als KI-erzeugt gekennzeichnet (Art. 50 Abs. 2 KI-Verordnung). Hier steht, wie, und hier kannst du einen Text prüfen.
Text prüfen
Was gekennzeichnet ist
Signierte Angaben zur Herkunft
Jede Antwort, die Ava mit dem Sprachmodell erzeugt, trägt auf der Seite, in JSON-Antworten, in den Exporten und in Mails ein signiertes Kennzeichen im Format JWS (RFC 7515), signiert mit EdDSA (Ed25519, RFC 8037). Es enthält: dass der Inhalt KI-erzeugt ist, die Herkunftsart nach dem IPTC-Vokabular, den Namen des Systems (Ava), den Anbieter, den Zeitpunkt der Erzeugung, die SHA-256-Prüfsumme des Textes und die Adresse dieser Prüfstelle, manchmal die Fassung der Anweisungen und das Modell. Angaben zu Personen oder Gesprächen enthält es nicht.
Auf den Seiten steht es an jedem Element mit Avas Text als Attribute ai-disclosure="ai-generated", data-digital-source-type und data-ai-provenance (das JWS). Herkunftsart: http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia
Öffentlicher Schlüssel
Die Signatur kann jede und jeder ohne diese Prüfstelle prüfen. Die öffentlichen Schlüssel stehen als JWK Set (RFC 7517) unter der folgenden Adresse, der aktuelle zuerst. Nach einem Schlüsselwechsel bleiben die früheren dort, damit ältere Kennzeichen prüfbar bleiben: https://beta.transformeducation.de/.well-known/ai-marking-jwks.json
Im Kopf jedes Kennzeichens steht unter kid der Fingerabdruck des Schlüssels nach RFC 7638. Aktueller Schlüssel: 7PemL3sU8CNKdh0Ve84n_ZF2AYIvcPCGUhHBbJx4Yqk
{
"keys": [
{
"crv": "Ed25519",
"kty": "OKP",
"x": "mNSW0Q-mFjmlzm9PGMYtadKXloxt_fICPiuQ4hp5gXQ",
"kid": "7PemL3sU8CNKdh0Ve84n_ZF2AYIvcPCGUhHBbJx4Yqk",
"use": "sig",
"alg": "EdDSA"
}
]
}
Selbst prüfen
- Das Kennzeichen an den beiden Punkten in Kopf, Inhalt und Signatur trennen (jeweils Base64url ohne Auffüllzeichen).
- Im Kopf stehen
algmit dem WertEdDSAundkid; den Schlüssel mit diesemkidaus dem JWK Set nehmen. - Die Ed25519-Signatur über Kopf, Punkt und Inhalt (als ASCII) mit dem Wert
xdes Schlüssels prüfen. - Unter
sha256steht die Prüfsumme von Avas Text als UTF-8, ohne Wasserzeichen und vor der Darstellung als Markdown. Sie passt deshalb zum Text aus einem Export, nicht unbedingt zu dem, was man aus der Seite kopiert.
Zum Beispiel in Python mit dem Paket cryptography; verify bricht mit InvalidSignature ab, wenn das Kennzeichen nicht echt ist:
import base64, json, urllib.request
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
def b64(s): return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))
token = "eyJ…"
head, body, sig = token.split(".")
keys = json.load(urllib.request.urlopen("https://beta.transformeducation.de/.well-known/ai-marking-jwks.json"))["keys"]
key = next(k for k in keys if k["kid"] == json.loads(b64(head))["kid"])
Ed25519PublicKey.from_public_bytes(b64(key["x"])).verify(b64(sig), f"{head}.{body}".encode())
print(json.loads(b64(body)))
Unsichtbares Wasserzeichen im Text
Antworten ab 400 Zeichen tragen hinter dem ersten Wort des ersten und des letzten Absatzes eine unsichtbare Folge von 19 Unicode-Variantenselektoren: U+FE00 bis U+FE0F stehen für die Bytewerte 0 bis 15, U+E0100 bis U+E01EF für 16 bis 255. Die Bytes: Kennung A7 7E, Version 01, Zeitpunkt der Erzeugung (4 Byte, Unix-Sekunden), Prüfsumme (die ersten 4 Byte von SHA-256 über die Buchstaben und Ziffern des Textes in Kleinschreibung nach NFKC) und eine Signatur (8 Byte HMAC-SHA256).
Eine öffentlich prüfbare Signatur bräuchte 64 Byte, also 75 statt 19 unsichtbare Zeichen an jeder Stelle. Das Wasserzeichen trägt deshalb eine HMAC-Signatur, die nur diese Prüfstelle bestätigen kann.
HTTP
Antworten des Servers mit Avas Text tragen den Kopf AI-Disclosure nach dem Entwurf draft-abaris-aicdh-00.
Grenzen
- Das Wasserzeichen übersteht Kopieren und Einfügen, aber nicht gezieltes Entfernen oder Abtippen.
- Öffentlich prüfbar sind die signierten Angaben (EdDSA). Das Wasserzeichen im Text und ältere Kennzeichen mit dem Verfahren HS256 (
kidhs256-1) kann nur diese Prüfstelle bestätigen. - Kurze Antworten tragen kein Wasserzeichen, nur die signierten Angaben auf der Seite.
- Feste Hinweise wie Begrüßungen und Fehlermeldungen sind keine KI-Ausgabe und nicht gekennzeichnet.
Für Programme
Dieselbe Prüfung als JSON, mit signiertem Ergebnis (Prüfsumme des Textes, Prüfstelle, Zeitpunkt):
curl -s -X POST -H "Content-Type: application/json" -d '{"text": "…"}' "https://beta.transformeducation.de/ki-kennzeichnung/?format=json"
Das Prüfergebnis ist mit demselben Schlüssel signiert. Die öffentlichen Schlüssel als JSON:
curl -s "https://beta.transformeducation.de/.well-known/ai-marking-jwks.json"