IVMS101 포맷 정의

IVMS101 공식 스펙 문서:

  • IVMS101에 대한 공식 스펙 문서는 다음 링크에서 다운로드할 수 있습니다.

  • IVMS101 표준은 향후 스펙이 업그레이드될 가능성이 있으므로 지속적으로 스펙 변경을 주시할 필요성이 있습니다.

IVMS101 (InterVASP Messaging Standards 101) 은 국제자금세탁방지기구(FATF)가 요구하는 Travel Rule을 충족하기 위해 VASP 들이 주고받아야 하는 송신자, 수신자 정보에 대한 표준 데이터 모델을 제공합니다.

VASP(가상 자산 서비스)를 수행하는 규제 당국, Travel Rule 솔루션 제공자가 주로 사용하도록 설계되었습니다.

현재 VerifyVASP를 비롯한 많은 Travel Rule 솔루션들이 메시징 프로토콜로 IVMS101을 채택하여 사용하고 있습니다. 이는 향후 Travel Rule 솔루션 간의 상호 운용이 가능하게 하는 최소한의 요구 사항이 될 것입니다.

따라서 VerifyVASP를 연동하고자 하는 각 VASP의 개발 및 운영 담당자는 IVMS101 스펙을 잘 숙지하여 사용해야 합니다.

용어 정의

용어
설명

beneficiary

가상 자산 전송 요청의 수령인으로 발신자에 의해 확인된 개인 또는 법인을 의미합니다.

beneficiary VASP

Originating VASP로부터 자금을 전달받아 수령인(beneficiary)이 해당 자금을 사용할 수 있도록 해주는 VASP, 즉 수령인을 속해있는 VASP를 의미합니다.

component

재사용 될 수 있는 한 개 이상의 요소로 구성된 복합 데이터 형식을 의미합니다.

constraint

데이터 내용이 생성되거나 수정될 때 데이터 형식, 요소, component 또는 엔티티에 적용되어야 하는 규칙이나 제한 사항

country

독자적인 정부를 가진 국가를 말합니다.

country subdivision

한 국가 안에서의 행정 구역을 말합니다.

data entity

데이터 모델에서 구별될 수 있는 단일 객체를 의미합니다.

datatype

요소가 나타낼 수 있는 데이터의 값의 형식을 말합니다.

element

data entity의 속성을 식별하는 역할을 하는, 정확한 의미를 가지는 데이터 단위를 말합니다.

intermediary VASP

originating VASP 와 beneficiary VASP 사이에서 가상 자산을 수신하고 재전송하는 일련의 모든 중간 VASP 들을 말합니다.

legal person

기업, 재단, 파트너십, 협회 등 자연인(개인)을 제외한 모든 형태의 법인을 말합니다.

natural person

유일하게 구별될 수 있는 개인, 한 사람을 말합니다.

originating VASP

originator로부터 가장 자산 전송 요청을 받아 가상 자산 전송을 시작하는 VASP, 즉 발신자가 속해 있는 VASP를 의미합니다.

originator

가상 자산을 전송하려고 요청을 하는 사람, 즉 발신자를 의미합니다.

recommendation

FATF 권고 사항을 의미합니다.

registration authority

관할 구역에서 법인에 대한 사업자 등록 또는 그에 준하는 공적 법인 증명서를 등록, 발급해 주는 기관을 말합니다. 즉, 국세청이나 금융 당국과 같은 기관을 지칭합니다.

transfer

개인 또는 법인을 대신하여 가상 자산을 한 계좌에서 다른 계좌로 이동시키는 거래를 수행하는 것을 말합니다.

virtual asset

디지털 방식으로 거래하거나 이전할 수 있으며 결제나 투자 목적으로 사용할 수 있는 디지털 가치 형태를 말합니다. 가상 자산은 FATF 권고안에서 이미 다루고 있는 금융자산, 증권 및 기타 금융자산의 디지털 형태는 포함하지 않습니다.

virtual asset service provider

거래소나 지갑 제공자와 같이 개인이나 법인을 대신하여 가상 자산을 보관 및 관리하거나, 가상 자산의 판매, 전송, 교환 등의 서비스를 제공하는 사업자를 말합니다.

