Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

디바이스 인증

디바이스를 인증하기 위한 방법을 고민한다. 이 방법은 아래의 조건을 만족해야 한다.
  • 해당 디바이스가 유저의 것임을 인증 할 수 있어야 한다.
  • 인증 정보는 안전하게 보관할 수 있어야 한다.
  • 인증 정보는 주기적으로 갱신되야 하며, 이 과정은 자동으로 이루어져야 한다.
  • 인증정보가 누출 될 수 있을 것이다. 누출될 경우 인지 할 수 있어야 하며, 초기화 및 복구를 위한 수단이 있어야 한다.

ACME

ACME(Automatic Certificate Management Environment)는 인증서를 자동으로 관리하기 위한 관리 환경이다. Let's Encrypt에서 인증서 관리를 위한 프로토콜로 사용 중인데, 디바이스 인증에 이용 할 수 있을지 고민해 보기로 했다. ACME의 작동 방식은 아래와 같다.

 ACME 프로세스

SSL 인증서는 도메인 단위로 발급된다. 따라서 이 시나리오에서는 www.example.com에 대한 인증서를 요청하는 유저가 www.example.com을 실제 소유하고 있는지를 알아내야만 한다.

ACME는 해당 도메인을 가진 웹서버에 우리가 지정한 URL에 우리가 전송한 비밀 문자를 저장한 파일을 두라고 명령한다. 이제 도메인 관리자는 이 명령에 따라서 해당 URL에 비밀 문자를 저장하는 파일을 만든다. 이 작업을 하기 위해서는 반드시 도메인에 대한 권한을 가지고 있어야 할 것이다. 이제 ACME는 해당 도메인의 URL의 파일을 읽어서 비밀문자가 읽어서, 일치하면 SSL 인증서를 발급한다.
  1. www.example.com 도메인에 대한 SSL 인증서를 요청한다. 이 요청은 https를 통해서 이루어진다.
  2. Let's encrpyt는 URL과 비밀키를 알려준다.
  3. www.exampple.com 도메인 관리자는 웹서버의 URL에 비밀키를 포함한 파일을 만든다.
  4. Let's encrypt는 비밀키를 읽어서 확인을 하고, SSL 인증서를 전송한다. SSL 인증서는 역시 https를 통해서 안전하게 전달을 해야 한다.
위의 과정을 자동으로 진행할 Agent를 개발하면 된다.

ACME를 디바이스 인증에 응용해보자.

ACME는 도메인을 인증하기 위해서 사용한다. 이 도메인을 디바이스로 바꿔치기 하면, 자동으로 디바이스를 인증 할 수 있지 않을까. 아래와 같이 접근해보자.
  1. 도메인은 IP를 가리킨다. 도메인의 소유주는 IP역시 소유하고 있으므로 이를 이용해서 인증 할 수 있다.
  2. 디바이스는 인터넷 유저 정보로 인증 할 수 있을 것이다.
즉 구글, 페이스북, 트위터 유저 인증을 한 다음에, 유저 인증 정보를 디바이스에 밀어 넣는 방식으로 인증이 가능 할 것이다. 유저 정보와 디바이스를 페어링하는 방식이다. 아래 그림을 보자.

 디바이스 인증에 ACME 모델 사용

기실 이 모델은 IoT 디바이스 인증에서 특이한 모델은 아니다. 명확히 정리하는데 의미가 있을 것 같다.

디바이스는 도메인을 가지고 있지 않으므로 도메인의 소유 여부로 확인 할 수 없다. 대신 oAuth2를 사용한다. oAuth2로 인증을 끝내면 Access token과 refresh token을 받을 것이다. 이 정보를 여러 페어링 기능을 이용해서 디바이스에 기록한다. 데이터는 https와 같은 안전한 통신 채널을 이용한다.

디바이스는 Access token을 이용해서 Smart service에 연결을 하면, 서비스는 access token이 validate 한지를 검사한다. validate 하다면, 디바이스에 secret key를 반환한다. 이후 디바이스는 secret key를 이용해서 서비스를 이용한다. secret key는 refresh token을 이용해서 주기적으로 갱신한다.