웹 USB

WebUSB

WebUSB는 웹 [2]페이지에서 USB 장치에 안전하게 액세스하기 위한 JavaScript API(애플리케이션 프로그래밍 인터페이스) 규격입니다[1].

Web Platform Incubator Community Group에 의해 발행되었습니다.2021년 7월 현재 Draft Community 상태이며 Google Chrome, Microsoft Edge, QQ, OperaSamsung Internet에서 지원됩니다[3].

서론

USB(Universal Serial Bus)는 커넥터 및 케이블을 통해 컴퓨터에서 주변 장치 및/[4]또는 기타 컴퓨터로 데이터를 통신하기 위해 사용되는 업계 표준 통신 프로토콜입니다.WebUSB는 웹 페이지에서 이러한 하드웨어 디바이스에 액세스할 수 있도록 하는 API 호출 세트입니다.웹USB는 월드 [1]와이드 웹 컨소시엄에 의해 개발되었다.USB API는 웹 페이지에서 에지 장치와 안전하고 개발자에게 친숙한 통신 수단을 제공합니다.USB API는 기존 USB 라이브러리에 통합되어 새로운 디바이스를 웹 환경에 통합하기 위한 개발 주기를 단축합니다.이러한 디바이스에 대한 브라우저 지원을 기다릴 필요가 없습니다.

웹의 초기 버전USB는 플래시, Chrome Serial 및 브라우저를 하드웨어에 연결하는 다른 사용자 지정 접근 방식의 대안으로 등장했습니다.WebUSB는 모든 인터페이스의 4가지 목표를 해결하는 것을 목표로 하고 있습니다.빠른 제작, 크로스 플랫폼, 외관, [5]접근성입니다.

사물인터넷(IoT) 아키텍처 적용

WebUSB API는 하드웨어 프로토콜을 인터넷 프로토콜에 연결할 수 있으므로 에지 장치를 중앙 집중식 네트워크에 연결하는 [6]균일한 게이트웨이를 만들 수 있습니다.

지난 수십 년 동안의 컴퓨팅 능력의 폭발적 증가는 에지 디바이스의 증가로 이어졌습니다.조명, 온도계, HVAC, 모터와 같은 장치는 중앙 집중식 인터넷 제어 [7]서버에 점점 더 많이 통합되고 있습니다.이러한 디바이스는 고립된 비통합 개발 환경에서 진화했습니다.결과적으로, 그들은 견고한 네트워크를 개발하는 데 필요한 균일하고 일관된 통신 프로토콜이 부족하다.WebUSB의 API 프레임워크는 서로 다른 프로토콜을 표준화하고 비표준 USB(Universal Serial Bus) 호환 장치를 [8]웹에 노출시킬 수 있습니다.

WebUSB는 지각층과 네트워크층 [6]사이에 있는 것처럼 보입니다.이 게이트웨이에서 소프트웨어의 주요 목표는 확장성, 비용 및 신뢰성입니다.WebUSB 라이브러리의 클라우드 기반 도입으로 확장성을 커버할 수 있고, 오버헤드가 낮은 도입으로 비용을 대폭 절감할 수 있으며, 라이프 사이클에 걸쳐 지속적으로 사용되는 개발로 프레임워크의 [9]신뢰성이 높아졌습니다.

WebUSB는 BIPES(Block based Integrated Platform for Embedded Systems) 아키텍처 프레임워크의 토대를 형성했습니다.이 시스템 아키텍처 모델은 중앙 집중식 [10]클라우드 인프라에서 에지 장치에 배포할 수 있는 코드 단위인 '블록'에 관련 소프트웨어를 통합하여 IoT 시스템 개발의 복잡성을 줄이는 것을 목표로 합니다.이미 언급한 바와 같이 웹의 역할USB는 USB 통신 프로토콜을 통해 임베디드 소프트웨어와 통신하는 기능과 매우 관련이 있습니다.정보가 웹 내부에 있는 경우USB의 Javascript 환경은 다양한 소프트웨어 [1]프로토콜을 통해 전환 및 통신할 수 있습니다.이 특정 아키텍처 모델 웹에서는USB는 임베디드 소프트웨어와 웹 브라우저 간의 격차를 해소합니다.그런 다음 웹 브라우저는 균일한 웹을 사용하여 클라우드 환경과 통신합니다.USB에서 생성된 데이터.[10]

