---
title: "RIP-7212란? secp256r1 곡선 지원을 위한 Precompile"
description: "RIP-7212는 precompiled contract를 통해 저렴하고 안전하며 빠른 P256 곡선 검증을 가능하게 하는 Ethereum 프로토콜의 핵심 변경 사항입니다."
---

# RIP-7212란? secp256r1 곡선 지원을 위한 Precompile

<ImageBlock
  src="https://media.alchemy.com/1709769768-what-is-rip-7212.jpg"
  alt="RIP-7212 secp256r1 프리컴파일 설명 배너"
  width={3200}
  height={1800}
  priority
/>

[Account Abstraction](https://www.alchemy.com/overviews/what-is-account-abstraction)은 Ethereum 계정에 계정 프로그래밍 가능성이라는 중요한 기능을 도입했습니다. 이를 통해 개발자들은 일일 지출 한도 설정, 다양한 서명자 사용, 임의의 토큰으로 수수료 지불 등 수천 가지의 새로운 기능을 만들 수 있습니다. 이 글에서는 롤업에 곧 통합될 [RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md)\(이전 명칭은 EIP-7212\)를 통해 생체 인증 서명자 사용을 가능하게 함으로써 개발자들이 어떻게 사용자 경험을 개선할 수 있는지에 초점을 맞춥니다.

## 현재의 Ethereum 서명 방식
**대부분의 기본 계정이 외부 소유 계정\(EOA\)인 EVM 네트워크에서는,** 소유권이 타원 곡선 암호화\(ECC\)를 통해 증명됩니다. 이는 키를 노출하지 않으면서 해당 키를 소유하고 있고 메시지가 그 키로 서명되었다는 것을 신뢰 없이 증명하는 방식입니다.

현재 사용자들이 자금을 관리하는 방식은 자체 커스터디 지갑\(예: 시드 문구 형태로 키를 저장\)이거나 커스터디 솔루션\(예: 키 관리를 제3자에게 신뢰하는 방식\)입니다.

한편, 수십 년간의 웹2 보안 연구를 통해 검증된 하드웨어-소프트웨어-소셜 스택 기반의 개인 키 관리 방식이 정립되었습니다. 그 결과, 최신 기기들은 사용자의 키를 보호하도록 설계된 보안 하드웨어 요소를 갖추고 있습니다. 그러나 이들은 Ethereum이 현재 지원하는 secp256k1 타원 곡선을 지원하지 않습니다. 따라서 이러한 보안 모범 사례를 EOA에 적용할 방법이 없습니다.

스마트 컨트랙트 계정은 secp256k1\(Ethereum의 유일한 네이티브 곡선\) 외의 타원 곡선을 포함한 다양한 인증 메커니즘을 지원합니다. 생체 인증 서명자와 같은 다른 인증 메커니즘을 사용하면 사용자 경험이 개선되고 보안이 강화됩니다. 이 섹션에서는 이러한 보안 엔클레이브가 어떻게 작동하는지, 그리고 스마트 계정과 결합되었을 때 어떤 모습인지 설명합니다.

## 일상 기기의 보안 엔클레이브: 휴대폰 속 하드웨어 지갑
거의 모든 최신 기기는 칩 설계에 [Trusted Execution Environment](https://en.wikipedia.org/wiki/Trusted_execution_environment)\(TEE\)라는 것을 내장하고 있는데, 이는 사용자의 가장 민감한 데이터를 보호하는 역할을 하도록 특별히 설계된 고급 하드웨어 요소입니다.

예를 들어, 모든 Apple 제품에는 2013년부터 Secure Enclave라는 TEE가 포함되어 있습니다. 앱 프로세스부터 알림까지 다양한 작업을 처리하는 기기의 다른 부분과 달리, TEE는 기기의 다른 모든 구성 요소로부터 분리된 별도의 마이크로칩입니다. 이러한 분리를 통해 생체 정보 및 암호화 키와 같은 민감한 데이터가 기기의 다른 부분을 위협할 수 있는 잠재적 요소로부터 격리됩니다. TEE를 활용하는 것은 최신 기기에서 키를 저장하는 가장 안전한 방법이며, 이를 통해 일상 기기를 생체 인증을 통해서만 접근 가능한 하드웨어 지갑으로 사실상 전환할 수 있습니다.

### TEE를 스마트 계정과 함께 사용하는 방법은?

보안 엔클레이브는 사용자가 TEE 내부에서 키를 생성하고 이 키로 임의의 메시지에 서명할 수 있게 해줍니다. 이는 바로 우리가 온체인에서 검증하기 위해 필요한 것입니다. TEE 내부에 존재하는 개인 키에서 파생된 소유자를 가진 스마트 계정을 만들 수 있습니다. 이러한 키는 기기를 절대 벗어나지 않으며 생체 인증 덕분에 기기 소유자만 접근할 수 있습니다.

<ImageBlock
  src="https://media.alchemy.com/1709767953-2.jpg"
  alt="신뢰 실행 환경(TEE) 작동 방식 다이어그램"
  width={3200}
  height={1800}
/>

### Passkeys: 패스워드 없는 웹으로 가는 길
해킹 관련 침해 사고의 약 81%는 도난당했거나 취약한 비밀번호 사용과 관련되어 있습니다. 이에 따라 연구자들은 FIDO Alliance와 W3C가 개발한 WebAuthn 프로토콜에 주목해 왔습니다. 이 프로토콜은 공개 키 암호화를 사용한 더 안전한 키 관리 시스템을 제공함으로써 이 문제를 해결하고, 보안성과 사용자 경험을 모두 개선합니다. WebAuthn은 현재까지 Google, Amazon, Microsoft, [Coinbase](https://www.alchemy.com/dapps/coinbase)와 같은 대기업들이 인증 방식으로 채택했으며, 더 폭넓은 채택이 빠르게 이루어지고 있습니다.

WebAuthn은 사용자 인증에 도메인별 공개 키 암호화를 사용함으로써 기존 비밀번호 시스템의 약점과 불편함을 극복하는 것을 목표로 합니다. 이 접근 방식은 비밀번호, 잊어버린 비밀번호, 계정 잠금을 없애고 일반적인 보안 위험을 줄여줍니다.

### Passkeys는 어떻게 작동하는가?
Passkey는 Webauthn 표준의 구현체이며 거의 모든 최신 기기에서 작동합니다. 사용자가 계정에 가입하면, 운영체제는 해당 앱이나 웹사이트에 전용인 고유한 키 쌍을 생성하여 계정과 연결합니다. 이 키들은 Secure Enclave를 사용해 암호화되며, 대개 생체 인증을 거치고, iCloud Keychain이나 다른 비밀번호 관리자를 통해 기기 간에 동기화됩니다.

Passkey는 블록체인의 계정 관리에 많은 활용 사례를 가지고 있습니다. 블록체인에서 이를 사용하려면, 개발자는 passkey의 공개 키를 스마트 컨트랙트에 넣고 이를 인증 방법으로 사용할 수 있습니다.

<ImageBlock
  src="https://media.alchemy.com/1709767898-1.jpg"
  alt="패스키 작동 방식 다이어그램"
  width={3200}
  height={1800}
/>

안타깝게도, 거의 모든 보안 엔클레이브와 passkey는 NIST가 개발한 secp256r1\([P256](https://neuromancer.sk/std/nist/P-256)\) 곡선을 지원하는 반면, Ethereum은 네이티브로 secp256k1 곡선만 지원합니다. 따라서 우리는 상대방에게 소유권을 증명하기 위해 이를 온체인에서 검증해야 하는데, 어떻게 할 수 있을까요?

그 답이 바로 RIP-7212입니다.

## RIP-7212란 무엇인가? secp256r1 곡선 지원을 위한 프리컴파일 컨트랙트
RIP-7212는 프리컴파일 컨트랙트를 통해 저렴하고 안전하며 빠른 P256 곡선 검증을 가능하게 하는 Ethereum 프로토콜의 핵심적인 변경 사항입니다. Layer 2 블록체인들에 의해 제안되어 성공적으로 채택된 최초의 Rollup Improvement Proposal입니다.

### 프리컴파일 컨트랙트란 무엇인가?
프리컴파일 컨트랙트는 전통적인 의미의 "컨트랙트"가 아니라, Ethereum 프로토콜에 네이티브로 존재하기 때문에 "프리컴파일\(사전 컴파일\)"된 것으로 불리는 미리 정의된 네이티브 함수입니다.

프리컴파일 컨트랙트는 서명 검증\(예: secp256k1 및 secp256r1 서명 검증\)이나 해싱 함수와 같은 특정 연산에 대해 성능과 낮은 가스 비용에 최적화되어 있습니다. 프리컴파일 컨트랙트가 없다면, [Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)에서 이러한 연산을 수행하는 데 더 많은 코드와 훨씬 더 많은 연산 능력이 필요하여 가스 수수료가 더 높아질 것입니다. evm.codes 웹사이트에서 [Ethereum의 프리컴파일 목록](https://www.evm.codes/precompiled?fork=shanghai)을 확인할 수 있습니다.

### RIP-7212는 다른 솔루션들과 비교했을 때 어떤가?
RIP-7212를 사용하면 P256 검증 비용이 3450 가스에 불과하며, 이는 프로토콜 변경 없이 가능한 최선의 옵션 대비 100배 감소한 수치입니다. RIP-7212는 EVM 체인에서 P256을 검증하는 가장 가스 효율적이고 안전하며 빠른 방법입니다.

앞서 설명했듯이, 생체 인증 서명자\(예: Passkeys 및 Secure Enclave 기반\) 사용은 P256 곡선을 온체인에서 검증할 방법이 있어야만 가능합니다. P256 곡선을 온체인에서 검증할 수 있는 여러 옵션이 존재하지만, 그 어느 것도 저렴하지 않습니다.

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Verifier", dataType: "object" },
      {
        key: "2",
        width: 200,
        title: "Gas Consumption (Account Creation)",
        dataType: "object",
      },
      {
        key: "3",
        width: 200,
        title: "Gas Consumption (Single Transaction)",
        dataType: "object",
      },
      {
        key: "1709671329969",
        width: 180,
        title: "Proving Time",
        dataType: "object",
      },
      { key: "1709671346011", width: 180, title: "Type", dataType: "object" },
    ],
    data: [
      {
        "1": {
          title: "<p>Obvious' Solidity Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>330k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>330k</p>", tooltip: "", icon: "" },
        id: 0,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>Alembic's Solidity Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>2M</p>", tooltip: "", icon: "" },
        "3": { title: "<p>375k</p>", tooltip: "", icon: "" },
        id: 1,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>FCL's Solidity Verifier w/o precomputation</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>205k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>205k</p>", tooltip: "", icon: "" },
        id: 2,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>FCL's Solidity Verifier with precomputation</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>3.2M</p>", tooltip: "", icon: "" },
        "3": { title: "<p>69k</p>", tooltip: "", icon: "" },
        id: 3,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>Risc0 Verifier</p>", tooltip: "", icon: "" },
        "2": { title: "<p>250k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>250k</p>", tooltip: "", icon: "" },
        id: 4,
        "1709671329969": {
          title: "<p>Nearly instant</p>",
          tooltip: "",
          icon: "",
        },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>KnowNothingLab's Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>520k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>520k</p>", tooltip: "", icon: "" },
        id: 5,
        "1709671329969": { title: "<p>~4 seconds</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>Circom</p>", tooltip: "", icon: "" },
        "2": { title: "<p>230k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>300k</p>", tooltip: "", icon: "" },
        id: 6,
        "1709671329969": {
          title: "<p>Nearly instant</p>",
          tooltip: "",
          icon: "",
        },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>A Verifier with EVMMAX</p>", tooltip: "", icon: "" },
        "2": { title: "<p>73k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>73k</p>", tooltip: "", icon: "" },
        id: 7,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Core Protocol Change</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>EIP-7212 Precomiler Contract for P256</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>3450</p>", tooltip: "", icon: "" },
        "3": { title: "<p>3450</p>", tooltip: "", icon: "" },
        id: 8,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Core Protocol Change</p>",
          tooltip: "",
          icon: "",
        },
      },
    ],
  }}
/>

<CalloutBlock>

출처: [Current State of Verifying P256 Curve](https://hackmd.io/@1ofB8klpQky-YoR5pmPXFQ/SJ0nuzD1T)

</CalloutBlock>

## RIP-7212의 현황과 활용 사례
RIP-7212 스펙은 확정되었으며, 이미 여러 팀\(Kakarot, Polygon, Optimism, [zkSync](https://www.alchemy.com/overviews/what-is-zksync-era), Arbitrum\)이 이 프리컴파일을 자체 롤업 생태계에 구현하기로 약속했습니다. Polygon은 [최근 RIP-7212를 테스트넷에 배포했으며](https://twitter.com/ulerdogan/status/1755358331420418134) 개발자들이 이를 테스트하기 시작했습니다.

RIP-7212의 활용 사례는 스마트 계정에만 국한되지 않습니다. RIP-7212는 Trusted Execution Environment의 원격 증명\(remote attestation\)을 검증하는 데도 사용될 수 있으며, 이는 탈중앙화 블록 빌딩\(SUAVE\), 롤업을 위한 2FA\(Taiko 및 Scroll\) 등 다양한 용도로 사용되어 왔습니다!

## RIP-7212를 사용하는 ERC-6900 호환 P256 검증기 컨트랙트 구축
RIP-7212가 라이브되면, 다음 단계는 개발자들이 최종 사용자 경험을 개선하는 데 이를 최대한 쉽게 사용할 수 있도록 만드는 것입니다. 스마트 계정에 새로운 코드를 통합하는 것은 마찰과 위험이 큰 작업이며, RIP-7212가 제공하는 것처럼 크게 단순화된 흐름조차도 신중하게 설계, 테스트, 감사되어야 합니다.

이 지점에서 ERC-6900이 필요합니다.

[ERC-6900: Modular Smart Contract Accounts and Plugins](https://eips.ethereum.org/EIPS/eip-6900)는 개발자들이 논리적 단위를 다른 계정 개발자도 사용할 수 있는 플러그인으로 만들 수 있도록 설계된 EVM 표준입니다. 개발자들은 자신만의 플러그인을 직접 만드는 대신, 검증된 플러그인에 의존하여 최종 사용자 경험을 개선할 수 있습니다.

RIP-7212와 [ERC-6900](https://github.com/erc6900/resources)을 결합하면 효율적인 P256 검증을 위한 간단한 계정 플러그인이 만들어지며, 이를 통해 개발자의 부담을 최소화하면서 사용자에게 저렴하고 안전한 생체 인증을 제공할 수 있습니다. 저희는 메인넷에서 RIP-7212 채택이 가속화됨에 따라 이 플러그인을 지원되는 롤업에 출시하게 되어 기쁩니다.
