Zum Inhalt
NEXPAPER

Sicherheit

Papiere, die niemanden etwas angehen, und ehrliche Worte darüber

In einer Ablage für den Haushalt liegen Steuerbescheide, Verträge und Arztrechnungen. Darum gilt für nexpaper ein einfacher Rat: am besten im eigenen Netz, von unterwegs über ein VPN. Wer es trotzdem ins Internet stellt, findet ab Werk einen zweiten Faktor, Passkeys und eine Selbstprüfung vor. Hier steht, was das schützt, und genauso, wo es aufhört.

Am sichersten ist, was gar nicht im Internet steht

nexpaper ist für das eigene Netz gebaut. Wer unterwegs an seine Papiere will, geht mit einem VPN (WireGuard, Tailscale, NetBird und ähnliche) in sein Heimnetz und öffnet nexpaper von dort. Das ist sicherer, als einen Port zu öffnen, und es reicht für fast alles, was man unterwegs braucht: die Rechnung vom Handwerker fotografieren, den Vertrag für den Händler heraussuchen.

Manche möchten nexpaper trotzdem von außen erreichen, und dafür ist es vorbereitet. Es verlangt von jedem Konto einen zweiten Faktor, bremst das Raten von Passwörtern und prüft sich selbst. Die Schritte dazu stehen in der Anleitung unter Betrieb. Hier geht es darum, was dahintersteckt.

Anmelden mit zweitem Faktor, ab Werk Pflicht

Ein erratenes oder gestohlenes Passwort soll nicht reichen, um die Papiere eines Menschen zu lesen. Darum verlangt nexpaper ab Werk von jedem Konto, das sich mit Passwort anmeldet, einen zweiten Faktor.

Passwort und Code

Ein Passwort hat mindestens 12 Zeichen und wird mit Argon2id gespeichert. Direkt nach dem Passwort richtet jedes Konto einen Code aus einer Authenticator-App ein, erst dann geht es weiter. Danach zeigt nexpaper einmal acht Wiederherstellungscodes, die auf Papier gehören, getrennt vom Handy. Jeder bringt einmal hinein, wenn das Handy weg ist.

Passkeys

Mit einem Passkey meldest du dich mit Fingerabdruck, Gesicht oder der PIN des Geräts an, ohne Passwort und ohne Code. Ein Passkey zählt selbst als zwei Faktoren und lässt sich nicht abfischen. Bis zu zehn je Konto legst du unter „Mein Konto“, „Sicherheit“ an. Passkeys brauchen https unter der öffentlichen Adresse, oder localhost.

Der Betreiber kann die Pflicht unter „Einstellungen“, „Anmeldung“ mit „Zweiten Faktor verlangen“ abschalten. „Bereit fürs Internet?“ meldet das danach als offen. Geht das Handy verloren, kommt man trotzdem wieder hinein: Der Betreiber kann den zweiten Faktor eines Kontos entfernen, die Person richtet ihn bei der nächsten Anmeldung neu ein und bekommt Bescheid.

Mein Konto
Mein Konto, Reiter „Sicherheit“ mit den Karten Passwort, Zweiter Faktor, Passkeys und Angemeldete Geräte, darunter „Firefox unter Windows“ als dieses Gerät und „Safari unter iPhone“.
Zweiter Faktor, Passkeys und Geräte an einem Ort.

Mit dem Haken „Auf diesem Gerät angemeldet bleiben“ endet eine Anmeldung nach 30 Tagen ohne Nutzung. Ohne den Haken endet sie nach 12 Stunden. Die Zahl der Tage stellt der Betreiber mit NEXPAPER_SESSION_DAYS ein. Die Cookies sind für Skripte nicht lesbar.

Du siehst, wo du angemeldet bist

Angemeldete Geräte

Unter „Mein Konto“, „Sicherheit“ steht jedes Gerät, auf dem dein Konto angemeldet ist, mit Netz und letzter Nutzung. Jedes lässt sich einzeln abmelden, und „Überall sonst abmelden“ beendet alle anderen auf einmal. Wer sein Passwort ändert, meldet damit ebenfalls alle anderen Geräte ab.

Bescheid bei einer neuen Anmeldung

Meldet sich dein Konto auf einem Gerät an, das nexpaper noch nicht kennt, bekommst du Bescheid, per Push auf deine Geräte und per Mail, wenn ein Mailserver eingerichtet ist. Darin steht, welches Gerät, welcher Browser und ungefähr von wo. Warst du es nicht, meldest du das Gerät mit einem Tipp ab. Der Schalter „Bei einer neuen Anmeldung Bescheid geben“ ist ab Werk an.

