View in English

  • 메뉴 열기 메뉴 닫기
  • Apple Developer
검색
검색 닫기
  • Apple Developer
  • 뉴스
  • 둘러보기
  • 디자인
  • 개발
  • 배포
  • 지원
  • 계정
페이지에서만 검색

빠른 링크

5 빠른 링크

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 주제
  • 전체 비디오
  • 소개

더 많은 비디오

  • 소개
  • 요약
  • 자막 전문
  • 웹에서 신분증 확인하기

    디지털 인증서로 온라인 신분 확인 흐름을 어떻게 향상시킬 수 있는지 알아보세요. 웹사이트가 디지털 인증서 API를 통합하여 지갑에 있는 ID로부터 정보를 요청할 수 있도록 하는 방법을 살펴보겠습니다. 또한 앱이 새로운 IdentityDocumentServices 프레임워크를 사용하여 온라인 인증을 위해 자체 신분증을 제공하는 방법에 대해서도 확인하세요.

    챕터

    • 0:00 - 서론
    • 6:17 - Digital Credentials API
    • 22:38 - Document Provider API

    리소스

    • Apple Business Connect
    • Implementing as an identity document provider
    • Requesting a mobile document on the web
    • Set up Verify with Wallet on the Web in Apple Business Connect
      • HD 비디오
      • SD 비디오

    관련 비디오

    WWDC25

    • Declarative Web Push 자세히 알아보기
    • Safari 및 WebKit의 새로운 기능

    WWDC22

    • 지갑 및 Apple Pay의 새로운 기능
  • 비디오 검색…

    안녕하세요! Wallet & Apple Pay 팀 엔지니어 Erik입니다 안녕하세요, WebKit 팀 표준 관련 엔지니어 Marcos입니다 오늘은 디지털 신분증을 사용해 온라인 신원 확인 절차를 간소화하는 방법을 소개하겠습니다 신원 확인 흐름을 개선하려는 웹사이트 개발자든 앱에 신원 증명 기능을 추가하려는 앱 개발자든 디지털 신원에 관심 있는 사람이라면 그 누구라도 이 세션이 도움이 될 것입니다 디지털 신분증은 운전면허증과 정부 발급 신분증 등 다양한 신원 확인 문서를 표현할 수 있어 점점 더 널리 사용되고 있습니다 디지털 신분증은 실제 문서 대비 몇 가지 주요 이점을 제공합니다 그중 하나는 온라인에서 더 쉽게 사용할 수 있다는 점입니다 현재 온라인에서 신원을 증명하려면 종종 실물 신분증 사진을 업로드해야 합니다 이는 사용자나 신분증을 확인하려는 개인이나 업체 모두에게 이상적인 방식이 아닙니다 사용자 입장에서는 불편한 경험이죠 먼저 실물 신분증을 찾아야 하고 그다음 적절한 배경을 찾아 사진을 찍되 글자가 선명하고 흐릿하지 않아야 합니다 반면 업체는 이러한 사진을 처리하고 진위 여부를 판단할 수 있는 복잡한 시스템을 구축해야 합니다 이건 해결하기 어려운 문제죠 모바일 신분증 또는 “mdocs”는 이 문제를 해결하기 위해 고안된 디지털 신분증 형식 중 하나입니다 mdoc은 몇 가지 고유한 특징을 갖고 있습니다 첫째, ISO 18013-5 표준에 정의되어 있어 다양한 플랫폼 간 상호운용이 가능합니다

    또한 더 프라이버시 중심의 사용자 경험을 제공합니다 예를 들어 요청자가 이름과 나이만 확인하면 된다면 그 정보만 공유하면 됩니다 mdoc를 사용하면 가능하죠 마지막으로, 실물 신분증보다 보안 기능이 강화되어 더 높은 신뢰성을 제공합니다 예를 들어, mdoc의 정보는 발급 기관이 암호화 서명하기에 업체는 수신한 정보가 정당한 것임을 확인할 수 있죠 Apple 지갑의 신분증은 mdoc 형식과 ISO 18013 표준을 기반으로 구축된 사례입니다

    현재 미국 일부 공항 보안 검색대 사업장, 행사장 Apple Store에서 Apple 지갑의 신분증을 직접 제시할 수 있습니다 Verify with Wallet API를 통해 일부 앱에서도 신분증을 사용할 수 있습니다 Verify with Wallet API를 앱에서 사용하여 신원 확인 기능을 구현하고 싶다면 WWDC 22의 지갑 및 Apple Pay의 새로운 기능“ 세션을 참고하시기 바랍니다 일부 관할 지역에서는 mdoc 형식을 기반으로 신분증을 저장하고 실물처럼 사용할 수 있는 앱을 출시하는 사례가 보이고 있습니다 우리는 지역 면허 발급 당국을 모방한 운전 면허증을 관리하는 데모 앱을 만들었습니다 이것을 적절하게 Local Driving Authority라고 명명했죠 올해는 이러한 신분증 제공 앱과 Apple 지갑의 ID 기능을 강화하기 위한 새로운 개선 사항들을 소개하게 되어 기쁩니다 곧 출시될 릴리즈부터 Safari와 WebKit에서 W3C Digital Credentials API를 통한 mdoc 요청을 지원합니다 작동 방식을 간단히 설명드리죠 예를 들어 Safari에서 우주선을 대여하기 위해 Spaceship Rentals 웹사이트에 접속하여 우주선과 여행 일정을 이미 선택한 상황을 가정해봅시다 이제 신원 확인이 필요한 단계에서 “신원 확인“ 버튼을 누르겠습니다 이 버튼은 JavaScript Digital Credentials API를 실행하죠 저는 운전면허증을 Local Driving Authority 앱과 Apple 지갑 두 곳에 보관 중입니다 이 앱 선택 UI를 통해 신원 확인에 사용할 앱을 선택할 수 있습니다

    지금은 Apple 지갑을 사용하겠습니다

    동의서가 나타나고 브랜드 아이콘과 이름을 통해 누가 신원 정보를 요청했는지 확인할 수 있습니다 또한 어떤 항목을 요청했는지 해당 정보를 저장하려는지 여부도 확인할 수 있습니다 Face ID로 인증하여 신원 확인을 승인하면 입력한 정보가 Spaceship Rentals 웹사이트로 전송됩니다 멋지지 않나요?

    이봐요 Erik iPhone에서는 잘 작동했는데 Mac에서는 어떻게 될까요? 좋은 질문이에요 한번 확인해보죠

    이번엔 Mac의 Safari에서 아까와 같은 Spaceship Rentals 웹사이트를 열었습니다

    “신원 확인” 버튼을 클릭하겠습니다 근처 iPhone에서 계속하라는 알림이 표시됩니다 iPhone에 알림이 나타나고 이를 통해 신원 확인 절차를 완료할 수 있습니다 알림을 누르면 아까와 같이 사용할 앱을 선택해야 합니다 이번에도 Apple 지갑을 사용하겠습니다 동일한 동의서에서 요청자 이름과 로고, 요청 항목 해당 정보 저장 여부를 다시 확인할 수 있습니다 괜찮아 보이네요 Face ID로 확인해 보겠습니다

    끝내주네요 문서 정보가 Mac의 Spaceship Rentals로 전송된 걸 확인할 수 있습니다 Mac용 Safari 지원뿐만 아니라 다른 운영체제 및 브라우저에서도 표준화된 크로스 플랫폼 신원 확인을 구현했습니다 다른 브라우저나 플랫폼에서 우주선을 임대한다 해도 iPhone의 신분증을 그대로 사용할 수 있습니다 브라우저가 제시한 QR 코드를 스캔해 진행하겠습니다 방금 본 흐름은 여러 표준들을 기반으로 구축됐습니다 W3C Digital Credentials API를 사용하며 ISO 18013-7 Annex C 및 ISO 18013-5 요청 프로파일을 따르죠 크로스 플랫폼 흐름에는 FIDO CTAP 프로토콜이 사용됩니다 이는 Apple 플랫폼에 통합된 웹사이트의 코드는 동일한 표준을 채택한 다른 앱, 브라우저에서도 작동한다는 의미입니다

    이 환경은 기반부터 크로스 플랫폼으로 설계됐습니다 iPhone, iPad, Mac은 물론 다양한 운영체제와 브라우저에서도 사용할 수 있도록 지원하죠 사용자가 인터넷 어디든 브라우징 중이라도 iPhone의 신원 확인 문서를 사용할 수 있습니다 마지막으로, Apple 플랫폼용 Document Provider API를 구축했죠 이 API는 Local Driving Authority 같은 앱이 신원 확인 과정 중에 선택지로 표시되게 해줍니다 방금 본 데모를 바탕으로 이게 어떻게 작동하는지 설명하죠 웹에서의 mdoc 확인은 사용자가 웹사이트를 방문하며 시작되고 웹사이트는 서버에 mdoc 요청 의 작성 및 서명을 요청합니다 웹사이트가 요청을 받으면 Digital Credentials API 준비가 되죠 사용자가 신원 확인을 시작하면 웹사이트는 그 요청으로 Digital Credentials API를 호출합니다

    브라우저는 이 요청을 기반 운영 체제에 전달하고 OS는 요청과 사용자 상호작용을 기반으로 응답할 신분증 소스를 결정합니다 이 소스는 로컬에 설치된 신분증 제공 앱이거나 아예 다른 기기일 수도 있습니다

    결정된 요청은 해당 소스로 전달됩니다 사용자는 자신의 신분증 제공을 승인하고 암호화된 응답이 신분증 소스로부터 반환됩니다 이 응답은 요청한 웹사이트로 전달되며 마지막으로 웹사이트는 이를 서버에 보내 복호화하고 검증합니다

    좀 더 넓게 보면, Apple 플랫폼에서의 온라인 mdoc 확인은 여러 구성 요소로 이루어져 있죠 이 흐름에 참여하고 싶은 분들을 위한 진입점은 크게 두 가지로 나뉩니다 iOS용 신분증 제공 앱 개발자라면 Document Provider API에 관심이 있을 겁니다 이 API는 iOS 앱이 온라인 mdoc 확인 과정에서 선택지로 나타나게 합니다

    온라인에서 신원 확인을 하고 싶은 웹사이트라면 W3C Digital Credentials API와 연관된 요청 및 응답 처리 로직을 구현해야 합니다 이 흐름을 좀 더 자세히 살펴보죠

    전체적인 흐름에서 mdoc을 요청하려면 세 가지 단계를 따라야 합니다

    첫째, 사용자가 신원 확인을 위해 웹사이트를 방문하면 서버가 신분증 요청을 생성하고 서명해야 합니다 둘째, 사용자가 신원 확인을 진행할 준비가 되면 웹사이트는 요청을 W3C Digital Credentials API를 통해 브라우저에 전달해야 합니다

    셋째, 응답을 받은 후 웹사이트는 암호화된 응답을 서버로 전송해 복호화하고 검증해야 합니다 Marcos, 아주 열정적인 Full Stack 개발자로서 Spaceship Rentals 웹사이트에 신원 확인 단계를 통합하는 방법을 알려줄 수 있을까요 기꺼이 설명하죠 먼저, W3C Digital Credentials API를 사용해 요청을 생성하고 서명하는 방법부터 보여드리겠습니다 이 요청은 ISO 18013-7 Annex C를 따릅니다 그리고 두 부분으로 나눌 수 있죠 기기 요청과 암호화 정보로 말입니다 각 항목을 자세히 살펴보겠습니다 기기 요청에는 두 가지 핵심 정보가 담깁니다 먼저 신분증 요청 목록이 포함되죠 이곳에서 사용자가 어떤 신분증을 제출하길 원하는지 지정할 수 있습니다 Spaceship Rentals는 운전면허증을 확인하려고 합니다 그래서 모바일 운전면허증용 docType 문자열을 추가하고 요청할 속성도 지정합니다 이는 표준화된 네임스페이스와 요소 식별자 세트를 사용하여 구성됩니다 이번 예에서는 이름과 성 만 21세 이상 여부 사용자의 증명사진과 운전면허를 요청하겠습니다

    기기 요청의 또 다른 중요한 매개변수는 “Reader Authentication All“ 목록입니다 여기서 웹사이트가 요청에 서명합니다 이 속성은 곧 사용할 것이므로 지금은 비워두겠습니다 요청의 두 번째 부분은 암호화 정보이며 신분증 제공 앱이 응답을 암호화할 때 사용하는 매개변수를 담죠

    암호화를 위해 사용될 nonce도 생성해야 합니다 nonce는 재전송 공격을 방지하는 중요한 보안 기능입니다 수신자 암호화 키 쌍도 생성해야 합니다 이 키 쌍은 신분증 응답을 암호화하는 데 사용되죠 수신자의 공개 키는 암호화 정보 구조에 넣고 개인 키는 이후 복호화를 위해 보관해 둡니다 이렇게 하면 신분증 응답을 복호화할 수 있으므로 개인 키는 서버에 안전하게 보관하는 것이 중요합니다 이제 요청이 완전히 구성되었습니다

    계속해서 서명 단계로 넘어가겠습니다 신분증 제공 앱마다 요청에 요구하는 서명 방식이 다를 수 있습니다 Spaceship Rentals에서 Apple 지갑의 신분증을 받아들이도록 하려면 지갑에 대한 요청에 서명해야 하죠

    요청에 서명하기 전에 Apple Business Connect에서 서명 인증서를 받아야 합니다 이를 위해 먼저 서명 키 쌍을 생성한 후 인증서 서명 요청을 Apple Business Connect에 제출하죠 이제 인증서를 받았으니 런타임 작업으로 넘어갑시다 이제, 이제 웹사이트의 origin URL과 앞서 생성한 암호화 정보 구조 두 가지 정보로 세션 전송 데이터를 생성해야 합니다 세션 전송 데이터는 이후의 여러 작업에도 사용되죠 세션 전송 데이터를 확보했으니 서명할 준비가 끝났습니다 서명을 위해 Apple Business Connect에서 받은 서명 키 쌍과 인증서를 사용합니다 그 결과로 Signed Authentication Structure가

    생성되며 이 구조를 지갑용으로 Reader AuthenticationAll 목록에 삽입합니다 이 메커니즘은 ISO 18013-5에 정의되어 있습니다 다른 신분증 제공 앱은 요청 서명 방식에서 조금씩 다른 요구사항을 가질 수 있습니다 Local Driving Authority 앱 신분증도 수락하고 싶지만 자체 발급한 전혀 다른 인증서로 요청에 서명할 것을 요구합니다

    하지만 Reader Authentication All 목록은 목록이므로 요청을 여러 번 서명할 수 있죠 그래서 Local Driving Authority의 인증서를 사용해 새로운 서명된 인증 구조를 만들고 지갑에 대한 인증 구조와 함께 삽입이 가능하죠

    이제 요청을 완성했으니 다음 단계는 JavaScript에서 W3C Digital Credentials API를 통해 브라우저에 전달하는 것이죠 이제 서버에서 만든 요청 데이터를 요청 딕셔너리에 넣을 수 있습니다 “프로토콜” 속성에 표준 문자열 “org-iso-mdoc”을 지정해 이 요청이 mdoc 요청임을 명확히 나타냅니다 navigator.credentials.get 메서드를 호출하고 그 결과를 기다릴 준비가 이제 되었습니다 이 메서드 호출 시 브라우저가 시스템 UI를 표시하고 사용자가 제출할 디지털 신분증을 선택할 수 있게 됩니다 get 메서드는 사용자 동작 예를 들어 버튼 클릭이나 마우스 클릭으로만 호출이 가능하다는 걸 명심하세요 응답을 받은 뒤 복호화를 위해 서버로 다시 전송합니다 응답은 JSON 직렬화가 가능하므로 Fetch API나 XHR을 통해 쉽게 서버에 전달할 수 있습니다 마지막으로 문제가 발생하더라도 W3C Digital Credentials API는 프로그램 복구를 돕는 다양한 예외를 제공합니다 또는 기존의 신원 확인 방식 예를 들어 HTML 양식을 통한 신분증 이미지 업로드로 대체할 수도 있습니다 좋아요, 멋집니다! 이제 코드가 제대로 작동하는지 직접 테스트해보겠습니다 훌륭합니다! “신원 확인” 버튼을 누르니 시스템 UI가 나타났고 이는 요청이 잘 작동하고 있다는 의미죠 그리고 Apple 지갑과 Local Driving Authority 앱이 모두 사용자 선택지로 표시됩니다 Erik 어떻게 생각하나요? 잘 된 것 같아 보이네요 Marcos 다음 단계로 넘어가기 전 흐름의 보안에 대해 이야기해보죠 신분증 데이터처럼 민감한 정보를 다룰 때는 적절한 보안 보호 장치를 갖추는 것이 중요하죠 다음과 같은 의문이 들 수도 있습니다 누가 신분증 데이터를 요청하는가? 그 데이터는 안전하게 보호되고 있는가? 위조되진 않았는가? 혹은 복사된 적은 없는가? 이러한 질문에 답하기 위해 표준 내에서 제공되는 보안 보호 요소들을 하나씩 살펴보겠습니다

    이미 요청 인증 방식은 살펴봤죠 이는 요청하는 웹사이트가 자신을 식별하는 방법이며 신분증 제공 앱이 사용자에게 누가 요청을 수행하는지 이해시키는 방식이기도 합니다 이는 요청 서명에 사용된 인증서를 통해 수행됩니다

    다음은 응답 암호화입니다 응답은 요청 웹사이트의 서버가 생성한 키를 사용해 종단 간으로 암호화됩니다 이 암호화는 브라우저와 운영체제를 포함해 제3자가 신원 데이터를 읽지 못하도록 막습니다 발급자 인증은 신원 데이터의 진위를 검증하는 데 사용되며 웹사이트가 데이터 발급자를 식별하고 신뢰 여부를 판단할 수 있게 합니다 또한 반환된 데이터의 변경도 방지합니다 마지막으로 mdoc 인증은 데이터 복제를 방지합니다 이를 통해 웹사이트는 수신한 mdoc이 원래 발급된 동일한 기기에서 나온 것인지 검증할 수 있고 다른 기기로의 복제를 차단하죠

    Marcos, 이 보안 속성들이 응답 처리에 어떻게 적용되는지 보여줄 수 있나요? 좋습니다! 시작하죠

    Spaceship Rentals 구현을 마무리하려면 신분증 제공 앱으로부터 돌아온 응답을 처리해야 하죠 요청과 마찬가지로 JavaScript 응답 형식은 ISO 18013-7 Annex C에 정의돼 있습니다 응답에는 두 개의 속성이 포함돼 있습니다 하나는 복호화가 필요한 암호문이며 다른 하나는 암호화 과정에서 신분증 제공 앱이 생성한 키죠 암호문은 HPKE라 불리는 하이브리드 공개 키 암호 방식으로 암호화되며 RFC-9180에 정의돼 있습니다

    복호화 입력에는 암호문과 응답에 포함된 발신자의 공개 키가 포함됩니다 또한 요청을 작성할 때 서버에서 생성한 수신자의 개인 키도 포함되죠 마지막 입력은 요청 서명을 위해 이전에 생성한 세션 전송 데이터입니다 이 작업의 결과는 복호화된 기기 응답입니다 응답 내 각 신분증에는 변경 불가능하며 발급자가 서명한 모바일 보안 객체가 포함돼 있습니다 이 객체에는 반환된 데이터의 진위를 검증하는 데 중요한 정보가 담겨 있죠 모바일 보안 객체는 발급자 인증 구조를 통해 인증됩니다 이 구조에는 문서 서명자 인증서가 포함되며 먼저 이 인증서를 검증해야 합니다 검증은 인증서를 발급자가 공개한 신뢰할 수 있는 발급 기관의 루트 인증서까지 체인 방식으로 연결하여 수행되죠 Spaceship Rentals 서버는 신뢰할 수 있는 발급 기관 루트 인증서 목록을 유지하며 어떤 mdoc을 허용할지 판단합니다 문서 서명자 인증서를 신뢰할 수 없다면 해당 응답은 폐기해야 합니다 인증서를 검증한 후에는 서명을 검증해야 하며 발급자 인증 구조가 유효하다면 이제 모바일 보안 객체의 검증 단계로 넘어갈 수 있죠 여기서 수행해야 할 검증 항목이 몇 가지 있으며 가장 중요한 것은 반환된 요소들이 조작되지 않았는지를 확인하는 것입니다 이 요소들은 “발급자 네임스페이스”에 있으며 예를 들어 여기서는 “Kelly”라는 이름이 반환되었습니다 하지만 사용하기 전 이 요소가 조작되지 않았는지를 검증하기 위해 전체 요소 정보 구조의 해시 다이제스트를 계산합니다 그런 다음 모바일 보안 객체에 포함된 특정 다이제스트와 비교합니다 어떤 다이제스트와 비교할지는 요소 구조에 포함된 다이제스트 식별자로 알 수 있죠 두 다이제스트가 일치하면 데이터가 진본임을 확신할 수 있습니다 마지막으로 mdoc의 인증을 검증해야 합니다 모바일 보안 객체에는 해당 신분증이 발급된 기기에 고유한 공개 키가 포함돼 있습니다 이 키를 사용해 기기 인증 구조를 검증하며 이를 통해 신분증이 원래 발급된 기기에서 왔음을 확인할 수 있죠 이로써 응답 처리 과정이 마무리됩니다 우리가 지금까지 다룬 내용은 응답을 검증하는 데 필요한 작업의 개요입니다 정확한 검증 절차는 ISO 18013-5 표준 문서를 참고하면 됩니다 이제 나머지 흐름을 테스트해 보겠습니다 Spaceship Rentals 요청에 응답할 앱으로

    지갑을 선택하고 인증을 진행합니다 흐름이 정상 작동하며 정보는 Spaceship Rentals에서 복호화 및 검증되었죠 이제 대여한 우주선을 타고 출발할 수 있습니다! Erik 어땠나요? 멋진 작업이었어요! 이번 구현 과정에서 강조된 몇가지 주요 이점을 정리해보겠습니다 첫째, Digital Credentials API는 웹에서 신원 확인이 필요한 사용자에게 단언컨데 동급 최상의 환경을 제공합니다 이 API를 통합하면 웹사이트는 기기 간 흐름과 같은 사용자 친화적인 플랫폼 기능을 활용할 수 있죠 둘째, mdoc을 요청하는 웹사이트는 공통 표준을 구현하며 작성한 코드는 해당 표준을 지원하는 모든 브라우저에서 작동하므로 더 넓은 상호 운용성을 확보할 수 있습니다 그리고 마지막으로 이 API는 보안도 훨씬 뛰어나죠 앞서 언급한 보안 보호 외에도 해당 API는 신분증 제공 앱이 요청 웹사이트의 도메인을 검증할 수 있도록 하여 피싱 공격을 더 어렵게 만듭니다

    이로써 W3C Digital Credentials API 통합에 필요한 구현 작업이 모두 마무리됩니다 요청을 생성하고 서명한 뒤 Digital Credintials API로 전송해 암호화된 응답을 처리했습니다 이제 웹사이트에서 mdoc을 요청하기 위해 수행해야 하는 작업에서 앱이 온라인 mdoc 검증에 참여할 수 있도록 하는 Document Provider API로 초점을 옮겨보죠 조금 전 Spaceship Rentals에서 신원 확인을 할 때 Local Driving Authority 앱이라는 두 번째 앱도 사용할 수 있었던 것을 기억하실 겁니다

    Local Driving Authority 앱을 선택하면 이러한 승인 UI가 표시됩니다 이 UI는 앱이 구현한 UI 앱 확장 프로그램에서 제공되죠 이미 신분증을 제공하는 iOS 앱이 있다면 해당 확장을 앱에 간단히 추가해서 온라인 신원 확인 기능을 활성화할 수 있습니다

    이 환경은 신분증을 중심으로 한 새로운 프레임워크 IdentityDocumentServices를 통해 제공됩니다 작동 방식에 대해 설명해 보죠 첫 단계는 앱 확장 프로그램 외부에서 이뤄집니다 앱이 제시 가능한 신원 확인용 신분증을 발급할 때 해당 신분증을 iOS에 등록해야 합니다 이는 등록된 신분증이 선택 UI에서 나타나게 합니다 이때 신분증 유형과 요청 웹사이트를 승인할 인증 기관 목록을 지정합니다 iOS는 이 등록 정보를 기기에 로컬로 저장합니다

    다음은 신원 확인 흐름입니다 사용자가 이 흐름을 시작하면 iOS는 저장된 신분증 등록 정보를 사용해 요청에 응답할 수 있는 앱을 식별합니다 그 후 앞서 본 선택 UI에서

    사용할 앱을 선택하고 iOS는 부분 요청을 신분증 제공 앱으로 전송하죠 ‘부분 요청’이란 뭐지? 라는 생각이 스칠겁니다 ISO 18013 기기 요청에는 다양한 속성이 있으며 그 안엔 원시 상태의 파싱 가능한 데이터 블롭이 포함되죠 이러한 형식은 신분증 제공 앱이 서명을 정확히 컴퓨팅하고 검증할 수 있도록 설계된 것입니다 하지만 사용자 동의 없이 웹사이트에서 원시 데이터 블롭을 파싱하면 OS의 사용자 데이터 처리 구성요소에 위협이 될 수 있죠 이를 방지하기 위해 시스템은 요청의 일부만 보안 샌드박스 환경에서 파싱합니다 OS는 먼저 요청 서명을 검증한 뒤 파싱을 수행하고 그 결과 생성되는 건 부분 요청이죠 UI 구성에 필수적인 신분증 요청과 인증서 정보가 포함됩니다

    앱은 이 부분 요청을 사용해 앱 확장 프로그램에서 보여줄 UI를 구성할 수 있죠

    그리고 사용자가 신분증 제공을 승인하면 전체 ISO 18013 기기 요청이 해당 신분증 제공 앱에 전달되죠 이 시점에서 신분증 제공 앱은 전체 요청과 일부 요청을 비교해 일치하는지 확인하고 ISO 18013 기기 요청의 서명을 검증해

    요청이 유효한지 확인합니다 검증이 끝나면 앱은 신분증 응답을 생성하고 요청한 웹사이트에 맞춰 암호화하죠

    그 후 응답은 iOS에 전달되고 다시 웹사이트로 전송됩니다 Marcos Swift 다룰 줄 아시나요? 기본적인 사용은 가능합니다 좋습니다 Local Driving Authority 앱에 도움이 필요합니다 Document Provider API 연동 좀 도와 주실 수 있나요? 물론이죠 좋아요, 시작합시다 좋습니다! 우리가 구현해야 할 첫 번째 단계는 등록 단계입니다 이 단계는 Local Driving Authority 앱이 mdoc을 만든 직후에 이뤄져야 합니다 모든 등록 작업은 IdentityDocumentProviderRegistrationStore를 통해 수행되므로 먼저 저장소를 초기화 하겠습니다 이후 MobileDocumentRegistration 객체를 인스턴스화합니다 이 객체는 mdoc 등록에 필요한 정보를 담고 있죠 Local Driving Authority는 운전면허증을 발급하므로 모바일 운전면허증에 해당하는 표준화된 문서 유형 문자열을 입력합니다 이는 “mDL”이라는 mobileDocumentType 문자열로 확인할 수 있습니다 다음으로 신뢰하는 인증 기관 키 식별자를 지정할 수 있습니다 이를 통해 적절한 상황에서 앱이 표시됩니다 요청이 이 인증 기관 중 하나의 서명을 포함하지 않으면 앱은 선택 시트에 표시되지 않습니다 다음으로 신분증 식별자를 제공할 수 있으며 이는 앱 내 mdoc 저장소와 쉽게 연결됩니다 등록 객체가 생성되면 addRegistration() 메서드를 호출하여 iOS에 등록할 수 있죠

    앱 내에서 사용자가 운전면허증을 제거할 수 있는 기능을 제공했으며 면허증이 제거되면 앱이 더 이상 옵션으로 표시되지 않도록 하고 싶습니다 삭제된 운전면허증과 일치하는 등록 정보를 removeRegistration() 메서드를 통해 제거함으로써 이 작업을 수행할 수 있습니다 이때 이전에 생성한 mdoc 등록과 일치하는 신분증 식별자를 전달하죠 시스템에 현재 저장된 등록 정보를 앱에서 조회해야 하는 경우도 있을 수 있습니다 이때 registrations 속성을 사용하면 가능하며 반환된 등록 목록을 반복 확인할 수 있습니다 다음은 UI 앱 확장 프로그램을 앱에 추가하는 과정입니다

    Xcode 프로젝트에 새로운 타깃을 추가하고 “Identity Document Provider” 템플릿을

    선택하면 구현할 확장이 생성되며 코드를 채워 넣을 수 있는 두 개의 지점이 제공됩니다 performRegistrationUpdates() 메서드는 사용자가 Local Driving Authority 앱을 통해 온라인 신원 확인 시 호출되죠 이 메서드는 앱 저장소에 보관된 모든 mdoc을 확인하고 iOS에 등록되어 있는지 검증해야 합니다 다른 구현 지점은 `ISO 18013 모바일 신분증 요청 장면` 콘텐츠입니다 이곳에서 사용자가 앱을 선택할 때 표시되는 승인 UI를 구성할 수 있습니다 UI를 구현하려면 RequestAuthorizationView를 정의하고 수신한 context를 해당 뷰에 전달합니다 이제 새 뷰의 구현을 살펴보겠습니다 이 뷰는 앱 확장 프로그램에서 제공하는 ISO18013MobileDocumentRequestContext를 입력으로 받습니다 해당 타입에는 요청 정보와 응답 전송에 필요한 콜백 메서드가 포함되어 있죠

    이 뷰의 본문을 구현할 때 UI는 세 가지 주요 요소로 구성되며 요청 주체와 요청 항목 정보를 담은 뷰를 구성해야 합니다 이를 위해 context 객체로부터 받은 요청 정보를 입력값으로 하는 RequestInfoView를 정의하죠, 이는 앞서 Erik이 언급한 부분 요청입니다 다음으로 사용자가 신원 확인을 “승인”할 수 있는 버튼을 구현합니다 이 버튼은 뷰에 정의된 acceptVerification() 메서드를 호출하게 되죠 이제 해당 메서드를 구현해 보겠습니다 신원 확인을 승인할 준비가 되면 request context 객체에서 sendResponse() 메서드를 호출합니다 이 메서드는 클로저를 허용하고 클로저는 rawRequest 매개변수를 전달받습니다 여기서 ISO 18013 기기 요청이 전달됩니다 기기 요청을 수신한 후에는 요청 context 객체의 부분 요청과 비교해야 합니다 이제 원시 요청의 서명을 검증해야 하며 이는 웹사이트가 신뢰 가능한 대상인지 확인하기 위함이죠

    요청이 문제 없으면 신분증 응답을 생성하고 이를 암호화하여 클로저에서 응답 데이터를 반환합니다 이 응답은 요청한 웹사이트로 전송됩니다

    이로써 acceptVerification() 메서드 구현이 마무리됩니다

    마지막으로 UI를 완성하려면 “거절” 버튼이 필요하며 이를 구현하려면 context 객체의 cancel 메서드를 호출하면 되죠

    이상이 Local Driving Authority 앱의 -기본적인 구현입니다, Erik -감사합니다, Marcos

    이상으로 온라인 mdoc 검증 흐름에 대한 설명을 마칩니다 오늘 소개한 두 가지 API는 웹사이트에서 다양한 신원 확인 환경을 유연하게 구현할 수 있는 기반을 제공하죠 이것이 웹상 신원 확인에 대한 최선의 해결책이라 믿습니다 자리를 뜨기 전에 Digital Credentials API 통합을 위한 몇 가지 다음 단계를 소개합니다 지갑에 저장된 신분증에서 신원 정보를 요청하려는 웹사이트 개발자라면 Apple Business Connect에 등록하고 인증서를 발급받는 것을 고려해 보십시오 지방정부 앱 등 다른 앱에서 신원 정보를 요청하려면 해당 기관과의 별도 온보딩 요건을 확인해야 합니다 신분증을 제공하려는 앱 개발자라면 앱 내에 Identity Document Provider 확장 프로그램을 구현하세요 어떤 API를 사용하든 이번 세션에서 소개한 다양한 표준을 확인해 보세요 이 문서들이 구현 과정을 정확히 이해하는 데 도움이 될 것입니다

    세션을 시청해 주셔서 정말 감사합니다 멋진 WWDC 보내시길 바랍니다!

    • 0:00 - 서론
    • 이 세션은 특히 ISO 18013-5 표준을 준수하는 모바일 문서(mdoc)를 비롯하여 디지털 신원 문서를 사용하여 온라인 신원 검증을 강화하는 데 중점을 둡니다. Mdocs는 기존 물리적 ID 대비 더 안전하고, 개인 정보 보호가 강화되었으며, 사용자 친화적인 환경을 제공합니다. 사용자는 Apple 지갑과 같은 앱에 mdocs를 저장할 수 있는데, 미국 내 특정 위치에서 대면 검증을 이미 지원하고 있습니다. 향후 릴리즈에서는 Safari 및 WebKit에서 W3C의 Digital Credentials API에 대한 지원이 도입됩니다. 이를 통해 다양한 기기 및 플랫폼에서 온라인으로 신원을 확인할 수 있습니다. 사람들은 어떤 앱을 사용해 검증할지 선택하고, 요청된 정보를 검토하며, Face ID와 같은 생체 인증으로 승인할 수 있습니다. 이 프로세스는 표준화되어 다양한 운영체제 및 브라우저 간의 상호 운용성을 보장하고 개인과 기업이 온라인 신원 확인을 보다 편리하고 신뢰하는 방식으로 수행할 수 있도록 지원합니다.

    • 6:17 - Digital Credentials API
    • 이 시스템은 W3C의 Digital Credentials API 및 FIDO CTAP 프로토콜을 비롯한 업계 최고 표준을 활용하여 원활한 플랫폼 간 신원 검증을 지원합니다. 이 프로세스는 사용자 친화적이고 안전하도록 설계되어, 사람들이 다양한 브라우저와 운영 체제에서 iPhone에 저장된 모바일 문서를 사용하여 신원을 확인할 수 있습니다. 개발자의 경우, 두 가지 주요 진입점이 있습니다. 바로 iOS 앱용 Document Provider API와 웹사이트용 W3C의 Digital Credentials API입니다. 웹사이트는 다음과 같은 3단계 프로세스를 따라야 합니다. 문서 요청을 작성 및 서명하고 Digital Credentials API를 사용하여 브라우저로 전달한 다음 암호화된 응답을 서버로 보내 복호화 및 검증을 실시합니다. W3C의 Digital Credentials API는 표준화된 ‘org-iso-mdoc’ 문자열을 통해 사용자에게 디지털 자격 증명을 요청하는 데 활용됩니다. 운전면허증 확인에 관련된 세부 사항을 보여주는 자세한 예를 들어보겠습니다.

    • 22:38 - Document Provider API
    • Document Provider API를 통해 앱이 온라인 모바일 문서(mdoc) 검증에 참여하도록 지원할 수 있습니다. 사용자가 신원 확인을 시작하면 iOS는 등록된 문서 제공업체 앱의 선택 UI를 표시합니다. 선택된 앱은 보안 샌드박스 내에서 iOS로부터 부분적인 요청을 수신합니다. 사용자 승인 이후 전체 요청이 해제되고, 앱이 서명을 검증하며, 응답을 작성하고, 요청한 웹사이트로 암호화합니다. 이 프로세스에는 iOS에 문서를 등록하고 문서 유형 및 신뢰할 수 있는 인증 기관을 지정하는 작업이 포함됩니다. 이 등록을 통해 검증하는 동안 문서를 선택할 수 있게 되고 앱은 mdoc 데이터의 안전한 검증 및 웹사이트로의 전송을 처리합니다. 예제 UI 앱 확장 프로그램에 대해 논의하고 Xcode를 통해 샘플 앱에 추가하여 온라인 신원 확인을 지원합니다. 승인 UI는 요청 정보를 표시하는 뷰, ‘수락’ 버튼, ‘거부’ 버튼 등 세 가지 주요 부분으로 구성됩니다. ‘수락’을 탭하면 앱이 요청을 검증하고, 문서 응답을 암호화하며, 요청한 웹사이트로 재전송합니다. 요청이 유효하지 않으면 거부됩니다. Apple Business Connect에 등록하여 지갑의 ID에서 신원 정보를 요청하기 위한 인증서를 얻기 위한 추가 고려 사항이 논의됩니다.

Developer Footer

  • 비디오
  • WWDC25
  • 웹에서 신분증 확인하기
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • 머신 러닝 및 AI
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드(영문)
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    Apple Developer 앱 받기
    Copyright © 2025 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침