Web3에서 인증으로서의 서명

web3 앱과 상호 작용할 때 지갑에서 다음과 같은 서명 요청을 보았을 수 있습니다. 이 문서에서는 이 서명이 무엇이며 인증으로 사용되는 방법에 대해 설명합니다.



서명이란 무엇이며 무엇을 증명합니까?



암호화 서명은 서명자가 공용 주소에 대한 개인 키를 가지고 있음을 증명합니다. 이더리움 블록체인의 공개 주소는 앞에 0x가 추가된 계정을 제어하는 ​​공개 키에서 파생된 42자의 16진수 주소입니다. 예: 0x88c78f158cac85f17ecfc063259543c5dc345ef3. 누구나 공개 주소를 사용하여 계좌로 돈을 보내거나 계좌 활동 및 자산을 조회할 수 있습니다. 그러나 계정의 자산을 제어하려면 개인 키가 있어야 합니다.

MetaMask 및 Coinbase Wallet과 같은 Ethereum 지갑은 공개 키와 개인 키를 저장하고 개인 키에 직접 액세스하는 앱으로부터 보호합니다. 대신 앱은 Elliptic Curve Digital Signature Algorithm을 통해 주소의 소유권을 증명하는 암호화 서명에 의존하므로 외부 당사자가 개인 키를 몰라도 서명을 확인할 수 있습니다.

인증에 서명을 사용할 때의 이점



web3 앱에서 사용자의 이더리움 주소는 사용자를 식별하기 위해 점점 더 사용자 이름이나 이메일을 대체하고 있습니다. 그리고 사용자가 디지털 ID를 제어한다는 것을 인증하는 암호 대신 서명을 사용할 수 있습니다.

기존 Ethereum 계정을 활용하는 것은 web3 사용자를 온보딩하는 가벼운 방법입니다. 기존의 계정 생성 흐름보다 빠르며 사용자가 또 다른 암호를 생성하고 저장할 필요가 없습니다. 또한 이메일과 같은 개인 정보를 공개할 필요가 없기 때문에 사용자에게 더 많은 익명성을 허용합니다.

블록체인 트랜잭션과 달리 서명 생성 및 검증은 오프체인에서 수행할 수 있으므로 가스비가 필요하지 않습니다. 그리고 이더리움 주소에 대한 사용자의 제어를 증명하지만 향후 블록체인 트랜잭션에는 여전히 별도의 지갑 요청을 통해 명시적인 승인이 필요합니다.

하이브리드 앱에서 서명이 사용되는 방식



SnapshotOpenSea과 같은 일부 앱은 블록체인 데이터와 개인 데이터베이스의 데이터를 혼합하여 사용합니다. 이러한 앱은 기존 데이터베이스를 사용하여 투표(Snapshot 제안에 대한) 또는 NFT 선호(OpenSea는 사용자가 선호하는 NFT 저장)와 같은 오프체인 작업을 저장합니다. 사용자가 이더리움 지갑에 연결하도록 허용하기만 하면 되기 때문에 이러한 앱에 온보딩하는 것은 쉽습니다. 그러나 이러한 작업의 결과 또는 사용자에 대한 오프체인 세부 정보(예: 프로필 이름 및 사진)를 저장하려면 이러한 앱이 사용자의 디지털 신원을 인증해야 합니다.

예를 들어 OpenSea 프로필의 세부 정보를 변경하려면 사용자가 이 주소를 제어한다는 것을 증명하기 위해 인증해야 합니다.



서명 인증을 사용하는 앱의 경우 동일한 서명이 두 번 사용되지 않도록 하는 것이 중요합니다. 이것이 메시지가 다양하고 종종 nonce 을 포함하는 이유입니다.

서명 생성 및 확인 방법



이더스캔에서



지금 바로 서명하거나 서명을 확인하려면 Etherscan's Verified Signature tool을 사용할 수 있습니다.


지갑을 연결하고 메시지를 입력하십시오. 이 두 입력과 ​​개인 키는 고유한 해시를 생성합니다.


이 서명이 지갑 소유자로부터 온 것인지 확인하기 위해 다른 당사자는 검증할 주소 및 메시지와 함께 서명 해시를 입력할 수 있습니다.

프런트엔드 앱에서



web3 앱에서 서명을 요청하려면 프런트엔드에서 web3.js과 같은 라이브러리를 사용할 수 있습니다. 아래 코드 스니펫은 web3.js 메소드를 사용하여 signatureHash를 생성하는 방법과 이를 백엔드의 서명 확인 API에 전달하는 예를 보여줍니다.


const signatureHash = await web3.eth.personal.sign(message, address)
someSignatureVerificationAPI(message, address, signatureHash)



결론



Ethereum 주소가 계정 사용자 이름을 대체했기 때문에 서명이 암호를 대체했습니다. 암호화 서명은 사용자가 공용 주소에 대한 개인 키를 제어함을 증명하므로 안전한 인증 방법입니다. 앱은 이 가스 없는 이더리움 기본 요소를 사용하여 사용자가 주소에서 제공하는 디지털 ID를 제어할 수 있는지 확인하고 임의의 비web3 작업을 수행하기 위한 인증을 제공할 수 있습니다.

좋은 웹페이지 즐겨찾기