EIP-712 구조화 된 데이터 해싱 및 서명 설명

신원 확인을위한 이더 리움

암호화는 블록 체인 기술의 핵심입니다. 이더 리움의 ID는 공개-개인 키 쌍으로 표시됩니다. 이 키 쌍과 비대칭 암호화를 사용하여 트랜잭션의 출처와 무결성이 설정됩니다. 어떻게? 빨리 설명하겠습니다.

공개-개인 키 쌍이 있다고 가정 해 보겠습니다. 트랜잭션을 네트워크로 전송하는 동안 나는 먼저 개인 키를 사용하여 트랜잭션 페이로드 / 객체에 서명합니다. 이 서명은 고유 한 다이제스트를 생성합니다. 서명이라고 불리는 이유가 있습니다! 이제 내 거래가 합법적이고 내 스푸핑 된 신원, 내 공개 키에서 오는 것이 아닌지 확인하기 위해 내 공개 계정 주소를이 서명에서 복구 할 수 있습니다. 놀랍지 않나요?

하지만 누가 개인 키를 사용하여 트랜잭션 페이로드에 서명 할 수 있다고 말했습니까? 결국 ECDSA 암호화 알고리즘입니다. 동일한 개념을 확장하여 다른 유형의 객체 / 메시지에서 서명을 생성 할 수 있습니다. 이제 이것은 많은 응용 프로그램과 가능성에 대한 문을 열어줍니다. 사용자 신원을 인증하기 위해 임의로 생성 된 바이트 문자열에 서명 한 다음 서명을 확인에 사용할 수 있습니다.

한 가지 더 주목할 점은 서명과 검증이 이더 리움 네트워크와 상호 작용하지 않고도 완전히 오프 체인에서 이루어질 수 있다는 것입니다. ECDSA 서명 메시지의 서명 및 확인을 통해 블록 체인 외부에서 변조 방지 통신이 가능합니다.

기존 서명 체계의 단점

기존 메시지 서명 방식은 이더 리움 JSON-RPC 클라이언트가 노출하는 방식을 사용합니다. 접근 방식은 바이트 문자열의 서명 만 허용합니다. 이것은 분명히 사용자 경험을 엉망으로 만듭니다. 왜? 특히 eth_sign 메서드는 임의의 해시 서명을 허용하는 개방형 서명 방법입니다. 즉, 트랜잭션 또는 기타 데이터에 서명하는 데 사용할 수 있으므로 위험한 피싱 위험이 있습니다.

간단한 예로서 메타 마스크를 사용하여 임의의 문자열에 서명 해 보겠습니다. 브라우저 콘솔에 다음 스 니펫을 복사하여 붙여 넣습니다. 물론 메타 마스크가 설치 및 구성되어 있는지 확인하십시오.

서명하고자하는 문자열은‘ ‘이것은 서명 할 무작위 메시지입니다.’’였습니다. 이것은 16 진수 형식의 바이트 문자열로 변환되어 사용자에게 표시됩니다. 이것이 정확히 그 방법이기 때문에 트랜잭션은 이더 리움에서 서명되고 서명되는 바이트 문자열을 확인하지 않고 아무 것도 서명하지 않으면 까다 롭고 원하지 않는 시나리오가 발생할 수 있습니다. 정확히 그 이유는 메타 마스크가 빨간색 경고를 표시합니다.

EIP-712 및 eth_signTypedData

EIP-712는 데이터의 표준 구조와이 구조화 된 메시지에서 해시를 생성하는 정의 된 프로세스를 제안합니다. 이 해시는 서명을 생성하는 데 사용됩니다. 이렇게하면 트랜잭션 전송을 위해 생성 된 서명과 ID 확인 또는 기타 목적을 위해 생성 된 서명이 명확하게 구분됩니다. EIP-712 초안은 서명 계획의 동기를 다음과 같이 명시합니다.

온 체인 사용을위한 오프 체인 메시지 서명의 유용성을 개선합니다. 가스를 절약하고 블록 체인에서 트랜잭션 수를 줄임으로써 오프 체인 메시지 서명의 채택이 증가하고 있습니다. 현재 서명 된 메시지는 메시지를 구성하는 항목에 대한 컨텍스트가 거의없는 사용자에게 표시되는 불투명 한 16 진수 문자열입니다.

