EIP-3074 도입 이후, 잘못된 서명으로 인해 이더리움 계정의 잔액이 고갈될 가능성이 있습니다. 실제로 이러한 우려는 현실입니다. 상황이 더 악화되기 전에 이 걱정을 일시적으로 해결해 보겠습니다.
첫째, 현재 접미사가 없는 데이터 서명을 지원하는 지갑이 없는 것으로 알고 있는데, 이는 현재 EIP-3074를 지원하는 지갑이 없다는 뜻입니다. 아무리 많은 대시보드를 탐색하거나 고급 기능을 활성화해도 현재 EIP-3074에 대한 메시지 서명은 불가능합니다.
디앱에 로그인하기 위해 서명하는 메시지는 EIP-3074와는 완전히 다른 표준인 EIP-191을 기반으로 합니다. 이 표준은 서명된 메시지에 다음 데이터를 추가합니다:
0x19 &t; 0x45 (E)&t;
그렇기 때문에 누군가가 디앱에 로그인하는 동안 유효한 이더리움 트랜잭션에 서명하도록 속이는 것은 불가능합니다. 트랜잭션은 접두사로 다음 바이트 값을 사용합니다:
0x01 - 2930 tx 0x02 - 1559 tx 0x03 - 4844 tx
자세한 내용은 다음을 참조하세요:이더리움 실행 사양
EIP-3074는 접두사 0x04를 사용할 계획입니다. 이렇게 하면 이더리움의 다른 모든 서명 가능한 데이터 유형과의 모호성을 제거할 수 있습니다. 지갑은 사용자가 이러한 메시지에 적극적으로 서명할 수 있도록 선택해야 합니다.
지갑이 EIP-3074를 통합하는 방식에 따라 사용자가 악용에 더 취약해질 수 있습니다. 이를 이해하려면 EIP-3074 서명의 작동 방식을 이해해야 합니다.
빌드 서명을 위한 인증 메시지에는 발신자 주소가 포함됩니다. 중요한 것은 이 주소가 AUTH에서 서명이 유효하다고 간주하는 유일한 주소라는 점입니다.
잔액이 고갈되는 계정의 경우 다음 두 가지 조건을 동시에 충족해야 합니다:
- 지갑은 사용자가 모든 발신자 주소에 서명할 수 있도록 허용해야 합니다.
- 사용자는 호출자가 신뢰할 수 있는지 여부를 확인하지 않아야 합니다. 이는 사용자가 다음 작업 중 하나를 수행해도 문제가 없음을 의미합니다.
즉, 이러한 작업 중 하나를 수행해도 그 자체로 문제가 발생하지 않습니다.
지갑 소프트웨어는 EIP-3074 호출자가 계약이라기보다는 지갑 소프트웨어 코드의 확장에 가깝다는 점을 이해해주시기 바랍니다. 지갑은 사용자가 임의의 코드를 자유롭게 실행하고 개인 키(pk)에 액세스하는 것을 허용하지 않으며, 마찬가지로 사용자가 이더리움 계정을 임의로 위임하는 것을 허용해서는 안 됩니다.
따라서 지갑 소프트웨어가 EIP-3074를 안전하지 않게 통합하고 사용자가 상호 작용하는 발신자를 확인하지 않으면 악의적인 발신자에게 위임할 수 있습니다. 그러나 EOA에서 단일 트랜잭션을 전송하여 진행 중인 모든 AUTH 서명을 취소하면 이를 취소할 수 있습니다.
지갑 소프트웨어는 최소한 EIP-3074 메시지 서명을 개인키 내보내기만큼 중요하게 생각해야 합니다. 지갑이 3074를 안전하게 통합한다고 가정해도 계정은 여전히 손상될 수 있습니다. 이는 배치 트랜잭션의 기본 속성입니다. 공격자가 사용자를 속여 통제된 주소로 자산 일괄 전송을 유도하는 것처럼, 일괄 전송을 사용하면 여러 작업을 쉽게 전송할 수 있습니다.
지갑 소프트웨어는 서명하는 각 작업을 명확하게 표시해야 합니다. 이렇게 하면 '나는 하나의 거래를 하려고 했는데 이 서명 요청으로 인해 여러 개의 거래가 발생했습니다'라는 사실을 쉽게 알 수 있으며, 블라인드 서명을 통해 처리하는 경우 이를 감지할 수 없습니다.
예, EIP-3074는 지갑에 상당한 신뢰를 부여합니다. 그러나 저희는 이미 개인 키로 지갑을 안전하게 신뢰하고 있으며, 이보다 더 높은 수준의 신뢰는 없습니다.
EIP-3074는 안전하게 통합하여 사용할 수 있습니다. 이를 구현하는 방법에 대해 궁금한 점이 있는 지갑이 있다면 언제든지 문의해주시기 바랍니다. 저희는 EIP-3074의 저자로서 현재 표준 개발의 다음 단계에서 어떻게 하면 가장 잘 지원할 수 있을지 고민하고 있습니다.
지난 몇 년 동안 저희는 이 기능을 사용하고 악용하는 방법에 대한 시나리오를 개발하는 데 상당한 시간을 투자했습니다. 이러한 아이디어가 프로덕션에서 구현되기 시작하게 되어 매우 기쁩니다. 하지만 이것이 가장 어려운 부분이라는 것도 잘 알고 있습니다.
요약하자면, EIP-3074 이후에는 잘못된 서명 한 번으로 이더리움 계정 잔액이 고갈될 수 있습니다:
- 현재 지갑은 새로운 형식을 따르는 EIP-3074에서 요구하는 서명 유형을 지원하지 않습니다.
- EIP-3074 서명의 발신자 필드는 매우 중요합니다. 악의적인 발신자가 자금을 도용할 가능성이 있기 때문입니다.
- 지갑은 발신자 주소가 신뢰할 수 있는지 확인해야 합니다. 이는 현재 지갑이 임의 코드의 실행을 방지하는 방식과 유사합니다.
- EIP-3074의 일괄 트랜잭션은 여전히 악의적인 공격자가 사용자를 속여 자산을 전송하는 트랜잭션에 서명하도록 유도할 수 있는 여지를 열어두고 있습니다. 지갑은 EIP-3074 메시지에 서명할 때 어떤 일이 발생하는지 명확하게 표시해야 합니다.
- 예, 지갑에 대한 신뢰도는 높지만 사용자들은 이미 지갑에 가장 높은 수준의 신뢰도인 개인키를 맡기고 있습니다.
EIP-3074 및 EIP-4337: EIP-3074는 계정 추상화 제공업체에 매우 유익하므로 고객에게 큰 도움이 됩니다.
ERC-4337은 신규 사용자를 암호화폐 공간으로 끌어들이는 가장 좋은 방법입니다. EIP-3074는 기존 사용자에게 스마트 계정을 소개하는 가장 좋은 방법입니다.