표기법

  • IVMS101의 모든 entity 와 component 들은 upper camel case 표기법을 따릅니다. 중간에 빈칸은 없으며 첫 글자는 대문자로 시작합니다.

  • IVMS101의 모든 element 들은 lower camel case 표기법을 따릅니다. 중간에 빈칸은 없으며 첫 글자는 소문자로 시작한다.

  • Datatype 은 upper camel case 표기법을 따릅니다.

  • Entity 나 component, element를 지칭하는 이름이 데이터 형식을 제한하지는 않습니다. 즉 이름에 number가 들어갔다고 해서 반드시 숫자만 써야 하는 것은 아닙니다.

  • IVMS101의 스펙에서의 모든 값(value)는 특별한 언급이 없으면 대소문자를 구분하지 않습니다.

표기 언어

  • 데이터는 반드시 UTF-8 인코딩을 사용해야 합니다.

  • 달리 명시되지 않으면, 데이터는 라틴 문자(A-Z, a-z)와 숫자(0-9)로 표현해야 합니다.

  • 라틴 문자(알파벳)를 사용하지 않는 국가의 데이터는 다음 중 한 가지 방법으로 처리해야 합니다.

    • 라틴 문자로 음역(Transliteration) 합니다.

    • 국제 사회에서 더 널리 알려진 언어로 번역합니다.

  • element 이름에 ‘local’ 이 붙은 항목은 해당 국가 언어를 사용하여 기입해도 됩니다.

  • 아래의 문자들은 명시된 해당 표준을 사용하여 라틴 문자(알파벳)으로 음역(Transliteration) 되어야 합니다.

Script
Standard

Arabic (Arabic language)

ISO 233-2:1993

Arabic (Persian language)

ISO 233-3:1999

Armenian

ISO 9985:1996

Cyrillic

ISO 9:1995

Devanagari & related Indic

ISO 15919:2001

Han (Hanzi, Kanji, Hanja)

ISO 7098:2015

Hebrew

ISO 259-2:1994

Georgian

ISO 9984:1996

Greek

ISO 843:1997

Kana

ISO 3602:1989

Korean

Revised Romanization of Korean

Thai

ISO 11940-2:2007

Data Type

component (복합 데이터 타입)

Person type

{
  "naturalPerson": { // [optional] person이 개인임을 나타냅니다.
    ... // NaturalPerson type
  },
  "legalPerson": { // [optional] person이 법인임을 나타냅니다.
    ... // LegalPerson type
  },
}
  • naturalPerson이나 legalPerson 둘 중에 하나는 있어야 합니다.

NaturalPerson type

{
  "name": { // [required] 개인의 이름
    ... // NaturalPersonName type
  },
  "geographicAddress": [ // [0개 이상 배열] 개인의 지리적 주소
    { ... } // Address type
  ],
  "nationalIdentification": { // [optional] 개인의 국민 식별 번호
    ... // NationalIdentification type
  },
  "customerIdentification": "xxx", // [optional] 개인의 고객 번호, Text type
  "dataAndPlaceOfBirth": { // [optional] 개인의 생년월일과 출생지
    ... // DataAndPlaceOfBirth type
  },
  "countryOfResidence": "KR", // [optional] 개인의 거주 국가, CountryCode type
  "nationality": "KR" // [optional] 개인의 국적, CountryCode type
}
  • 이름은 무조건 1개 이상 들어가야 하며, 이름 중에 1개는 무조건 법적 이름(LEGL 타입)이 들어가야 합니다.

  • 개인 (natural person) 은 개인을 유일하게 식별할 수 있도록 이름 이외에 다음 요소 중 1개는 꼭 들어가야 합니다.

    • geographicAddress with GEOG or HOME or BIZZ address type

    • customerIdentification

    • nationalIdentification

    • dataAndPlaceOfBirth

  • geographicAddress 나 countryOfResidence 요소에 들어가는 국가는 ‘ISO-3166-1 alpha-2’ 표준에 있는 2글자 국가 코드를 기입해야 합니다.

  • geographicAddress에는 다음 중 하나의 조합은 반드시 들어가야 합니다.

    • 적어도 1개의 addressLine

    • streetName 과 buildingName

    • streetName 과 buildingNumber

LegalPerson type

