보안 가이드

IP 화이트리스트 등록

각 VASP의 enclave 서버는 central 서버와 통신을 주고받습니다. 안전한 통신을 위해 VerifyVASP central 서버와 VASP enclave 서버 양쪽에 IP 화이트리스트를 적용해야 합니다.

VerifyVASP에 VASP의 enclave 서버 IP 등록

  • corporate-kr@verifyvasp.com으로 VASP의 enclave 서버 IP 주소를 보내주시면 VerifyVASP에 IP 화이트리스트로 등록해 드립니다.

  • 반드시 IP 주소로 보내주셔야 하며, domain 주소는 사용하지 않습니다.

VASP에 VerifyVASP central 서버 IP 등록

  • 위 메일로 VASP enclave의 IP 주소를 보내주시면 답장으로 VerifyVASP의 central 서버 IP 주소를 보내드립니다. 해당 주소를 IP 화이트리스트에 등록하십시오.

VASP API 인증 (Enclave 서버에서 VASP API 호출 시)

VerifyVASP를 연동하는 각 VASP 들은 각자의 백엔드 서버에 다음과 같은 API들을 구현해야 합니다.

  • User를 검증하는 API

    • beneficiary 검증 요청을 받았을 때 해당 주소와 사용자가 정확한지 검증하고, 해당 주소의 고객이 정상적으로 KYC, AML 검증이 되었는지를 검증하여 검증 결과를 반환하는 API

  • Account를 검증하는 API

    • originator가 입력한 beneficiary 지갑 주소에 대해 해당 VASP가 소유한 지갑 주소인지를 판별하여 그 결과를 반환하는 API

  • Transaction 상태를 반환하는 API

    • beneficiary VASP에서 특정 verification에 대한 트랜잭션 처리 상태를 질의하는 요청을 보내면 originating VASP 입장에서 해당 트랜잭션의 처리 상태를 반환하는 API

  • Callback API

    • 비동기로 작동하는 API들의 결괏값을 전달받기 위해 작성하는 API

  • DB encryption key를 복호화 하는 API

    • 데이터베이스를 암호화하기 위해 사용하는 "encryption key"를 복호화 하는 API

    • "encryption key"를 환경 변수를 통해 평문으로 입력하면 보안 노출 위험성이 증가하기 때문에 환경 변수로 입력한 “암호화된 encryption key”를 복호화 API를 통해 “복호화 된 encryption key”로 변환하기 위한 API

위와 같은 작업들은 enclave 서버 내부에서 처리할 수 없는 작업이므로, enclave는 해당 작업을 각 VASP가 구현한 API에게 위임합니다. Enclave 서버가 VASP API를 호출할 때 API 인증을 하기 위해 Enclave에 다음과 같은 환경 변수를 설정할 수 있습니다.

Enclave 환경 변수:

VEGA_VERIFICATION_AUTHORIZATION_TOKEN 변수에, VASP API 인증 토큰을 입력합니다. VEGA_VERIFICATION_AUTHORIZATION_KEY 변수에, VASP API 인증 토큰을 입력할 헤더 키값을 입력합니다.

해당 인증 토큰은 enclave 서버에서 VASP API를 호출할 때 http 헤더를 통해 전달됩니다. VASP API에서 http 헤더를 검사하여 설정한 인증 토큰이 맞는지 검사하는 방법으로 API 인증을 할 수 있습니다.

만약 VEGA_VERIFICATION_AUTHORIZATION_KEY 환경 변수를 설정하지 않으면, 다음과 같이 인증 토큰이 Authorization 헤더(bearer 타입)를 통해 전달됩니다.

Authorization: Bearer <VEGA_VERIFICATION_AUTHORIZATION_TOKEN>

만약 VEGA_VERIFICATION_AUTHORIZATION_KEY 환경 변수를 설정하면, 인증 토큰이 헤더의 해당 키값을 통해 전달됩니다. 예를 들어, VEGA_VERIFICATION_AUTHORIZATION_KEY=X-Api-Key 와 같이 설정한 경우에는 다음과 같이 인증 토큰이 전달됩니다.

X-Api-Key: <VEGA_VERIFICATION_AUTHORIZATION_TOKEN>