보안에 관한 고려 사항

WebUSB 는, 엣지 디바이스의 커넥터에의 Web 페이지 액세스를 제공합니다.모든 기기가 인터넷에 노출되면 내재된 위험과 보안 문제가 [7]발생합니다.USB 포트는 연결된 디바이스를 신뢰하도록 설계되어 있습니다.이러한 포트를 인터넷에 접속하는 애플리케이션에 접속하면 새로운 보안 리스크가 발생하고 공격 영역이 대폭 확대되는 것은 악의적인 [8][1]행위자가 될 수 있습니다.

예를 들어, 악의적인 호스트 웹 페이지는 주변 장치에 데이터를 요청할 수 있으며, 장치는 표준 USB 커넥터를 통해 통신하고 있다고 생각하여 이를 만족시킬 수 있습니다.이런 유형의 공격 웹을 완화하려면USB가 request Device() 함수 호출을 개발했습니다.그러면 사이트가 엣지 디바이스에 대한 액세스를 요구하고 있음을 사용자에게 알립니다.이는 웹 페이지가 내장된 카메라 또는 마이크에 액세스하려는 경우에 대한 액세스 요청 브라우저 제어와 유사합니다.사용자의 주의력에 따라 이 프로토콜은 특정 공격을 방지하는 데 충분할 수 있습니다.개발된 두 번째 프로토콜은 보안 [11][1]컨텍스트에서 발생하는 요청 사양입니다.따라서 실행할 코드와 반환되는 데이터가 모두 전송 중에 가로채거나 수정되지 않습니다.이 보안은 클레임을 통해 구현됩니다.Interface() 함수.이는 OS가 지원하는 기능으로, 1개의 실행 인스턴스만이 디바이스에 대한 사용자 공간 또는 커널 공간 드라이버 액세스를 가질 수 있도록 하여 웹 페이지의 악성 [1]코드가 디바이스에 대한 두 번째 통신 채널을 여는 것을 방지합니다.기타 보안상의 고려사항으로는 승인된 접속의 퍼블릭 레지스트리가 작성되었지만, 이 아이디어는 벤더가 웹을 갖춘 디바이스를 개발해야 하기 때문에 결국 폐기되었습니다.USB를 [1]염두에 두고 있습니다.

그러나 USB의 위협 표면은 양방향이며 악의적인 주변 장치가 호스트를 공격할 수 있습니다.감염된 엣지 디바이스는 웹을 통해 쉽게 완화되지 않음USB API많은 디바이스 구성에서는 신뢰할 수 있는 USB 포트가 펌웨어 업그레이드를 제공하기 위해 사용되며 악의적인 엣지 디바이스가 공격자에게 시스템에서 [11][4]영속성을 부여할 수 있습니다.

webUSB에 의해 야기되는 보안상의 문제에 비추어 볼 때 웹USB는 약 76%의 브라우저에서만 지원됩니다.또, Web에 대한 서포트도 주목할 만하다.브라우저 수준의 USB는 [12]특정 보안 위협이 발견된 후 특정 브라우저의 액세스가 꺼지는 등 시간이 지남에 따라 변동성이 커졌습니다.이러한 보안 문제가 webUSB를 대체하는 데 걸림돌이 되고 있습니다. 특히 Flash와 Google Serial은 이러한 근본적인 [5]보안 위험에 대한 적절한 해답을 제공하지 못했기 때문에 이륙에 실패했습니다.

멀티팩터 인증에서의 사용