{
  "name": { // [required] 법인 이름
    ... // LegalPersonName type
  },
  "geographicAddress": [ // [0개 이상 배열] 법인 주소
    { ... } // Address type
  ],
  "customerIdentification": "xxx", // [optional] 법인 고객 번호, Text type
  "nationalIdentification": { // [optional] 법인 국가 식별 번호
    ... // NationalIdentification type
  },
  "countryOfRegistration": "KR", // [optional] 법인 등록 국가
  "dateOfIncorporation": "2019-03-27" // [optional] 법인 설립일
}
  • 법인명은 무조건 1개 이상 들어가야 하며, 법인명 중에 1개는 무조건 법적 이름(LEGL 타입)이 들어가야 합니다.

  • 법인 (legal person) 은 법인을 유일하게 식별할 수 있도록 법인명 이외에 다음 요소 중 1개는 꼭 들어가야 합니다.

    • geographicAddress with GEOG or HOME or BIZZ address type

    • customerIdentification

    • nationalIdentification

  • geographicAddress 나 countryOfRegistration 요소에 들어가는 국가는 ‘ISO-3166-1 alpha-2’ 표준에 있는 2글자 국가 코드를 기입해야 합니다.

  • geographicAddress에는 다음 중 하나의 조합은 반드시 들어가야 합니다.

    • 적어도 1개의 addressLine

    • streetName 과 buildingName

    • streetName 과 buildingNumber

NaturalPersonName type

{
  "nameIdentifier": [ // [1개 이상 배열] 기본적인 이름 항목
    { ... } // NaturalPersonNameID type
  ],
  "localNameIdentifier": [ // [0개 이상 배열] 각 나라의 언어로 표현된 이름
    { ... } // LocalNaturalPersonNameID type
  ],
  "phoneticNameIdentifier": [ // [0개 이상 배열] 발음되는 대로 표현한 이름
    { ... } // LocalNaturalPersonNameID type
  ]
}
  • nameIdentifier 중 하나는 반드시 LEGL (법적 이름) 타입의 이름이어야 합니다.

LegalPersonName type

{
  "nameIdentifier": [ // [1개 이상 배열] 기본적인 이름 항목
    { ... } // LegalPersonNameID type
  ],
  "localNameIdentifier": [ // [0개 이상 배열] 각 나라의 언어로 표현된 이름
    { ... } // LocalLegalPersonNameID type
  ],
  "phoneticNameIdentifier": [ // [0개 이상 배열] 발음되는 대로 표현한 이름
    { ... } // LocalLegalPersonNameID type
  ]
}
  • nameIdentifier 중 하나는 반드시 LEGL (법적 이름) 타입의 이름이어야 합니다.

NaturalPersonNameID type **** (LocalNaturalPersonNameID 도 동일)

{
  "primaryIdentifier": "Din", // [required] 성, family name, last name
  "secondaryIdentifier": "James", // [optional] 이름, first name, forename
  "nameIdentifierType": "LEGL" // [required] 이름 타입, 종류
}
  • nameIdentifierType에는 다음과 같은 값이 들어갈 수 있습니다.

    • ALIA : 법적 이름과 별도로 잘 알려진 alias name

    • BIRT : 태명

    • MAID : 결혼으로 성을 바꾸기 전에 사용하던 원래 이름

    • LEGL : 법적으로, 공식적으로 등록된 이름

    • MISC : 위 카테고리로 표현할 수 없는 기타 이름

  • 성과 이름으로 나누기 어려운 경우에는 primaryIdentifier에 전체 이름을 기입해도 무방합니다.

LegalPersonNameID type **** (LocalLegalPersonNameID 도 동일)

{
  "legalPersonName": "Samsung Electronics Co., Ltd.", // [required] 법인 이름
  "legalPersonNameIdentifierType": "LEGL" // [required] 이름 타입, 종류
}
  • legalPersonNameIdentifierType에는 다음과 같은 값이 들어갈 수 있습니다.

    • LEGL : 법적으로, 공식적으로 등록된 이름

    • SHRT : 짧게 줄여서 부르는 이름

    • TRAD : 기업이 상업적 목적으로 사용하는 명칭

Address type

{
  "addressType": "GEOG", // [required] 주소 타입, 종류
  "department": "xxx...xxx", // [optional] 대규모 조직 또는 건물의 부서 식별자
  "subDepartment": "xxx...xxx", // [optional] 대규모 조직 또는 건물의 하위 부서 식별자
  "streetName": "xxx...xxx", // [optional] 거리 이름
  "buildingNumber": "xxx...xxx", // [optional] 건물 번호
  "buildingName": "xxx...xxx", // [optional] 건물 이름
  "floor": "xxx...xxx", // [optional] 건물 내에서의 층 번호
  "postBox": "xxx...xxx", // [optional] 사서함 번호
  "room": "xxx...xxx", // [optional] 건물의 방 번호
  "postcode": "xxx...xxx", // [optional] 우편 번호
  "townName": "xxx...xxx", // [optional] 마을 이름
  "townLocationName": "xxx...xxx", // [optional] 마을 내의 특정 위치 이름
  "districtName": "xxx...xxx", // [optional] 지역 구 이름 (강남구, 서초구 등)
  "countrySubDivision": "xxx...xxx", // [optional] 주, 도 이름 (더 큰 행정구역)
  "addressLine": ["xxx", "xxx"], // [0 to 7 배열] 특정 주소를 식별할 수 있는 자유 주소
  "country": "KR" // [required] 거주 국가
}
  • 다음 중 하나의 조합은 반드시 들어가야 합니다.

    • 적어도 1개의 addressLine

    • streetName 과 buildingName

    • streetName 과 buildingNumber

  • addressType에는 다음과 같은 값이 들어갈 수 있습니다.

    • HOME : 집 주소

    • BIZZ : 직장 주소

    • GEOG : 지리적 주소

  • 도, 도시, 거리 이름 등으로 주소를 나누기 힘든 경우에는 addressLine에 전체 주소를 한 개의 문자열로 기입해도 무방합니다.

DateAndPlaceOfBirth type

{
  "dateOfBirth": "YYYY-MM-DD", // [required] 출생 연월일
  "placeOfBirth": "Gangnam-gu Seoul" // [required] 출생지(마을, 도시, 주, 국가 등)
}

NationalIdentification type

{
  "nationalIdentifier": "198723-8971987", // [required] 국민(법인) 식별 번호
  "nationalIdentifierType": "SOCS", // [required] 식별 번호 종류
  "countryOfIssue": "KR", // [optional] 식별 번호 발급 국가
  "registrationAuthority": "RA0000099" // [optional] 식별 번호 발급 기관 코드
}
  • nationalIdentifierType에는 다음과 같은 값이 들어갈 수 있습니다.

    • ARNU : 외국인 번호 (국가에서 외국인을 식별하기 위해 외국인에게 부여한 번호)

    • CCPT : 여권 번호

    • RAID : (법인의 경우에만) 법인 등록 기관에 의해 부여된 번호, 사업자 등록 번호

    • DRLC : 운전면허 번호

    • FIIN : 외국인 투자자 번호 (외국인 투자자에게 할당된 번호)

    • TXID : 과세 당국에 의해 부여된 번호

    • SOCS : 사회 보장 기관에서 부여한 번호, 주민 등록 번호

    • IDCD : 국가 기관에 의해 할당된 ID 카드 번호

    • LEIX : (법인의 경우에만) ISO 17442 표준에 따라 할당된 글로벌 법인 식별 기호, LEI 코드

    • MISC : 기타 위에 정의되지 않은 국가 식별 번호 타입

  • countryOfIssue에는 ‘ISO-3166-1 alpha-2’ 표준에서 정의하는 2글자 국가 코드를 기입해야 합니다.

  • registrationAuthority에는 ‘Global Legal Entity Identifier Foundation (GLEIF)’에서 관리하는 발급 기관의 코드를 기입해야 합니다.

    • (’RA’ + 6자리 숫자로 구성된 8글자 코드)

  • 법인의 경우에는 다음 조건을 모두 만족시켜야 합니다.

    • nationalIdentifierType에는 ‘RAID’, ‘LEIX’, ‘TXID, ‘MISC’ 중에 하나를 기입해야 합니다.

    • nationalIdentifierType이 ‘LEIX’ 가 아닌 경우, ‘registrationAuthority’를 기입해야 합니다.

    • nationalIdentifierType이 ‘LEIX’ 인 경우, 'registrationAuthority’를 기입하지 않아야 합니다.

    • countryOfIssue 항목을 기입하지 않습니다. (개인인 경우에만 기입)

    • nationalIdentifierType이 ‘LEIX’ 인 경우, ‘nationalIdentifier’ 항목은 20자리 LEIX 코드를 기입해야 합니다.

