저자: Nic @ imToken Labs
대상 고객: 블록체인 개발자
사전 지식:
EIP-3074
▶ 더 나은, 더 안전한 경험
EIP-3074를 통해 EOA는 지정된 계약에 대한 제어권을 부여하여 계약과 동일한 풍부한 실행 기능을 확보할 수 있습니다.
EIP-3074 이전에는 ERC20을 승인하거나 유니스왑과 교환하는 등 전송 트랜잭션당 한 가지 작업으로 제한되었지만 EIP-3074를 사용하면 한 번에 여러 작업을 수행하거나 이전에는 상상할 수 없었던 용도로도 사용할 수 있습니다.
요컨대, EIP-3074를 사용하면 사용자 경험이 획기적으로 개선되고 현재 익숙한 인증 방식은 동일한 경험을 유지하면서 보안을 강화하도록 재구성될 것입니다.
그리고 EIP-3074를 사용하면 EOA는 더 이상 자체 트랜잭션을 체인에 전송할 필요가 없으며, 거래 수수료를 지불하기 위해 이더리움을 늘릴 걱정도 더 이상 할 필요가 없습니다.
▶ 인보커 컨트랙트
EOA가 EOA를 제어할 수 있는 컨트랙트를 인보커 컨트랙트라고 합니다. 이 컨트랙트를 인보커 컨트랙트라고 합니다. 물론 아무 컨트랙트나 EOA를 제어할 수 있는 것은 아닙니다. EOA는 개인 키로 서명되어야 하며, 서명은 어떤 인보커 컨트랙트인지와 인보커가 수행할 수 있는 작업을 지정합니다.
△EOA의 서명은 서명되는 인보커 컨트랙트(초기자 컨트랙트)를 지정합니다. 인보커 컨트랙트(인보커 주소) 및 해당 인보커 컨트랙트에 대해 승인된 커밋.
실제 실행 과정은 다음과 같습니다:
앨리스가 자신의 EOA 개인키로 인보커 컨트랙트에 서명한 다음, 내용과 서명을 릴레이어에게 전달합니다.
앨리스가 자신의 EOA 개인키로 컨트랙트에 서명한 다음 서명 내용과 자신의 인장을 릴레이어에게 전달합니다.
릴레이어는 실행을 위해 인발자 컨트랙트에 대한 업링크를 가져옵니다.
인발자는 서명을 검증하고 통과하면 USDC를 승인한 다음 유니스왑으로 이동하여 자산 스왑을 수행하고, 마지막으로 USDC 일부를 사용하여 릴레이어에게 수수료로 제공하는 등 EOA로서의 작업을 수행할 수 있습니다.
주1: 릴레이어가 필요하지 않으며, 앨리스가 자체 서명 콘텐츠와 씰을 체인에 가져올 수도 있습니다.
△인보커가 서명을 검증하고 시작하면 Invoker가 서명을 검증하고 작업을 시작하면, 마치 (제한적으로) EOA를 제어할 수 있는 것처럼 Alice EOA로 작업을 수행합니다.
그러나 실행해도 EOA의 논스 값이 증가하지 않으므로 동일한 서명을 재사용할 수 있으므로(EOA 논스가 변경되지 않는 한) Invoker는 재사용을 방지하기 위해 논스 메커니즘을 구현해야 합니다.
△ Invoker 컨트랙트가 리플레이 방지되지 않는 경우, 동일한 서명을 재사용할 수 있습니다(EOA 논스가 변경되지 않는 한). 컨트랙트가 리플레이 방지되지 않는 경우, 동일한 권한이 항상 실행될 수 있습니다.
더 알아보기
EIP-3074가 실제로 어떻게 작동하는지에 대한 설명은 https://medium.com/에서 확인할 수 있습니다. taipei-ethereum-meetup/eip3074-%E7%B0%A1%E4%BB%8B-2a880b918234
▶
배치콜
사용자가 여러 트랜잭션의 실행을 하나의 트랜잭션으로 결합하여 여러 번의 인증 서명이 필요 없고 일부 가스 비용이 발생하지 않도록 할 수 있습니다.
사용자가 여러 트랜잭션의 실행을 단일 트랜잭션으로 결합하여 여러 인증 서명의 필요성과 일부 가스 비용을 없앨 수 있습니다.
주: 이를 위해서는 디앱이 다음을 지원해야 합니다. 참고: 이를 위해서는 디앱이 현재 커뮤니티에서 추진 중인 EIP-5792와 같은 배치콜 기능도 지원해야 하며, 그렇지 않으면 디앱은 일반 EOA와 마찬가지로 각 작업에 대해 사용자에게 트랜잭션에 서명하라는 메시지를 표시할 것입니다.
EIP-5792에 대해 알아보려면 링크를 브라우저에 복사하세요: https://eips.ethereum.org/EIPS/eip-5792
.
세션 키
사용자는 또한 권한이 있는 제3자인 델리게이트 키와 실행 제한인 액세스 정책 등 특정 조건에서 제3자가 자신을 대신하여 작업을 수행하도록 허용할 수 있습니다. 델리게이트 키는 권한을 부여할 제3자이며, 액세스 정책은 유니스왑으로만 작업 제한, 하루 최대 1 ETH, 권한 만료일 등 시행할 제한 사항입니다.
이러한 조건은 인보커 계약 내에서 설계 및 확인되며, 이를 통과하면 제3자가 사용자 EOA로서 작업을 수행할 수 있습니다.
이 조건은 Invoker 컨트랙트 내에서 설계 및 확인됩니다. / /img.jinse.cn/7228581_image3.png">
△Telegram Bot은 사용자의 EOA를 대신하여 작업을 수행할 수 있는 특정 권한을 부여받을 수 있습니다.
네이티브 이더리움 허가
조건이 충족되는 한(즉, 허가서에 합법적으로 서명된 경우), 승인된 EOA로서 이더리움 전송을 수행할 수 있습니다. 네이티브 이더리움 허가 효과를 얻기 위한 이더리움 전송.
Limit 주문
사용자는 지정가 주문 조건을 입력하고 조건이 충족될 때까지 기다린 다음, 사용자 EOA 신원을 통해 관련 디지털 자산을 DEX에 승인하고 DEX 스왑 및 기타 작업으로 이동하는 등 수행해야 할 작업을 수행합니다. DEX의 자체 지정가 주문과 비교했을 때, 사용자는 사전에 승인을 위해 DEX에 거래를 전송할 필요가 없습니다.
△알리스가 주문을 완료하면 승인할 것이므로 미리 승인할 필요가 없습니다.
조건을 더 일반화하면, 사용자가 지정한 조건만 충족하면 누구나 승인할 수 있는 인텐트 컨트랙트와 같은 형태가 됩니다. 사용자가 지정한 조건이 충족되는 한 누구나 인텐트를 EOA로 실행할 수 있습니다.
△ 인텐트 조건만 충족하면 누구나 인텐트를 사용자의 EOA로 실행할 수 있습니다. 누구나 사용자의 EOA를 대신하여 실행을 시작할 수 있습니다.
소셜 복구
EOA 키를 분실한 사용자가 자신이 승인한 사람(H.E.O.A.)과 서명한 EIP-3074를 사용할 수 있도록 합니다. EIP-3074 승인은 권한이 있는 사람(남편 및 신탁 대리인)의 서명과 함께 사용자가 EOA 개인 키를 분실한 경우 EOA의 모든 자산을 이전할 수 있도록 합니다. 실제로 복구는 계정의 제어권이 아닌 자산을 복구하는 것이며, EOA 개인키를 분실하면 더 이상 EOA를 사용할 수 없습니다.
△ 사용자가 EOA 키를 분실하면 권한이 있는 다른 사람이 서명할 수 있습니다. 처음에 서명 권한을 받은 사람이 서명하여 EOA 자산 전송을 승인할 수 있습니다.
EIP-3074의 영향
▶ 자산 승인 방식이 개선됩니다.
댑은 현재 사용자가 EOA라는 가정 하에 설계되어 사용자가 충분히 많은 수의 자산을 디앱 컨트랙트에 승인하고 승인해야 합니다. 이렇게 하면 사용자가 항상 온라인 상태여야 하고, 디앱이 실행될 때까지 기다려야 하며, 승인 과정을 반복해서 반복할 필요가 없으므로 사용자 경험이 크게 개선됩니다.
예를 들어 지정가 주문이나 DCA와 같이 조건부로 트리거되는 앱에서는 조건이 충족될 때 사용자가 항상 온라인 상태가 아닐 수 있으므로 디앱 계약이 실행되려면 사전에 충분히 많은 수의 자산을 승인해야 하고, 이를 반복적으로 승인해야 할 수도 있습니다.
△사용자는 디앱 컨트랙트가 실행될 수 있도록 충분한 수의 자산을 승인해야 합니다. 디앱이 자금으로 디앱을 운영하기 위해서는 사전에 충분한 양의 자산을 승인해야 합니다. 가짜 디앱에 대한 승인과 실시간으로 승인을 취소할 수 있는 기능
또는 이후 허가 모델, 예를 들어 EIP-2612 또는 비네이티브 Permit2와 같은 허가 모델을 사용할 수 있습니다. Permit2는 모두 승인 모드의 경험과 보안을 개선하는 것을 목표로 합니다. 각 디앱 컨트랙트에 대량의 자산을 승인하는 대신(그리고 각 자산을 한 번씩 승인하는 대신), 사용자는 "지정된 기간" 내에 "지정된 양의 자산을 인출"하도록 디앱 컨트랙트에 "서명"만 하면 되므로 공격 횟수가 크게 줄어들 뿐만 아니라 컨트랙트에 대한 공격도 줄어듭니다. 이는 공격 표면을 크게 줄일 뿐만 아니라 사용자 경험도 크게 개선합니다.
자세한 정보
EIP-2612에 대한 자세한 내용은 아래 링크를 브라우저에 복사하세요: https://eips.ethereum. org/EIPS. org/EIPS/eip-2612
Permit2 자세한 내용은 다음 링크를 브라우저에 복사하세요:
https://medium. .com/taipei-ethereum-meetup/uniswap-permit2-introduction-858ae3dddf18
△사용자는 서명만 체인으로 연결하면 되고 자산 수와 유효 기간을 지정할 수 있어 승인보다 더 나은 경험과 보안을 제공합니다.
그러나 사실 승인뿐만 아니라, 피해자가 디앱을 위한 것이라고 생각하지만 실제로는 공격자에게 제공되는 것으로 잘못 서명하는 퍼밋 모델이 사기 공격의 수단으로 계속 악용되고 있는 것이 사실입니다.
△ 사용자가 퍼밋에 서명할 때, 사용자는 자신이 승인하는 사람만 볼 수 있습니다. 사용자가 권한에 서명하면 권한을 부여하는 사람만 볼 수 있을 뿐, 권한과 함께 어떤 작업을 수행할 수 있는지 알 수 없습니다.
주: 또한 현재 허가 디자인은 DCA 또는 기타 반복 결제 앱과 같이 반복적인 작업을 수행하는 디앱과 호환되지 않습니다. 이는 허가증에 재생 방지 메커니즘이 있어 한 번 송금한 후에는 동일한 허가증을 사용할 수 없으므로 향후 반복되는 작업마다 허가증에 미리 서명해야 하기 때문입니다.
더 알아보기
DApp에서 허가증을 본 것은 처음이며, 이런 경우는 이번만이 처음이 아닙니다.
퍼밋 모드가 사기 공격의 수단으로 악용된 사건에 대해 알아보려면 아래 링크를 브라우저에 복사하세요:
https://x.com/ realScamSniffer/status/1783027808723435727
https://x.com/realScamSniffer/status/ 1784932506174967970
https://x.com/realScamSniffer/status/1786738218962223226
그러나 EIP-3074는 변화의 기회를 가져옵니다: 디앱 개발자들이 EOA가 인보커를 통해 다양하고 복잡한 작업을 수행할 수 있다는 것을 알게 되면, 사용자 경험을 향상시키기 위해 디앱 상호작용의 설계가 더 이상 보안을 희생할 필요가 없습니다(예: "사용자가 대량의 자산을 미리 승인", "사용자가 허가서에 서명"). 예를 들어, 사용자가 대량의 자산을 미리 승인하거나 사용자가 인출을 승인하기 위해 허가 메시지에 서명하는 경우 등입니다.
대신, 사용자는 승인에 DApp 작업을 연결하고 인보커를 통해 원자 실행을 수행합니다: 승인과 DApp 작업이 함께 성공하거나 함께 실패하며 승인만 성공할 가능성은 없습니다. 승인은 단독으로 성공할 확률이 없으므로 사용자는 이 승인은 이 작업에 대한 승인임을 확신할 수 있습니다.
그리고 사용자가 오프체인 서명 인증을 사용하기 때문에 경험은 승인과 동일합니다! 이는 디앱이 더 이상 허가 모드가 필요하지 않다는 것을 의미합니다! 앞으로 지갑은 사용자가 특정 디앱을 사용하지 못하게 하는지(대신 사기에 악용되는지) 걱정할 필요 없이 허가 서명 요청을 차단하거나 면밀히 조사할 수 있게 될 것입니다.
△사용자는 더 이상 주소만 승인할 수 없습니다. 주소를 승인하고 해당 주소로 수행할 작업을 지정하고 시뮬레이션 결과까지 확인할 수 있습니다.
주: 사기가 완전히 제거되었다는 의미는 아닙니다! 사용자는 속아서 사기 웹사이트에 가입하여 자금을 승인하거나 이체할 수 있지만, 최소한 자신이 가입하는 내용을 확인할 수 있고 지갑은 시뮬레이션 결과를 표시하여 사용자에게 보여줄 수도 있으므로 사용자는 자신이 얼마나 많은 돈을 잃어버리고 얼마나 더 받고 있는지 정확히 알 수 있습니다. 어떤 작업이 수행되고 있는지, 심지어 그 결과조차 알 수 없는 허가와 비교할 때, 사용자는 승인 여부를 결정할 수 있는 더 많은 정보를 얻을 수 있습니다. 완벽한 통제는 아니지만 현재 상황보다는 극적인 개선이 될 것입니다.
▶ 월렛이 EOA 논스를 처리하는 방법
현재 EIP->3074는 EOA 논스를 처리하도록 설계되어 있습니다. 3074는 서명에 EOA 논스 값을 포함하도록 설계되었기 때문에 EOA가 논스 값을 변경하는 트랜잭션을 체인에서 실행하도록 전송하는 즉시 원래 EIP-3074 인증은 전체적으로 무효화됩니다.
사용자가 위에서 언급한 세션 키 또는 소셜 복구 방법과 같이 다른 사람에게 EOA를 대신 운영하도록 승인하는 경우, EOA 논스를 피하거나 모든 권한을 다시 서명하여 수탁자에게 전달해야 하며, 이는 사용자 경험과 메커니즘의 견고성을 위해 매우 중요한 일입니다. 이는 메커니즘의 경험과 견고성에 중대한 영향을 미칩니다.
사용자가 직접 작업을 승인하는 경우, 트랜잭션과 마찬가지로 EIP-3074 서명이 특정 기한까지 실행될 것으로 예상되므로 EOA 논스가 변경되는 것을 특별히 피할 필요는 없습니다. 단지 지갑이 해당 EOA에 대해 더 많은 EIP-3074 트랜잭션을 관리해야 할 뿐입니다. 업로드 대기 중인 EIP-3074 서명이 있다면, EOA 자체의 업로드된 트랜잭션도 기다려야 합니다.
주: Invoker 컨트랙트는 자체 논스 메커니즘을 유지하므로 EOA 논스의 변경 여부와 관계없이 서명이 사용된 후 다시 서명해야 합니다.
세션 키와 소셜 복구는 대규모로 채택되기 전에 EIP-3074가 서명에서 EOA 논스를 제거하도록 규칙을 변경할 때까지 기다려야 할 것입니다. 따라서 지갑은 "사용자 승인 작업" 시나리오에 집중하고 EIP-3074 서명을 트랜잭션으로 취급해야 하므로 EOA 전달 트랜잭션을 피하고 EOA 논스를 변경하는 것에 대해 걱정할 필요가 없습니다.
하지만 사용자가 자신의 EIP-3074 서명 콘텐츠를 체인에 업로드하려는 경우, 사용자는 자신의 EIP-3074 서명 콘텐츠를 체인에 가져와야 EOA 서명으로서 사용할 수 있다는 점에 유의하시기 바랍니다.
그러나 사용자가 자신의 EIP-3074 서명 콘텐츠를 체인에 가져오려면 두 가지 단점이 있습니다.
사용자는 EIP-3074 서명에 한 번, 업로드된 트랜잭션에 한 번, 두 번 서명해야 한다는 점에 유의하시기 바랍니다.
업링크된 트랜잭션은 트랜잭션 실행이 시작되기 전에 EOA 논스를 +1하기 때문에 사용자가 EOA 논스를 업링크했을 경우 +1되었을 EOA 논스와 일치하기 위해 EIP-3074 서명에 대한 사용자의 EOA 논스를 미리 +1해야 합니다.
사용자는 EIP-3074 서명과 업링크된 거래 서명 두 번 서명을 해야 합니다.
△ 자체 업로드는 EOA 논스에 +1을 추가하기 때문에 사용자의 EIP-3074 서명 EOA 논스는 자체 업로드에 따른 EOA 논스 +1과 일치하려면 반드시 1보다 앞서 있어야 합니다. EOA 논스 +1이므로 EIP-3074 서명 확인을 시작하면 EOA 논스가 올바르지 않아서 실패합니다.
△사용자는 EIP-3074 서명을 업로드하기 전에 EOA 논스를 추가하라고 언급했습니다. 업로드하기 전에 EOA 논스 +1의 3074 서명.
요약 및 주요 내용
EIP-3074는 EOA 에 계약만큼이나 풍부한 실행 기능에 대한 액세스를 제공하여 많은 새로운 애플리케이션 시나리오를 열어줍니다.
이것은 경험을 획기적으로 개선할 뿐만 아니라 현재 인증 방식을 변경하여 경험의 변화 없이 훨씬 더 안전하게 만들 것입니다.
그리고 EIP-3074는 간단한 서명이므로 사용자는 이를 실행하기 위해 자신의 서명을 체인화할 필요가 없으므로 수수료 지불을 위한 이더리움 확보에 대해 걱정할 필요가 없습니다.
EIP-3074의 사용에는 배치 콜, 세션 키, 네이티브 이더리움 허가, 제한 주문, 소셜 복구 등이 있으며, 이 중 다수는 EOA에서는 불가능합니다. 이 중 상당수는 EOA에서는 불가능하며, 지정가 주문과 같은 일부는 사전 승인 및 기타 안전하지 않은 방법을 사용해야 합니다.
EIP-3074는 현재의 승인 방식도 변경합니다. 퍼밋은 지정된 주소에 디지털 자산을 무기한 인출할 수 있는 권한을 직접 승인하고, 승인을 위해 사용자의 EOA가 거래를 전송해야 하기 때문에 사용 환경이 좋지 않고 안전하지 않습니다; 허가에는 사용자 서명만 필요하며, 각 서명은 자산 수와 만료일을 지정하므로 승인보다 사용 환경과 보안이 개선됩니다.
그러나 퍼밋은 여전히 사기에 자주 사용됩니다. 서명을 할 때 사용자는 어떤 주소, 자산 수, 유효 기간만 알 뿐, 어떤 용도로 사용하도록 승인하는지는 알 수 없습니다. "용도"는 또 다른 서명(또는 트랜잭션)이며, 일반적인 탈중앙 애플리케이션은 사용자에게 허가서와 "용도"에 모두 서명하도록 요청하지만, 여전히 두 개의 다른 서명이므로 사용자나 지갑 모두 허가서가 요청될 때 어떤 용도로 사용될지 알 방법이 없습니다.
EIP-3074를 사용하면 사용자는 (1) 사전에 대량의 자산을 디앱에 승인할 필요가 없고, 작업이 수행될 때 승인하는 것으로 퍼밋과 동일하며 (2) 간단한 서명일 뿐이며 수수료 지불을 위해 이더를 모을 필요가 없는 것으로 퍼밋과 동일하며 (3) 서명일 뿐이며 수수료 지불을 위해 이더를 모을 필요가 없는 것으로 퍼밋과 동일합니다. 효과는 승인과 동일하며, (2) 서명일 뿐이며 승인과 동일하게 수수료 지불을 위해 ETH를 모으거나 수수료를 지불할 필요가 없으며, (3) 각 승인은 지정된 작업에 연결되고 함께 서명되므로 사용자는 승인 내용을 정확히 알 수 있어 승인보다 더 안전합니다!
EIP-3074가 현재의 승인 및 허가 모드를 성공적으로 대체하고 사용자에게 보다 안전한 인증 방법을 제공할 수 있기를 기대합니다.