Analisis Keamanan Bahasa Move: Pemberi Revolusi Bahasa Kontrak Pintar
Bahasa Move adalah bahasa kontrak pintar yang dapat dijalankan di lingkungan blockchain yang menerapkan MoveVM. Pada awal perancangannya, banyak masalah keamanan terkait blockchain dan kontrak pintar telah dipertimbangkan, dan desain keamanannya merujuk pada bahasa RUST. Sebagai bahasa kontrak pintar generasi baru yang memiliki keamanan sebagai fitur utama, bagaimana tingkat keamanannya? Apakah dapat menghindari ancaman keamanan umum dari mesin virtual kontrak seperti EVM, WASM, di tingkat bahasa atau mekanisme terkait? Apakah terdapat masalah keamanan khusus yang melekat pada dirinya sendiri?
Artikel ini akan membahas masalah keamanan bahasa Move dari tiga aspek: karakteristik bahasa, mekanisme operasi, dan alat verifikasi.
1. Fitur Keamanan Bahasa Move
Berbeda dengan banyak bahasa pemrograman yang ada, bahasa Move dirancang untuk mendukung penulisan program yang berinteraksi secara aman dengan kode tidak terpercaya, serta mendukung verifikasi statis. Move memiliki fitur keamanan seperti itu karena meninggalkan logika non-linear yang didasarkan pada pertimbangan fleksibilitas, tidak mendukung pengiriman dinamis, dan juga tidak mendukung panggilan eksternal rekursif, melainkan menggunakan konsep generik, penyimpanan global, sumber daya, dan sebagainya untuk menerapkan beberapa pola pemrograman alternatif. Misalnya, Move menghilangkan fitur pengaturan dinamis dan panggilan rekursif, fitur-fitur ini di bahasa kontrak pintar lainnya menyebabkan kerentanan reentrancy yang mahal.
Fitur keamanan utama dari Move meliputi:
Modul (: Setiap modul Move terdiri dari serangkaian tipe struktur dan definisi proses. Modul dapat mengimpor definisi tipe dan memanggil proses yang dinyatakan dalam modul lain.
Struktur ): dapat didefinisikan sebagai jenis sumber daya, yang menunjukkan dapat disimpan dalam penyimpanan kunci/nilai global yang persisten.
3( proses ) Fungsi ): mendefinisikan logika bisnis dari smart contract.
4( Penyimpanan Global: Memungkinkan program Move untuk menyimpan data yang persisten, data ini hanya dapat dibaca/ditulis secara program oleh modul yang memilikinya.
Pemeriksaan invariant: dapat mendefinisikan invariant pemeriksaan statis, yang menunjukkan konservasi sumber daya dalam sistem.
Verifier Bytecode: Memverifikasi bytecode untuk tipe keamanan dan verifikasi linier, menegakkan aturan penciptaan, penghancuran, dan akses sumber daya.
Dengan fitur-fitur ini, Move dapat memastikan keamanan yang tinggi pada saat kompilasi. Selanjutnya, kita akan menganalisis mekanisme eksekusi Move, untuk melihat bagaimana MoveVM menjamin keamanan saat runtime.
![Analisis Keamanan Move: Game Changer Bahasa Smart Contract])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp)
2. Mekanisme Operasional Move
Program Move dijalankan di dalam mesin virtual, dan tidak dapat mengakses memori sistem saat dijalankan. Ini memungkinkan Move untuk berjalan dengan aman di lingkungan yang tidak terpercaya, tanpa dapat dirusak atau disalahgunakan.
Program Move dieksekusi di atas tumpukan. Penyimpanan global dibagi menjadi dua bagian: memori ( tumpukan ) dan variabel global ( tumpukan ). Memori adalah penyimpanan tingkat pertama, tidak dapat menyimpan pointer yang menunjuk ke unit memori. Variabel global digunakan untuk menyimpan pointer yang menunjuk ke unit memori, tetapi cara pengindeksannya berbeda dari memori.
Instruksi bytecode Move dieksekusi dalam interpreter berbasis stack. Mesin virtual berbasis stack mudah untuk diimplementasikan dan dikendalikan, dengan persyaratan yang lebih rendah terhadap lingkungan perangkat keras, sehingga cocok untuk skenario blockchain. Sementara itu, dibandingkan dengan interpreter berbasis register, interpreter berbasis stack lebih mudah untuk mengontrol dan mendeteksi copy dan move antar variabel.
Status runtime program Move adalah kuartet ⟨C, M, G, S⟩, yang terdiri dari tumpukan panggilan (C), memori (M), variabel global (G), dan operand (S). Tumpukan juga memelihara tabel fungsi untuk memecahkan instruksi yang berisi tubuh fungsi.
Tumpukan panggilan berisi semua informasi konteks dan nomor instruksi dari eksekusi proses. Saat mengeksekusi instruksi Call, objek tumpukan panggilan baru dibuat, menyimpan parameter panggilan, dan kemudian mengeksekusi instruksi kontrak baru. Saat menemukan instruksi percabangan, dilakukan lompatan statis di dalam proses. Desain ini menghindari pengiriman dinamis, memperkuat ketidakberubahan pemanggilan fungsi, sehingga menghindari kemungkinan reentrancy.
MoveVM memisahkan penyimpanan data dan logika proses tumpukan panggilan ( dari penyimpanan ), ini adalah perbedaan terbesar dengan EVM. Di MoveVM, sumber daya ( di bawah alamat akun status pengguna ) disimpan secara independen, panggilan program harus mematuhi aturan paksa yang terkait dengan izin dan sumber daya. Desain ini meskipun牺牲了一定灵活性, tetapi mendapatkan peningkatan besar dalam keamanan dan efisiensi eksekusi.
3. Pindahkan Prover
Move Prover adalah alat verifikasi formal berbasis penalaran. Ini menggunakan bahasa formal untuk menggambarkan perilaku program, dan menggunakan algoritma penalaran untuk memverifikasi apakah program sesuai dengan yang diharapkan, membantu pengembang memastikan keakuratan smart contract, sehingga mengurangi risiko transaksi.
Move Prover menggunakan algoritma verifikasi deduktif untuk memverifikasi apakah program sesuai dengan yang diharapkan. Ini dapat menyimpulkan perilaku program berdasarkan informasi yang diketahui dan memastikan bahwa perilakunya sesuai dengan yang diharapkan. Ini membantu memastikan keakuratan program dan mengurangi beban kerja pengujian manual.
Alur kerja Move Prover adalah sebagai berikut:
Menerima file sumber Move sebagai input, file ini perlu mengatur spesifikasi input program.
Move Parser mengekstrak spesifikasi dari kode sumber.
Compiler Move mengkompilasi file sumber menjadi bytecode, bersama dengan sistem standar untuk mengubahnya menjadi model objek validator.
Model ini diterjemahkan ke dalam bahasa perantara Boogie.
Sistem verifikasi Boogie melakukan "generasi kondisi verifikasi" untuk input.
Kondisi verifikasi dikirim ke pemecah Z3 untuk diperiksa.
Jika regulasi disetujui, verifikasi berhasil; jika tidak, buat laporan diagnosis.
Untuk mendeskripsikan sistem spesifikasi, Move menggunakan Move Specification Language, yang merupakan subset dari bahasa Move, memperkenalkan dukungan untuk deskripsi statis perilaku kebenaran program. Move Specification Language dapat berdiri sendiri sebagai file spesifikasi khusus, sehingga memisahkan kode bisnis dan kode verifikasi formal.
Move Prover adalah alat yang sangat berguna, dapat membantu pengembang memastikan kebenaran smart contract. Ini menggunakan bahasa formal untuk menggambarkan perilaku program, dan menggunakan algoritma penalaran untuk memverifikasi apakah program sesuai dengan yang diharapkan. Ini membantu mengurangi risiko transaksi, membuat pengembang lebih percaya diri untuk menerapkan smart contract ke lingkungan produksi.
4. Ringkasan
Bahasa Move memiliki desain keamanan yang sangat baik, dengan pertimbangan menyeluruh di tingkat fitur bahasa, eksekusi mesin virtual, dan alat keamanan. Dalam hal fitur bahasa, beberapa fleksibilitas牺牲 dilakukan, dengan pemeriksaan tipe yang ketat dan logika linier, yang memudahkan otomatisasi dan keamanan yang dapat diverifikasi saat pemeriksaan kompilasi dan verifikasi formal. Desain MoveVM memisahkan status dan logika, yang lebih sesuai dengan kebutuhan manajemen keamanan aset di blockchain.
Dalam hal bahasa, Move dapat secara efektif menghindari kerentanan umum seperti reentrancy, overflow, dan injeksi Call/DeleGateCall di EVM. Namun, masalah seperti otorisasi, logika kode, dan overflow struktur bilangan bulat besar masih perlu diperhatikan oleh pengembang. Meskipun Move Prover kuat, itu mungkin tidak berfungsi jika ada kelalaian dalam pemahaman keseluruhan.
Meskipun bahasa Move mempertimbangkan banyak hal untuk keamanan programmer, tidak ada bahasa dan program yang sepenuhnya aman. Disarankan agar pengembang smart contract Move menggunakan layanan audit dari perusahaan keamanan pihak ketiga, dan menyerahkan penulisan dan verifikasi bagian kode specification kepada perusahaan keamanan pihak ketiga untuk meningkatkan keamanan kontrak lebih lanjut.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Analisis kedalaman keamanan bahasa Move: Tolok ukur baru untuk pengembangan smart contract
Analisis Keamanan Bahasa Move: Pemberi Revolusi Bahasa Kontrak Pintar
Bahasa Move adalah bahasa kontrak pintar yang dapat dijalankan di lingkungan blockchain yang menerapkan MoveVM. Pada awal perancangannya, banyak masalah keamanan terkait blockchain dan kontrak pintar telah dipertimbangkan, dan desain keamanannya merujuk pada bahasa RUST. Sebagai bahasa kontrak pintar generasi baru yang memiliki keamanan sebagai fitur utama, bagaimana tingkat keamanannya? Apakah dapat menghindari ancaman keamanan umum dari mesin virtual kontrak seperti EVM, WASM, di tingkat bahasa atau mekanisme terkait? Apakah terdapat masalah keamanan khusus yang melekat pada dirinya sendiri?
Artikel ini akan membahas masalah keamanan bahasa Move dari tiga aspek: karakteristik bahasa, mekanisme operasi, dan alat verifikasi.
1. Fitur Keamanan Bahasa Move
Berbeda dengan banyak bahasa pemrograman yang ada, bahasa Move dirancang untuk mendukung penulisan program yang berinteraksi secara aman dengan kode tidak terpercaya, serta mendukung verifikasi statis. Move memiliki fitur keamanan seperti itu karena meninggalkan logika non-linear yang didasarkan pada pertimbangan fleksibilitas, tidak mendukung pengiriman dinamis, dan juga tidak mendukung panggilan eksternal rekursif, melainkan menggunakan konsep generik, penyimpanan global, sumber daya, dan sebagainya untuk menerapkan beberapa pola pemrograman alternatif. Misalnya, Move menghilangkan fitur pengaturan dinamis dan panggilan rekursif, fitur-fitur ini di bahasa kontrak pintar lainnya menyebabkan kerentanan reentrancy yang mahal.
Fitur keamanan utama dari Move meliputi:
Modul (: Setiap modul Move terdiri dari serangkaian tipe struktur dan definisi proses. Modul dapat mengimpor definisi tipe dan memanggil proses yang dinyatakan dalam modul lain.
Struktur ): dapat didefinisikan sebagai jenis sumber daya, yang menunjukkan dapat disimpan dalam penyimpanan kunci/nilai global yang persisten.
3( proses ) Fungsi ): mendefinisikan logika bisnis dari smart contract.
4( Penyimpanan Global: Memungkinkan program Move untuk menyimpan data yang persisten, data ini hanya dapat dibaca/ditulis secara program oleh modul yang memilikinya.
Pemeriksaan invariant: dapat mendefinisikan invariant pemeriksaan statis, yang menunjukkan konservasi sumber daya dalam sistem.
Verifier Bytecode: Memverifikasi bytecode untuk tipe keamanan dan verifikasi linier, menegakkan aturan penciptaan, penghancuran, dan akses sumber daya.
Dengan fitur-fitur ini, Move dapat memastikan keamanan yang tinggi pada saat kompilasi. Selanjutnya, kita akan menganalisis mekanisme eksekusi Move, untuk melihat bagaimana MoveVM menjamin keamanan saat runtime.
![Analisis Keamanan Move: Game Changer Bahasa Smart Contract])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp)
2. Mekanisme Operasional Move
Program Move dijalankan di dalam mesin virtual, dan tidak dapat mengakses memori sistem saat dijalankan. Ini memungkinkan Move untuk berjalan dengan aman di lingkungan yang tidak terpercaya, tanpa dapat dirusak atau disalahgunakan.
Program Move dieksekusi di atas tumpukan. Penyimpanan global dibagi menjadi dua bagian: memori ( tumpukan ) dan variabel global ( tumpukan ). Memori adalah penyimpanan tingkat pertama, tidak dapat menyimpan pointer yang menunjuk ke unit memori. Variabel global digunakan untuk menyimpan pointer yang menunjuk ke unit memori, tetapi cara pengindeksannya berbeda dari memori.
Instruksi bytecode Move dieksekusi dalam interpreter berbasis stack. Mesin virtual berbasis stack mudah untuk diimplementasikan dan dikendalikan, dengan persyaratan yang lebih rendah terhadap lingkungan perangkat keras, sehingga cocok untuk skenario blockchain. Sementara itu, dibandingkan dengan interpreter berbasis register, interpreter berbasis stack lebih mudah untuk mengontrol dan mendeteksi copy dan move antar variabel.
Status runtime program Move adalah kuartet ⟨C, M, G, S⟩, yang terdiri dari tumpukan panggilan (C), memori (M), variabel global (G), dan operand (S). Tumpukan juga memelihara tabel fungsi untuk memecahkan instruksi yang berisi tubuh fungsi.
Tumpukan panggilan berisi semua informasi konteks dan nomor instruksi dari eksekusi proses. Saat mengeksekusi instruksi Call, objek tumpukan panggilan baru dibuat, menyimpan parameter panggilan, dan kemudian mengeksekusi instruksi kontrak baru. Saat menemukan instruksi percabangan, dilakukan lompatan statis di dalam proses. Desain ini menghindari pengiriman dinamis, memperkuat ketidakberubahan pemanggilan fungsi, sehingga menghindari kemungkinan reentrancy.
MoveVM memisahkan penyimpanan data dan logika proses tumpukan panggilan ( dari penyimpanan ), ini adalah perbedaan terbesar dengan EVM. Di MoveVM, sumber daya ( di bawah alamat akun status pengguna ) disimpan secara independen, panggilan program harus mematuhi aturan paksa yang terkait dengan izin dan sumber daya. Desain ini meskipun牺牲了一定灵活性, tetapi mendapatkan peningkatan besar dalam keamanan dan efisiensi eksekusi.
3. Pindahkan Prover
Move Prover adalah alat verifikasi formal berbasis penalaran. Ini menggunakan bahasa formal untuk menggambarkan perilaku program, dan menggunakan algoritma penalaran untuk memverifikasi apakah program sesuai dengan yang diharapkan, membantu pengembang memastikan keakuratan smart contract, sehingga mengurangi risiko transaksi.
Move Prover menggunakan algoritma verifikasi deduktif untuk memverifikasi apakah program sesuai dengan yang diharapkan. Ini dapat menyimpulkan perilaku program berdasarkan informasi yang diketahui dan memastikan bahwa perilakunya sesuai dengan yang diharapkan. Ini membantu memastikan keakuratan program dan mengurangi beban kerja pengujian manual.
Alur kerja Move Prover adalah sebagai berikut:
Untuk mendeskripsikan sistem spesifikasi, Move menggunakan Move Specification Language, yang merupakan subset dari bahasa Move, memperkenalkan dukungan untuk deskripsi statis perilaku kebenaran program. Move Specification Language dapat berdiri sendiri sebagai file spesifikasi khusus, sehingga memisahkan kode bisnis dan kode verifikasi formal.
Move Prover adalah alat yang sangat berguna, dapat membantu pengembang memastikan kebenaran smart contract. Ini menggunakan bahasa formal untuk menggambarkan perilaku program, dan menggunakan algoritma penalaran untuk memverifikasi apakah program sesuai dengan yang diharapkan. Ini membantu mengurangi risiko transaksi, membuat pengembang lebih percaya diri untuk menerapkan smart contract ke lingkungan produksi.
4. Ringkasan
Bahasa Move memiliki desain keamanan yang sangat baik, dengan pertimbangan menyeluruh di tingkat fitur bahasa, eksekusi mesin virtual, dan alat keamanan. Dalam hal fitur bahasa, beberapa fleksibilitas牺牲 dilakukan, dengan pemeriksaan tipe yang ketat dan logika linier, yang memudahkan otomatisasi dan keamanan yang dapat diverifikasi saat pemeriksaan kompilasi dan verifikasi formal. Desain MoveVM memisahkan status dan logika, yang lebih sesuai dengan kebutuhan manajemen keamanan aset di blockchain.
Dalam hal bahasa, Move dapat secara efektif menghindari kerentanan umum seperti reentrancy, overflow, dan injeksi Call/DeleGateCall di EVM. Namun, masalah seperti otorisasi, logika kode, dan overflow struktur bilangan bulat besar masih perlu diperhatikan oleh pengembang. Meskipun Move Prover kuat, itu mungkin tidak berfungsi jika ada kelalaian dalam pemahaman keseluruhan.
Meskipun bahasa Move mempertimbangkan banyak hal untuk keamanan programmer, tidak ada bahasa dan program yang sepenuhnya aman. Disarankan agar pengembang smart contract Move menggunakan layanan audit dari perusahaan keamanan pihak ketiga, dan menyerahkan penulisan dan verifikasi bagian kode specification kepada perusahaan keamanan pihak ketiga untuk meningkatkan keamanan kontrak lebih lanjut.