FIDO에 관한 간단한 소개는 [한국정보인증 FIDO 홈페이지]를 참고하세요.

FIDO 스펙에 관한 정보는 [FIDO Alliance]를 참고하세요.

FIDO는 규격이기 때문에 이것을 실제로 어플리케이션과 서버에 적용하려면 해당 규격을 충족하는 프로그램을 실제로 작성해야 한다.

이에 작년부터 삼성과 ETRI를 비롯해 많은 회사에서 자체적으로 FIDO 기반 서버와 앱을 만들어 인증을 해왔는데, eBay에서 최근에 자신들이 만든 프레임워크를 [Github]에 공개했다.

따라서 본인은 eBay에서 공개한 FIDO 프레임워크의 구조와 특징을 분석해 보기로 하였다.


FIDO UAF Client (Android)

[FIDO UAF Client (Android) 저장소]

FIDO UAF Client (Android)는 안드로이드에서 구동 가능한 앱이다. Gradle 빌드 시스템에 기반한 프로젝트이며, build.gradle은 아래와 같다. 최소 실행가능 버전이 21(5.0 Lolipop)인 것이 특징이며 GSON, Commons Codec을 쓰는 것 까진 이전의 라이브러리와 같지만 SpongyCastle을 쓰는 것이 차이점이라 할 수 있다. 앞에서는 BouncyCastle을 사용하였지만 안드로이드에선 SpongyCastle을 사용하였는데, 안드로이드에선 호환성 문제 때문에 BouncyCastle을 사용하지 못하는 것으로 알고 있다.

패키지의 구조는 아래와 같다. 구동 파트는 org.ebayopensource.fidouafclient.util에 있는 MainActivity이다.

uafclient

res/layout를 통해  5개의 레이아웃을 가지고 있는 것을 알 수 있다. 아래는 각 서브패키지에 관한 설명이다.

  • “fido.uaf” 패키지는 UAF Core 패키지에서의 내용과 비슷하지만 클라이언트 측에서만 처리하는 부분들이 추가되어있다. 모바일 쪽에서의 코어 패키지라 보면 된다.
    • “client” 패키지엔 Assertion 빌더, Request 처리기 등이 있고, “client.op” 패키지엔 실제로 명령(Auth, Reg, Dereg)을 처리하는 클래스가 있다.
    • “msg” 패키지에는 UAF Core에 있던 msg 클래스에 더불어 RP 클라이언트 쪽 메시지 클래스도 구현되어 있다.
    • “tlv” 패키지는 UAF Core처럼 태그 처리를 하는데, 이 패키지와 “msg” 내에 있는 “asm”, “asm.obj”, “client” 패키지를 통해 다음 사실을 알 수 있다.

이 앱은 RP 클라이언트 역할만 하는 것이 아니라 실제로는 FIDO 클라이언트와 Authenticator, ASM 역할을 모두 가지고 있다. 이 말은 곧 휴대폰에 FIDO 클라이언트와 Authenticator, ASM이 없어도 작동한다는 것이다. 실제로 테스트를 해보면 자신의 휴대폰에 FIDO 클라이언트와 Authenticator가 내장되어 있지 않아도 진행이 가능하며, 내장되어 있는 경우에는 eBay의 FIDO 클라이언트와 내장 FIDO 클라이언트 둘 중 하나를 선택하도록 나온다. (Authenticator; 인증방법)도 마찬가지이다.

이해를 돕자면 보통의 경우에는 삼성 GALAXY S6를 예로 들었을 때 FIDO 클라이언트와 Authenticator는 삼성에 내장되어 있다. 그리고 이것을 이용한 것이 삼성페이이다. 여기서 삼성페이는 RP 클라이언트 역할을 하는 것이다.

  • “fidouafclient” 패키지는 RP 클라이언트의 외적인 부분과 직결되는 것들이 들어있다.
    • “curl” 패키지는 HTTPRequest와 HTTPResponse를 비동기로 구현해놓은 것이다.
    • “op” 패키지엔 FIDO 명령(Auth, Reg, Dereg)을 RP 클라이언트 입장에서 수행하는 부분이 들어있다.
    • “util” 패키지엔 각종 설정(서버 주소 등)과 안드로이드 시스템과 관련된 리소스를 제공해주는 클래스가 들어있다.

아래는 각 액티비티의 레이아웃이다.