EIP-712는 바이트 문자열이 아닌 형식화 된 구조화 된 데이터의 해싱 및 서명을위한 표준입니다. 여기에는

마지막 요점이 보이십니까? 정확히 그 이유는 온 체인 메시지 검증이 매우 효율적이므로 최소한의 가스 만 필요합니다.

입력 데이터 란 무엇입니까?

유형 데이터는 유형 정보, 도메인 구분자 매개 변수 및 메시지 개체를 포함하는 JSON 개체입니다. 다음은 TypedData 매개 변수에 대한 json-schema 정의입니다.

Metamask를 사용하여 EIP-712 유형 데이터 서명

그러면 위의 JSON 스키마를 사용하여 서명 할 형식화 된 데이터 개체를 만들어 보겠습니다.

좋습니다.이 데이터에 서명하기 위해이 개체를 메타 마스크로 보내겠습니다.

메타 마스크는 서명을 요청하는 메시지를 엽니 다.

이 약속이 해결되면 메타 마스크는 다음과 같은 서명을 반환합니다.

이제 신원 및 소유권 증명과 관련된 일부 기능이 필요한 경우이 서명 체계를 활용할 수 있습니다.

EIP-712 유형 메시지 해시 생성

유형이 지정된 개체에서 유형이 지정된 해시를 생성하는 자바 스크립트 모듈을 만들었습니다. generateEip712Hash () 함수를 호출하고 유형이 지정된 개체를 매개 변수로 전달합니다. EIP-712 표준에 따라 유형이 지정된 개체의 해시를 반환합니다. 이 해시는 개인 키를 사용하여 서명하여 고유 한 서명을 생성 할 수 있습니다.

https://gist.github.com/ashwinYardi/90d2b8801c52a60796999c2642fa9550

EIP-712 서명 복구

서명 복구 란 정확히 무엇을 의미합니까? 간단히 말해서 원본 메시지 해시에 서명 한 후 서명이 생성됩니다. 서명과 원본 메시지 해시를 사용하여 서명자의 공개 키를 추출 할 수 있습니다. 멋지죠?

주소는 해당 공개 키의 Keccak 해시에서 가장 오른쪽에있는 160 비트 또는 20 바이트입니다. 따라서 특정 사용자가 개인 키 (일반적으로 Metamask와 같은 ID 저장소에 의해 보호됨)를 사용하여 고유 한 메시지에 서명하도록 한 다음 해당 공개 키 또는 주소를 사용하여 서명의 소유권과 유효성을 확인할 수 있습니다.

Metamask 팀은 서명을 복구하기 위해 API를 노출하는 eth-sig-utils 모듈을 개발했습니다. 메시지가 signTypedData_v4 메서드를 사용하여 서명 된 경우 recoverTypedSignature_V4 를 사용할 수 있습니다. 메시지가 signTypedData 메서드를 사용하여 서명 된 경우 recoverTypedSignature 를 사용할 수 있습니다.

이 기사에 제공된 메시지 서명 예제는 최신 EIP-712 사양에 따른 것이며 recoverTypedSignature_V4 를 사용해야합니다. 이 API는 다음 개체를 인수로 사용합니다.

좋아요! EIP-712 서명은 또한 스마트 계약을 통해 체인에서 확인하는 데 매우 효율적입니다. 다른 기사에서 어떻게 할 수 있는지 다루려고 노력할 것입니다. 좋은 물건! 따라서이 기사에서는 서명, 잠재적 인 단점, 기존 서명 체계와 관련된 위험, EIP-712가이 문제를 해결하는 방법 및 EIP-712 서명이 오프 체인에서 생성 / 복구되는 방식을 빠르게 살펴 보았습니다. 이 기사가 도움이되기를 바랍니다. 질문, 피드백 및 우려 사항이있는 경우 저를 쏘십시오. 조심하고 안전하게 지내십시오!

2020 년 10 월 9 일에 https://codingturtles.com 에 처음 게시되었습니다.