EIP-191은 서명할 데이터를 0x19, 버전 1바이트, 버전별 데이터, 서명 대상 순서로 이어 붙이게 합니다. 0x19로 시작하면 RLP로 해석되지 않아 이더리움 거래와 혼동되지 않습니다. 이 글은 2026-10-27에 연 EIP-191 원문(상태 Final)으로 확인한 범위만 다룹니다.
확인 기준일 2026-10-27 · 다음 확인 예정 2026-11-26
형식은 어떻게 생겼을까?
원문의 형식은 0x19 다음에 버전 바이트, 버전별 데이터, 서명 대상 데이터가 오는 구조입니다. 버전 바이트가 어떤 해석 규칙을 쓸지 알려 줍니다.
| 버전 | 원문 설명 |
|---|---|
| 0x00 | 지정된 검증자가 있는 데이터 |
| 0x01 | EIP-712에서 정한 구조화 데이터 |
| 0x45 (E) | personal_sign 메시지, 접두 문자열에 Ethereum Signed Message와 메시지 길이 포함 |
왜 하필 0x19일까?
원문은 첫 바이트 0x19가 서명 데이터를 유효한 RLP가 아니게 만들기 위한 것이라고 설명하고, 따라서 이 형식의 데이터는 이더리움 거래가 될 수 없다고 적습니다. 메시지 서명으로 거래를 몰래 승인시키는 일을 구조적으로 막는 장치입니다.
앱에서 보이는 서명은 어느 버전일까?
지갑의 개인 메시지 서명은 0x45 버전이고, 구조화 데이터 서명은 0x01입니다. 구조화 데이터는 EIP-712 타입 데이터 서명은 무엇을 사람이 읽게 만드는가 글에, 로그인 메시지는 이더리움으로 로그인(SIWE) 서명은 무엇을 승인하나: ERC-4361 메시지 읽는 법 글에 이어집니다.
personal_sign 메시지는 정확히 어떻게 이어 붙일까?
0x45 버전의 형식은 0x19, 바이트 0x45(글자 E), 문자열 thereum Signed Message:와 줄바꿈 및 메시지 길이, 서명할 데이터 순서입니다. 이어 읽으면 Ethereum Signed Message가 됩니다. 이 접두 덕분에 앱이 임의의 바이트열에 서명을 요청해도 결과가 거래 바이트열과 같아질 수 없습니다. 반대로 접두가 있다는 사실이 메시지 내용이 안전하다는 뜻은 아니므로, 지갑에 표시된 메시지 본문을 직접 읽어야 합니다. 이 EIP는 서명 형식만 다루고 본문 내용의 의미는 다루지 않습니다.
이 글에서 확인하지 못한 것은?
버전 0x00의 검증자 데이터가 실제 계약에서 어떻게 쓰이는지와 0x01 구조화 데이터의 세부 규칙은 EIP-712 문서에 있어 이번에 열지 않았습니다. 원문 일부는 문구가 어색하게 적혀 있어 접두 문자열은 열람한 표기를 그대로 옮겼습니다. 지갑마다 메시지를 보여 주는 방식이 다르다는 점도 이 문서가 다루는 범위가 아닙니다. 정리하면 EIP-191은 서명 데이터의 첫 두 바이트로 종류를 밝히는 약속입니다. 지갑에서 메시지 서명 요청을 받으면, 이것이 거래 승인이 아니라 접두가 붙은 메시지 서명이라는 점과 본문 문구를 함께 확인하는 것이 좋습니다.
자주 묻는 질문
personal_sign 서명으로 토큰을 보낼 수 있나요?
원문은 EIP-191 형식의 데이터가 이더리움 거래가 될 수 없다고 적습니다. 다만 서명이 담은 내용을 다른 계약이 승인으로 해석하는 경우는 이 EIP의 범위 밖입니다.
버전 0x01은 무엇인가요?
구조화 데이터를 서명하는 EIP-712가 쓰는 버전입니다.
0x45는 왜 E인가요?
원문은 접두 문자열의 첫 글자 E에 해당하는 값 0x45를 버전 바이트로 쓴다고 설명합니다.



