메시지 서명이란
서명에 대한 오해는 매우 많습니다. 이 글에서 저는 사용자들이 이더리움 네트워크나 다른 이더리움 가상 머신의 블록체인에서 메시지에 서명하는 것(때때로 가스비 없는 서명이라 불리는 것)에 관련된 위험을 이해하도록 메시지 서명의 네 가지 유형에 대해 다루고자 합니다.
서명의 네 가지 유형
이 서명 유형들은 웹3 세계의 모든 이더 관련자들이 반드시 이해해야만 하는 것입니다.
유형 1: 신분 증명 (안전함)
웹3에서 서명은 대부분 신분 증명을 위해 사용됩니다. 신분 증명을 위한 서명은 정해진 형태의 기준은 없지만, 일반적으로 이용 약관, 여러분의 지갑 주소, 그리고 재생 공격(replay attack)을 방지하기 위한 논스(nonce), 그리고 이따금씩 여러분이 소프트웨어 지갑으로 서명하는 메시지가 하드웨어 지갑에서도 동일한 것임을 확실히 하기 위한 짧은 스트링이 포함됩니다. 아래의 예시 몇가지를 보세요.


유형 2: 타이핑된 서명 [스마트 컨트랙트 상호작용] (주의요망)
스마트 컨트랙트의 일부가 실행되기 위해서는 종종 오프체인 서명이 필요합니다. 이러한 종류의 서명은 컨트랙트 상호작용의 일부가 될 모든 입력값을 분석합니다. 이것은 상당히 편리하지만, 여기서 여러분이 공개된 승인?을 가지고 있다면 여러분은 주의해야 합니다. 우리가 승인에 관한 글에서 설명했듯이, 여러분이 이 예시에서 그들이 무엇을 하려고 하는 지 정확히 알고 있다고 하더라도, 이러한 종류의 서명 요청을 보여주고 있는 출처가 표준인지 확실히 해야 합니다.
예를 들어, 여러분이 오픈씨 외부에서 pictured signature 승인 요청을 받았다면, 여러분은 매우 주의해야 하며 결코 그것에 서명해서는 안됩니다. 이것은 여러분이 “판매”용 지갑을 쓰고 있을 때 더욱 그러하며, 우리는 이에 대해 “모든 경우를 위한 지갑”이라는 글에서 설명했습니다.

유형 3: 복잡한 헥스(16진법) 서명 (각별히 주의요망!)
무언가가 위에서 본 EIP-712 표준과 일치하는 잘 타이핑된 서명을 가지고 있지 않다고 해서 그것이 스캠인 것은 아닙니다. 그러나, 여러분은 본질적으로 그 메시지에 “무조건(무지성) 서명”을 하고 있기 때문에 여러분이 서명하는 메시지가 어떤 종류이든 상대방을 신뢰하고 있음을 의미합니다. 씨포트(Seaport) 컨트랙트의 발전으로 요즘 오픈씨에서 이것이 악용되지는 않고 있지만, 여전히 저는 이러한 종류의 메시지에 서명하기 전에 잠시 멈추고 확인할 것입니다. 특히 open approval을 이용하는 지갑 주소를 사용하고 있다면 더욱이 그래야 합니다. 확신이 서지 않나요? 승인을 취소하는 것에 대한 우리의 글을 읽고 그 지갑 주소에서 열어두어야 하는 승인이 무엇인지 확인하세요!

유형 4: ETH_SIGN – 오래 되었고, 약간 무서운 것 (위험!)
이것은 아주 위험한 서명 유형으로, 쉽게 말해 이더리움의 “백지수표”입니다. 요청자는 이를 통해 여러분의 개인 키로 어떤 트랜잭션에든 서명할 수 있습니다. 좋은 소식은 메타마스크(Metamask)에서 이 요청이 들어오는 순간 아주 크고 빨간 경고 표시를 보여준다는 것입니다. 누군가가 서명 페이로드(payload) 적절하게 만들기만 하면, 이 서명은 그들이 스스로에게 ETH를 전송하는 등 스스로의 이익을 위해 트랜잭션을 “재생(replay)”할 수 있도록 실질적으로 허용합니다. 이것은 훔친 wETH나 NFT나 다른 토큰처럼 승인에 의존하지 않습니다. 이 서명 유형은 이런 종류의 위험을 지닌 유일한 유형이며, 어떤 서비스든 이것을 정당하게 쓰는 경우는 매우 드물기 때문에 가급적이면 무조건 피하는 것이 좋습니다.

업데이트: 메타마스크에서 ETH_SIGN은 기본적으로 비활성화(관련 깃헙: https://github.com/MetaMask/metamask-extension/pull/17308)되어 있다(고급 설정에서 활성화 가능)는 커뮤니티 피드백이 있어 여기에 남겨둡니다. 우리는 이것이 서명에 대해 메시지를 간결히 하고 공간을 아끼는 데 있어 대단히 큰 UI/UX적 성과라고 생각합니다.
또다른 자료들
우리는 이 글에서 몇 가지 기술 용어들을 간단히 썼지만, “잘못된 단어를 쓰고 있네!”라고 하기 전에 모든 사람이 이해할 수 있도록 구조를 간결히 하려 하고 있음을 알아주시길 바랍니다. 아래에 서명과 서명 유형, 그리고 그것들의 구현에 대해 더 자세한 자료들이 있습니다.
기술적인 것에 대한 더 많은 설명:
Can your wallet be drained simply by signing a message in Metamask?
Let's talk about it.
🧵👇— IOE (@CT_IOE) June 8, 2022
서명에 대한 유용한 글들:
웹3 보안에 대해 질문이 있거나 더 많은 것을 배우고 싶으신가요? 최신 보안 정보와 스캠, 전략들에 대해 꾸준히 정보를 얻고 싶나요? Boring Security 디스코드 서버에 가입해보세요.


