Vertrauen und Sicherheit

Was Ihre Beweise schützt und was wir nicht behaupten

C-NDA existiert, um Beweise zu erzeugen, die Bestand haben, ohne dass jemand uns einfach glauben muss. Derselbe Maßstab gilt für diese Seite: Unten stehen die Maßnahmen, die im Code stecken, die Orte, an denen die Daten tatsächlich liegen, und in klaren Worten die Zertifizierungen, die wir nicht besitzen.

Wo die Daten liegen
Europäische Union (Datenbank in Frankfurt)
Zugriff auf die Datenbank
Row-Level-Security auf jeder Tabelle
Der Beweis
Von jedem nachrechenbar, ohne unsere Software
Zertifizierungen
Keine. Wir besitzen keine und zeigen keine.

Wo Ihre Daten liegen

Nichts liegt „in der Cloud“ als Abstraktion. Jede Kategorie von Daten hat einen Ort, und ein Ort ist eine Gerichtsbarkeit.

Datenbank, Anmeldung und Dokumente

Supabase, Europäische Union, Region Frankfurt. Die Region ist keine Einstellung, die jemand einfach umstellen kann: Sie ist in den Regeln des Projekts als nicht verschiebbar festgeschrieben, weil ein Umzug den rechtlichen Boden unter jedem Datensatz verschieben würde.

Aufzeichnungen und Screenshots einer Sitzung

Cloudflare R2, in einem Bucket, der mit EU-Gerichtsbarkeit erstellt wurde. Bei R2 wird die Gerichtsbarkeit beim Erstellen des Buckets gewählt und kann danach nicht geändert werden (es gibt keine Einstellung, um sie später zu korrigieren, nur einen Bucket, der neu aufgebaut werden muss). Daher prüft unsere Konfiguration den Endpunkt, der ihr übergeben wird, und weigert sich zu schweigen, wenn es nicht der europäische ist.

Das Portal und der Zeuge

Das Portal läuft auf Vercel. Der Zeuge, der einem Meeting beitritt und es aufzeichnet, läuft in einem Container, der von Railway in Amsterdam gehostet wird.

Fehlerberichte

Sentry, EU-Region. Autorisierungs-Header, Cookies, Anfrageinhalte, Meeting-Links und Einmalcodes werden entfernt, bevor etwas den Prozess verlässt, und wir zeichnen keine Browsersitzungen auf.

Kartendaten

Niemals bei uns. Zahlung und Abonnementverwaltung erfolgen auf den eigenen Seiten von Stripe; eine Kartennummer erreicht unsere Systeme nie.

Die vollständige Liste der Auftragsverarbeiter, mit dem, was jeder Einzelne erhält und warum, steht in der Datenschutzerklärung. Lesen Sie die Datenschutzerklärung

Wie es geschützt wird

Drei Fragen entscheiden über die Sicherheit eines Systems wie diesem: Wer kann was lesen, woher wissen wir, wer Sie sind, und was geschieht mit den Dingen, die über die Leitung gehen.

Wer kann was lesen

  • Row-Level-Security ist für jede Tabelle aktiviert. Wo eine Tabelle überhaupt von einem Browser erreichbar ist, sind ihre Richtlinien auf den Eigentümer beschränkt: Die Abfrage eines anderen Kontos liefert keine gefilterte Version Ihrer Daten, sondern nichts.
  • Die Tabelle, die Teilnehmer enthält, hat überhaupt keine Client-Richtlinie: keine restriktive, keine. Einladungstoken und Hashes von Einmalcodes sind nur über Server-Endpunkte erreichbar, und selbst der Eigentümer eines Protokolls erhält null Zeilen, wenn er sie von einem Browser abfragt.
  • Für die Profiltabelle gelten die Berechtigungen pro Spalte: Ein Browser kann den eigenen Tarif, seine Abrechnungs-ID oder sein Ablaufdatum nicht schreiben, selbst wenn er über eine völlig gültige Sitzung verfügt.
  • Dateien (Zertifikate, hochgeladene NDA-Dokumente, Aufzeichnungen, Logos) liegen in privaten Buckets. Keine von ihnen ist jemals eine öffentliche URL: Jeder Download ist ein signierter Link mit kurzer Lebensdauer, den der Server ausgibt, nachdem er geprüft hat, wer ihn anfragt.

Wie wir wissen, wer Sie sind

  • Ein Einladungslink enthält ein 32-Byte-Geheimnis. Wir speichern nur seinen Hash, er funktioniert einmal, und er läuft nach sieben Tagen ab.
  • Der per E-Mail versandte Einmalcode wird pro Einladung mit einem Salt versehen, gehasht gespeichert, in konstanter Zeit verglichen, läuft in zehn Minuten ab und sperrt nach drei falschen Versuchen. Diese Sperre hängt nicht von einem Rate Limit ab, weshalb sie auch dann gilt, wenn der Rate Limiter einen schlechten Tag hat.
  • Zwei-Faktor-Authentifizierung ist optional, und sobald Sie sie aktivieren, wird sie in der Middleware erzwungen, nicht in der Oberfläche: Ein Passwort allein öffnet eine Sitzung, aber nicht das Dashboard, und ein Passwort-Reset ist keine Möglichkeit, den zweiten Faktor zu umgehen.

Was über die Leitung geht

  • Jedes Ereignis, das der Zeuge an das Portal sendet, wird mit HMAC-SHA256 über den unveränderten Body signiert, außerhalb eines Fünf-Minuten-Fensters zurückgewiesen und genau einmal verarbeitet: Ein erneut gesendetes Ereignis ändert nichts.
  • Abrechnungsereignisse werden mit Stripes eigener Signatur verifiziert, roh gespeichert, bevor jemand sie interpretiert, und sind idempotent bezogen auf die Ereignis-ID.
  • Die öffentlichen Endpunkte, die belastet werden könnten (Einladungen, Einmalcodes, öffentliche Verifizierung), werden in der Datenbank statt im Speicher rate-limitiert, weil bei Serverless zwei aufeinanderfolgende Anfragen nicht dieselbe Maschine sein müssen und ein In-Memory-Zähler nur dem Namen nach ein Limit wäre.
  • Was nach einem Fehler Ihren Browser erreicht, ist ein Domänencode. Die Datenbankmeldung, die Speichermeldung und die Anbietermeldung bleiben in den Logs, wo sie nützlich und ungefährlich sind.
  • Antworten tragen eine Content-Security-Policy, die Framing vollständig verbietet, plus nosniff, eine strikte Referrer-Policy, eine Permissions-Policy und HSTS, und der Server gibt nicht bekannt, womit er gebaut wurde.

Der Link, den es nicht gibt

Dies ist die Invariante, um die das gesamte Produkt herum gebaut ist, und sie ist eine Sicherheitseigenschaft, bevor sie eine rechtliche ist.

  1. 01

    In einem geschützten Meeting ist der Meeting-Link in der Datenbank im Ruhezustand verschlüsselt.

  2. 02

    Bis ein Teilnehmer sich identifiziert und die NDA akzeptiert hat, wird dieser Link nicht vor ihm verborgen, nicht verschleiert, nicht ausgegraut: Er wird niemals gesendet. Er fehlt in API-Payloads, im HTML, in Echtzeitereignissen, in Logs und in Fehlermeldungen. Kein noch so genaues Untersuchen der Seite zeigt, was niemals übertragen wurde.

  3. 03

    Die einzige Antwort, die ihn zurückgibt, ist diejenige, die die Annahme aufzeichnet, und nur solange die Sitzung noch offen ist. Sobald eine Sitzung geschlossen, abgelaufen oder zertifiziert ist, erhält selbst ein Teilnehmer, der akzeptiert hat, nichts.

Ein Browsertest öffnet die Einladungsseite und stellt sicher, dass der Link im Dokument fehlt. Er ist kein Kommentar im Code: Er ist ein Schloss, und er macht die Testsuite rot.

Integrität der Beweise

