Ergebnis 1 bis 17 von 17

Thema: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

  1. #1
    Mitglied
    Registriert seit
    Oct 2020
    Beiträge
    7

    SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Inspiriert von einem Thread in diesem Forum möchte ich euch mein neues Projekt vorstellen:



    SecretNote ist ein Service, um anonym und verschlüsselt Nachrichten austauschen zu können, ähnlich zu privnote.com oder cryptnote.org. Diese Nachrichten können nur vom Empfänger gelesen werden und zerstören sich anschließend selbst. Als zusätzliches Feature stehen auch anonyme Chats zur Verfügung. Nachrichten werden dabei mit AES-GCM-128 verschlüsselt, Chat-Nicknames mit ECDSA-Signaturen abgesichert.

    Für jede Nachricht (und jeden Chat) erhält der Ersteller einen geheimen Link, den er mit dem Empfänger teilen kann. Nur mit diesem Link ist es später möglich, die Nachricht zu lesen, da der benötigte kryptografische Schlüssel nur in diesem Link enthalten ist. Über einen zweiten, persönlichen Link kann der Ersteller einer Nachricht feststellen, ob seine Nachricht bereits gelesen wurde. Über einen persönlichen Chat-Link erhalten Teilnehmer des Chats Zugriff auf ihren persönlichen Nicknamen.

    Features:
    • Ende-zu-Ende verschlüsselte Nachrichten, anonym und selbstzerstörend
    • E2E-verschlüsselte Chats, anonym und vergänglich
    • Optionale Lesebestätigung über Telegram
    • Sicheres Design: Nachrichten werden bereits im Browser verschlüsselt, der Server hat keine Möglichkeit die Nachrichten zu entschlüsseln. Die Integrität des Codes kann vom Benutzer händisch überprüft werden
    • Kostenlos und ohne Registrierung nutzbar
    • Frei und Open-Source - der Quellcode ist auf Github verfügbar, inkl. Paket zum selbst-hosten


    SecretNote ist ein Hobbyprojekt von mir, das ich in erster Linie gebastelt habe, um neue Technologien zu lernen (Rust, Angular). Ich betreibe die Website ohne jede Gewinnabsicht, in der Hoffnung dass sie jemand nützlich findet.

    Gepostet mit Zweitaccount, um meinen Erst-Account hier anonym zu halten.
    Geändert von mkb (27.12.20 um 20:00 Uhr)

  2. #2
    Bot #0384479 Avatar von BurnerR
    Registriert seit
    Jul 2013
    Beiträge
    5.008
    ngb:news Artikel
    3

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Sieht sehr cool aus .
    Gibt es eine Möglichkeit auf einfachen Weg zu verifizieren, dass
    a) die sjcl.js wirklich ein unveränderter build ist?
    b) das ausgelieferte js ein (semantisch/syntaktisch, läuft imHo auf das selbe hinaus) unveränderter build ist und/oder die Datei auch die ist, die im github repo zu finden ist?

    Konkreter Vorschläg: Spricht was dagegen, 1:1 den Referenz-build der sjcl.jl auszuliefern? Dann könnte man zumindest per diff sehen, dass es keinen Unterschied gibt.
    Für diesen Beitrag bedankt sich rexcolo

  3. #3
    Mitglied

    (Threadstarter)


    Registriert seit
    Oct 2020
    Beiträge
    7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    @BurnerR: Danke!

    a) Die Original-Builds von sjcl funktionieren nicht, da das Modul für elliptische Kurven standardmäßig nicht aktiviert ist. Und alle existierenden, vollständigen Builds sind veraltet und inoffiziell. Deshalb muss sjcl selbst gebauert werden - da das aber nicht cross-platform funktioniert liegt in Repository eine vorgebaute Version mit allen benötigten Modulen. Das Script zum Bauen liegt dort ebenfalls. Wenn du die sjcl.js im Repository überprüfen willst kannst du das theoretisch selbst einmal bauen und die Ergebnisse vergleichen. Zumindest auf den 2 Rechnern hier war das Ergebnis byte-für-byte das Gleiche.

    b) Das kann man mit den Integrity-Hashes herausfinden. Wenn du dir den Quellcode der ausgelieferten Seite anzeigen lässt und nach "integrity" suchst findest du Hash-Werte des ausgelieferten Javascript-Codes. Dein Browser prüft automatisch, ob die Hashes mit den Javascript-Dateien übereinstimmen. Die Hashes kannst du mit den Werten aus dem Github-Release vergleichen, bzw mit denen aus dem Github-Buildvorgang (leider nur mit Github-Account zugänglich). Dieser Build ist insofern unverändert, dass er nicht von mir, sondern von Github selber ausgeführt wurde, und die dazu benötigen Scripte und Runtime im Repository / im Workflow dokumentiert wurden. Für Version 1.0.0 sind das diese Hashes:
    Code:
    runtime.3fbcc8afee7e161059ed.js: integrity="sha384-6cc7i/rcOci3G2xlzyK2DejMQD5jP0sDqKvuxh39rz1mV9uxyYs1kB8S2HQGAO/w
    polyfills.569c82fc09bfd8b4c0e3.js: integrity="sha384-As5q9yYFA9urKEFtE98SzhpQoxhSMNE/rGVzeTAN/RwGdZbC1nM8HuUk1kfNVunT
    main.5bdcc7d14a78ef53ca86.js: integrity="sha384-JAbjnx1DdiapShcTzibqbN+Vsd9/f9TK/vEI3wxEa77b888pVqh+kNUHcgJvCBMe
    Falls diese Hashes übereinstimmen sind die ausgelieferten Files ein clean build des unveränderten Repositories, ausgeführt von Unbeteiligten.
    Für diesen Beitrag bedanken sich rexcolo, darksider3

  4. #4
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    7.141
    ngb:news Artikel
    18

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Hmmm @mkb müsstest du nun eigentlich nicht anfangen zu toben wie BurneR auf die Idee kommt anzuzweifeln das die Daten nicht unverändert sind? ;D
    Deine Antwort war mir zu professionell ....
    Für diesen Beitrag bedanken sich rexcolo, mkb, one, pspzockerscene
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  5. #5
    vivo forlasis

    Moderator

    Avatar von poesie noire
    Registriert seit
    Jul 2013
    Beiträge
    6.104

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    ...um es für Laien wie mich auszudrücken: Vorbildlich! Merci!
    + kill six billion demons +

  6. #6
    Mitglied

    (Threadstarter)


    Registriert seit
    Oct 2020
    Beiträge
    7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Update: v1.1.0
    Auf Anregung eines Users aus diesem Forum gibt's ein neues Feature: Lese-Bestätigung über Telegram.
    Nach dem Speichern einer Nachricht kann (optional) ein Telegram-Name angegeben werden, der vom SecretNoteBot informiert wird, sobald die Nachricht gelesen wurde. Das funktioniert auch für bestehende Nachrichten über den administrativen Link.

    Wie immer kostenlos, ohne Registrierung und open source.
    Danke für die Rückmeldungen und Anregungen hier!
    Für diesen Beitrag bedanken sich pspzockerscene, drfuture, poesie noire

  7. #7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Super Sache! Deutlich besser als vergleichbare Angebote von inkompetenten Entwicklern.

    Was weitere Sicherheit bieten könnte, wäre ein Browser-Addon, welches die Seite auf Integrität überprüft und das "Übermitteln" des Passworts verhindert, wenn die Integritätsprüfung negativ ist. Ein böses JavaScript könnte das. Da wäre es vielleicht möglich, einen eigenen Server einzutragen oder sogar ausschließlich lokales Javascript nachzuladen (so wie das z.B. "Decentraleyes" tut).

    Weiterhin würde ich mich freuen, wenn es auch [matrix]-Lesebestätigungen gäbe. Die ließen sich mit einem Access-Token mit einem einfachen POST-Request abschicken, das ist also quasi ein Einzeiler.

    Das absolute Sahnehäubchen wäre für mich eine Client-Anwendung, in die ich einfach echo pipen könnte und somit direkt aus einer Konsole oder mit einem Skript bspw. Passwörter aus KeePassXC versenden könnte ("natürlich" auch mit Integritätsprüfung).

    Es gibt so viele Möglichkeiten! Danke, dass du uns deinen Quellcode zur Verfügung stellst. Das ist bei ähnlichen Projekten leider nicht der Fall.

    Darf ich noch fragen, warum du Angular nutzt? Das ist doch bei einem so "kleinen" Projekt gar nicht nötig, oder? Für mich bläht das nur die Codebasis auf und macht den Code schwerer les-/auditbar. Beim ersten Drüberlesen habe ich als Rust-Laie im Server-Code keine Fehler/Lücken finden können. Gut kommentiert ist er auch größtenteils.

    ich gebe 4,5 von 5!

    Zitat Zitat von mkb Beitrag anzeigen
    Die Original-Builds von sjcl funktionieren nicht, da das Modul für elliptische Kurven standardmäßig nicht aktiviert ist. Und alle existierenden, vollständigen Builds sind veraltet und inoffiziell. Deshalb muss sjcl selbst gebauert werden - da das aber nicht cross-platform funktioniert liegt in Repository eine vorgebaute Version mit allen benötigten Modulen. Das Script zum Bauen liegt dort ebenfalls. Wenn du die sjcl.js im Repository überprüfen willst kannst du das theoretisch selbst einmal bauen und die Ergebnisse vergleichen. Zumindest auf den 2 Rechnern hier war das Ergebnis byte-für-byte das Gleiche.
    Versuch' doch mal, das upstream einzupflegen. Das Problem hatten sicher noch mehr Entwickler.
    Für diesen Beitrag bedankt sich mkb

  8. #8
    Mitglied

    (Threadstarter)


    Registriert seit
    Oct 2020
    Beiträge
    7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Danke für's Feedback und die vielen guten Gedanken!

    Zitat Zitat von rexcolo Beitrag anzeigen
    Was weitere Sicherheit bieten könnte, wäre ein Browser-Addon, welches die Seite auf Integrität überprüft und das "Übermitteln" des Passworts verhindert, wenn die Integritätsprüfung negativ ist.
    Weiter oben hab ich ja bereits ausgeführt, wie man die Integrität manuell anhand der Subresource-Integrity-Hashes prüfen kann. Das könnte man sicher über ein Browser-Addon automatisieren. Ich hab mal gesucht und bin überrascht, dass noch niemand auf die Idee kam, sowas könnte man schließlich auch für andere Seiten nutzen.
    Allerdings bringt das meiner Meinung nach keinen wirklichen Vorteil, wenn das Addon von mir bereitgestellt wird, der ja auch den Server betreibt. Am Ende läuft es mit und ohne Addon darauf hinaus, dass ein User "mir" vertrauen müsste (oder eben weiter manuell die Hashes prüft).
    Wäre aber mal eine schöne Idee für ein zukünftiges Projekt - ein generisches Addon, dass sich die Integrity-Hashes von Websites merken kann und warnt falls diese sich ändern.

    Zitat Zitat von rexcolo Beitrag anzeigen
    Weiterhin würde ich mich freuen, wenn es auch [matrix]-Lesebestätigungen gäbe.
    Ich notier's mal, falls ich mal zu viel Zeit hab. Matrix kenne ich nicht wirklich (und scheint auch nicht wirklich verbreitet), mal schauen.

    Zitat Zitat von rexcolo Beitrag anzeigen
    Das absolute Sahnehäubchen wäre für mich eine Client-Anwendung, in die ich einfach echo pipen könnte und somit direkt aus einer Konsole oder mit einem Skript bspw. Passwörter aus KeePassXC versenden könnte ("natürlich" auch mit Integritätsprüfung).
    Das klingt praktisch, ich notier's mal. Integritätsprüfung bräuchte man dabei nicht, da der Crypto-Code dann ja in der Client-Anwendung steckt, nicht im ausgelieferten Javascript-Code.

    Zitat Zitat von rexcolo Beitrag anzeigen
    Darf ich noch fragen, warum du Angular nutzt?
    Weil Angular unglaublich praktisch ist. Klar kann man vieles auch mit reinem Javascript machen - aber das wird relativ schnell umständlich, lang und schwer zu warten. Spätestens wenn man dynamisch Html-Elemente erzeugen will wird's eklig, weil man nicht mehr "HTML" schreibt, sondern alles mit Javascript-Calls zusammenbauen muss. Im Gegensatz dazu kann man mit Angular HTML und Javascript schreiben wie gewohnt, hat eine saubere Modularisierung, Typechecking und eine (gerade für Javascript-Verhältnisse) super Toolchain, die auch so Dinge wie Server-side Rendering beherrscht. Lesbarkeit ist halt so Gewohnheitssache: der wichtige Code liegt in secretnote-fe/src/app/, ein Ordner pro Unterseite, Code der für mehrere Seiten gebraucht wird im Hauptordner.
    Die Seite als Single-Page-App aufzuziehen hat noch einen weiteren Vorteil: Es wird nur einmal (beim ersten Aufruf) Javascript geladen, wenn man die Integrität checken will muss man das nur einmal machen, nicht nach jedem Klick auf einen Link.

    Zitat Zitat von rexcolo Beitrag anzeigen
    Versuch' doch mal, das upstream einzupflegen. Das Problem hatten sicher noch mehr Entwickler.
    Die sjcl-Entwickler haben das leider mit Absicht gemacht - elliptische Kurven brauchen nun mal nicht viele Entwickler, kostet aber einige KB Dateigröße. Und ein eigenes npm-Package zu maintainen will ich eigentlich nicht. Im Gegensatz dazu: wenn ich sjcl selber baue kann ich wenigstens auch noch ein paar kB Dateigröße sparen und damit wieder ein paar ms Ladezeit herauskitzeln, indem ich alles deaktiviere was mein Projekt nicht braucht. Nachvollziehbar ist der Build ja, dank Build-Script im Repo.
    Für diesen Beitrag bedanken sich rexcolo, coffeerhyder

  9. #9
    Ärgert gerne BoerseTOMods
    Registriert seit
    Mar 2015
    Beiträge
    196

    Smile Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Telegram Support:
    Mega gut

    Warum hast du eigentlich "MarkdownV2" verwendet und nicht HTML?
    Du hast zwar eh wenig/nichts was escaped werden müsste bisher, aber das ginge mit "parse_mode" HTML evtl. einfacher (?)
    Ist wahrscheinlich egal. Habe letztens auch einen Telegram Bot gebaut (TBA) und war verwundert, dass deren (Python) Framework keine gute Möglichkeit zum Escapen geboten hat.

    Kleine Anmerkung:
    Du weißt war, ob ein User den Bot jemals verwendet hat und zeigst eine Fehlermeldung falls dieser den Bot nicht gestartet hat, aber wenn ich den Telegram Bot per "Stop and Block Bot" beende wird von secretnote weiterhin davon ausgegangen, dass er läuft und ich Notifications erhalten kann.
    Falls man das abfangen kann, solltest du dies evtl. tun (ja ich weiß, kann man fast schon als Anwenderfehler bezeichnen).

    Grüße
    EDIT

    Zu dem "hilfs-Browser-Addon":
    Die Idee ist nicht verkehrt, aber mittlerweile sind auch Addons, die Daten klauen immer mal wieder ein Problem -> Dagegen wird man nichts tun können (?)
    Für diesen Beitrag bedanken sich mkb, rexcolo
    Geändert von coffeerhyder (29.12.20 um 13:06 Uhr) Grund: Böse Browser Addons ergänzt

  10. #10

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Zitat Zitat von mkb Beitrag anzeigen
    ein eigenes npm-Package zu maintainen will ich eigentlich nicht.
    Warum nicht? Ist das denn so viel Arbeit?

  11. #11
    Mitglied

    (Threadstarter)


    Registriert seit
    Oct 2020
    Beiträge
    7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Update: v1.2.0
    Neues Feature: Kommandozeilen-Client-Anwendung, die Nachrichten speichern und wieder abrufen kann.
    Code (Bash):
    1. echo "Nachricht" | secretnote-cli
    2. secretnote-cli 'https://secretnote.mk-bauer.de/note/abc#def'
    Die Anwendung kann von Github bezogen werden.

    Danke für eure Vorschläge!



    Zitat Zitat von coffeerhyder Beitrag anzeigen
    Warum hast du eigentlich "MarkdownV2" verwendet und nicht HTML?
    Dachte Markdown wäre simpler (und sicherer, weil keine Injections). Ist es aber beides nicht, HTML wäre wohl leichter gewesen.

    Zitat Zitat von coffeerhyder Beitrag anzeigen
    Kleine Anmerkung:
    Du weißt war, ob ein User den Bot jemals verwendet hat und zeigst eine Fehlermeldung falls dieser den Bot nicht gestartet hat, aber wenn ich den Telegram Bot per "Stop and Block Bot" beende wird von secretnote weiterhin davon ausgegangen, dass er läuft und ich Notifications erhalten kann.
    Falls man das abfangen kann, solltest du dies evtl. tun (ja ich weiß, kann man fast schon als Anwenderfehler bezeichnen).
    Kann ich das überhaupt irgendwie feststellen, ob ein Benutzer noch Nachrichten empfängt, oder merkt man das erst wenn man die Lesebestätigung zustellt? Würde ich aber auch als Anwenderfehler sehen.

    Zitat Zitat von coffeerhyder Beitrag anzeigen
    Zu dem "hilfs-Browser-Addon":
    Die Idee ist nicht verkehrt, aber mittlerweile sind auch Addons, die Daten klauen immer mal wieder ein Problem -> Dagegen wird man nichts tun können (?)
    Guter Einwand - da so ein Addon ganz andere Berechtigungen hat als eine einfache Website wäre das sogar ein zusätzliches Risiko. Dazu kommt: eine Website kann man deutlich einfacher prüfen als ein Addon.

    @rexcolo: Ein npm-Paket zu veröffentlichen ist wohl nicht viel Arbeit, aber sollte im besten Fall langfristig betrachtet betrieben werden. Niemand braucht noch ein npm-Paket, das in einigen Jahren keine Updates mehr enthält und alle darauf aufbauenden Pakete unsicher macht, davon gibt's schon genug. Außerdem: auch dieses Paket wäre dann inoffiziell.
    Für diesen Beitrag bedanken sich rexcolo, coffeerhyder

  12. #12
    Ärgert gerne BoerseTOMods
    Registriert seit
    Mar 2015
    Beiträge
    196

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Zitat Zitat von mkb Beitrag anzeigen
    Dachte Markdown wäre simpler (und sicherer, weil keine Injections). Ist es aber beides nicht, HTML wäre wohl leichter gewesen.
    Die HTML Unterstützung von Telegram ist doch sehr eingeschränkt mir scheint als hätten sie darauf geachtet - aber wie gesagt bin da kein Experte - in meiner Anwendung hatte ich mich für HTML entschieden.

    Zitat Zitat von mkb Beitrag anzeigen
    Kann ich das überhaupt irgendwie feststellen, ob ein Benutzer noch Nachrichten empfängt, oder merkt man das erst wenn man die Lesebestätigung zustellt? Würde ich aber auch als Anwenderfehler sehen.
    Bin nicht tief genug in der Materie Telegram drin um das sagen zu können.
    Hast du nach dem Abschicken der Nachricht die Möglichkeit, zu sehen ob der Benutzer den Bot geblockt hat?
    Dann könnte man zumindest nach der ersten fehlgeschlagenen Telegram Benachrichtigung den Benutzer wieder auf "Status unbekannt - du musst den Bot starten" setzen.
    Ist aber auch nicht so wichtig ich teste solche Features nur gerne penibel genau

  13. #13

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    @mkb: du geile Sau. Ich erhöhe meine Wertung auf 4,6 von 5 Russenhocken!
    Für diesen Beitrag bedanken sich mkb, pspzockerscene

  14. #14
    Ärgert gerne BoerseTOMods
    Registriert seit
    Mar 2015
    Beiträge
    196

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Zitat Zitat von mkb Beitrag anzeigen
    Kann ich das überhaupt irgendwie feststellen, ob ein Benutzer noch Nachrichten empfängt, oder merkt man das erst wenn man die Lesebestätigung zustellt? Würde ich aber auch als Anwenderfehler sehen.
    Bin eben durch Zufall drauf gestoßen:
    Das Beispiel des Exception Handling impliziert, dass das feststellbar ist:
    Example: You're trying to send a message, but the user blocked the bot. An Unauthorized exception, a subclass of TelegramError, will be raised and delivered to your error handler, so you can delete it from your conversation list, if you keep one.
    Guten Rutsch!
    Für diesen Beitrag bedankt sich mkb

  15. #15
    Mitglied

    (Threadstarter)


    Registriert seit
    Oct 2020
    Beiträge
    7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    @coffeerhyder: Danke, anscheinend bekomm ich nen Status-Code 403, falls ein User den Bot geblockt hat. In diesem Fall fliegt der User aus der Datenbank und bekommt beim nächsten Mal wieder die entsprechende Warnung angezeigt. Update ist live.

    Zitat Zitat von coffeerhyder Beitrag anzeigen
    Die HTML Unterstützung von Telegram ist doch sehr eingeschränkt mir scheint als hätten sie darauf geachtet - aber wie gesagt bin da kein Experte - in meiner Anwendung hatte ich mich für HTML entschieden.
    Ja, da haben die Telegram-Leute drauf geachtet. Ich hatte mir das aber gar nicht erst durchgelesen, sondern einfach direkt Markdown gebaut. Im Nachhinein betrachtet wäre HTML wohl einfacher gewesen.
    Für diesen Beitrag bedankt sich coffeerhyder

  16. #16
    Ärgert gerne BoerseTOMods
    Registriert seit
    Mar 2015
    Beiträge
    196

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Nice!

    Zitat Zitat von mkb Beitrag anzeigen
    [post=1101468]
    Ja, da haben die Telegram-Leute drauf geachtet. Ich hatte mir das aber gar nicht erst durchgelesen, sondern einfach direkt Markdown gebaut. Im Nachhinein betrachtet wäre HTML wohl einfacher gewesen.
    Jo im Endeffekt isses ja egal^^

    Jetzt wo du sowieso einen Telegram Bot hast könntest du darüber nachdenken, auch Support zum Erstellen von SecretNotes in diesen einzubauen (nur ein Gedankenspiel).
    Vermutlich ist es aber dumm das per Telegram zu erlauben, denn der Bot Chat ist nicht Ende-Zu-Ende verschlüsselt (nur in "Geheimen Chats" und das geht nicht mit Bots) somit hätte Telegram theoretisch Zugriff auf die original Nachricht -> Quatsch oder?

  17. #17
    Mitglied

    (Threadstarter)


    Registriert seit
    Oct 2020
    Beiträge
    7

    Re: SecretNote - anonyme Nachrichten und Chats, sicher und open-source

    Da hatte ich bereits drüber nachgedacht, den Gedanken dann aber verworfen, da dann alle Sicherheitsgarantien weg sind. Telegram hätte theoretisch Zugriff, und im Nachrichtenverlauf könnten die Texte auch weiter auftauchen (wenn man nicht manuell löscht).
    Für diesen Beitrag bedankt sich coffeerhyder

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •