인증 체인
Decentraland 프로토콜의 많은 작업은 사용자의 이더리움 계정의 서명으로 인가받아야 하거나, 인가를 통해 이점을 얻습니다. 예를 들면:
새 버전 업로드 엔티티 소유한 것(예: 프로필).
제3자 서비스에 자신을 인증합니다.
대리인이 자신을 대신해 행동하도록 승인합니다.
이러한 작업을 수행하려면, 사용자와 대리인은 자신의 의도를 설명하는 페이로드에 서명하고 하나의 인증 체인.
소개
인증 체인은 일련의 검증 단계를 캡슐화하며, 각 단계는 이전 단계의 성공적인 검증에 의존합니다. 모든 제한된 작업이 수행되려면 검증자는 모든 단계를 유효하다고 간주해야 합니다.
모든 체인은 사용자 식별로 시작하여, 요청된 작업을 나타내는 서명된 페이로드로 끝납니다. 따라서 가장 작은 체인은 다음을 나타내는 두 요소를 포함합니다:
1. 권한 보유자는 이더리움 계정 <user-address>입니다
2. 페이로드는 <payload>이며, <user-signature>의 승인을 받았습니다이 기본 체인은 서명의 공개 키가 주소와 일치하는지 검증하여 평가할 수 있습니다. 이 경우, 일반 서명과 동일합니다.
사용자가 대리인의 대리 행동을 승인할 때, 중간 단계가 체인에 나타납니다. 예를 들어, 단일 위임이 있는 체인은 다음을 나타냅니다:
1. 권한 보유자는 이더리움 계정 <user-address>입니다
2. 대리인은 <delegate-address>이며, <user-signature>에 의해 <date>까지 승인되었습니다
3. 페이로드는 <payload>이며, <delegate-signature>의 승인을 받았습니다대리인이 자신의 대리인을 승인하면 체인은 더 길어집니다. 다시 말해, 승인은 전이적입니다.
이 단일 대리인 체인은 Decentraland에서 사용되는 가장 일반적인 승인 형태입니다. 사용자는 자신의 World Explorer용 키를 승인하여 이더리움 계정으로 개별 작업마다 서명해야 하는 번거로움을 피합니다.
체인 구성하기
인증 체인의 각 단계에는 세 가지 정보가 포함됩니다: 하나의 유형, 하나의 페이로드 및 이에 대응하는 서명.
첫 번째 단계: 식별
원래 권한 보유자(즉, 사용자)를 식별하는 첫 번째 단계는 다음 조건을 충족해야 합니다:
이
유형가SIGNER이
페이로드는 인코딩된 이더리움 계정입니다.이
서명는 비어 있습니다.
예를 들면:
두 번째 단계는 하나의 서명 이 계정에서 나온 페이로드.
중간 단계: 위임
대리인이 사용자를 대신해 행동할 때, 대리인 각각에 대해 체인의 중간에 항목이 추가됩니다. 이러한 단계의 조건은 다음과 같습니다:
유형은
ECDSA_EPHEMERAL이
페이로드는 특별히 구성된 텍스트입니다(아래 참조).
이 페이로드 는 읽기 쉽고 파싱하기 쉽도록 설계되었습니다. 인간(지갑 UI를 사용할 때)과 프로그램(작성하고 검증할 때) 모두 이를 다루어야 하기 때문입니다. 대소문자를 구분하는 일반 텍스트가 정확히 3줄 포함됩니다:
예를 들어, 이는 World Explorers가 로그인할 때 사용자에게 승인받을 임시 대리인 키를 생성할 때 사용하는 전형적인 페이로드입니다:
다음에 유의하세요:
이
임시 주소블록체인에서 자금이 있는 실제 이더리움 계정일 필요는 없습니다. 이 필드는 임시 공개 키만 나타낼 수 있습니다.이
만료는 다음 형식으로 직렬화된 날짜시간입니다: ISO-8601 형식입니다. UTC일 필요는 없습니다.이 만료일 때문에, 대리인 키는 주기적으로 사용자로부터 새 서명으로 갱신되어야 합니다.
설명을 위해 값을 줄인 예시 위임 단계:
다음 단계는 또 다른 위임이든 최종 승인 단계이든, 이 대리인의 키에서 나온 서명을 포함합니다.
마지막 단계: 승인
후에 SIGNER 가 지정되고 모든 ECDSA_EPHEMERAL 중간 서명 체인을 검증하여 대리인 키가 유효하다고 확인되면, 마지막 단계는 승인되어야 하는 실제 작업입니다.
이 페이로드 는 유형 의존합니다. 예를 들어, 사용자가 콘텐츠 서버에 새 프로필(또는 자신이 소유한 엔티티)을 업로드하는 경우, 마지막 요소는 다음 형식을 갖습니다:
이 마지막 서명도 유효하면, 작업을 진행할 수 있습니다.
체인 전송하기
앞서 언급했듯이, 인증 체인의 가장 일반적인 직렬화 형식은 JSON 배열입니다. 이것이 권장되는 접근 방식입니다.
그러나 프로토콜은 이를 강제하지 않습니다. YAML, CSV 파일, 최적화된 바이너리 형식 또는 구분된 필드가 있는 간단한 문자열처럼 특정 사용 사례에 더 편리하다면 개발자는 대체 직렬화 전략을 사용할 수 있습니다.
프로토콜 자체에서 대체 직렬화의 예는 SignedFetch 모듈에서 찾을 수 있으며, 여기서는 JSON 배열 대신 HTTP 헤더의 시퀀스를 사용합니다.
만료일 선택하기
대리인 키의 유효 기간을 선택할 때는 절충이 있습니다. 만료가 짧을수록 보안은 향상되지만, 만료가 길수록 사용자 경험은 좋아집니다(대리인은 사람의 상호작용을 통해 덜 자주 갱신하면 되기 때문입니다).
유효 시간 창을 어떻게 정할지에 대한 보편적인 전략은 없습니다. 참고로 재단의 World Explorer는 대리인 키에 대해 한 달 동안의 승인을 요청합니다.
정형화
다음은 관련 프로세스에 대한 보다 형식적이고 정확한 정의입니다. 인증 체인을 성공적으로 처리하려면 이 지침을 따르세요.
생성
사용자를 위한 인증 체인을 작성하는 클라이언트는 다음 단계를 따릅니다:
식별 단계를 추가합니다:
다음을
유형를SIGNER.다음을
페이로드사용자의 이더리움 주소로 설정합니다.다음을
서명빈 문자열로 설정합니다.
위임 단계를 추가합니다:
기존 대리인 개인 키를 생성하거나 사용합니다(상호작용이 필요할 수 있음).
대응하는 공개 키에서 파생된 대리인 이더리움 주소를 계산합니다.
다음을
유형를ECDSA_EPHEMERAL.다음을
만료를 미래의 날짜로 설정합니다.선택합니다
목적을 이 키에 대해.다음을
페이로드을 다음의 정확한 형식으로:다음을
서명필드를페이로드이전 키(사용자 또는 대리인)의 서명으로.모든 후속 대리인에 대해 반복합니다.
작업 승인 단계를 추가합니다:
다음을
유형을 유효한 값으로(아래 참조)다음을
페이로드을 유형별 값(예: 엔티티 ID)으로.다음을
서명필드를페이로드이전 키(사용자 또는 대리인)의 서명으로.
인증 체인을 검증자에게 보냅니다.
검증
검증을 구현하는 콘텐츠 서버와 제3자 서비스는 다음 단계를 따릅니다:
식별 검증:
확인하세요
유형가SIGNER.확인하세요
페이로드는 사용자의 이더리움 주소입니다.확인하세요
서명는 빈 문자열입니다.
대리인 검증:
확인하세요
유형가ECDSA_EPHEMERAL.확인하세요
페이로드는 다음 형식이며 필드를 추출합니다:확인하세요
날짜가 아직 미래입니다.확인하세요
목적는 귀하의 서비스에서 지원됩니다.확인하세요
서명는 주어진페이로드및 이전 공개 키에 대해 유효합니다.모든 후속 대리인에 대해 반복합니다.
작업 승인 검증:
확인하세요
유형는 유효한 값(아래 참조).확인하세요
페이로드은 이유형.확인하세요
서명는 주어진페이로드및 이전 공개 키에 대해 유효합니다.
인증 체인을 수락합니다.
표준 작업 유형 및 목적
이 유형 및 페이로드 식별 및 위임을 위한 값은 표준이며 위에서 설명한 대로 검증해야 하지만, 클라이언트와 서비스는 어떤 작업 유형, 그리고 그 페이로드 구조는 물론 목적 에 대해 자신들이 유효하다고 간주하는
프로토콜은 세 가지 표준 유형과 하나의 표준 목적을 정의합니다:
유형 SIGNER
반드시 초기 유형 체인의 페이로드 는 사용자의 이더리움 주소이며 서명 는 빈 문자열입니다.
유형 ECDSA_EPHEMERAL
반드시 이어야 합니다 유형 체인의 중간 단계에 대한 페이로드 는 위에서 설명한 형식입니다.
유형 ECDSA_SIGNED_ENTITY
마지막 유형 는 엔티티 배포 승인을 위한 체인에서 페이로드 는 사용자가 소유한 엔티티의 ID입니다.
목적 Decentraland 로그인
일반적인 목적 World Explorers용으로, 월드에 로그인할 때와 대리인 키를 갱신할 때 모두 서명됩니다.
마지막 업데이트