Lompat ke konten

Apakah tanda tangan delegasi tata kelola aman?

Pelajari apa yang diizinkan oleh tanda tangan delegasi tata kelola, bagaimana pemisahan domain EIP-712, nonce, dan kedaluwarsa mengurangi risiko replay, serta apa yang perlu diperiksa sebelum menandatangani.

Diperbarui

Hanya untuk tujuan edukasi; bukan nasihat investasi. Transaksi dan tanda tangan aset digital dapat menyebabkan kerugian yang tidak dapat dipulihkan.

Jawaban langsung

Tanda tangan delegasi tata kelola hanya aman jika pesan yang telah didekode sama persis dengan delegasi yang Anda maksud dan kontrak tata kelola menerapkan perlindungan replay yang memadai. Dalam rancangan token voting yang umum, delegasi mengubah siapa yang dapat menggunakan kekuatan suara penanda tangan; delegasi tidak memindahkan saldo token atau memberikan persetujuan untuk membelanjakan token. Namun, kontrak yang telah diterapkan tetap menjadi penentu akhir atas tindakan tanda tangan tersebut.

Tanda tangan off-chain dapat dikirim oleh relayer, sehingga penanda tangan mungkin tidak membayar gas meskipun tetap mengizinkan perubahan state on-chain. Perlakukan tanda tangan sebagai instruksi yang dapat dieksekusi, bukan sebagai proses masuk atau permintaan aman untuk menghubungkan dompet.

Cara kerjanya

Alur delegateBySig yang umum terdiri dari empat langkah:

  1. Aplikasi menyiapkan data bertipe EIP-712 yang memuat alamat delegasi, nonce, dan waktu kedaluwarsa.
  2. Dompet menandatangani digest yang terikat pada pesan bertipe dan domain EIP-712.
  3. Akun mana pun dapat meneruskan tanda tangan tersebut ke kontrak token atau tata kelola.
  4. Kontrak memulihkan atau memvalidasi penanda tangan, memeriksa nonce dan kedaluwarsa, lalu mencatat delegasi baru.

Domain EIP-712 dapat mencakup name, version, chainId, dan verifyingContract. Kolom-kolom ini memisahkan pesan yang selain itu identik antara aplikasi, versi, jaringan, dan kontrak. EIP-712 sendiri secara tegas tidak memberikan perlindungan replay; kontrak harus menggunakan nonce atau dengan cara lain membuat setiap otorisasi hanya dapat dipakai sekali, sedangkan waktu kedaluwarsa hanya membatasi jendela waktu jika kontrak benar-benar memeriksanya.

Sebelum menandatangani, verifikasi semua hal berikut melalui antarmuka tata kelola resmi, dokumentasi, atau data kontrak yang diverifikasi secara independen:

  • primaryType dan nama kolom menjelaskan delegasi, bukan permit, transfer token, order, atau otorisasi pengelolaan akun.
  • verifyingContract adalah kontrak token atau tata kelola yang dimaksud pada chainId aktif.
  • delegatee adalah alamat perwakilan yang Anda pilih, dengan memeriksa alamat lengkap dan bukan nama tampilannya.
  • nonce sesuai dengan nonce penanda tangan saat ini di kontrak, dan expiry cukup singkat untuk alur yang dimaksud.
  • Dompet menampilkan seluruh data bertipe. Tolak permintaan blind signing atau hash mentah yang maknanya tidak dapat Anda reproduksi secara independen.

Setiap implementasi berbeda. Sebagai contoh, kontrak COMP milik Compound membuat hash dari delegasi, nonce, dan kedaluwarsa, mengharuskan nonce sama dengan nonce penanda tangan yang tersimpan, menaikkan nonce tersebut, dan menolak tanda tangan yang kedaluwarsa. Antarmuka Votes milik OpenZeppelin juga menyediakan delegateBySig, penanganan nonce, dan pemeriksaan kedaluwarsa. Jangan menganggap fungsi bernama serupa di kontrak lain memiliki perlindungan yang sama.

Contoh

Mira bermaksud mendelegasikan 10,000 suara ke alamat 0xAB...1234. Dompetnya menampilkan primaryType: Delegation, kontrak token voting yang terverifikasi, ID chain aktif, delegatee: 0xAB...1234, nonce saat ini, dan waktu kedaluwarsa 20 menit lagi. Setelah memeriksa alamat melalui sumber tepercaya kedua, ia menandatangani; relayer mengirim pesan tersebut, dan kontrak memancarkan event delegasi. Saldo tokennya tetap berada di dompet, sedangkan perwakilan menerima kekuatan suara terkait sesuai aturan protokol tersebut.

Sekarang ubah satu detail: halaman meminta primaryType: Permit dan menyebut pihak yang dapat membelanjakan token, atau verifyingContract merupakan kontrak yang tidak terkait. Itu bukan instruksi delegasi yang sama. Permintaan tersebut mungkin justru mengizinkan pembelanjaan token, meskipun tombol pada halaman bertuliskan “Delegasikan” dan penanda tangan tidak membayar gas. Mira harus menolaknya.

