Wie mich die Sicherheitslücke in Yandex.Stations zu dem Projekt inspiriert hat: Musikdatenübertragung

Letzte Woche habe ich darüber gesprochen, wie Yandex.Stations per Sound aktiviert werden. Es stellte sich heraus, dass das WiFi-Passwort im Klartext übertragen wird. Ich fragte mich, warum es notwendig war, die Aktivierung auf diese Weise und nicht auf eine debuggte Weise durchzuführen.

Infolgedessen kam ich zu dem Schluss, dass die Show in diesem Prozess wichtig ist. Was passiert jedoch, wenn wir ein Datenübertragungsprotokoll erstellen, das sich vollständig auf die Benutzererfahrung konzentriert? So entstand das Octave-Projekt - für die melodische Datenübertragung.



Unter dem Schnitt werde ich Ihnen erzählen, wie der Prototyp hergestellt wurde, und einen Link zur Demo geben. Sie können hören, wie jede Nachricht klingt :)

Zusammenfassung des vorherigen Artikels


Ich habe den Ton aufgenommen, mit dem die Station aktiviert wird, die Visualisierung der sich bewegenden Fourier-Transformation betrachtet und festgestellt, wie das Signal angeordnet ist und wo das WLAN-Passwort im Klartext liegt.



Es wird eine Hex-Zeichenfolge übertragen, bei der für jedes Zeichen 0 - F eine Frequenz von 1 kHz - 4,6 kHz mit einem Schritt von 240 Hz vorliegt. Ich fragte mich, warum es notwendig war, die Aktivierung auf diese Weise und nicht über Bluetooth durchzuführen, wie zum Beispiel bei chinesischen Staubsaugerrobotern, und kam zu dem Schluss, dass in diesem Fall Effizienz wichtiger ist als Sicherheit oder Geschwindigkeit.

Inspiration


Wirklich! Schließlich ist das Kommunikationsprotokoll immer ein Kompromiss zwischen Reichweite, Geschwindigkeit und Zuverlässigkeit. Was aber, wenn all diese Eigenschaften in den Hintergrund treten und der entscheidende Faktor der Eindrucksfaktor für den Benutzer ist?

Ich mochte die einfache Idee der Yandex-Entwickler, wie ein Hammer, 16 Frequenzen auszuwählen: eine für jedes Hex-Symbol. Und ich hatte auch einen Signalempfänger aus einer früheren Studie, also beschloss ich, diese Idee zu entwickeln und nicht alles von Grund auf neu zu erfinden.

Zwei Verbesserungen


Phasenunterbrechung entfernen


Erstens war ich bei der Analyse des Aktivierungssignals der Station durch Rauschen bei allen Frequenzen zum Zeitpunkt des Umschaltens des Symbols verwirrt. Dies sind die vertikalen Balken im Spektrogramm:



In diesen Momenten sind Klicks zu hören. Der Grund für diesen Effekt ist eine Phasenlücke zwischen den Zeichen. Tatsache ist, dass die Länge eines Symbols nicht zu einer ganzzahligen Anzahl von Schallschwingungsperioden passt. Daher ändert sich zum Zeitpunkt des Umschaltens der Frequenz die Signalamplitude dramatisch. Ungefähr so:



Es gibt verschiedene Methoden im Radio, um diesen Effekt zu vermeiden. Ich habe mich entschlossen, die Amplitude des Signals zum Zeitpunkt des Umschaltens der Frequenz sanft zu reduzieren und dann sanft aufzubauen - es klingt weicher. Es sieht so aus:



Vielleicht waren die Klicks kein Bug, sondern Features und gaben einen "futuristischeren" Sound, aber ich mag es besser ohne sie :)

Musik hinzufügen


Wir übertragen Daten durch Ton. Warum nicht dafür Notenfrequenzen verwenden? Ich habe verschiedene Optionen ausprobiert und am Ende 16 Noten ausgewählt, beginnend mit Vor der ersten Oktave.



Wenn Sie höhere Noten verwenden, fühlen sich Ihre Ohren weniger wohl. Und tiefere Noten werden aufgrund der Eigenschaften des Frequenzgangs von Lautsprechern und Mikrofonen schlechter übertragen. Außerdem sind die Frequenzen tiefer Töne näher beieinander, was sich auf den Empfang auswirkt.

Es stellte sich eine Art Musikfrequenzmodulation heraus. Nennen wir es "Croup-Modulation" :)

Wir starten


Wie klingt das? Damit Sie es direkt im Browser versuchen können, habe ich den Krup-modulierten Sender von Python auf js umgeschrieben und eine einfache Oberfläche erstellt.

Ich nutze diese Gelegenheit, um Hallo zu sagen:


Ich benutze utf-8, was bedeutet, dass kyrillische Zeichen und sogar Emojis übertragen werden können. Pakete mit ihnen sind länger, da jedes dieser Zeichen mehr als 1 Byte hat.


Es klingt etwas weniger angenehm als Latein, da jedes kyrillische Zeichen dasselbe Adressbyte enthält. Aber immer noch interessant :)

Sie können hier beliebige Sätze ausprobieren. (Duplizieren am Ende des Artikels)

Aber was ist mit dem Empfänger?


Natürlich macht es Spaß, zufällige Töne basierend auf Text zu hören, aber die Datenübertragung kann nur aufgerufen werden, wenn das Signal empfangen, demoduliert und decodiert wird.

Ich habe einen Prototyp eines Python-Empfängers als Proof of Concept erstellt. So funktioniert es:


Sie sehen, die Datenübertragung erfolgt wie durch Notizen! Natürlich ist von einer Produktion derzeit keine Rede. Es gibt keine Synchronisation, fehlerkorrigierende Codierung und Integritätskontrolle. Aber wenn die Community Interesse zeigt und einige Optionen für den praktischen Gebrauch bietet, kann ich die oben genannten Funktionen implementieren und in eine normale Bibliothek einbinden :)

Der Radfahrer?
Ich weiß, dass die Datenübertragung durch Ton gut entwickelt ist. Es gibt Bibliotheken, die auch mit Ultraschall arbeiten , DTMF ist immer noch weit verbreitet, und die Leute emulierten sogar Tonbefehle mit einer Pfeife . Ich habe jedoch keine Projekte gesehen, die Notizen für die Datenübertragung verwenden. Bitte schreiben Sie in die Kommentare, wenn Sie so etwas wissen.

Zusammenfassend


Es war ein interessantes Projekt für ein paar Abende mit einem ziemlich spektakulären Ergebnis. Eine solche Datenübertragung kann beispielsweise als „Sound-QR-Code“ verwendet werden, um ein Konto von einem Telefon auf eine Website usw. zu teilen.

Alternativ können Sie damit Klingeltöne für Marken erstellen. Hier klingt zum Beispiel nach habr .

Alle aktuellen Entwicklungen sind auf dem Github verfügbar - Sie können versuchen, das Projekt selbst zu entwickeln.

Duplizieren Sie den Link zur Demo, die im Browser ausgeführt wird.

Danke fürs Lesen! Ich hoffe du warst interessiert.

Viel Glück!

Source: https://habr.com/ru/post/de470293/


All Articles