100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

개발/FIDO

[FIDO] FIDO Certification

dc-choi 2022. 10. 5. 12:23
반응형

이 글은 FIDO에 대한 설명이 아닌, FIDO 인증을 받기 위한 일련의 과정을 서술한 내용입니다.

FIDO가 무엇인가에 대해서는 아래의 url을 참고해주시면 감사하겠습니다

 

https://dc-choi.tistory.com/64

 

[FIDO] FIDO(Fast IDentity Online)란?

FIDO란? 기존의 비밀번호보다 안전하면서 편리한 인증수단(지문, 홍채, 얼굴, 정맥, 음성, 뇌파)으로 인증 프로토콜과 인증수단을 분리하여 보안과 편리성이 높다는 평가를 받으며 스마트 모바일

dc-choi.tistory.com

https://dc-choi.tistory.com/65

 

[FIDO] FIDO2

FIDO2란? U2F에서 발전한 것이며, FIDO모듈을 플랫폼화하고 플랫폼에 포함되어 있는 내부 인증자 또는 외부 인증장치의 외부 인증자를 이용하여 인증 가능하며 RP서버와 RP클라이언트 간 통신에 자

dc-choi.tistory.com

 

FIDO Certification Process

현 회사에서는 FIDO2 Server 인증을 받기위해 다음과 같은 과정을 거쳤습니다.

 

엔지니어로써 신경을 써야하는 부분은 크게 두가지이며, 그것은 다음과 같습니다.

1. Conformance Self‐Validation Testing

2. Interoperability Testing

 

이 글에서는 위의 두가지에 대해서 서술하도록 하겠습니다.

 

Conformance Self‐Validation Testing

https://fidoalliance.org/certification/functional-certification/conformance/

 

Conformance Self‐Validation Testing - FIDO Alliance

Conformance self‐validation testing is a required step of the certification process. Self‐validation results are submitted through the corresponding test tools must be confirmed by FIDO’s Certification Secretariat  at least 14 […]

fidoalliance.org

먼저 Conformance Self‐Validation Testing이란 직역하면 '적합성 자체 검증 테스트'라고 합니다.

이 Conformance Self‐Validation Testing에 통과하기 위해서는 테스트 툴 사용을 등록해야합니다.

그리고 그 테스트툴의 테스트 케이스에 대해서 전부 통과해야합니다.

 

테스트 툴 사용을 등록후 승인을 받고 프로그램을 실행하면 다음과 같이 나오게 됩니다.

 

인증을 진행하고자하는 부분을 클릭하시면 다음 화면으로 넘어가게 됩니다. 저는 FIDO2 Server 인증을 받기위해서 Server 부분을 진행하였습니다. Server 부분의 항목은 다음과 같습니다.

Server 인증을 받기 위해서는 Select Test to Run 부분의 항목을 전부 클릭해야합니다. 그래야 FIDO Alliance측에서 요구하는 테스트 조건을 통과하게 됩니다. Test Configuration은 서버 Url을 입력해야 합니다. FIDO에서 요구하는 필수 알고리즘을 제외한 알고리즘을 선택할 수 있는 부분이 있습니다. OPTIONAL한 알고리즘을 선택하도록 합니다.

 

마지막으로 메타데이터를 다운로드 받아야 합니다. 메타데이터 다운로드에 대해서는 Download Test Metadata를 통해서 JSON 파일을 받아야 합니다. 자세한 내용은 예제 코드를 통해서 설명드리도록 하겠습니다.

 

const statements: MetadataStatement[] = [];

// Load in statements from JSON files
try {
    const mdsMetadataPath = './metadata-statements';
    const mdsMetadataFilenames = fs.readdirSync(mdsMetadataPath);
    for (const statementPath of mdsMetadataFilenames) {
        if (statementPath.endsWith('.json')) {
            const contents = fs.readFileSync(`${mdsMetadataPath}/${statementPath}`, 'utf-8');
            statements.push(JSON.parse(contents));
        }
    }
} catch (err) {
    console.log('is error');
}

// Set above root cert for use by MetadataService
SettingsService.setRootCertificates({ identifier: 'mds', certificates: [
    END_ROOT,
    MDS3ROOT,
] });

// Reset preset root certificates
SettingsService.setRootCertificates({ identifier: 'apple', certificates: [] });

