WebUSBは、 WebアプリケーションからUSBデバイスへの安全なアクセスを提供するためのJavaScriptアプリケーションプログラミングインターフェース(API)仕様です。[ 1 ] [ 2 ]
これはWeb Platform Incubator Community Groupによって公開されました。2021年7月現在、Draft Communityステータスにあり、Chromiumベースのブラウザでサポートされています[ 3 ]。
導入
USB(ユニバーサルシリアルバス)は、コネクタやケーブルを介してコンピュータから周辺機器や他のコンピュータにデータを通信するために使用される業界標準の通信プロトコルです。[ 4 ] WebUSBは、WebページからこれらのハードウェアデバイスにアクセスできるようにするAPI呼び出しのセットです。WebUSBは、ワールドワイドウェブコンソーシアム(W3C)によって開発されています。[ 1 ] WebUSB APIは、Webページからエッジデバイスへの安全で開発者にとって使い慣れた通信手段を提供します。WebUSB APIは既存のUSBライブラリに統合され、これらのデバイスのブラウザサポートを待つ必要がないため、新しいデバイスをWeb環境に統合するための開発サイクルを短縮します。
WebUSBの初期バージョンは、 Flash 、Chrome Serial、その他ブラウザとハードウェアを接続するカスタムアプローチの代替として登場しました。WebUSBは、あらゆるインターフェースに求められる4つの目標、すなわち高速化、クロスプラットフォーム、見栄えの良さ、アクセシビリティを実現することを目指しています。[ 5 ]
モノのインターネット(IoT)アーキテクチャへの応用
WebUSB APIはハードウェアプロトコルをインターネットプロトコルにブリッジすることができ、エッジデバイスを集中型ネットワークにリンクする統一されたゲートウェイの作成を可能にします。[ 6 ]
過去数十年にわたるコンピューティング能力の爆発的な向上は、エッジデバイスの増加につながっています。照明、温度計、空調設備、モーターなどのデバイスは、集中型のインターネット制御サーバーに統合されるケースが増えています。[ 7 ]これらのデバイスは、以前は孤立した非統合開発環境から進化してきました。その結果、Webサービスへの即時接続に必要な、統一された一貫性のある通信プロトコルが欠如しています。WebUSBのAPIフレームワークは、さまざまなプロトコルを標準化し、非標準のユニバーサルシリアルバス(USB)対応デバイスをWebに公開することができます。[ 8 ]
WebUSBは、認識層とネットワーク層の間に位置するように設計されている。[ 6 ]このゲートウェイにおけるソフトウェアの主な目標は、スケーラビリティ、コスト、そして信頼性である。WebUSBライブラリをクラウドベースで展開することでスケーラビリティを確保し、導入時のオーバーヘッドが低いためコストを大幅に削減できる。また、ライフサイクル全体にわたる継続的な開発によって、フレームワークは高い信頼性を実現している。[ 9 ]
WebUSBは、BIPES(組み込みシステム向けブロックベース統合プラットフォーム)アーキテクチャフレームワークの基礎を形成しています。このシステムアーキテクチャモデルは、関連するソフトウェアを「ブロック」に集約することで、IoTシステム開発の複雑さを軽減することを目的としています。「ブロック」は完全なコード単位で、集中型クラウドインフラストラクチャからエッジデバイスに展開できます。[ 10 ]すでに述べたように、WebUSBの役割は、USB通信プロトコルを介して組み込みソフトウェアと通信する能力に決定的に結びついています。情報がWebUSBのJavaScript環境内に入ると、さまざまなソフトウェアプロトコルを介して転置および通信できます。[ 1 ]この特定のアーキテクチャモデルでは、WebUSBは組み込みソフトウェアとWebブラウザの間のギャップを埋めます。Webブラウザは、WebUSBで構築された統一されたデータを使用してクラウド環境と通信します。[ 10 ]
セキュリティに関する考慮事項
WebUSBは、エッジデバイスへのコネクタへのウェブページアクセスを提供します。デバイスをインターネットに公開することは、固有のリスクとセキュリティ上の懸念を伴います。[ 7 ] USBポートは、その設計上、接続されたデバイスを信頼するように設計されています。このようなポートをインターネット対応アプリケーションに接続すると、新たなセキュリティリスクが生じ、悪意のある攻撃者にとっての攻撃対象領域が大幅に拡大します。[ 8 ] [ 1 ]
例えば、悪意のあるホストWebページが周辺機器にデータを要求した場合、デバイスは標準USBコネクタを介して通信していると思い込み、問題なく要求に応じることがあります。この種の攻撃を軽減するために、WebUSBは関数requestDevice()呼び出しを開発しました。これは、サイトがエッジデバイスへのアクセスを要求していることをユーザーに通知します。これは、Webページが内蔵カメラやマイクにアクセスしようとする際のブラウザコントロールへのアクセス要求に似ています。ユーザーの警戒度によっては、このプロトコルだけで特定の攻撃を十分に防ぐことができます。2つ目に開発されたプロトコルは、セキュアコンテキストから発信されるリクエストの仕様です。[ 11 ] [ 1 ]これにより、実行されるコードと返されるデータの両方が、転送中に傍受または変更されないことが保証されます。このセキュリティは、claimInterface()関数を通じて実装されます。これはOSがサポートする関数であり、単一の実行インスタンスのみがユーザー空間またはカーネル空間ドライバーからデバイスにアクセスできるようにすることで、Webページ上の悪意のあるコードがデバイスへの2番目の通信チャネルを開くことを防ぎます。[ 1 ]その他のセキュリティ上の考慮事項には、承認された接続の公開レジストリの作成が含まれていましたが、ベンダーがWebUSBを考慮してデバイスを開発する必要があるため、このアイデアは最終的に廃止されました。[ 1 ]
しかし、USBの脅威は双方向であり、悪意のある周辺機器がホストを攻撃する可能性があります。感染したエッジデバイスは、WebUSB APIでは容易に軽減できません。多くのデバイス構成では、信頼できるUSBポートがファームウェアのアップグレードに使用されており、悪意のあるエッジデバイスは攻撃者にシステム内での永続性を与える可能性があります。[ 11 ] [ 4 ]
WebUSBはセキュリティ上の懸念から、ブラウザの約76%しかサポートしていません。ブラウザレベルでのWebUSBのサポートは、時間の経過とともに不安定であり、特定のセキュリティ上の脅威が発見されると、一部のブラウザでは一定期間アクセスが遮断されることがあります。[ 12 ]このサポートの変動は、 Adobe FlashやGoogle Serialと似ています。これらのブラウザは、根本的なセキュリティリスクに対する適切な対策を講じることができなかったため、普及に至りませんでした。[ 5 ]
多要素認証での使用
インターネット上でデジタルアイデンティティを所有し、検証する能力は、インターネットに面したインフラとのやり取りに不可欠です。WebUSBは、専用デバイスや公開IDレジストリと組み合わせることで、インターネット上のデジタルアイデンティティに対するインフラ規模のソリューションの重要な要素として活用できます。[ 13 ] WebUSB APIライブラリは、周辺機器とWebページとの接続を標準化できます。WebUSBへのセキュリティ投資により、識別可能なデバイスをインターネットに接続するための適切なソフトウェアコンポーネントとなっています。[ 1 ]最近の研究では、SMSベースの認証の脆弱性が示されており、インフラの重要な部分がどのように破壊される可能性があるかが浮き彫りになっています。[ 14 ]デジタルアイデンティティを保護するための代替案として、生体認証センサーや個人識別子の使用が挙げられます。しかし、これらは個人の識別には優れていますが、既存のインターネット技術スタックに適切に統合できるのはWebUSBを介してのみです。[ 13 ]政府や専用ハードウェアの支援を受け、暗号的に安全な個人識別ソリューションは存在します。しかし、これらのソリューションにはWebベースのインフラ向けの汎用仕様が欠如しており、一般的にサポートが困難です。このような通信プロトコルのゲートウェイサポートは、WebUSBなどのソフトウェア仲介者によってサポートされる可能性がある。[ 10 ] [ 13 ]
多要素認証のモデルシステムでは、WebUSBを、ISO/IEC 7810 :2003 ID-1 [ 15 ]規格に準拠したIDカードなどの識別ハードウェアと組み合わせて使用します。このカードは個人のIDを物理的に表現するものであり、WebUSBはハードウェアに保存されたデータを特定のWebサーバーに転送するための仲介役として機能します。この番号カードは、権限のある機関によってデジタル署名され、サーバーにデジタル接続されます。この接続には、ISO/IEC 14443タイプB接続を読み取ることができるデバイスが必要です。[ 16 ]このデジタル接続を有効にするために、WebUSBはソフトウェアコネクタとして機能します。[ 13 ]
使用法
WebUSBはChromeなどの対応ブラウザでのみ動作します。プライバシーとセキュリティ上の懸念から、HTTPS経由などの安全なコンテキストでのみ動作し、ユーザーアクションによってのみ呼び出されます。例えば、接続をインスタンス化するにはnavigator.usb.requestDevice()、タッチやマウスクリックなどのユーザージェスチャーによってのみ呼び出すことができます。同様に、機能ポリシーを用いてWebUSBからの保護を提供することもできます。例えば、Feature-Policy: fullscreen "*"; usb "none"; payment "self" https://payment.example.comWebUSBの実行を禁止することができます。[ 17 ]
ブラウザに表示されるデバイスにアクセスするには、2 つのオプションがあります。navigator.usb.requestDevice()ユーザーにどの USB アクセスを許可するかを選択するように求めるか、navigator.usb.getDevices()オリジンがアクセスできる USB デバイスのリストを返します。
デバイスをより効率的に検索するために、WebUSBにはいくつかのフィルタリングオプションがあります。これらのフィルタはnavigator.usb.requestDevice()JavaScriptフィルタリングオブジェクトとして渡されます。これらのフィルタはvendorId、、、、、、、です。 productIdclassCodeprotocolCodeserialNumbersubclassCode
例えば、Arduinoデバイスに接続する場合、以下の方法で行うことができます。USB IDのリストにある0x2341はArduinoです[ 18 ]
navigator.usb.requestDevice ( { filters : [ { vendorId : 0x2341 } ] } ) . then ( device = > { console.log ( device.productName ) ; console.log ( device.manufacturerName ) ; } ) . catch ( error = > { console.error ( error ) ; } ) ;上記のスニペットから返されるUSBdevice記述子には、バージョン、パケット サイズ、構成オプションなど、デバイスに関するすべての重要な情報が含まれます。
代わりに、 の呼び出しはnavigator.usb.getDevices()次のようになります。
navigator.usb.getDevices ( ) . then ( devices = > { devices.forEach ( device = > { console.log ( device.productName ) ; console.log ( device.manufacturerName ) ; } ) ; } )デバイスと通信するには、いくつかの重要な関数呼び出しを実行する必要があります。device.open()デバイスの設定に必要なすべての手順を実行し、device.selectConfiguration()構成、特に電源供給方法とインターフェースの数を設定します。次に、インターフェースを要求することが重要です。これは関数device.claimInterface呼び出しによって実行できます。これにより、実際の有線接続がシミュレートされ、接続が解放されるまで、このWebページのみがデバイスの読み取りと書き込みを行えるようになります。最後に、この呼び出しdevice.controlTransferOut()によってデバイスがWebUSBシリアルAPIを介して通信するように設定されます。セットアップがすべて完了すると、デバイスにバルクデータを転送するための関数を使用してデータを転送できます。同様に、デバイスからデータを読み取るためのdevice.transferIn()関数も使用できます。 [ 17 ] [ 1 ]device.transferOut()
インターフェース
ハードウェアデバイスとの相互作用を一般化するために、WebUSBは特定のハードウェア機能を抽象化するいくつかのインターフェースをサポートしています。[ 8 ]
| インターフェース名 | 説明 |
|---|---|
| USB | ウェブページからUSBデバイスを検索して接続するための属性とメソッドを提供します。このインターフェースは を継承しますEventTarget。 |
| USB接続イベント | この接続イベントは、エージェントが接続状態の変化を検出したとき USB.onconnectに渡されます。USB.ondisconnect |
| USBデバイス | 接続されたデバイスに関するメタデータと、それを制御するためのメソッドを提供するインターフェース。重要なのは、これが開発者がデバイスと対話するために使用するメインインターフェースであるということです。 |
| USB転送結果 | デバイスからホストへのデータ転送イベントの結果を表す表現。データと転送ステータスのフィールドが含まれます。ステータスフィールドには3つのオプションがあります。「ok」は転送が成功したこと、「stall」はエンドポイントでストールを引き起こすエラーが発生したこと、「babble」は予想以上のデータが転送されたことを示します。 |
| USBアイソクロナス転送結果 | これと同様に、USBInTransferResultアイソクロナスエンドポイントを介してデバイスからホストへのデータ転送を表現します。ステータスフィールドはなく、パケットのみです。 |
| USBアイソクロナスイン転送パケット | アイソクロナスエンドポイントを介してデバイスからホストへデータを転送する要求における個々のパケットのステータスを表します。「ok」または「stall」のいずれかのステータスを返すことができます。 |
| USBアイソクロナスアウト転送結果 | これと同様に、USBInTransferResultアイソクロナス エンドポイントを介して実行される場合のホストからデバイスへのデータ転送の表現もあります。 |
| USBアイソクロナスアウト転送パケット | アイソクロナスエンドポイントを介してホストからデバイスへデータを転送する要求における個々のパケットのステータスを表します。 と同じステータスフィールドですUSBIsochronousInTransferPacket。 |
| USB構成 | USBデバイスの特定の構成に関する情報を提供します。これには、デバイスのバージョン、最大パケットサイズ、サポートされているインターフェースに関する情報が含まれます。 |
| USBインターフェース | USBデバイスが提供するインターフェースに関する情報を提供します。これには、インターフェースが要求されているかどうか、および通信プロトコルに関する情報が含まれます。 |
| USB代替インターフェース | インターフェイスの特定の構成とデバイスが動作できる特定のモードに関する情報を提供します。 |
| USBエンドポイント | これUSBEndPointは、デバイスへの、またはデバイスからの単方向のデータ ストリームです。 |
参考文献
- ^ a b c d e f g h i Grant, R (2021-10-06). 「WebUSB API」 . WICG . 2022年1月7日閲覧。
- ^ 「ウェブ上でUSBデバイスにアクセスする」 Google Developers 2016年3月30日。
- ^ 「WebUSB | 使えますか…HTML5、CSS3などのサポートテーブル」caniuse.com . 2021年7月2日閲覧。
- ^ a bアンダーソン、ドン (2001). 『ユニバーサルシリアルバスシステムアーキテクチャ(第2版)』Addison-Wesley. ISBN 978-0-201-30975-1。
- ^ a b Hinton, Suz (2018-06-18). Suz Hinton - I'm afraid your browser has been speaking to the robots again a gentle intro to WebUSB . CSSSConf Australia.
- ^ a bベニワル、グンジャン; シングロワ、アニタ (2022). 「IoTゲートウェイに関する体系的な文献レビュー」キングサウード大学ジャーナル - コンピュータおよび情報科学. 34 (10): 9541– 9563. doi : 10.1016/j.jksuci.2021.11.007 . S2CID 244758915 .
- ^ a b Rondon, L; Babun, L; Aris, A; Akkaya, A; Uluagac, A (2021). 「エンタープライズIoTシステム(E-IoT)に関する調査:セキュリティの観点」 . ISO . arXiv : 2102.10695 . 2021年12月19日閲覧。
- ^ a b c「WebUSB API」 . Mozilla開発者ブログ. Mozilla. 2021年. 2021年12月19日閲覧。
- ^ Talukder, AK (2020). 「次世代ウェブ:テクノロジーとサービス」 .ビッグデータ分析. コンピュータサイエンス講義ノート. 第12581巻. pp. 209– 229. doi : 10.1007/978-3-030-66665-1_14 . ISBN 978-3-030-66664-4. S2CID 230795240 . 2021年12月19日閲覧.
- ^ a b cジュニア、AGDS;ゴンサルベス、LMG。デ・ポーラ・コーリン、ジョージア州。玉中、GTB。ヘルナンデス、AC。 RV、アロカ(2020)。「BIPES: 組み込みシステム向けのブロックベースの統合プラットフォーム」。IEEE アクセス。8 : 197955–197968。Bibcode : 2020IEEEA...8s7955J。土井: 10.1109/ACCESS.2020.3035083。S2CID 226854474。
- ^ a b Lindström, R (2021). 「ブラウザベースの『WebUSB API』を介してスマートフォンをIoTエッジデバイスとして動作させる:家電IoTシステムにおけるブラウザとスマートフォンの未来」
- ^ 「Google、フィッシングの懸念からChromeのWebUSBを無効化」 XDA Developers、2018年3月7日。
- ^ a b c d藤田雄志; 猪股明生; 柏崎英樹 (2019). 「マイナンバーカードとWebUSBを用いた多要素Web認証システムの実装と評価」.アジア太平洋ネットワーク運用管理シンポジウム.
- ^ Brian Krebs (2018年6月1日). 「Redditの侵害はSMSベースの認証の限界を浮き彫りにする」 . krebs on Security . 2021年12月19日閲覧。
- ^ 「ISO/IEC 7810:2003 - 識別カード – 物理的特性」 。 2022年1月7日閲覧。
- ^ 「ISO/IEC 14443-1:2018 - 個人識別のためのカードおよびセキュリティデバイス - 非接触近接物体」。2022年1月7日閲覧。
- ^ a b Beaufort, Francis (2021年2月23日). 「Access WebUSB」 . web.dev . 2022年1月6日閲覧。
- ^ 「WebUSBにアクセスする」 . web.dev . 2022年1月6日閲覧。