종단 간 암호화 (End-to-End Data Encryption)

VerifyVASP를 통해 가상 자산 전송에 대한 사용자 검증 요청을 수행할 때 originator와 beneficiary의 개인 정보는 각 이해 당사자인 VASP들만 풀어볼 수 있도록 종단 간 암호화를 하여 암호화된 형태로 전송됩니다. 따라서 중간에서 통신을 중계해 주는 VerifyVASP central 서버는 사용자의 개인 정보를 복호화 할 수 없으며 저장하지도 않습니다.

종단 간 암호화를 수행하기 위해 enclave 서버의 verification API 내부에서는 다음과 같은 방식으로 동작합니다.

  1. originating VASP 백엔드에서 enclave 서버의 verification API를 통해 beneficiary 검증을 요청한다

  2. originating VASP의 enclave 서버는 VV central 서버를 통해 beneficiary VASP의 enclave 서버까지 public key 요청을 전달한다

  3. beneficiary VASP의 enclave 서버는 public key 요청을 받으면, enclave 서버가 DB에 저장하고 있던 public key를 반환하거나, 필요한 경우 새로 만들어서 DB에 저장 후 반환한다

  4. originating VASP의 enclave 서버가 beneficiary VASP의 public key를 전달받으면 해당 public key를 이용하여 개인 정보를 암호화한다

  5. 암호화된 정보를 VV central 서버를 통해 beneficiary VASP의 enclave 서버까지 전송한다

  6. 암호화된 개인 정보를 전 받은 beneficiary VASP의 enclave 서버는 private key로 복호화 한 후 VASP API를 통해 사용자를 검증한 다음, beneficiary 개인 정보를 originating VASP의 public key(암호화 데이터와 같이 전달)로 암호화한다

  7. 암호화된 정보를 VV central 서버를 통해 originating VASP의 enclave 서버로 전송한다

  8. originating VASP의 enclave 서버는 암호화된 개인 정보를 private key를 이용하여 복호화 한 후 enclave DB에 저장한다

위와 같은 일련의 종단 간 암호화 과정에서 사용되는 public key와 private key는 enclave 서버 내부에서 자동으로 데이터베이스에 저장되고 관리됩니다. 따라서 각 VASP의 백엔드 서버에서는 종단 간 암호화에 대해 크게 신경 쓰지 않아도 됩니다. 하지만 종단 간 암호화와 관련된 몇 가지 옵션을 제공하고 있으므로 잘 숙지하여 사용하면 좀 더 효율적으로 종단 간 암호화를 수행할 수 있습니다.

public key 캐싱 옵션

Enclave 서버에서는 public key의 요청 과정을 효율화하기 위해 한 번 요청하여 전달받은 상대방 VASP의 public key를 일정 기간 동안 캐싱 하여 사용합니다. 얼마나 오랫동안 캐싱을 할지에 대한 설정값을 enclave 환경 변수로 설정할 수 있습니다.

Enclave 환경 변수:

VEGA_PUBLIC_KEY_TTL 변수에, public key 캐싱 시간을 밀리초 단위로 입력합니다. 기본값은 1800000 (=30분)이며, 최솟값은 600000 (=10분)입니다

public key type 옵션

Enclave 서버에서는 verification API를 호출할 때 종단 간 암호화를 좀 더 효율적으로 사용하기 위해 다음과 같이 여러 key type을 지원합니다. 해당 key type은 verification API를 호출할 때 request body에 입력할 수 있습니다.

  • PerVasp

    • VASP마다 1개씩 보유하고 있는 key를 사용. 캐싱을 통해 가장 크게 효율을 높일 수 있지만 보안적으로는 가장 떨어지는 옵션입니다.

  • PerAddress

    • beneficiary 주소마다 구별되는 key를 사용. 서로 다른 주소에 대해서는 서로 다른 public key로 암호화가 되기 때문에 PerVasp 키보다는 안전하지만, 효율은 떨어집니다.

  • PerVerification

    • verification 요청마다 key를 새로 생성하여 사용. 보안적으로는 가장 안전하지만 캐싱이 소용없기 때문에 효율은 가장 떨어집니다.