await fetch('https://mds3.certinfra.fidoalliance.org/getEndpoints', {
    method: 'POST',
    body: JSON.stringify({ endpoint: `${env.app.web.url}` }),
    headers: { 'Content-Type': 'application/json' },
})
.then(resp => resp.json())
.then(json => {
    const mdsServers: string[] = json.result;
    mdsServers.push('https://mds.fidoalliance.org/');

    return MetadataService.initialize({
        statements,
        mdsServers,
        verificationMode: 'strict',
    });
})
.catch(console.error)
.finally(() => {
    console.log('🔐 MetadataService initialized');
});

다음 코드는 SimpleWebAuthn 라이브러리를 사용하여, TS로 구현을 해놓은 예제입니다.

 

https://github.com/MasterKale/SimpleWebAuthn

 

GitHub - MasterKale/SimpleWebAuthn: WebAuthn, Simplified. A collection of TypeScript-first libraries for simpler WebAuthn integr

WebAuthn, Simplified. A collection of TypeScript-first libraries for simpler WebAuthn integration. Supports modern browsers and Node. - GitHub - MasterKale/SimpleWebAuthn: WebAuthn, Simplified. A c...

github.com

 

Download Test Metadata를 통해서 받은 JSON 파일을 저장하고 각 루트인증서를 가져와서, 루트인증서를 적용후, 엔드포인트를 가져와서 메타데이터를 읽어오면 됩니다. 메타데이터에 대한 자세한 설명은 다음 url을 참고해주세요.

 

https://fidoalliance.org/specs/mds/fido-metadata-statement-v3.0-ps-20210518.html

 

FIDO Metadata Statement

Abstract FIDO authenticators may have many different form factors, characteristics and capabilities. This document defines a standard means to describe the relevant pieces of information about an authenticator in order to interoperate with it, or to make r

fidoalliance.org

https://fidoalliance.org/specs/mds/fido-metadata-service-v3.0-ps-20210518.html

 

FIDO Metadata Service

Abstract The FIDO Authenticator Metadata Specification defines so-called "Authenticator Metadata" statements. The metadata statements contains the "Trust Anchor" required to validate the attestation object, and they also describe several other important ch

fidoalliance.org

저도 SimpleWebAuthn 라이브러리를 사용하여 FIDO2 Server 인증을 받았고, 해당 옵션을 선택한 다음 테스트를 진행하였습니다. 테스트 결과는 다음과 같습니다.

 

총 172개의 테스트 케이스를 통과했고, 다음의 사진처럼 서버의 결과를 제출하라는 버튼이 나오게 됩니다.

제출을 완료하면 Conformance Self‐Validation Testing을 전부 통과하게 됩니다. Interoperability Testing의 일정 14일 전에 마쳐야 합니다. 자세한 내용은 아래 url을 참고해주세요.

 

https://github.com/fido-alliance/conformance-test-tools-resources/tree/fido2-doc-update/docs/FIDO2/Server

 

GitHub - fido-alliance/conformance-test-tools-resources: Certification Test Tools Resources. For security and privacy related is

Certification Test Tools Resources. For security and privacy related issues email conformance-tools@fidoalliance.org - GitHub - fido-alliance/conformance-test-tools-resources: Certification Test To...

github.com

Interoperability Testing

https://fidoalliance.org/certification/interoperability-testing/

 

Interoperability Testing - FIDO Alliance

