• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

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

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
Inspiriert von einem Thread in diesem Forum möchte ich euch mein neues Projekt vorstellen:


SecretNote

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 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.
 
Zuletzt bearbeitet:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.252
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.
 

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
  • Thread Starter Thread Starter
  • #3
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 und . 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 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 (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 / 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.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
7.677
Ort
in der Zukunft
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 ....
 

poesie noire

vivo forlasis
Teammitglied

Registriert
14 Juli 2013
Beiträge
6.101
...um es für Laien wie mich auszudrücken: Vorbildlich! Merci!
 

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
  • Thread Starter Thread Starter
  • #6
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 informiert wird, sobald die Nachricht gelesen wurde. Das funktioniert auch für bestehende Nachrichten über den administrativen Link.

Wie immer kostenlos, ohne Registrierung und .
Danke für die Rückmeldungen und Anregungen hier!
 

rexcolo

NGBler

Registriert
16 Sep. 2017
Beiträge
132
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 -Lesebestätigungen gäbe. Die ließen sich mit einem Access-Token .

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 :T von 5!

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 und . 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 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.
 

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
  • Thread Starter Thread Starter
  • #8
Danke für's Feedback und die vielen guten Gedanken!

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.

Weiterhin würde ich mich freuen, wenn es auch -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.

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.

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 [kw]secretnote-fe/src/app/[/kw], 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.

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.
 

coffeerhyder

Ärgert gerne BoerseTOMods

Registriert
11 März 2015
Beiträge
216
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 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 (?)
 
Zuletzt bearbeitet:

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
  • Thread Starter Thread Starter
  • #11
Update: v1.2.0
Neues Feature: Kommandozeilen-Client-Anwendung, die Nachrichten speichern und wieder abrufen kann.
[src=bash]echo "Nachricht" | secretnote-cli
secretnote-cli 'https://secretnote.mk-bauer.de/note/abc#def'[/src]
Die Anwendung kann von bezogen werden.

Danke für eure Vorschläge!



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.

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.

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.
 

coffeerhyder

Ärgert gerne BoerseTOMods

Registriert
11 März 2015
Beiträge
216
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.

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 :D
 

coffeerhyder

Ärgert gerne BoerseTOMods

Registriert
11 März 2015
Beiträge
216
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 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!
 

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
  • Thread Starter Thread Starter
  • #15
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.

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.
 

mkb

Neu angemeldet

Registriert
19 Okt. 2020
Beiträge
7
  • Thread Starter Thread Starter
  • #17
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).
 
Oben