Raten lohnt sich nicht

Nach fünf falschen Anmeldeversuchen wartet das Konto 15 Minuten, und die Adresse, von der die Versuche kamen, ebenso. Jeder Versuch steht im Log. Einstellen lässt sich das nicht, es ist immer an. Falsche Schlüssel von Geräten und Programmen zählen wie falsche Passwörter.

  • Hinter einem Proxy muss nexpaper die echten Adressen der Besucher sehen, sonst hält es alle für einen. Wie das geht, steht weiter unten.
  • Ein Link zum Zurücksetzen des Passworts gilt einmal und 24 Stunden. Niemand setzt ein Passwort für eine andere Person, auch der Betreiber nicht.

Anmelden über deinen eigenen Anbieter

Wer schon einen Anmeldedienst im Haus hat, etwa authentik, trägt ihn unter „Einstellungen“, „Anmeldung“ ein. nexpaper spricht OpenID Connect mit Authorization Code und PKCE und kennt einen Anbieter. Dann steht auf der Anmeldeseite ein Knopf „Mit … anmelden“, und neue Personen bekommen nur dann ein Konto, wenn der Betreiber „Neue Personen bekommen ein Konto“ einschaltet. Die Anmeldung mit Passwort lässt sich für Mitglieder abschalten, der Betreiber kann sein Passwort immer benutzen.

Für authentik gibt es einen Knopf: Mit einem API-Token, das Anwendungen anlegen darf, richtet nexpaper Anbieter und Anwendung selbst ein. Das Token wird nur dafür benutzt und nicht gespeichert. Wer das lieber selbst tut, lädt stattdessen einen Blueprint herunter.

Gut zu wissenAuch wer über den Anbieter hereinkommt, richtet ab Werk den zweiten Faktor von nexpaper ein. Nur wenn der Betreiber „… prüft den zweiten Faktor“ einschaltet, fragt nexpaper bei dieser Anmeldung nicht noch einmal. Das ist nur sicher, wenn der Anbieter selbst einen verlangt.

nexpaper prüft selbst, ob es bereit fürs Internet ist

Unter „Einstellungen“, „Anmeldung“ steht ganz oben die Karte „Bereit fürs Internet?“. Sie prüft acht Punkte jedes Mal neu, wenn der Betreiber die Seite öffnet, markiert jeden mit „erfüllt“, „prüfen“ oder „offen“ und sagt, was zu tun ist.

PunktWas nexpaper prüft
Öffentliche Adresse mit httpsob die öffentliche Adresse mit https beginnt. Ohne https gehen Passwörter offen durchs Netz, und Web Push und Passkeys funktionieren gar nicht.
Zweiter Faktor für alleob jedes Konto mit Passwort einen Code oder einen Passkey braucht
Dein eigenes Kontoob das Konto des Betreibers, das alles einstellen darf, selbst einen zweiten Faktor hat
Schutz vor Ratenob die Bremse greift und keine öffentlichen Netze als Proxy eingetragen sind
Sitzungen und Cookiesob die Anmelde-Cookies nur über https gehen und für Skripte nicht lesbar sind
Hinter dem Proxyob die echte Adresse der Besucher ankommt oder ein unbekannter Proxy dazwischensitzt
Server-Geheimnisseob der Schlüssel für Mailpasswort, KI-Schlüssel und Co. nur für den Besitzer lesbar ist
Sicherungob eine automatische Sicherung eingeschaltet ist. Die Dokumente gehören in die Sicherung deines Servers.

Die Karte prüft, was nexpaper über sich selbst wissen kann. Ob dein Router, dein Proxy und dein Server auf dem neuesten Stand sind, sieht sie nicht. Zusätzlich kann der Betreiber die Einstellungen ganz auf das Heimnetz beschränken: Mit NEXPAPER_OPERATOR_NETWORKS, etwa 192.168.0.0/16, lehnt nexpaper jede Änderung der Einstellungen von außerhalb ab.

Die Dokumente liegen lesbar auf der Platte, und das ist gewollt

