Beberapa hari lalu beredar sebuah kasus di komunitas, kedengarannya bikin merinding. Seorang pengguna—padahal dia hanya menandatangani satu transfer sebesar 500U—yang akhirnya keluar di blockchain justru 50000U. Baru setelah ditelusuri sampai akhir, rangkaian sebabnya berhasil dirangkai: antarmuka depan (front-end) yang dia gunakan dimanipulasi. Di layar tampil 500U, tapi data yang benar-benar ditandatangani adalah 50000U. Kunci privat, dia yang mengendalikan sendiri; tanda tangan, dia yang mengonfirmasi sendiri. Namun dia sama sekali tidak tahu dia menandatangani apa.
Kejadian ini membuatku kembali teringat pada konsep yang berulang di whitepaper @NewtonProtocol , tetapi tidak banyak orang benar-benar menggali: transaction intent (maksud transaksi). Diagram alur otorisasi di Bagian 5.3 menjelaskan dengan sangat jelas—yang diajukan pengguna bukan “tanda tangan transaksi mentah (bare transaction)”, melainkan “transaction intent”. Mesin strategi dulu menilai apakah maksud ini sesuai aturan; jika lolos, barulah digabungkan dengan tanda tangan agregat untuk dieksekusi. Sekilas, ini seperti memecah proses tanda tangan jadi dua langkah. Tapi setelah kupikir lama, aku merasa ada perubahan yang lebih dalam: ia memaksa “apa yang kamu tanda tangani” dan “apa yang kamu maksudkan untuk ditransaksikan” dipaksa untuk sejajar.
Dompet tradisional punya celah yang hampir tak bisa dihindari. Kunci privat menandatangani—itu masalah matematika; transaction intent—itu masalah semantik. Matematika bisa memastikan tanda tangannya benar, tapi tidak bisa memastikan bahwa “hal yang ada dalam pikiranmu” dan “hal yang benar-benar akhirnya berjalan di blockchain” adalah satu hal yang sama. Solusi Newton adalah mengubah intent menjadi data terstruktur agar mesin strategi bisa memverifikasinya secara independen. Operator yang menerima bukan rangkaian teka-teki heksadesimal, melainkan deskripsi teks yang mudah dipahami: “siapa mentransfer berapa uang ke siapa”. Mereka harus menilai apakah deskripsi teks ini sesuai aturan, barulah kemudian mereka membubuhi persetujuan dengan tanda tangan BLS mereka sendiri. #Newt
Tapi ini juga memunculkan paradoks baru. Bagaimana jika intent itu sendiri dihasilkan pada front-end yang sedang disusupi—pengguna merasa dia memasukkan 500U, namun front-end diam-diam mengubahnya menjadi 50000U lalu membuang intent itu? Maka operator yang menerima yang terwujud adalah “intent transfer 50000U” yang tampak sesuai aturan. Mereka memeriksanya: sesuai; mereka menandatanganinya: dieksekusi. $NEWT Penjaminan oleh staking token bisa memastikan strategi tidak mudah diubah, dan bisa memastikan operator tidak asal malas; tapi itu tidak bisa menutup celah antara “hal yang ada di benakmu” dan “hal yang ada di layar/di blockchain”.
Mungkin ini adalah blind spot terdalam dari seluruh lapisan otorisasi. DYOR.
Kejadian ini membuatku kembali teringat pada konsep yang berulang di whitepaper @NewtonProtocol , tetapi tidak banyak orang benar-benar menggali: transaction intent (maksud transaksi). Diagram alur otorisasi di Bagian 5.3 menjelaskan dengan sangat jelas—yang diajukan pengguna bukan “tanda tangan transaksi mentah (bare transaction)”, melainkan “transaction intent”. Mesin strategi dulu menilai apakah maksud ini sesuai aturan; jika lolos, barulah digabungkan dengan tanda tangan agregat untuk dieksekusi. Sekilas, ini seperti memecah proses tanda tangan jadi dua langkah. Tapi setelah kupikir lama, aku merasa ada perubahan yang lebih dalam: ia memaksa “apa yang kamu tanda tangani” dan “apa yang kamu maksudkan untuk ditransaksikan” dipaksa untuk sejajar.
Dompet tradisional punya celah yang hampir tak bisa dihindari. Kunci privat menandatangani—itu masalah matematika; transaction intent—itu masalah semantik. Matematika bisa memastikan tanda tangannya benar, tapi tidak bisa memastikan bahwa “hal yang ada dalam pikiranmu” dan “hal yang benar-benar akhirnya berjalan di blockchain” adalah satu hal yang sama. Solusi Newton adalah mengubah intent menjadi data terstruktur agar mesin strategi bisa memverifikasinya secara independen. Operator yang menerima bukan rangkaian teka-teki heksadesimal, melainkan deskripsi teks yang mudah dipahami: “siapa mentransfer berapa uang ke siapa”. Mereka harus menilai apakah deskripsi teks ini sesuai aturan, barulah kemudian mereka membubuhi persetujuan dengan tanda tangan BLS mereka sendiri. #Newt
Tapi ini juga memunculkan paradoks baru. Bagaimana jika intent itu sendiri dihasilkan pada front-end yang sedang disusupi—pengguna merasa dia memasukkan 500U, namun front-end diam-diam mengubahnya menjadi 50000U lalu membuang intent itu? Maka operator yang menerima yang terwujud adalah “intent transfer 50000U” yang tampak sesuai aturan. Mereka memeriksanya: sesuai; mereka menandatanganinya: dieksekusi. $NEWT Penjaminan oleh staking token bisa memastikan strategi tidak mudah diubah, dan bisa memastikan operator tidak asal malas; tapi itu tidak bisa menutup celah antara “hal yang ada di benakmu” dan “hal yang ada di layar/di blockchain”.
Mungkin ini adalah blind spot terdalam dari seluruh lapisan otorisasi. DYOR.