인터넷상의 디지털 ID를 소유 및 검증하는 기능은 인터넷 접속 인프라스트럭처와의 상호작용에 매우 중요합니다.WebUSB와 특수 목적 디바이스 및 공공 식별 레지스트리를 조합하여 [13]인터넷상의 디지털 ID에 대한 인프라스트럭처 스케일 솔루션의 핵심 요소로 사용할 수 있습니다.WebUSB API 라이브러리는 웹 페이지에 대한 주변 장치 연결을 표준화할 수 있습니다.webUSB에 대한 보안 투자를 통해 식별 가능한 [1]장치를 인터넷에 연결하는 데 적합한 소프트웨어 구성 요소가 됩니다.최근 연구에 따르면 SMS 기반 인증의 오류 가능성이 입증되었으며, 이는 인프라스트럭처의 주요 부분을 [14]어떻게 전복시킬 수 있는지를 보여줍니다.디지털 ID를 보호하기 위한 대안으로 바이오메트릭 센서 및/또는 개인 식별자를 사용하는 것이 있습니다.단, 개인을 특정할 수 있지만 기존 인터넷 기술 [13]스택에 적절하게 통합될 수 있는 것은 webUSB를 통해서만 가능합니다.개인 식별을 위한 암호화 보안 솔루션은 정부 및 전문 하드웨어의 지원을 받아 존재합니다.다만, 이러한 솔루션은 Web 베이스의 인프라스트럭처에 관한 일반적인 사양이 없기 때문에, 일반적으로 서포트하기 어렵습니다.이러한 통신 프로토콜에 대한 게이트웨이 지원은 webUSB와 [10][13]같은 소프트웨어 중간 사용자가 지원할 수 있습니다.

웹을 이용한 다요소 인증 모델 시스템ISO/IEC 7810:2003 ID-1[15] 규격에 준거한 ID 카드등의 식별 하드웨어와 연동하는 USB.이 카드는 개인의 정체성을 물리적으로 표현합니다.WebUSB는 하드웨어에 저장된 데이터를 특정 웹 서버로 쉽게 전송할 수 있도록 중간 역할을 합니다.번호 카드는, 허가된 당사자에 의해서 디지털 서명되어 서버에 디지털로 접속됩니다.이 접속에는 ISO/IEC 14443 타입 B [16]접속을 읽을 수 있는 디바이스가 필요합니다.이 디지털 접속을 유효하게 하기 위해서, webUSB가 소프트웨어 [13]커넥터로서 기능합니다.

사용.

WebUSB는 Chrome과 같은 지원되는 브라우저에서만 작동합니다.또, 프라이버시와 시큐러티상의 문제로 인해, 시큐어한 컨텍스트(HTTPS 경유)에서만 동작해, 유저의 조작에 의해서만 호출할 수 있습니다.예를 들어 연결을 인스턴스화하기 위해navigator.usb.requestDevice()는 터치나 마우스 클릭과 같은 사용자 제스처를 통해서만 호출할 수 있습니다.마찬가지로 웹으로부터의 보호USB는 기능 정책을 사용하여 제공할 수 있습니다.예를 들어.Feature-Policy: fullscreen "*"; usb "none"; payment "self" https://payment.example.com웹을 방해할 수 있습니다.USB가 [17]실행되고 있지 않다.

브라우저에 표시되는 디바이스에 액세스 하려면 , 2개의 옵션을 사용할 수 있습니다. navigator.usb.requestDevice()사용자에게 부여할 USB 액세스를 선택하도록 요구됩니다.또는navigator.usb.getDevices()는 원본에서 액세스할 수 있는 USB 목록을 반환합니다.

디바이스를 보다 효율적으로 검색할 수 있도록 웹 USB에는 다양한 필터링 옵션이 있습니다.이러한 필터는 다음 주소로 전달됩니다.navigator.usb.requestDevice()javascript 필터링 개체로 사용합니다.이러한 필터는 다음과 같습니다.vendorId,productId,classCode,protocolCode,serialNumber,그리고.subclassCode.

를 들어 Arduino 디바이스에 접속하는 것을 상상해 보십시오.이 작업은 다음과 같은 방법으로 이루어집니다.어디에0x2341은 USB ID 목록에서[18] Arduino입니다.