activity_main

MainActivity이다. 등록할 유저의 이름을 입력하고 Reg 버튼을 누르면 진행된다.

activity_fido_uaf

FidoUAFActivity이다. 특정 명령(Auth, Reg, Dereg)를 Consent 버튼을 눌러 실행한다.
activity_authenticated

AuthenticatedActivity이다. Auth를 수행하는 부분이다.
activity_registered

RegisteredActivity이다. 유저가 등록되어 있을 때 볼 수 있으며 특정 명령을 수행할 수 있다.
activity_settings

설정 레이아웃이다. Endpoint는 URL을 뜻한다.

 

본 데모 클라이언트의 가장 큰 특징으로는 RP 클라이언트와 FIDO 클라이언트, 그리고 Authenticator가 섞여있다는 것이다. 테스트 용도로 만들어졌기 때문에 그런 것으로 보이지만 일반적으론 모두 분리되어 있는 것이 원칙이다. 또한 인증서(Attestation Certificate)와 같은 부분이 하드코딩되어 있다는 점도 참고해야한다.


 

지금까지 안드로이드용 FIDO RP Client를 살펴보았습니다. 참고로 최소 구동가능 버전이 5.0인 이유는 [이곳]에서 확인할 수 있듯이 지문 인식기 등이 없어도 안드로이드에서 자체적으로 지원하는 방법으로 본인확인 과정을 거칠 수 있도록 구현했기 때문인데요, 저는 이 부분에 약간 의구심을 가지고 있습니다. 원래 본인 확인 과정은 Authenticator에서 처리하는 것인데 현재 소스를 보면 RP 클라이언트 쪽에서 처리하도록 되어있거든요. 이러면 FIDO 규격을 벗어나는 것이 되는데 제가 이해를 잘 못한건지 모르겠네요.

4 thoughts on “eBay FIDO 프레임워크 분석 [3]. FIDO UAF Client (Android)

  1. 저도 FIDO를 공부하고 있는 학생입니다.

    글 잘 봤습니다. 그러나 결국 이 모두를 사용했을 때,

    연동이 잘 되는지 잘 모르겠습니다.

    이클립스를 이용해 WEB을 뛰어본 결과

    안드로이드와 WEB연동이 잘 되지 않는 것으로 보입니다.

    간단한 조언을 해주실 수 있는지…. 궁금합니다.

    1. 안녕하세요,

      지금은 기억이 흐릿한데 일단 gradle 빌드 시스템에 기반하기 때문에 IntelliJ로 작업하시는 것이 편하실겁니다. 서버는 일반 웹서버처럼 외부 IP에서 접속가능하게 구축해놓으시던가 아니면 앱과 같은 망(무선공유기 등) 내에서 접속하게 하시는 것이 좋을겁니다.
      클라이언트 앱에 보시면 eBay에서 운영하고 있는 테스트 서버 주소가 있는데 우선 거기로 접속을 시도해보시는 것도 좋을 것 같네요.
      그리고 대체로 로그 메시지와 디버깅을 잘 활용하시면 어디서 막히는지 확인하실 수 있습니다.

      구체적으로 어디서 막히시는지 알려주시면 좀 더 도움일 될 수 있을것 같습니다.

  2. 안녕하세요

    휴대폰 제조사에서 파이도 클라이언트를 넣지 않은경우

    파이도 클라이언트를 어플 형태로 제공 해서 파이도를 구현해야하나요?
    좀 더 구체적으로 파이도 클라언트 , asm 따로 어플 2개 설치 하는 방식으로 구현되게 될까요?

    1. 안녕하세요,

      FIDO 클라이언트 및 인증장치(및 ASM)를 어플 형태로 제공해야 하는 것이 맞습니다.
      회사를 특정할 순 없지만 인증을 받을 당시에 인증장치(및 ASM)/FIDO 클라이언트/RP 앱 세 개를 모두 인증을 받는 회사가 여럿 있었습니다.
      앱을 공개할 때는 독립된 앱을 앱스토어에 올려야 하는 걸로 아는데 하나은행 같은 경우에는 생체인증(지문) 기능을 독립된 앱에서 실행하게 되어있는데 아마 FIDO 클라이언트가 아닐까 생각됩니다.

      보통 인증장치와 ASM은 같은 앱 안에서 구현됩니다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.