WebUSB
Webusb ist ein JavaScript Programmierschnittstelle (API) Spezifikation[1] Für sicheren Zugang zu Zugang zu USB Geräte von Webseiten.[2]
Es wurde von der Webplattform Incubator Community Group veröffentlicht. Ab Juli 2021 befindet es sich im Status der Gemeinschaftsentwurf und wird unterstützt[3] durch Google Chrome, Microsoft Edge, QQ, Oper, und Samsung Internet.
Einführung
Ein universeller Serienbus oder a USB ist ein Branchen -Standard -Kommunikationsprotokoll, das zur Kommunikation von Daten über Anschlüsse und Kabel von Computern zu peripheren Geräten und/oder anderen Computern verwendet wird.[4] WebUSB ist eine Reihe von API -Aufrufen, die den Zugriff auf diese Hardware -Geräte von Webseiten ermöglichen. Webusb wurde vom World Wide Web Consortium (W3C) entwickelt.[1] Die WebUSB -API bietet einen sicheren und Entwickler vertrauten Mittel zur Kommunikation mit Kanten von Webseiten. Die WebUSB -API integriert sich in vorhandene USB -Bibliotheken und verkürzt den Entwicklungszyklus für die Integration neuer Geräte in die Webumgebung, indem Sie nicht auf die Unterstützung dieser Geräte warten müssen.
Frühe Versionen von Webusb kamen als Alternative zu Blinken, Chrome -Serien- und andere benutzerdefinierte Ansätze zum Anschließen von Browsern mit Hardware. WebUSB zielt darauf ab, die vier Ziele einer Schnittstelle zu lösen. Schnell zu machen, plattformübergreifende Plattform, gut auszusehen, Zugänglichkeit.[5]
Anwendung auf Internet of Things (IoT) Architektur
WebUSB -APIs können Hardwareprotokolle in Internet -Protokolle überbrücken und das Erstellen von Uniform -Gateways ermöglichen, die Kantengeräte mit zentralisierten Netzwerken verknüpfen.[6]
Die Explosion der Rechenfähigkeit in den letzten Jahrzehnten hat zu einem Anstieg der Kantengeräte geführt. Geräte wie Lichter, Thermometer, HVAC, Motoren werden zunehmend in zentralisierte Internet -Kontrollserver integriert.[7] Diese Geräte haben sich aus isolierten und zuvor nicht integrierten Entwicklungsumgebungen entwickelt. Infolgedessen fehlen ihnen das einheitliche und konsistente Kommunikationsprotokoll, das für die Entwicklung robuster Netzwerke erforderlich ist. Das API-Framework von WebUSB standardisiert unterschiedliche Protokolle und kann nicht standardmäßige universelle Serienbus (USB) kompatible Geräte für das Web aufzeigen.[8]
Der WebUSB will zwischen der Wahrnehmungsschicht und der Netzwerkschicht stehen.[6] Die Hauptziele der Software in diesem Gateway sind; Skalierbarkeit, Kosten und Zuverlässigkeit. Die Cloud -basierte Bereitstellung von WebUSB -Bibliotheken ermöglicht es ihm, die Skalierbarkeit zu decken, seine niedrige Overhead -Bereitstellung senkt die Kosten erheblich, und ihre kontinuierliche Nutzungsentwicklung über seine Lebensdauer hat es dem Rahmen ermöglicht, ein hohes Maß an Zuverlässigkeit zu erreichen.[9]
WebusB hat einen Eckpfeiler der Architektur -Framework der BIPES -Architektur (Blockbasierte integrierte Plattform für eingebettete Systeme) gebildet. Dieses Systemarchitekturmodell zielt darauf ab, die Komplexität der Entwicklung von IoT -Systemen zu verringern, indem relevante Software in „Blöcke“ zusammengefasst werden, die vollständige Codeeinheiten sind und aus einer zentralen Cloud -Infrastruktur in einem Edge -Gerät bereitgestellt werden können.[10] Wie bereits erwähnt, ist die Rolle von WebUSB kritisch mit seiner Fähigkeit verbunden, über das USB -Kommunikationsprotokoll mit eingebetteter Software zu kommunizieren. Sobald die Informationen in der JavaScript -Umgebung von WebUSB sind, kann sie durch eine Vielzahl von Softwareprotokollen transponiert und kommuniziert werden.[1] In diesem speziellen Architekturmodell verbindet Webusb die Lücke zwischen eingebettete Software, und die Webbrowser. Der Webbrowser kommuniziert dann mithilfe von einheitlichen WebusB -konstruierten Daten in der Cloud -Umgebung.[10]
Sicherheitsüberlegungen
WebUSB bietet einen Webseitenzugriff auf einen Connector zu einem Edge -Gerät. Die Belichtung eines Geräts im Internet birgt inhärente Risiken und Sicherheitsbedenken.[7] Durch das Produkt von Design USB -Anschlüssen sind das Gerät vertrauen, mit dem sie verbunden sind. Das Verbinden eines solchen Ports mit einer im Internet ausgerichteten Anwendung führte eine neue Reihe von Sicherheitsrisiken ein und die massive Erweiterung der Angriffsfläche für böswillige Schauspieler.[8][1]
Zum Beispiel könnte eine böswillige Host -Webseite Daten von einem peripheren Gerät anfordern, die das Gerät gerne erfüllen würde, wenn man denkt, dass es über einen Standard -USB -Anschluss kommuniziert. So mildern Sie diese Art von Angriffswebusb, entwickelte einen Funktionsaufruf von RequestDevice (). Dies würde den Benutzer darüber informieren, dass die Website Zugriff auf das Edge -Gerät forderte. Dies ähnelt der Zugriffsanforderungen Browsersteuerung, wenn eine Webseite auf die eingebaute Kamera oder das Mikrofon zugreifen möchte. Abhängig von der Vorsicht des Benutzers kann dieses Protokoll ausreichen, um bestimmte Angriffe zu verhindern. Ein zweites Protokoll, das entwickelt wurde, ist die Spezifikation einer Anfrage, die aus einem sicheren Kontext stammt.[11][1] Dies stellt sicher, dass sowohl der zu ausgeführte Code als auch die zurückgegebenen Daten nicht während des Transports abgefangen oder geändert werden. Diese Sicherheit wird über die Funktion conentIntaNface () implementiert. Dies ist eine von Betriebssystem unterstützte Funktion und stellt sicher, dass nur eine einzelne Ausführungsinstanz Benutzerraum oder Kernel -Space -Treiberzugriff auf das Gerät haben kann, wodurch auf einer Webseite ein zweiter Kommunikationskanal zum Gerät eröffnet wird.[1] Zu den weiteren Sicherheitsüberlegungen gehörten ein öffentliches Register für genehmigte Verbindungen, aber diese Idee wurde letztendlich verschrottet, da die Anbieter von Anbietern von WebUSB entwickelt wurden.[1]
Die Bedrohungsfläche eines USB ist jedoch bidirektional und ein böswilliges peripheres Gerät könnte den Wirt angreifen. Ein infiziertes Edge -Gerät kann nicht einfach von WebUSB -APIs gemindert werden. In vielen Gerätekonfigurationen werden vertrauenswürdige USB -Anschlüsse verwendet, um Firmware -Upgrades zu liefern, und ein böswilliges Kantengerät könnte Angreifer in einem System beharrlich sein.[11][4]
In Anbetracht der von WebUSB ausgestellten Sicherheitsbedenken wird es nur von geschätzten 76% der Browser unterstützt. Insbesondere ist die Unterstützung für WebusB auf einem Browserebene im Laufe der Zeit volatil, wobei die Zeitspiegel, in denen bestimmte Browser nach der Entdeckung bestimmter Sicherheitsbedrohungen den Zugriff ausschalteten, ausgeschaltet wurden.[12] Es sind diese Sicherheitsbedenken, die Alternativen zu WebUSB geplagt haben. Insbesondere die Serie von Flash und Google konnten nicht abgenommen werden, da sie nicht mit angemessenen Antworten auf diese grundlegenden Sicherheitsrisiken verwendet werden konnten.[5]
Verwendung in der Multi-Faktor-Authentifizierung
Die Fähigkeit, eine digitale Identität im Internet zu besitzen und zu überprüfen, ist entscheidend für die Interaktion mit der Infrastruktur im Internet. WebUSB in Kombination mit speziellen Zweckgeräten und Registrierungen der öffentlichen Identifizierung kann als Schlüsselstück in einer Infrastruktur -Skala -Lösung für die digitale Identität im Internet verwendet werden.[13] Die WebUSB -API -Bibliothek kann die Verbindung von peripheren Geräten auf Webseiten standardisieren. Die Sicherheitsinvestition in WebUSB macht es zu einer geeigneten Softwarekomponente, identifizierbare Geräte mit dem Internet zu verbinden.[1] Jüngste Untersuchungen haben gezeigt, dass die Fehlbarkeit der SMS -basierten Authentifizierung hervorgehoben wird, wie wichtige Teile der Infrastruktur untergraben werden können.[14] Alternative Vorschläge zur Sicherung einer digitalen Identität umfassen die Verwendung biometrischer Sensoren und/oder persönlicher Kennungen. Obwohl diese gut darin sind, eine Person zu identifizieren, können sie nur über WebUSB in den vorhandenen Internet -Tech -Stapel angemessen integriert werden.[13] Kryptografisch sichern Lösungen für die persönliche Identifizierung mit Unterstützung von Regierung und spezialisierter Hardware. In diesen Lösungen fehlt jedoch eine generalisierte Spezifikation für die webbasierte Infrastruktur und sind im Allgemeinen schwer zu unterstützen. Die Unterstützung von Gateway für ein solches Kommunikationsprotokoll kann von Software -Zwischenhändlern wie WebusB unterstützt werden.[10][13]
Ein Modellsystem für die Multi-Faktor-Authentifizierung verwendet WebUSB zusammen mit einer identifizierenden Hardware wie einer ID-Karte, die für ISO/IEC 7810: 2003 ID-1 erstellt wurde[15] Standards. Diese Karte würde eine physische Darstellung einer individuellen Identität darstellen. WebUSB würde dann als mittlerer Mann fungieren, um die Übertragung von Daten zu erleichtern, die auf der Hardware auf einen bestimmten Webserver gespeichert sind. Die Nummernkarte würde digital von einer autorisierten Partei signiert und digital eine Verbindung zu einem Server herstellen. Diese Verbindung erfordert ein Gerät, das ISO/IEC 14443 Typ B -Verbindungen lesen kann.[16] Um diese digitale Verbindung gültig zu machen, würde WebUSB als Software -Connector dienen.[13]
Verwendungszweck
Webusb arbeitet beispielsweise nur an unterstützten Browsern Chrom. Aufgrund von Datenschutz- und Sicherheitsbedenken wirkt es auch nur in einem sicheren Kontext, d. H. Über Httpsund kann nur durch Benutzeraktionen aufgerufen werden. Zum Beispiel, um eine Verbindung zu instanziieren Navigator.usb.RequestDevice ()
kann nur durch Benutzergeste aufgerufen werden, z. B. Berührung oder Mausklick. In ähnlicher Weise kann der Schutz vor WebUSB mithilfe einer Feature -Richtlinie bereitgestellt werden. Zum Beispiel Feature-Policy: fullscreen "*"; usb "none"; payment "self" https://payment.example.com
würde verhindern, dass Webusb ausgeführt wird.[17]
Um Zugang zu Geräten zu erhalten, die im Browser sichtbar sind, sind zwei Optionen verfügbar. Navigator.usb.RequestDevice ()
fordert den Benutzer auf, auszuwählen, welcher USB -Zugriff gegeben werden soll, oder Navigator.usb.getDevices ()
Wird eine Liste von USBs zurückgeben. Der Ursprung hat Zugriff.
Um besser nach Geräten zu suchen, verfügt Web USB über eine Reihe von Filteroptionen. Diese Filter werden in übergeben Navigator.usb.RequestDevice ()
als JavaScript -Filterobjekt. Diese Filter sind; Hersteller-ID
,Produkt ID
,Klassencode
, Protokollcode
, Seriennummer
, und Unterklasse
.
Stellen Sie sich zum Beispiel vor, eine Verbindung zu a Arduino Geräte, dies könnte auf folgende Weise erfolgen. Wo 0x2341 ist Arduino in der Liste der USB -IDs[18]
Navigator.USB.RequestDevice({{ Filter: [{{{ Hersteller-ID: 0x2341 }] }) .dann(Gerät => { Konsole.Protokoll(Gerät.Produktname); Konsole.Protokoll(Gerät.Herstellername); }) .Fang(Error => { Konsole.Error(Error); });
Der USB Gerät
Deskriptor, der vom obigen Snippet zurückgegeben wurde, enthält alle wichtigen Informationen über das Gerät wie z. Version, Paketgröße, Konfigurationsoptionen usw.
Der alternative Anruf zu Navigator.usb.getDevices ()
wird stattdessen so aussehen;
Navigator.USB.GetDevices().dann(Geräte => { Geräte.für jeden(Gerät => { Konsole.Protokoll(Gerät.Produktname); Konsole.Protokoll(Gerät.Herstellername); }); })
Um mit dem Gerät zu sprechen, gibt es einige wichtige Funktionsaufrufe, die Sie durchlaufen können. Device.open ()
wird alle erforderlichen Schritte zum Einrichten des Geräts durchlaufen, Gerät.SelectConfiguration ()
Legt die Konfiguration ein, vor allem, wie sie angetrieben wird, und der Anzahl der Schnittstellen. Es ist dann wichtig, die Schnittstelle zu beanspruchen. Dies kann durch die durchgeführt werden Gerät.Claiminterface
Funktionsaufruf. Dadurch simuliert eine echte kabelgebundene Verbindung und stellt sicher, dass diese Webseite die einzige ist, die das Gerät lesen und schreiben kann, bis die Verbindung veröffentlicht wird. Endlich der Anruf device.controltransferout ()
Richtet das Gerät so ein, dass sie über die Serien -API von WebUSB kommuniziert. Sobald die Einrichtung erledigt ist, können Daten mithilfe von Daten übertragen werden Device.transferin ()
Um Massendaten auf das Gerät zu übertragen, in ähnlicher Weise seine Schwesterfunktion Device.transferout ()
Daten aus dem Gerät lesen.[17][1]
Schnittstellen
Um die Interaktion mit Hardware -Geräten zu verallgemeinern, unterstützt WebUSB eine Reihe von Schnittstellen, als die spezifische Hardwarefunktionen abstrahieren.[8]
Schnittstellenname | Beschreibung |
---|---|
USB | Bietet Attribute und Methoden zum Suchen und Verbinden von USB -Geräten von einer Webseite. Diese Schnittstelle erbt sich EventTarget . |
USBConnectionEvent | Dieses Verbindungsereignis wird an übergeben USB.onconnect oder <USB.onDisconnect> Wenn der Agent eine Änderung des Verbindungsstatus erkennt. |
USB Gerät | Schnittstelle, die Metadaten über das angeschlossene Gerät und die Methoden zur Steuerung liefert. Wichtig ist, dass dies die Hauptschnittstelle ist, die der Entwickler für die Interaktion mit dem Gerät verwenden wird. |
USBIntransferresult | Eine Darstellung der Ergebnisse aus einem Datenübertragungsereignis vom Gerät zum Host. Einschließlich Feld für die Daten und den Status der Übertragung. Es gibt drei Optionen für Statusfelder. "OK", was bedeutet, dass die Übertragung ein Erfolg war, "Stall", der einen Fehler angibt, der einen Stand am Endpunkt erzeugt, oder "Babble", was darauf hinweist, dass mehr als erwartete Daten übertragen wurden. |
USBISOCHRONOUTRANSFERRESULT | Ähnlich wie bei USBIntransferResult ist dies eine Darstellung einer Datenübertragung vom Gerät zum Host, wenn er über einen isochronen Endpunkt ausgeführt wird. Hat kein Statusfeld, nur die Pakete. |
USBISOCHRONOUTRANSFERPACKET | Repräsentiert den Status eines einzelnen Pakets aus einer Anforderung zur Übertragung von Daten vom Gerät auf den Host über einen isochronen Endpunkt. Kann den Status von entweder "OK" oder "Stall" zurückgeben. |
USBISOCHRONOUTTRANSFERRESULT | Ähnlich wie bei USBIntransferResult ist dies eine Darstellung einer Datenübertragung vom Host zum Gerät, wenn er über einen isochronen Endpunkt ausgeführt wird. |
USBISOCHRONOUTTRANSFERPACKET | Repräsentiert den Status eines einzelnen Pakets aus einer Anforderung, Daten vom Host über einen isochronen Endpunkt auf das Gerät auf das Gerät zu übertragen. Gleiche Statusfelder wie USBISochronousintransferpacket. |
USBConfiguration | Bietet Informationen zu einer bestimmten Konfiguration eines USB -Geräts. Dies umfasst Informationen zur Geräteversion, die maximale Paketgröße und unterstützte Schnittstellen. |
USB-Schnittstelle | Bietet Informationen zu einer vom USB -Gerät bereitgestellten Schnittstelle. Dies umfasst Informationen darüber, ob es beansprucht wird, sowie dessen Kommunikationsprotokoll. |
USBAGETNETEInterface | Bietet Informationen zu einer bestimmten Konfiguration einer Schnittstelle und den bestimmten Modi, in denen das Gerät arbeiten kann. |
USBendpoint | Der USBendPoint ist ein unidirektionaler Datenstrom entweder in oder aus dem Gerät. |
Verweise
- ^ a b c d e f g h i Grant, R (2021-10-06). "Webusb -API". Wicg. Abgerufen 2022-01-07.
- ^ "Greifen Sie auf USB -Geräte im Web zu". Google -Entwickler.
- ^ "Webusb | Kann ich ... Support -Tabellen für HTML5, CSS3 usw. verwenden?". caniuse.com. Abgerufen 2021-07-02.
- ^ a b Anderson, Don (2001). Universelle Serienbussystemarchitektur (2. Aufl.). ISBN 978-0-201-30975-1.
- ^ a b Hinton, Suz (2018-06-18). Suz Hinton - Ich fürchte, Ihr Browser hat wieder mit den Robotern ein sanftes Intro in Webusb gesprochen. CSSSConf Australien.
- ^ a b Beniwal, Gunjan; Singhrova, Anita (2021). "Eine systematische Literaturübersicht über IoT -Gateways". Journal of King Saud University - Computer- und Informationswissenschaften. Abgerufen 2021-12-16.
- ^ a b Rondon, L; Babun, L; Aris, a; Akkaya, a; Uluagac, A (2021). "Umfrage zu Enterprise Internet-of Things-Systemen (EIOT): Eine Sicherheitsperspektive". ISO. Abgerufen 2021-12-19.
- ^ a b c "Webusb -API". Mozilla Developer Blogs. Mozilla. 2021. Abgerufen 2021-12-19.
- ^ Talukder, a.k (2020). "He Next Generation Web: Technologies and Services. In: Bellatrecht L., Goyal V., Fujita H., Mondal A., Reddy P.K. (Hrsg.) Big Data Analytics. BDA". Vorlesungsnotizen in Informatik. 12581. Abgerufen 2021-12-19.
- ^ a b c Junior, A. G. D. S.; Gonçalves, L. M. G.; De Paula Caurin, G. A.; Tamanaka, G.T.B; Hernandes, A.C. Aroca, R.V. (2020). "Bipes: Blockbasierte integrierte Plattform für eingebettete Systeme". IEEE -Zugang. 8. Abgerufen 2021-12-17.
- ^ a b Lindström, R (2021). "Smartphones können als IoT Edge-Geräte über die Browser-basierte 'Webusb-API' fungieren: Die Zukunft des Browsers und des Smartphones in Home Electronics IoT-Systemen".
- ^ "Google deaktiviert WebUSB in Chrome inmitten von Phishing -Bedenken". XDA -Entwickler. 7. März 2018.
- ^ a b c d Fujita, y; Inomata, a; Kashiwazaki, H (2019). "Implementierung und Bewertung eines Multi-Faktor-Webauthentifizierungssystems mit individueller Zahlenkarte und WebusB". Asien-pazifischer Netzwerkbetriebs- und Managementsymposium.
- ^ Brian Krebs (2018-06-01). "Reddit Breach hebt Grenzen der SMS-basierten Authentifizierung hervor". Krebs über Sicherheit. Abgerufen 2021-12-19.
- ^ "ISO/IEC 7810: 2003 - Ausweiskarten - physikalische Eigenschaften". Abgerufen 2022-01-07.
- ^ "ISO/IEC 14443-1: 2018 - Karten und Sicherheitsgeräte für die persönliche Identifizierung - kontaktlose Proximity -Objekte". Abgerufen 2022-01-07.
- ^ a b Beaufort, Francis (2021-02-23). "Zugriff auf Webusb". web.dev. Abgerufen 2022-01-06.
- ^ "Zugriff auf Webusb". web.dev. Abgerufen 2022-01-06.