Hier hört der Schutz auf, und das soll man vorher wissen. nexpaper verschlüsselt die Dokumente nicht, weder die Dateien noch den erkannten Text oder den Suchindex in der Datenbank. Es gibt auch keine Verschlüsselung je Person. Das ist eine Entscheidung, denn sie würde die Suche unmöglich machen und die Dateien ohne nexpaper unlesbar. Die Dokumente sollen dir auch dann gehören, wenn du nexpaper eines Tages nicht mehr benutzt.

Was ein persönlicher Tresor bedeutet

Jede Person hat einen persönlichen Tresor, den nexpaper niemandem sonst zeigt, auch dem Betreiber nicht, solange sie ihn nicht teilt. Das gilt für alles, was die App ausliefert, für die Suche, die Zahlen und die Listen. Es heißt nicht, dass die Dateien auf der Platte unlesbar wären.

Wer den Server verwaltet, sieht die Dateien

Wer den Server selbst verwaltet, kann die Dateien dort sehen. Den Schutz der Platte, zum Beispiel durch ein verschlüsseltes Laufwerk, übernimmt der Betreiber des Servers.

Gut zu wissenIn der App führt ein Weg am persönlichen Tresor vorbei, offen und mit Spur: Löscht der Betreiber ein Konto, wählt er, wohin dessen Dokumente gehen, etwa zu sich selbst. Der Dialog sagt das, und im Verlauf jedes Dokuments steht, wer es übernommen hat.

Versiegelt sind die Geheimnisse des Servers: das Geheimnis des Anmeldeanbieters, die Passwörter von Mailserver und Postfach, der Schlüssel der KI, das Token von Paperless-ngx, der Schlüssel für Push und die Adressen offener Links. Der Schlüssel dafür liegt als secret.key im Datenordner, nur für den Besitzer lesbar.

Hinter einem Proxy, mit https

Im Beispiel zum Selbsthosten ist nexpaper nur auf dem Rechner selbst erreichbar, unter 127.0.0.1:8560. Davor gehört ein Reverse Proxy, der https spricht. Wer nexpaper ohne https ins Heimnetz stellt, schickt Passwörter und Codes im Klartext über das Netz.

Den Proxy nennen

NEXPAPER_TRUSTED_PROXIES nennt die Adresse oder das Netz des Proxys. Nur dessen Angabe zur echten Adresse der Besucher glaubt nexpaper. Ohne sie scheint jede Anmeldung vom Proxy zu kommen, und der Schutz vor Raten kann die Leute nicht auseinanderhalten.

Die Adresse nennen

NEXPAPER_PUBLIC_URL oder die Einstellung „Öffentliche Adresse“ nennt die Adresse, unter der man nexpaper erreicht. Daraus entstehen Einladungslinks, die Rückkehr vom Anmeldeanbieter, Passkeys und der Kontakt für Push. Die Cookies schützt nexpaper über https von selbst; den Kopf für HSTS schickt der Proxy.

Rechte auf dem Server

Jede Anfrage wird auf dem Server geprüft, in der Abfrage selbst. Ein fremdes Dokument, ein fremder Absender, ein fremder Tresor antworten, als gäbe es sie nicht, und keine Zahl verrät etwas über Fremdes.

Strenge Kopfzeilen

Die Seite lädt nur Dateien vom eigenen Server, keine Schriften, Skripte oder Symbole von fremden. Kamera gibt es nur für die eigene Seite, Mikrofon und Standort sind abgeschaltet. PDFs zeigt nexpaper in einem abgeschotteten Rahmen ohne Netz.

Kein root

Der Container läuft mit no-new-privileges und fast ohne Fähigkeiten, und nexpaper selbst läuft nie als root. PUID und PGID von 0 weist der Start ab.

Fremde Seiten bleiben draußen

Jede ändernde Anfrage eines Browsers trägt eine Kopfzeile, die eine fremde Webseite nicht mitschicken kann.

Ein Log ohne Inhalt

Im Log steht nie ein Wort aus einem Dokument, nie ein Passwort, Schlüssel oder Token und kein Suchbegriff.

Hereinkommende Dateien

Ein neues Dokument wird nur in einem eigenen Arbeiterprozess geöffnet, mit Zeit- und Speichergrenze und ohne die Geheimnisse des Servers. Einen Sandkasten nennt nexpaper das nicht: Der Arbeiter läuft als derselbe Systembenutzer wie der Server.

Was nach draußen geht

Der Browser spricht nur mit deinem eigenen Server. Schriften, Symbole und Skripte bringt nexpaper mit, es gibt keine Statistik, keine Fehlerberichte, keine Karten und kein Selbst-Update. Der Server selbst baut nur diese Verbindungen auf, und die meisten erst, wenn jemand sie einschaltet.