Enclave 데이터베이스 암호화

Enclave 데이터베이스에는 가상 자산 전송에 대응되는 사용자 검증 기록(verification)이 저장됩니다. 사용자 검증 기록에는 사용자 개인 정보와 같은 민감 정보가 포함되므로 해당 정보들은 암호화를 적용하여 저장합니다. 또한 위에서도 설명했듯이 개인 정보를 안전하게 주고받기 위해서 종단 간 암호화를 하고 있으며, 이를 위해 사용되는 private key를 데이터베이스에 저장할 때에도 역시 암호화를 하여 저장합니다. 위 두 가지의 암호화(개인 정보 암호화, private key 암호화)에 사용되는 암호화 키는 동일한 키를 사용합니다. 해당 암호화 키는 enclave 서버의 환경 변수로 설정할 수 있습니다.

Enclave 환경 변수:

VEGA_ENCRYPTION_KEY_BASE64 : base64 형태로 인코딩된 encryption key를 설정 VEGA_DECRYPT_API_ENDPOINT : encryption key를 복호화 하기 위한 API의 endpoint를 설정

  • VEGA_DECRYPT_API_ENDPOINT 환경 변수를 설정하지 않으면 VEGA_ENCRYPTION_KEY_BASE64 환경 변수로 설정된 값을 평문 그대로 encryption key로 사용합니다. (권장하지 않음)

  • VEGA_DECRYPT_API_ENDPOINT 환경 변수를 설정하면 enclave 부팅 시 해당 API를 호출할 때 VEGA_ENCRYPTION_KEY_BASE64로 입력된 값을 request body로 넘겨줍니다. 해당 API의 response로 받은 값을 실제 DB의 암호화 키로 사용합니다.

    • 따라서 AWS KMS와 같은 서비스를 사용하는 경우, VEGA_ENCRYPTION_KEY_BASE64를 AWS ARN으로 설정하고 VEGA_DECRYPT_API_ENDPOINT에는 KMS를 wrapping 한 서버를 구현하여 그 endpoint를 설정하면 KMS에서 ARN으로 암호화키를 추출하여 사용할 수 있습니다.

  • 암호화 키를 복호화 하기 위해 HSM 장비를 wrapping 한 별도의 백엔드 서버에 복호화 API를 구현하는 것을 권장합니다.

  • 복호화 API specification은 VASP API Reference를 참고하세요.

데이터베이스에서 암호화가 되어 저장되는 column 목록은 다음과 같습니다.

  • verification table : 사용자 검증 히스토리가 저장되는 테이블

    • ivms101_originator : 보내는 사람의 개인 정보

    • ivms101_originator_vasp : 보내는 사람이 속한 VASP 정보

    • ivms101_beneficiary : 받는 사람의 개인 정보

    • ivms101_beneficiary_vasp : 받는 사람이 속한 VASP 정보

  • own_keys table : 검증을 위한 종단 간 암호화에 사용되는 public key / private key를 저장하는 테이블

    • private_key : 종단 간 암호화에 사용되는 private key

Https 설정

VerifyVASP central 서버와 각 VASP의 enclave 서버 간의 통신은 모두 HTTPS 프로토콜을 사용하여 실행됩니다. 프로토콜에 따라 VerifyVASP central 서버가 각 VASP의 enclave 서버를 직접 API 호출을 하기 때문에 각 VASP는 enclave 서버의 public endpoint를 enclave 환경 변수 설정을 통해 VerifyVASP central 서버에 등록해야 합니다.

Enclave 환경 변수:

VEGA_ENCLAVE_PUBLIC_ENDPOINT : enclave 서버의 public endpoint 주소

  • 위 환경 변수는 enclave 서버의 public API endpoint를 VerifyVASP central 서버에 등록하기 위해 설정하는 환경 변수입니다.

  • 위 환경 변수는 필수로 설정해야 하는 환경 변수이며, “https://”로 시작하는 주소를 설정해야 합니다.

  • Https를 설정하는 방법은 인프라 환경에 따라 다르므로 각 환경에 맞는 설정 방법을 참고하시기 바랍니다.

Last updated