EIP-55는 이더리움 주소에 대소문자 혼합 체크섬(mixed-case checksum)을 적용하는 인코딩 방식을 정의합니다. 이더리움 주소는 16진수로 표현되기 때문에 대소문자가 의미 없어 보이지만, EIP-55는 특정 규칙에 따라 대소문자를 배치하여 오타를 감지할 수 있게 합니다. 지갑이 체크섬이 잘못된 주소를 입력하면 경고를 표시할 수 있습니다.
왜 체크섬이 필요한가
이더리움 주소는 40자리 16진수 문자열(0–9, a–f)입니다. 대소문자를 구별하지 않으므로 0xABCD...와 0xabcd...는 동일한 주소입니다. 이 때문에 한 글자만 잘못 입력해도 완전히 다른 주소가 될 수 있고, 잘못 입력된 주소로 자산을 전송하면 복구가 불가능합니다. 체크섬 인코딩은 추가적인 정보를 대소문자에 숨겨 입력 오류를 탐지할 수 있게 합니다.
알고리즘: keccak256 기반 대소문자 결정
① 주소의 소문자 16진수 문자열(0x 제외, 40자)을 keccak256으로 해싱합니다. ② 원래 주소의 각 문자를 순서대로 확인합니다. 문자가 숫자(0–9)이면 그대로 둡니다. ③ 문자가 영문자(a–f)인 경우 해시값의 해당 위치 니블(4비트)이 8 이상이면 대문자로, 8 미만이면 소문자로 씁니다. 결과적으로 16진수 영문자 중 약 절반이 대문자가 됩니다.
예시
주소: 0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359 소문자 주소를 keccak256으로 해싱한 뒤 각 영문 자리의 nibble을 확인합니다. 결과: 0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5D359. 이 체크섬 주소는 한 글자만 틀려도 keccak256 해시가 맞지 않으므로 지갑이 "잘못된 체크섬 주소"라고 경고할 수 있습니다.
오류 탐지 확률
무작위로 잘못된 주소를 입력했을 때 체크섬 검증을 통과할 확률은 약 0.0247%(1/4096)입니다. 즉 99.97% 이상의 단순 오타는 지갑이 탐지할 수 있습니다. 이는 은행 계좌번호의 체크 디지트와 유사한 역할을 합니다. 완벽한 보안 수단은 아니지만 인간 실수로 인한 자산 손실을 크게 줄여줍니다.
지원 현황과 한계
MetaMask, MyEtherWallet, Etherscan 등 주요 이더리움 도구는 EIP-55 체크섬을 지원합니다. 단, 이 체크섬은 주소가 실제로 존재하는지, 컨트랙트인지 EOA인지를 알려주지 않습니다. 또한 ENS 이름이나 다른 체인의 주소 형식에는 적용되지 않으며, EIP-55 이전의 도구들은 소문자 주소만 사용하므로 하위 호환성을 위해 소문자도 여전히 유효한 주소로 처리해야 합니다.