Ein Zertifikat ist genau so viel wert wie die Schwierigkeit, das nachträglich zu ändern, was es zertifiziert.

  1. 01

    Kanonische Form

    Das Beweispaket wird in der kanonischen Form nach RFC 8785 serialisiert. Kanonisch bedeutet deterministisch: Derselbe Inhalt erzeugt dieselben Bytes, in derselben Reihenfolge, auf jeder Maschine, solange der Standard existiert. Ohne sie wäre „den Hash neu berechnen“ eine Einladung statt eines Verfahrens.

  2. 02

    Der Fingerabdruck

    SHA-256 über genau diese Bytes ist der Paket-Hash. Ändern Sie ein einziges Zeichen irgendwo im Paket, und der Hash ist unkenntlich verändert.

  3. 03

    Der Anker

    Der Hash wird in einer öffentlichen Transaktion in Polygon PoS geschrieben. Von diesem Moment an liegt der Datensatz außerhalb unserer Reichweite: Wir können ihn nicht verschieben, ändern oder zurückziehen, und auch sonst niemand.

  4. 04

    Die Reihenfolge, die nie variiert

    Geschützter Link, Identität und Vereinbarung, Meeting, versiegeltes Beweismaterial, Verifizierung. Kein Schritt wird übersprungen, neu angeordnet oder parallel zum nächsten ausgeführt: nicht, um einen Bildschirm schneller zu machen, nicht im Test.

Manipulationserkennbar, mit Revisionen statt Änderungen

Nach der Verankerung kann das Paket nicht bearbeitet werden. Eine Korrektur stellt ein neues Zertifikat aus, das sich selbst als Revision des vorherigen deklariert, und beide bleiben erhalten. Es gibt keine stillen Änderungen, durch Konstruktion statt durch Richtlinie.

Lücken werden deklariert, niemals versteckt

Wo der Zeuge etwas nicht abdecken konnte (eine Unterbrechung der Aufzeichnung, einen Teilnehmer, den er nicht identifizieren konnte), sagt das Zertifikat dies. Eine deklarierte Lücke ist weiterhin ein Beweis; eine verborgene würde das gesamte Dokument wertlos machen.

Jeder Fingerabdruck kann aus den Daten rekonstruiert werden

Wir betreiben ein Audit, das das Paket jedes Zertifikats aus der Datenbank neu aufbaut und seinen Fingerabdruck neu berechnet, wobei dieselben Funktionen verwendet werden, die ihn erzeugt haben. Es lässt den Lauf fehlschlagen, anstatt eine Warnung auszugeben, und ein Zertifikat, das nicht reproduziert wird, wird als Revision neu ausgestellt, niemals bearbeitet.

Prüfen Sie es selbst, mit Werkzeugen, die Sie bereits haben

Alles oben ist unsere Darstellung unseres eigenen Systems. Dies ist der Abschnitt, in dem Sie aufhören, irgendetwas davon glauben zu müssen.

01

Den Fingerabdruck neu berechnen

Das Beweisarchiv enthält evidence.json bereits in kanonischer Form, daher ist ein einfacher SHA-256 dieser Datei der Paket-Hash. Vergleichen Sie ihn mit dem auf dem Zertifikat angegebenen Hash: Sie stimmen überein, oder das Beweismaterial ist nicht das, was zertifiziert wurde.

02

Den Anker auf der Chain lesen

Öffnen Sie die Verankerungstransaktion in einem öffentlichen Block-Explorer und sehen Sie sich das Anchored-Ereignis an. Der Hash in diesem Ereignis muss der sein, den Sie gerade berechnet haben. Nichts von uns nimmt an diesem Schritt teil.

Schritt eins, auf Ihrem eigenen Rechner

shasum -a 256 evidence.json

Der Verankerungs-Contract: Polygon PoS, Chain 137

0x5CceC6F5806b7C949eB90D61fB9D13Cb639AC203

Quellcode auf Polygonscan verifiziert. Er gibt Anchored(hash, timestamp, sender) für eine eigene Transaktion aus; er definiert außerdem BatchAnchored(merkleRoot, …) für einen täglichen Batch, noch nicht im Einsatz.

Den Contract auf Polygonscan öffnen

Über den Referenz-Verifier

Wir pflegen außerdem einen Kommandozeilen-Verifier, der beide Schritte automatisiert, einschließlich Merkle-Beweisen für gebündelte Zertifikate. Er ist MIT-lizenziert und noch nicht in einer öffentlichen Registry veröffentlicht. Daher gibt es heute für Sie keine Möglichkeit, ihn zu erhalten, und das Verfahren auf dieser Seite verwendet bewusst überhaupt nichts von uns. Sobald der Verifier veröffentlicht ist, wird diese Seite sagen, wo Sie ihn erhalten, und keinen Tag früher.

Verifizierbarkeit kostet keine Privatsphäre