Risiko dan langkah pengendalian

  • Delegasi yang salah: address poisoning, pesan pribadi, dan nama tampilan yang disalin dapat mengganti delegatee dengan alamat yang dikendalikan penyerang. Verifikasi alamat lengkap melalui proposal resmi atau profil delegasi.
  • Tindakan yang salah: antarmuka berbahaya dapat meminta tipe EIP-712 lain seperti permit. Baca primaryType, setiap kolom, dan kontrak pemverifikasi; label tombol tidak memiliki nilai keamanan.
  • Replay: pemeriksaan nonce yang lemah atau tidak ada dapat membuat tanda tangan digunakan kembali. Domain yang tidak terikat pada chain atau kontrak yang dimaksud juga dapat memungkinkan penggunaan dalam konteks yang tidak diinginkan. Pastikan kode verifikasi yang sebenarnya, karena EIP-712 saja bukan perlindungan replay.
  • Tanda tangan berumur panjang: pesan bertanda tangan yang belum digunakan dapat tetap bisa dieksekusi hingga kedaluwarsa atau nonce-nya menjadi tidak valid. Pilih waktu kedaluwarsa yang singkat, jangan publikasikan tanda tangan, dan hanya gunakan metode pembatalan terdokumentasi milik protokol jika pembatalan diperlukan.
  • Tampilan dompet yang menyesatkan: kolom yang dipotong, domain yang tidak dikenal, atau blind signing menghalangi persetujuan yang bermakna. Batalkan dan periksa permintaan data bertipe dengan dompet atau decoder yang menampilkan pesan lengkap.
  • Perbedaan akun kontrak: dompet smart contract dapat memvalidasi tanda tangan melalui ERC-1271, yang validitasnya dapat bergantung pada state dompet dan kebijakan otorisasi. Pastikan dukungan dari dompet dan kontrak tata kelola, alih-alih menganggap pemulihan bergaya EOA selalu berlaku.
  • Konsekuensi tata kelola: delegasi dapat memusatkan kekuatan suara atau memungkinkan delegasi yang tidak tepercaya memberikan suara yang bertentangan dengan kepentingan Anda. Tinjau identitas delegasi, riwayat voting, konflik kepentingan, dan proses redelegasi protokol.

Setelah pengiriman, verifikasi transaksi pada chain yang benar: periksa kontrak tujuan, fungsi yang didekode, penanda tangan yang dipulihkan atau dilaporkan oleh event, delegasi baru, dan nonce. Transaksi relayer yang berhasil hanya membuktikan bahwa kontrak menerima panggilan tersebut; transaksi itu tidak membuktikan bahwa maksud yang ditandatangani aman.

Jika Anda sudah menandatangani tetapi belum melihat pengiriman, berhenti membagikan tanda tangan dan lihat jalur pembatalan atau invalidasi nonce yang didokumentasikan oleh protokol. Jika delegasi yang tidak diinginkan telah dieksekusi, lakukan redelegasi melalui kontrak resmi dan verifikasi state baru. Delegasi saja biasanya tidak membuat allowance token, jadi jangan samakan redelegasi dengan pencabutan persetujuan. Jika Anda juga menandatangani permit atau membocorkan seed phrase maupun private key, perlakukan hal itu sebagai insiden dompet terpisah dengan tingkat keparahan lebih tinggi.

Kesalahpahaman umum

  • “Tidak ada gas berarti tidak ada wewenang.” Relayer dapat membayar gas sementara tanda tangan memberikan otorisasi penanda tangan.
  • “EIP-712 membuat setiap tanda tangan aman.” Standar ini menyeragamkan hashing data bertipe dan pemisahan domain, tetapi tidak mencakup perlindungan replay dan tidak dapat memastikan bahwa pengguna memang bermaksud melakukan tindakan yang ditampilkan.
  • “Delegasi memindahkan token saya.” Delegasi voting konvensional memindahkan atau menetapkan kekuatan suara, bukan kepemilikan token, tetapi hanya kontrak yang diterapkan dan pesan yang didekode yang dapat memastikan dampak sebenarnya.
  • “Saya selalu dapat mencabut tanda tangan off-chain.” Tidak ada transaksi pencabutan tanda tangan yang universal. Kedaluwarsa, penggunaan atau invalidasi nonce, dan redelegasi merupakan mekanisme khusus kontrak.
  • “Mengganti delegasi menghapus suara sebelumnya.” Redelegasi mengubah kekuatan suara saat ini atau di masa depan sesuai aturan protokol; tindakan ini mungkin tidak membatalkan suara yang sudah diberikan atau mengubah snapshot historis.

Topik terkait

Sumber

Navigasi

Cari di wiki...