IntermediaryVASP type

{
  "intermediaryVASP": { // [required] 가상 자산 전송 시 중간에 거쳐가는 VASP에 대한 정보
    ... // Person type
  },
  "sequence": 0 // [required] VASP가 전송 과정에서 몇 번째 intermediary VASP 인지
}
  • sequence 값은 0부터 시작해서 마지막 intermediary VASP까지 차례대로 증가하는 값이어야 합니다.

Data Model

전체 IVMS101 데이터는 크게 다음의 6가지 data entity로 구성되어 있습니다.

{
  "Originator": { // [required] 발신자 정보
    ... // Originator model
  },
  "Beneficiary": { // [required] 수신자 정보
    ... // Beneficiary model
  },
  "OriginatingVASP": { // [optional] 송신 VASP 정보
    ... // OriginatingVASP model
  },
  "BeneficiaryVASP": { // [optional] 수신 VASP 정보
    ... // BeneficiaryVASP model
  },
  "TransferPath": { // [optional] 가상 자산 전송 중간에 거쳐가는 VASP 정보
    ... // TransferPath model
  },
  "PayloadMetadata": { // [optional] 기타 메타 데이터
    ... // PayloadMetadata model
  }
}

Originator model

{
  "originatorPersons": [ // [1개 이상 배열] 가상 자산 전송 요청자(송신자) 정보
    { ... } // Person type
  ],
  "accountNumber": [ // [0개 이상 배열] 트랜잭션에 사용되는 계정의 식별자 (ex. 지갑 주소)
    "xxxxxxx" // Text type
  ]
}
  • accountNumber 항목은 대소문자를 구분합니다.

Beneficiary model

{
  "beneficiaryPersons": [ // [1개 이상 배열] 가상 자산 수신자 정보
    { ... } // Person type
  ],
  "accountNumber": [ // [0개 이상 배열] 트랜잭션에 사용되는 계정의 식별자 (ex. 지갑 주소)
    "xxxxxxx" // Text type
  ]
}
  • accountNumber 항목은 대소문자를 구분합니다.

OriginatingVASP model

{
  "originatingVASP": { // [optional] 가상 자산을 보내는 VASP의 정보
    ... // Person type
  }
}
  • 현재 VerifyVASP에서는 originatingVASP 정보는 VV central server에서 검증 요청 처리 과정에서 자동으로 채워줍니다.

  • 따라서 각 VASP에서 전송 요청 시 originatingVASP 항목은 IVMS101 구조체에 넣지 않아도 됩니다.

BeneficiaryVASP model

{
  "beneficiaryVASP": { // [optional] 가상 자산을 받는 VASP의 정보
    ... // Person type
  }
}
  • 현재 VerifyVASP에서는 beneficiaryVASP 정보는 VV central server에서 검증 요청 처리 과정에서 자동으로 채워줍니다.

  • 따라서 각 VASP에서 사용자 검증 시 beneficiaryVASP 항목은 IVMS101 구조체에 넣지 않아도 됩니다.

TransferPath model

{
  "transferPath": [ // [0개 이상 배열] 전송 과정에서 거쳐가는 VASP 들에 대한 정보
    { ... } // IntermediaryVASP type
  ]
}
  • 현재 VerifyVASP에서는 TransferPath 설정은 지원하지 않습니다.

PayloadMetadata model

{
  "transliterationMethod": [
    // [0개 이상 배열] 지역 문자 체계(한글 등)을 라틴 문자 체계(알파벳)으로 변경하는 데 사용되는 방법
    "kore"
  ]
}
  • transliterationMethod는 한글과 같이 latin 문자(알파벳)이 아닌 문자를 latin 문자로 변경하기 위한 방법을 기입합니다. 다음 중 하나를 기입할 수 있다

Last updated