VerbindungWannAb WerkWas hinausgeht
Frage nach einer neuen Versionwenn jemand „Über nexpaper“ öffnet und die letzte Antwort älter als einen Tag istannur die Frage an GitHub, ohne Namen, Dokumente oder Einstellungen. Der Betreiber schaltet das mit „Einmal am Tag nachsehen“ ab.
Web PushBescheid bei neuer Anmeldung, Export fertig, Paperless-Import fertig und ähnliche Anlässeerst, wenn ein Gerät angemeldet isteine verschlüsselte Nachricht an den Push-Dienst des Browsers (Google, Mozilla, Apple, Microsoft), die nur das Gerät lesen kann. Darin steht nie der Inhalt eines Dokuments.
KI-Dienstfür jedes neue Dokument, das noch Felder braucht, wenn der Betreiber einen Dienst eingerichtet hatkeine KIder erkannte Text der ersten zwei Seiten, höchstens 6.000 Zeichen, dazu die Liste der Arten. Kein Bild, kein Kontoname. Persönliche Tresore sind ab Werk ausgenommen, und ein Tageslimit von 200 Anfragen gilt.
MailserverEinladung, Link zum Zurücksetzen, Bestätigung einer Adresse, Bescheide, Testmailkeiner eingetragenKontoname, Link, Gerät und ungefähres Netz, nie ein Dokumentinhalt
Postfach (IMAP)alle 5 Minuten, wenn der Betreiber es eingeschaltet hatausdie Anmeldung am Postfach, das Abholen und danach das Markieren, Verschieben oder Löschen der Mail
Paperless-ngxbeim Nachsehen und beim Import-Laufnicht eingerichtetdas API-Token, und gelesen wird nur. Paperless-ngx bleibt unberührt.
Anmeldeanbieterwenn einer eingerichtet ist und jemand sich damit anmeldet oder verknüpftnicht eingerichtetdie üblichen Anfragen von OpenID Connect, kein Dokument
authentik einrichtennur, wenn der Betreiber auf „Einrichten“ drücktausAufrufe an authentik mit einem Token, das nexpaper nicht speichert

Gut zu wissenAlle Adressen, die jemand einträgt (KI, Postfach, Paperless, Push), prüft nexpaper vor jeder Verbindung: einmal aufgelöst, genau mit den geprüften Adressen verbunden, keiner Weiterleitung gefolgt, und Adressen, unter denen Cloud-Anbieter ihre internen Daten anbieten, sind immer gesperrt. Ein Server im eigenen Netz muss erst ausdrücklich erlaubt werden.

Eine Sicherung ist so vertraulich wie ein Passwort

Eine Sicherung von nexpaper ist eine ZIP-Datei mit der Datenbank, den Einstellungen und secret.key. Die Dokumente sind nicht dabei, sie liegen als normale Dateien in /data/dokumente und gehören in die Sicherung, die dein Server ohnehin macht. Die ZIP-Datei ist nicht verschlüsselt. Mit dem Geheimnis des Servers lassen sich darin die Zugänge für Mail und KI und die Adressen offener Links lesen. Behandle sie wie ein Passwort.

Herunterladen, Hochladen, Löschen und Wiederherstellen fragen den Betreiber noch einmal nach seinem Passwort, nur aus einem Browser. Vor dem Wiederherstellen macht nexpaper einen Probelauf an einer Kopie und sagt, was sich ändern würde, auch welche gesperrten Geräte, Schlüssel und Links wieder gälten. Wie das geht, steht in der Anleitung unter Betrieb.

Eine Sicherheitslücke melden

Wer eine Lücke findet, meldet sie bitte nicht öffentlich, sondern vertraulich über GitHub: im Repository unter „Security“, „Report a vulnerability“. Am meisten hilft, was du gefunden hast, wie man es nachstellt und welche Version lief.

Eine Antwort kommt innerhalb einer Woche. Die Korrektur erscheint als neue Version, und die Notizen zur Version nennen das Problem, sobald die Korrektur da ist.

Sicherheitskorrekturen gibt es nur für die neueste Version. Aktualisieren heißt docker compose pull und docker compose up -d; vor einer Änderung der Datenbank legt nexpaper selbst eine Sicherung an. Von allein aktualisiert sich nexpaper nie.

Sicherheit auf GitHub