KPAFI

KPAFI / Secure Chat

Secure Chat

Ein bewusst kleiner Text-Chat für zwei Personen. Verschlüsselt wird ausschließlich im Client. Der Server ist ein stummes Relais: Er hält keine Schlüssel, entschlüsselt nichts und speichert keine Klartexte. Post für Abwesende liegt verschlüsselt bis zur Abholung.

Live: v0.4.0 Getaggt: v0.5.0 Nur ASCII Zwei Personen pro Raum

Warum so gebaut

Alles im Client

Schlüssel entstehen auf deinem Gerät und verlassen es nie. Der Web-Client nutzt WebCrypto und @noble/post-quantum, keine selbstgebauten Primitive.

Stummes Relais

Der Server leitet Chiffretext zwischen zwei Teilnehmern weiter. Räume liegen nur im Arbeitsspeicher und verschwinden, sobald sie leer sind.

Klein genug zum Lesen

Der Code bleibt absichtlich klein, damit man ihn von vorn bis hinten prüfen kann. Wird der Server kompromittiert, fällt nichts Lesbares an.

Vier Modi für den Live-Raum

Alle Modi außer One-Time-Pad nutzen dieselbe Ratsche: zwei HMAC-SHA-256-Ketten, ein frischer AES-256-GCM-Schlüssel pro Nachricht, der nach Gebrauch gelöscht wird. Sie unterscheiden sich nur darin, woher das Startgeheimnis kommt.

RSA-OAEP-2048 wurde entfernt statt geflickt: Die Seite, die ihren RSA-Schlüssel anbot, hätte allein über die Geheimhaltung der Sitzung entschieden, und ein absichtlich schwacher Modulus besteht jede Prüfung, die sich ein Client leisten kann.

Wer da wirklich spricht

Zwei Signaturen

Jede Identität besteht aus Ed25519 und ML-DSA-65. Beide Signaturen müssen stimmen. Signiert wird ein Transkript mit frischen Nonces beider Seiten und der Raum-ID, damit sich kein Handshake wiederholen oder in einen anderen Raum verschieben lässt.

Sicherheitsnummer

Beide Bildschirme zeigen dieselbe Nummer, abgeleitet aus beiden Identitäten. Ihr vergleicht sie persönlich. Bis zur Bestätigung sendet die App nichts und verwirft Eingehendes unentschlüsselt. Danach ist der Schlüssel festgenagelt, ein Wechsel löst eine laute Warnung aus.

Einlass auf beiden Seiten

Wer zuerst im Raum ist, besitzt ihn. Wer anklopft, wartet, bis der Besitzer Fingerabdruck und Vertrauensmarke gesehen hat und „Let them in“ drückt. Der Gast prüft den Schlüssel des Besitzers ebenso.

Was das Relais sieht

Nie

  • Nachrichteninhalte oder Schlüssel
  • Gefälschte, gespiegelte oder wiederholte Nachrichten, die durchgehen
  • Einen unbemerkten Schlüsseltausch
  • Vergangenes im Live-Raum (DHKE, Post-Quanten) nach Diebstahl des Gerätezustands

Trotzdem

  • Raum-IDs, Zeitpunkte und Größe jeder Nachricht. Es gibt kein Padding.
  • Welche Handles du nachschlägst und wem du Post schickst
  • Es kann Nachrichten verwerfen. Das fällt erst auf, wenn eine spätere ankommt.
  • Es kann den Dienst verweigern.

So geht’s

  1. Öffne den Web-Client oder die Onion-Adresse im Tor Browser. Lege mit „Create identity“ eine Identität mit Passphrase an. Für DHKE und Post-Quanten brauchst du eine.

  2. Ein Chat-Code entsteht automatisch. Teile ihn über einen Kanal, dem du vertraust: als Text, Einladungslink oder QR-Code.

  3. Beide wählen unter „Security options“ denselben Modus. DHKE ist der empfohlene Standard.

  4. Wer den Code erzeugt hat, drückt zuerst „Connect“ und wird Besitzer. Die andere Person fügt den Code ein und verbindet sich.

  5. Der Besitzer sieht den Fingerabdruck der anklopfenden Person und lässt sie herein. Im DHKE- und Post-Quanten-Modus bestätigt der Gast ebenfalls.

  6. Vergleicht die Sicherheitsnummer persönlich. Nur bei Übereinstimmung „It matches“ drücken, sonst trennen.

  7. Schreibt. Für jedes Gespräch ein neuer Code, am Ende „Disconnect“.

Für dauerhafte 1:1-Chats registrierst du dich im Verzeichnis, teilst dein Handle im Format username#token und legst mit „New chat“ los. Die Post liegt als versiegelter Umschlag im Briefkasten und wird beim Abholen gelöscht.

Überall derselbe Client

Browser

Als Web-App, auch auf dem Home-Bildschirm.

https://138-199-144-35.sslip.io

Tor

Als v3-Onion-Dienst. Die Adresse authentifiziert sich selbst, das Relais sieht keine Client-IP.

http://626vkwn6znrko2xhorirvv5ttrbzcr3xkdjmk65cks26qkvadplyk5id.onion

Android

Eine WebView-Hülle mit exakt demselben Client im APK. Screenshots gesperrt, kein Backup, Rollback-Schutz über den Keystore.

Download folgt. Bis dahin aus dem Repository bauen.

iOS

Per SideStore sideloaden, mit kostenloser Apple-ID und Neusignierung alle sieben Tage. Oder als Home-Bildschirm-Web-App. Die iOS-App erreicht keine Onion-Adresse.

Download folgt.

Nur die Apps schließen die Lücke, dass ein kompromittierter Server dem Browser manipuliertes JavaScript ausliefern könnte. Der Web-Client schützt gegen ein passiv mitlesendes Relais.

Geprüft, immer wieder

Seit Juli 2026 läuft nach jeder größeren Änderung ein KI-gestütztes Red-Team-Review mit nachgestellten Angriffen. Die Berichte liegen vollständig im Repository.

Was es nicht ist