내비게이터.유에스비.request Device(요구 장치)({ 필터: [{ 벤더 ID: 0x2341 }] })  .그리고나서(장치 => {  콘솔.로그.(장치.제품명);        콘솔.로그.(장치.제조원명);  })  .또 만나(에러 => { 콘솔.에러(에러);  }); 

USBdevice위의 스니펫에서 반환되는 디스크립터에는 버전, 패킷사이즈, 설정 옵션 등 디바이스에 관한 모든 중요한 정보가 포함됩니다.

에 대한 대체 호출navigator.usb.getDevices()대신 이렇게 됩니다.

내비게이터.유에스비.get Devices(디바이스)().그리고나서(장치들 => {  장치들.각각(장치 => {     콘솔.로그.(장치.제품명);           콘솔.로그.(장치.제조원명);    }); }) 

디바이스와 통신하기 위해서는 몇 가지 중요한 함수 호출을 실행해야 합니다. device.open()디바이스 셋업에 필요한 모든 스텝이 실행됩니다.device.selectConfiguration()는, 설정, 그 전원 투입 방법, 및 인터페이스의 수를 설정합니다.그 후 인터페이스를 청구하는 것이 중요합니다.이 조작은 를 통해 실행할 수 있습니다.device.claimInterface함수 호출이것에 의해, 실제의 유선 접속이 시뮬레이트 되어, 접속이 해제될 때까지, 이 Web 페이지만이 디바이스에의 판독과 기입이 가능하게 됩니다.마지막으로 콜device.controlTransferOut()는 WebUSB Serial API를 통해 통신하도록 디바이스를 설정합니다.셋업이 모두 완료되면 다음 명령을 사용하여 데이터를 장치로 전송할 수 있습니다.device.transferIn()벌크 데이터를 장치로 전송하기 위해 마찬가지로 자매 기능device.transferOut()디바이스에서 [17][1]데이터를 읽습니다.

인터페이스

하드웨어 디바이스와의 상호작용을 일반화하기 위해 WebUSB는 특정 하드웨어 [8]기능을 추상화하는 것이 아니라 다수의 인터페이스를 지원합니다.

인터페이스
인터페이스명 묘사
유에스비 웹 페이지에서 USB 디바이스를 검색 및 연결하기 위한 속성 및 방법을 제공합니다.이 인터페이스에는 다음 요소가 있습니다.EventTarget.
USBConnection 이벤트 이 연결 이벤트는 다음 주소로 전달됩니다.USB.onconnect또는 <USB.ondisconnect>를 선택합니다.
USB 디바이스 접속되어 있는 디바이스와 그 제어 방법에 관한 메타데이터를 제공하는 인터페이스.중요한 것은 이것이 개발자가 디바이스와의 상호작용에 사용하는 메인 인터페이스입니다.
USBInTransferResult(USBInTransfer결과) 디바이스에서 호스트로 데이터 전송 이벤트에서 발생한 결과를 나타냅니다.데이터 필드 및 전송 상태 포함.상태 필드에는 전송이 성공했음을 나타내는 'ok', 엔드포인트에서 정지를 생성하는 오류를 나타내는 'stall' 또는 예상보다 많은 데이터가 전송되었음을 나타내는 'babble'의 세 가지 옵션이 있습니다.
USBIsochronousInTransferResult USBInTransferResult와 마찬가지로 이것은 Isocronous Endpoint를 통해 디바이스에서 호스트로의 데이터 전송을 나타냅니다.상태 필드는 없고 패킷만 있습니다.
USBIsochronousInTransferPacket 디바이스에서 등시성 엔드포인트를 통해 호스트로 데이터를 전송하는 요청에서 개별 패킷의 상태를 나타냅니다.'확인' 또는 '스톨' 상태를 반환할 수 있습니다.
USBIsochronous Out Transfer 결과 USBInTransferResult와 마찬가지로 이는 Isocronous Endpoint를 통해 호스트로부터 디바이스로의 데이터 전송을 나타냅니다.
USBIsochronous Out Transfer Packet 호스트에서 등시성 엔드포인트를 통해 장치로 데이터를 전송하는 요청에서 개별 패킷의 상태를 나타냅니다.USBIsochronousInTransferPacket과 동일한 상태 필드.
USBC 설정 USB 디바이스의 특정 설정에 대한 정보를 제공합니다.여기에는 디바이스 버전, 최대 패킷사이즈 및 지원되는 인터페이스에 대한 정보가 포함됩니다.
인터페이스 USB 장치에서 제공하는 인터페이스에 대한 정보를 제공합니다.여기에는 청구 여부에 대한 정보와 통신 프로토콜이 포함됩니다.
US 인터네이트인터페이스 인터페이스의 특정 설정 및 디바이스가 동작할 수 있는 특정 모드에 대한 정보를 제공합니다.
USBEndPoint(USBEndPoint) USBEndPoint는 디바이스 안팎의 단방향 데이터 스트림입니다.

