FIDO에 관한 간단한 소개는 [한국정보인증 FIDO 홈페이지]를 참고하세요.
FIDO 스펙에 관한 정보는 [FIDO Alliance]를 참고하세요.
FIDO는 규격이기 때문에 이것을 실제로 어플리케이션과 서버에 적용하려면 해당 규격을 충족하는 프로그램을 실제로 작성해야 한다.
이에 작년부터 삼성과 ETRI를 비롯해 많은 회사에서 자체적으로 FIDO 기반 서버와 앱을 만들어 인증을 해왔는데, eBay에서 최근에 자신들이 만든 프레임워크를 [Github]에 공개했다.
따라서 본인은 eBay에서 공개한 FIDO 프레임워크의 구조와 특징을 분석해 보기로 하였다.
FIDO UAF Core
FIDO UAF Core는 서버 측의 핵심 부분을 구현해놓은 것이다. Java 언어로 작성되어 있는데, 이것은 다른 파트도 동일하다. 아마 클라이언트 측이 안드로이드이기도 하니 재사용 및 작성의 편의를 위해서 그렇게 한 듯 하다. 종속성은 아래와 같으며, GSON은 Google에서 공개한 JSON 라이브러리이고 Commons Codec은 Base64를 처리하기 위해 가져온 것으로 보인다. BouncyCastle은 암호 알고리즘 관련 라이브러리인데, JAVA에서 지원하지 않는 기능과 알고리즘을 처리하기 위해 가져왔다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3.1</version> </dependency> <!-- <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency> --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.51</version> </dependency> </dependencies> |
패키지의 구조는 아래와 같으며 코어 라이브러리이기 때문에 패키지에는 실질적인 구동 파트가 존재하지 않는다.
1 2 3 4 5 6 7 8 9 10 |
org `--ebayopensource `--fido `--uaf |--crypto |--msg |--ops |--ri.client |--storage `--tlv |
다만 ri.client/AppTest.java에 테스트를 목적으로 초소형 서버가 구현되어 있으며 test 프로젝트에서 각각의 코드를 테스트 할 수 있게 되어 있다.
아래는 각 서브패키지에 관한 설명이다.
- “crypto” 패키지엔 인증서 검증 및 각종 암호 알고리즘을 처리하는 클래스가 들어있다. 특히 인증서를 검증하려면 X509 쪽은 꼭 구현이 되어있어야 하는데 여기선 BouncyCastle을 이용해 Java 패키지로는 부족한 기능들을 보강하고 있다. CertificateValidator, Notary는 인터페이스인데 각각 인증서를 검증하고 데이터를 서명하는 기능을 선언해놓았다.
- “msg” 패키지엔 각종 메시지(Reg, Dereg, Auth)를 주고 받을 때 쓰기 위한 튜플(컨테이너)들이 들어있다.
- “ops” 패키지엔 서버 측에서 수행해야 하는 명령을 실제로 구현해놓은 클래스가 들어있다.
- “ri.client” 패키지는 앞에서 말했던 것 처럼 본 라이브러리를 테스트 하기 위해 구현해놓은 초소형 서버이다. 실제로 코드를 살펴보면 서버 주소나 각종 값들이 하드코딩 되어있는 것을 알 수 있다.
- “storage” 패키지엔 Authenticator와 사용자(단말)을 관리하기 위한 튜플과 인터페이스가 있다. 이 인터페이스를 구현하고 자신의 데이터베이스 엔진과 연결하는 코드를 추가하면 된다.
- “tlv” 패키지는 Tag Length Value의 줄임말인데, UAF 메시지의 태그를 처리하고 검증하는 클래스가 들어있다.
아래는 UAF Core 라이브러리의 클래스 다이어그램이다. 클릭하면 원본을 볼 수 있다.
지금까지 UAF Core 라이브러리를 살펴보았습니다. FIDO 서버에 들어갈 각각의 기능과 특성을 잘 고려하여 설계되었다고 느껴지네요. 데이터베이스와 연동하는 부분은 없고 인터페이스만 제공해주는 이유는 각 회사마다 이용하는 DB 서버가 다르기 때문이라고 생각합니다.