Die öffentliche Verifizierung liest eine dedizierte Datenbankansicht, die keine Namen, keine Titel und keine Adressen enthält. Ein Dritter kann bestätigen, dass ein Paket existiert und dass sein Fingerabdruck übereinstimmt, und erfährt nichts darüber, wer was unterzeichnet hat.

Wie die Verifizierung funktioniert, Schritt für Schritt

Die Grenzen, deklariert

Eine Sicherheitsseite, die nur Stärken auflistet, ist Werbung. Dies sind die Grenzen. Sie stehen hier, weil die Alternative ist, dass Sie sie später selbst herausfinden.

Wir besitzen keine Sicherheitszertifizierung

Wir sind nicht SOC 2 Type II. Wir sind nicht ISO 27001. Wir sind nicht HIPAA-konform. Kein Auditor hat uns anhand eines dieser Rahmenwerke bewertet, und wir werden kein Abzeichen anzeigen, das wir nicht besitzen. Die DSGVO ist etwas anderes: ein Gesetz, dem wir entsprechen müssen, kein Zertifikat, das jemand verleiht. Deshalb finden Sie hier eine Datenschutzseite und kein Siegel.

Das Produkt ist nicht Open Source; der Teil, der uns prüft, soll es sein

Sie können unseren Servercode nicht lesen, und das sollten Sie auch nicht müssen. Vertrauenswürdig sein muss die Fähigkeit, unsere Ergebnisse ohne uns zu prüfen, und diese Fähigkeit beruht heute auf einem veröffentlichten Standard und einer öffentlichen Blockchain statt auf irgendeinem Versprechen von uns.

Der Rate-Limiter arbeitet fail-open

Wenn der Zähler selbst nicht erreichbar ist, wird die Anfrage durchgelassen und die Anomalie protokolliert. Das ist beabsichtigt: Ein Ausfall des Zählers würde sonst legitime Unterzeichner aussperren, und die Verteidigung, die gegen das Erraten von Codes tatsächlich zählt, die Sperre nach drei Versuchen, hängt nicht davon ab.

Das Löschen Ihres Kontos löscht keine ausgestellten Zertifikate

Es entfernt Ihre personenbezogenen Daten, Ihre Entwürfe und Ihre ausstehenden Arbeiten. Bereits ausgestellte Zertifikate bleiben verifizierbar, weil sie auch das Beweismaterial der anderen Partei sind: Sie auf Verlangen eines Unterzeichners zu zerstören würde den Grund zunichtemachen, sie zu haben.

Das Zerstören einer Aufzeichnung ist nicht überall augenblicklich

Wir löschen die Dateien. Bis zu eine Stunde lang kann ein Speichercache noch eine Kopie ausliefern, und bereits von berechtigten Personen heruntergeladene Kopien bleiben, wo sie sind. Was niemals betroffen ist, ist der Beweis: der Audio-Hash, das Beweispaket und der Anker bleiben unberührt, sodass das Zerstören einer Aufzeichnung nie ändert, was zertifiziert wurde.

Es gibt kein Bug-Bounty

Wir lesen jeden Bericht und beheben, was real ist, aber wir betreiben kein bezahltes Programm, und uns wäre lieber, Sie würden keines erwarten.

Uns wäre lieber, Sie lesen diese hier, als sie später zu entdecken. Keine von ihnen berührt den Teil, der am wichtigsten ist, ob ein Zertifikat ohne uns verifiziert werden kann, und dieser Teil steht oben, mit den Befehlen dafür.

Eine Schwachstelle melden

Wenn Sie etwas gefunden haben, möchten wir es von Ihnen hören, bevor wir es von anderen hören.

  • Schreiben Sie an hub@witup.ai. Sagen Sie uns, was Sie getan haben, was passiert ist und wie man es reproduziert. Eine Zeile zur Auswirkung hilft mehr als ein Scanner-Bericht.
  • Testen Sie bitte nur gegen Ihr eigenes Konto und Ihre eigenen Daten. Berühren Sie keine Protokolle, Sitzungen oder Zertifikate anderer Personen, und führen Sie keine Last- oder Denial-of-Service-Tests gegen den Dienst aus.
  • Wir veröffentlichen keine Zusage zur Reaktionszeit, weil wir noch nicht in der Lage sind, eine zu garantieren. Wir sagen das lieber, als eine Zahl zu versprechen, die wir vielleicht nicht einhalten.
hub@witup.ai

Wo es weitergeht