레퍼런스

  1. ^ a b c d e f g h i Grant, R (2021-10-06). "WebUSB API". WICG. Retrieved 2022-01-07.
  2. ^ "Access USB Devices on the Web". Google Developers.
  3. ^ "WebUSB Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Retrieved 2021-07-02.
  4. ^ a b Anderson, Don (2001). Universal Serial Bus System Architecture (2nd ed.). ISBN 978-0-201-30975-1.
  5. ^ a b Hinton, Suz (2018-06-18). Suz Hinton - I'm afraid your browser has been talking to the robots again a gentle intro to WebUSB. CSSSConf Australia.
  6. ^ a b Beniwal, Gunjan; Singhrova, Anita (2021). "A systematic literature review on IoT gateways". Journal of King Saud University - Computer and Information Sciences. Retrieved 2021-12-16.
  7. ^ a b Rondon, L; Babun, L; Aris, A; Akkaya, A; Uluagac, A (2021). "Survey on Enterprise Internet-of-Things systems (E-IoT): A security perspective". ISO. Retrieved 2021-12-19.
  8. ^ a b c "WebUSB API". Mozilla Developer Blogs. Mozilla. 2021. Retrieved 2021-12-19.
  9. ^ Talukder, A.K (2020). "he Next Generation Web: Technologies and Services. In: Bellatreche L., Goyal V., Fujita H., Mondal A., Reddy P.K. (eds) Big Data Analytics. BDA". Lecture Notes in Computer Science. 12581. Retrieved 2021-12-19.
  10. ^ 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: Block Based Integrated Platform for Embedded Systems". IEEE Access. 8. Retrieved 2021-12-17.
  11. ^ a b Lindström, R (2021). "Enabling Smartphones to act as IoT Edge Devices via the Browser-based 'WebUSB API' : The future of the browser and the smartphone in home electronics IoT systems".
  12. ^ "Google disables WebUSB in Chrome amidst phishing concerns". XDA Developers. 7 March 2018.
  13. ^ a b c d Fujita, Y; Inomata, A; Kashiwazaki, H (2019). "Implementation and Evaluation of a Multi-Factor Web Authentication System with Individual Number Card and WebUSB". Asia-Pacific Network Operations and Management Symposium.
  14. ^ Brian Krebs (2018-06-01). "Reddit Breach Highlights Limits of SMS-Based Authentication". krebs on Security. Retrieved 2021-12-19.
  15. ^ "ISO/IEC 7810:2003 - Identification cards – Physical characteristics". Retrieved 2022-01-07.
  16. ^ "ISO/IEC 14443-1:2018 - Cards and security devices for personal identification – Contactless proximity objects". Retrieved 2022-01-07.
  17. ^ a b Beaufort, Francis (2021-02-23). "Access WebUSB". web.dev. Retrieved 2022-01-06.
  18. ^ "Access WebUSB". web.dev. Retrieved 2022-01-06.

외부 링크