Sinologe und Kommunist

  • 1 Post
  • 2 Comments
Joined 2 years ago
cake
Cake day: October 29th, 2022

help-circle

  • Teil II

    Turbolader für Matrix

    Abgesehen von den Albträumen bei der Finanzierung von Open-Source-Software war das Jahr 2022 vor allem ein Jahr des Aufbaus - mit dem Schwerpunkt, die Leistung und Benutzerfreundlichkeit von Matrix weiter zu verbessern und sicherzustellen, dass sich das Protokoll mit zentralisierten proprietären Alternativen messen kann (und mehr!). Schließlich müssen die Matrix-Clients mindestens so gut sein wie die zentralisierten Alternativen, um eine breite Akzeptanz zu finden.

    Diese Arbeit hat viele Formen angenommen: Auf der Serverseite hat Synapse Rust-Unterstützung entwickelt, um seine heißen Pfade zu beschleunigen, angefangen bei der Auswertung von Push-Regeln. Es ist sehr aufregend zu sehen, wie die Leistung von Synapse in eine neue Ära eintritt, aufbauend auf dem Fundament einer mittlerweile sehr ausgereiften und stabilen Homeserver-Implementierung.

    In der Zwischenzeit ist die Arbeit an “Faster Joins” in den letzten Zügen, die es Servern endlich ermöglicht, Räumen über Federation schnell beizutreten, indem sie nur die minimale Teilmenge des Zustands synchronisieren, die für den Beitritt benötigt wird, anstatt proaktiv den gesamten aktuellen Zustand des Raums zu synchronisieren. Schnellere Joins sind seit Oktober in Synapse zum Testen verfügbar, und seither hat das Team daran gearbeitet, Worker zu unterstützen und die verschiedenen Randfälle und Fehler zu beheben, die während der Tests aufgetaucht sind. Die derzeitige Join-Performance liegt bei etwa 25-facher Beschleunigung in großen Räumen, aber wir sind zuversichtlich, dass wir dies noch weiter verbessern können, und wir streben an, dies rechtzeitig zur FOSDEM Anfang Februar zu erreichen.

    Auf der Client-Seite konzentrierte sich die Arbeit zur Verbesserung der Leistung des Matrix-Clients auf “Sliding Sync” - unsere völlig neue API für die Synchronisierung der minimalen Daten mit einem Client, die für das Rendern der Benutzeroberfläche erforderlich sind, so dass Anmeldung, Start und Synchronisierung sofort erfolgen können. Sliding Sync (ursprünglich “sync v3” genannt) hat lange auf sich warten lassen; die API hat unzählige Iterationen durchlaufen, während wir das ganze Jahr 2022 hindurch daran gearbeitet haben, sie in realen Clients zu implementieren und alle Erweiterungen (MSC3884, MSC3885) hinzuzufügen, die nötig waren, um mit sync v2 gleichzuziehen. Das Warten hat sich jedoch gelohnt: Die Unterstützung in Element Web befindet sich in der Endphase der Entwicklung - und darüber hinaus werden die mobilen Clients der nächsten Generation von Element X nur Sliding Sync sprechen.

    Element X selbst entwickelt sich zu einem Vorzeigeprojekt dafür, wie schnell und performant Matrix sein kann: Es basiert auf matrix-rust-sdk und nutzt die native Swift UI auf iOS/macOS und Jetpack Compose auf Android, um die bestmögliche plattformspezifische Benutzererfahrung mit der ultimativen SDK-Implementierung in nativem Code zu verbinden, die durch Sliding Sync unterstützt wird. Das Ziel ist es, mindestens so schnell wie Telegram, iMessage oder WhatsApp zu sein (wir haben die Frames in Bildschirmaufnahmen gezählt, um Dinge wie die Zeit bis zum Start und die Zeit bis zum Zurückblättern zu vergleichen). Element X befindet sich derzeit in der späten Alpha-Phase für iOS und soll rechtzeitig zur FOSDEM in die öffentliche Beta-Phase gehen. Hier können Sie einen ersten Blick auf das iPad-ähnliche Layout werfen (unter macOS)!

    Element X

    Was schließlich die Benutzerfreundlichkeit betrifft, so hat sich bei Matrix einiges getan - vor allem die mobile Benutzeroberfläche von Element wurde im September vom Designteam komplett überarbeitet, um das endgültige Design von Element X vorzubereiten. Alle verbleibenden UX-Macken sollten mit Element X beseitigt werden, aber die Optik ist schon jetzt ein klarer Schritt in Richtung einer hervorragenden Alternative zu den zentralisierten Anbietern.

    Verschlüsselung

    Wir hatten große Pläne für E2EE in Matrix in diesem Jahr; zunächst wurde vodozemac in großer Eile fertiggestellt und als unsere glänzende neue Native-Rust-Implementierung von Olm/Megolm auditiert. Der Plan war dann, vodozemac in die Krypto-Kiste von matrix-rust-sdk zu integrieren und dann die verschiedenen alten, fragmentierten E2EE-Implementierungen in matrix-js-sdk, matrix-ios-sdk, matrix-android-sdk2 und matrix-rust-sdk selbst durch eine echte, geprüfte Implementierung zu ersetzen - mit Audits, die bei Least Authority gebucht wurden, um weitere Sicherheit für matrix-rust-sdk-crypto, matrix-rust-sdk selbst und schließlich den gesamten Stack (Element X + Synapse) zu erhalten.

    Leider gerieten die Dinge aus den Fugen, als sich Sicherheitsforscher der Royal Holloway University London und anderer Institute meldeten und erklärten, dass sie in der ehrwürdigen matrix-js-sdk-Implementierung einige unangenehme Schwachstellen gefunden hätten. So blieb uns nichts anderes übrig, als “Element R” - das Projekt zur Konvergenz von matrix-{js,ios,android}-sdk auf matrix-rust-sdk-crypto - zu pausieren und stattdessen mit der Analyse und Behebung der Probleme in allen derzeit ausgelieferten Matrix-Clients zu beginnen, um sie so schnell wie möglich zu beheben. Ironischerweise stellte sich am Ende heraus, dass nur matrix-{js,ios,android}-sdk betroffen war - alle anderen unabhängigen Implementierungen, einschließlich matrix-rust-sdk, waren in Ordnung. Die Arbeit an Element R hätte uns also vor diesen Schwachstellen geschützt, wenn sie schon fertig gewesen wäre, und hätte es uns ermöglicht, sie an einer einzigen Stelle zu lösen. Stattdessen wurde die Arbeit an Element R um Monate verschoben, während wir die verschiedenen Probleme in den Legacy-SDKs in dreifacher Ausführung bearbeiteten und gleichzeitig alle anderen Client-Implementierungen überprüften, die wir finden konnten, und uns mit zusätzlichen Problemen befassten, die die RHUL-Forscher entdeckten, als sie tiefer bohrten. Schließlich beendeten wir die Analyse und vereinbarten eine koordinierte Offenlegung Ende September. (EDIT: Um das klarzustellen: Wir sind den Sicherheitsforschern sehr dankbar dafür, dass sie die Schwachstellen entdeckt und uns gegenüber verantwortungsbewusst offengelegt haben. Die Frustration rührt von der Ironie her, dass wir die schwerwiegenden Sicherheitslücken entschärft hätten, wenn wir die Überarbeitung von matrix-rust-sdk-crypto einige Monate früher abgeschlossen hätten - stattdessen wurde die Überarbeitung noch weiter nach hinten verschoben. Das ist aber natürlich unsere Schuld, nicht die der Forscher).

    Seitdem wurde die Arbeit auf drei Arten aufgeteilt: Erstens wurde die Arbeit an Element R wieder aufgenommen - und tatsächlich ist Element R auf iOS seit heute so gut wie einsatzbereit, abgesehen von einigen Arbeiten zur Unterstützung von E2EE-Push-Benachrichtigungen (die auch für Element X benötigt werden). Element R auf Android ist ebenfalls sehr nah dran, und inzwischen hat Element R auf Web sein erstes Ereignis am 19. Dezember entschlüsselt! Wir hoffen, dass wir Element R bis Februar auf allen Plattformen in Produktion bringen können.

    Zweitens haben wir uns mit anderen Punkten befasst, die von den RHUL-Forschern angesprochen wurden, um sicherzustellen, dass böswillige Server keine böswilligen Geräte oder Benutzer zu Konversationen hinzufügen können, anstatt wie bisher zu warnen. Dies ist kein triviales Problem, aber wir machen Fortschritte durch MSC3917 (Cryptographically Constrained Room Membership) und MSC3834 (Opportunistic user key pinning (TOFU)). Diese Arbeit wird jedoch zunächst durch die Landung von Element R blockiert, da es keine Möglichkeit gibt, dieses Problem in dreifacher Ausführung mit den alten SDKs zu lösen.