Interoperability Testing is a required step in the Certification Process. The following types of Interoperability Testing are supported for Certification: Interoperability Testing Events On Demand Testing Interoperability Testing Events Interoperability [

fidoalliance.org

FIDO Alliance측에서 요구하는 날짜에 맞춰서 진행해야 합니다. 상단의 url에 날짜에 대한 공지가 나옵니다. Interop Test에 등록을 해야하는데, 등록을 하기 전, 비밀유지 서약서를 작성해야 합니다. 저 또한 비밀서약서에 의해 Interop Test의 세부 내용을 자세히 서술할 수 없다는 점 양해 부탁드립니다. 자세한 내용 또한 상단의 url에 나오니 참고바랍니다.

 

Interop Test에 들어가기 위해서는 해당 html을 사용해야 합니다.

 

https://github.com/fido-alliance/fido2-interop-webapp

 

GitHub - fido-alliance/fido2-interop-webapp: As simple interoperability app for FIDO2 servers [Please install me for interop]

As simple interoperability app for FIDO2 servers [Please install me for interop] - GitHub - fido-alliance/fido2-interop-webapp: As simple interoperability app for FIDO2 servers [Please install me f...

github.com

FIDO Alliance측에서 공식적으로 사용하는 html파일입니다. 이 소스코드의 수정을 절대 금지한다고 합니다.

 

저는 해당 날짜에 Interop Test를 진행하였습니다.

약 4일간 테스트를 진행하였고, 해당 시간에 맞춰서 일을 진행하였습니다. 그 결과... 테스트에 통과하였습니다.

Interop Test에 등록을 성공하게되면 인증에 성공했다는 등록 요청을 진행해야합니다.

 

느낀점

1. Conformance Self‐Validation Testing을 진행하면서 우리는 SimpleWebAuthn이라는 라이브러리를 사용했었기에 이 라이브러리가 문제가 발생할 경우, 인증을 진행할 수 없는 상황이였습니다. 하지만 우리는 이슈를 남겼었고, 결국 오픈소스에 기여하는 경험을 쌓으면서 Conformance Self‐Validation Testing을 통과하였습니다.

 

다음 url은 팀원들이 서로 블로그에 후기를 남긴 내용입니다.

 

https://velog.io/@seungju0000/my-first-open-source-pr

 

비전공 쪼렙 개발자 오픈소스 기여하기(feat. 리젝)

2022년 8월 우리 회사는 FIDO 인증을 받기 위해 WebAuthn 구현을 하고 있었다.Node.js를 사용하였고, SimpleWebAuthn 라이브러리를 이용하였다.해당 라이브러리에서는 FIDO를 인증받기 위해 필요한 것들이 대

velog.io

https://dc-choi.tistory.com/69

 

[생각정리] 생각보다 쉬웠던 오픈소스 기여하기

바쁜 분들은.. 해당 이슈 =>  https://github.com/MasterKale/SimpleWebAuthn/issues/255 최근에 FIDO에 관련된 일로 인턴제안을 받았었다. 인턴 제안에 응해서 6월 중순부터 일을 시작하였고, 다행히 FIDO 인증..

dc-choi.tistory.com

 

2. Interop Test를 진행하면서 Conformance Self‐Validation Testing에서 몰랐던 X509에 대해서 더욱 자세하게 알게 되었습니다. 다른 인증자측에서 루트인증서를 V1으로 발급할 경우 호환이 되지않는 오류가 발생했었습니다. X509는 V1과 V3가 있습니다. V1는 너무 옛날 스펙이기에 더 이상 사용을 권하지 않는다고 합니다.

 

https://gruuuuu.github.io/security/what-is-x509/

 

호다닥 공부해보는 x509와 친구들

Overview 종종 Web App을 개발할때나 Docker혹은 Kubernetes에 접속할 때 다음과 같은 에러를 만날때가 있습니다. x509 certificate signed by unknown authority 그리고 인터넷 서핑을 하다보면 위 사진과 같이 “Your c

gruuuuu.github.io

https://security.stackexchange.com/questions/192729/should-we-use-x509-v1-certificate-for-a-new-root-ca

 

Should we use x509 V1 certificate for a new root CA?

I read a couple of articles that kind of gives the impression that the norm is to use a V1 x509 pkc for a root CA. This is one of them. However the rfc5280 makes no such suggestion. My question is...

security.stackexchange.com

 

3. FIDO2 Server 인증을 무사히 마칠 수 있어서 다행입니다. 여러 국적의 사람들과 커뮤니케이션할 수 있었고, 그를 통해 모르던 사실을 알고 공부하게 되었습니다. 비록 인증을 받으면서는 밤낮도 바꿔가면서 일했지만, 이번 경험을 통해 더욱 더 개발자로서 성장할 수 있는 기회를 잡았던거 같습니다.

 

다시 한번 팀원들에게 감사하다는 인사를 전하며, 이것으로 긴 글을 마치도록 하겠습니다. 감사합니다.

반응형

'개발 > FIDO' 카테고리의 다른 글

[FIDO] FIDO2  (0) 2022.06.15
[FIDO] FIDO(Fast IDentity Online)란?  (0) 2022.06.15