Ana Sayfa
AI AI
Flaş
Derinlik
Etkinlikler
BlockBeats Pro
Daha Fazla
Finans
Özel
Blok Zinciri Ekosistemi
Giriş
Podkastlar
Veri
OPRR
#
BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Partnered With:

Ethereum EIP-7702 Yükseltmesinin Güvenliği: Güvenli EOA'dan Akıllı Cüzdana Geçiş İçin Bir Proxy Modeli

Bu makaleyi okumak için 23 Dakika
EIP-7702'nin tanıtılmasıyla birlikte geleneksel cüzdanlar yükseltilebilir ve aynı cüzdan adresini korurken tüm varlıklarını ve zincir içi geçmişini koruyabilir.
Orijinal başlık: EIP-7702 Yükseltmelerinin Güvenliği: Güvenli EOA'dan Akıllı Cüzdana Geçişler için Bir Proxy Modeli
Orijinal yazar: Amie Corso
Orijinal çeviri: Foresight News


EIP-7702, basit Ethereum cüzdanlarının (EOA) akıllı sözleşme cüzdanlarına yükseltilmesini sağlayarak daha fazla güvenlik, üst düzey özellikler, Gas sponsorluğu fırsatları ve diğer avantajlar sağlar. Tarihsel olarak, akıllı cüzdanlar sıfırdan inşa edilmek zorundaydı, ancak EIP-7702'nin tanıtılmasıyla geleneksel cüzdanlar yükseltilebilir ve aynı cüzdan adresini korurken tüm varlıklarını ve zincir içi geçmişini koruyabilir. Bu, yeni bir numara almadan sabit hattan akıllı telefona geçmek gibidir.


EOA, bir "delegasyon tanımı" ayarlayarak, bir delege akıllı sözleşmesine işaretçi ayarlayarak yükseltilir ve bu da daha sonra akıllı sözleşmenin mantığını EOA'yı yönetmek için delege eder. Sonuç olarak, yükseltilen EOA işlevlere sahip olabilir, depolama ayarlayabilir, olaylar yayınlayabilir ve akıllı bir sözleşmenin yapabileceği diğer tüm eylemleri gerçekleştirebilir. EOA, yeni, imzalanmış bir EIP-7702 yetkilendirmesi aracılığıyla bu delegasyonu istediği zaman değiştirebilir veya kaldırabilir. Bu, birçok yeni olasılığın kilidini açarken, bu güçlü özellik aynı zamanda dikkatli değerlendirme ve yenilikçi çözümler gerektiren yeni güvenlik zorlukları da getirir.


EOA'nın akıllı sözleşme cüzdanı olarak hareket etmesini sağlamak için, EOA için bir EIP-7702 delegasyonu olarak kullanılmak üzere tasarlanmış hafif bir ERC-1967 proxy sözleşmesi olan EIP7702Proxy'yi geliştirdik. Proxy tarafından yürütülen temel mantık yönlendirmesine ek olarak, EIP7702Proxy ayrıca EIP-7702 devredilen hesaplara özgü bazı zorlukları ele alan diğer özellikleri ve tasarım seçimlerini de içerir. EIP7702Proxy'yi tasarlamanın bir amacı, "standart olarak dağıtılan" Coinbase Akıllı Cüzdan ile EIP-7702 devredilen Coinbase Akıllı Cüzdan arasında mümkün olduğunca fazla eşitlik sağlamaktır; bu da EIP-7702 mekanizmasının gerektirdiği ek karmaşıklığın özel bir proxy'ye soyutlanması ve CoinbaseSmartWallet'ın orijinal uygulamasına güvenmeye devam edilmesi anlamına gelir. Bu zorluğun çözümü, yalnızca CoinbaseSmartWallet uygulamasına değil, herhangi bir uygulama mantığına etkili bir şekilde uygulanabilirken, aynı zamanda EOA'nın 7702 etkinleştirilmiş bir ortamda güvenli kalmasına yardımcı olur.


Aşağıda, EIP-7702 yükseltmesiyle birlikte kullanılmak üzere mevcut herhangi bir akıllı sözleşme cüzdanı uygulamasını güvenli bir şekilde uyarlamamızı sağlayan belirli zorlukları ve ilgili tasarım çözümlerini açıklıyoruz.


Zorluk 1: Güvenli Başlatmayı Uygulama


EIP-7702'yi uygulamadaki ilk büyük engel, başlatma kısıtlamalarından kaynaklanmaktadır. Geleneksel akıllı sözleşme cüzdanları (CoinbaseSmartWallet dahil) genellikle dağıtımları sırasında ayrı bir fabrika sözleşmesi aracılığıyla güvenli başlatmayı (hesap sahipliğini belirlemeyi) atomik olarak işler. Bu atomiklik, bu tür birçok uygulamanın yalnızca bir kez çağrılabilen korumasız başlatıcı işlevlerine sahip olduğu anlamına gelir. Ancak, EIP-7702'nin tasarımı, başlatma çağrı verilerinin kod devretme işlemi sırasında (bu adım "dağıtım"a eşdeğerdir) gerçekleştirilmesine izin vermez, bu nedenle bu atomik olarak yapılamaz.


Bu adım ayrımı kritik bir güvenlik açığı penceresi yaratır. Uygulama sözleşmesi EIP-7702 aracılığıyla EOA'ya "dağıtıldığında", bu 7702 yükseltmesi ve cüzdanın başlatılması için standart EVM işlemlerinin atomik olarak yürütüleceğinin garantisi yoktur. Teknik olarak, yetkilendirmeyi ayarlayan kod, aynı anda gönderilse bile başlatma işleminden bağımsız olarak uygulanabilir ve bu da bir saldırganın başlatma işlemini önceden yürütmesine ve Akıllı Hesabın mülkiyetini talep etmesine olanak tanıyabilir.


Çözüm: Uygulamayı atomik olarak ayarlamak ve başlatmak için EOA imzaları gerektir


Mevcut Coinbase Akıllı Cüzdanının, UUPSUpgradeable uygulaması (gerçek CoinbaseSmartWallet mantığı) olan bir ERC-1967 proxy'sinin arkasına dağıtıldığını unutmayın. Gerçek hesap adresindeki kod, uygulama mantığına işaretçileri depolamak için ERC-1967 tarafından tanımlanan normal depolama konumlarını kullanan bir proxy'dir. 7702 bağlamında başlatma güvenlik açığına yönelik çözümümüz, herhangi bir uygulama mantığının yalnızca proxy gerçekten ona bir bağlantı kurduğunda etkin (ve dolayısıyla tehlikeli) hale geldiğini kabul etmeyi içerir. Bu nedenle, atomik dağıtım ve başlatmayı uygulayamıyorsak, atomik uygulama ayarlarını ve başlatmayı uygulayabiliriz.


EIP-7702CoinbaseSmartWallet Sözleşme Mimarisi ve Mantıksal Delege Etme Süreci


EIP-7702 bağlamında, EOA'nın kendisi hesaplarında herhangi bir değişiklik yapma yetkisine sahiptir ve herhangi bir sahibin yeni bir Akıllı Hesap başlatmasını ve oluşturmasını yetkilendirmek için bir imza sağlamalıdır. EIP7702Proxy sözleşmemiz, yeni mantıksal uygulamayı atomik olarak ayarlayan ve hesabı başlatan bir setImplementation işlevi uygular. setImplementation işlevi:


Yeni uygulama sözleşmesinin adresi, başlatma çağrı verileri, nihai hesap durumunun güvenliğini değerlendirecek doğrulayıcı sözleşmesinin adresi ve rastgele sayı ve son kullanma zamanı gibi temel imza tekrar oynatma korumaları gibi temel verileri içeren EOA'dan gelen imzayı doğrular.


ERC-1967 göstergesinin değerini yeni uygulamaya ayarlar ve sağlanan çağrı verilerini yeni mantıksal uygulamaya karşı yürütür. İmzaya dahil edilen doğrulayıcı tarafından uygulanması gereken validateAccountState işlevini çağırır. Doğrulayıcı, nihai hesap durumunun güvenli olup olmadığını değerlendirmek için mantığı içeren uygulamaya özgü bir sözleşmedir. Örneğin, CoinbaseSmartWallet için CoinbaseSmartWalletValidator, hesabın sahiplik durumunun boş olmadığını ve dolayısıyla keyfi başlatmaya karşı artık savunmasız olmadığını kontrol edecektir.


Zorluk 2: EIP-7702 Temsilcileri Arasında Paylaşılan Depolama


Belki de EIP-7702'nin en karmaşık zorluğu depolama yönetimiyle ilgilidir. EOA'lar mantıklarını istedikleri zaman farklı sözleşmelere yeniden devredebilir veya delegasyonları tamamen kaldırabilirler. Tüm delegasyonlar EOA adresinde aynı depolama alanını paylaşır. Zamanla, aynı depolamaya erişimi paylaşan birden fazla sözleşme "depolama çatışmaları" sorunlarına yol açabilir. Depolama çatışmaları, iki sözleşme farklı değişiklikler yaptığında veya aynı depolama konumu hakkında farklı varsayımlarda bulunduğunda meydana gelir ve bu da öngörülemeyen hatalara neden olabilir.


Depolama çakışmalarının yönetimi, paylaşımlı depolamayı yönetmek için değiştirilebilir uygulama mantığının kullanıldığı proxy tasarımı alanında zaten bilindik bir sorundur. Yükseltilebilir proxy'ler uygulamayı değiştirebilse de proxy kodunun kendisi (7702 adresleri dışındakiler için) değişemez. Bu, yükseltme sürecine kesinlik ve garantiler getirir. 7702 Yeniden delege etme, bu paylaşımlı depolamayı yönetebilecek temel mantığa tam bir değiştirilebilirlik katmanı daha ekler. Bu, temelde, keyfi delege etmelerin depolama üzerinde olabilecek etkileriyle ilgili tüm garantileri ortadan kaldırır. Örneğin, bir EOA, delege A'dan B'ye ve tekrar A'ya delege ederse, geri dönen delege depolamasının durumu hakkında varsayımlarda bulunamaz, delege B onu silmiş veya delege A'nın mantığıyla tek başına elde edilemeyecek bir duruma getirmiş olabilir. Bu, delege etme modundan bağımsız olarak herhangi bir 7702 delege etme için geçerlidir, çünkü önceki delege etme herhangi bir depolama konumunda herhangi bir şeyi depolamış veya silmiş olabilir.


A → B → A delegasyon düzeninin neden olduğu delege A için geçersiz durum örneği


Çözüm: Güvenlik açısından kritik saklanan değerlerin dışsallaştırılması


EOA delegasyonları hesap durumunu keyfi olarak etkileyebilir. Bir EOA kötü niyetli veya yıkıcı bir sözleşmeye delege edilirse, hiçbir görevli delege bu senaryoya karşı koruma sağlayamaz. Bir boşaltma işlemini imzalamada olduğu gibi, kötü niyetli bir 7702 delegasyonunu yetkilendirmek felaket sonuçlara yol açabilir ve bu sonuçlara karşı koruma sağlamak tasarımımızın kapsamının dışındadır. EXIP7702Proxy'yi iyi niyetli ancak potansiyel olarak kaotik katılımcıların çoklu cüzdanlı, 7702 özellikli bir ekosisteminde öngörülebilir sorunlara karşı kendini savunacak şekilde tasarladık. Gerçekten kötü niyetli veya hatalı delegasyonları yetkilendiren EOA'lara karşı koruma sağlayamaz.


Öngörülebilir bir sorun, setImplementation çağrılarının imzalanması ve değiştirilebilir hesap durumunun oluşturduğu riskleri içerir. EIP7702Proxy, uygulama mantığını kurmak ve güvenli bir duruma başlatmak için EOA imzalarına güvenir. Bu imzalar tekrar oynatılabiliyorsa, bir yükümlülük haline gelebilirler. Örneğin, bir imza daha sonra tehlikeye atılan ve silinen bir ilk sahibi yetkilendiriyorsa, tekrar oynatılabilir bir imza tehlikeye atılan sahibi yeniden oluşturabilir veya uygulamanın düşürülmesini zorlayabilir.


İmza tekrar oynatmaya karşı yaygın bir koruma, imzalama mesajında bir nonce kullanmak ve doğrulamadan sonra kullanılmış olarak işaretlemektir. 7702 hesapları için risk: Diğer delegasyonlar bu nonce izleme depolamasını bozabilir. Depolama izleme rastgele sayı kullanımı silinirse, EOA'nın setImplementation imzası (mempool'da herkese açık olarak mevcuttur) EIP7702Proxy'ye geri devrederken yeniden uygulanabilir.


İmzaların tekrar oynatılamayacağını garantilemek için, hesap depolama alanının dışındaki değiştirilemez bir sözleşme konumunda rastgele sayı durumunu koruyan ayrı bir NonceTracker singleton'ı uyguladık. Yalnızca EOA, rastgele sayı durumunu (yalnızca artımlı olarak) etkileyebilir ve diğer devretmelerin bu güvenlik açısından kritik değerleri değiştirmesini önler. NonceTracker, hesap depolama alanına ne olursa olsun her setImplementation imzasının yalnızca bir kez çalışmasını sağlar.


Zorluk 3: Geleneksel depolama konumlarını paylaşmanın artan riski


ERC-1967 tarafından tanımlananlar gibi standart depolama yuvaları, birden fazla temsilci uygulamasının kullanabileceği geleneksel konumlar oldukları için potansiyel depolama çakışmalarına karşı özellikle hassastır. ERC-1967 uygulama yuvası, EIP7702Proxy'de kullanılan tek standart depolama konumudur ve proxy'nin işaret ettiği mantık uygulamasının adresini depolar. Tasarımımız, bu depolama konumunun değerinden bağımsız olarak (hesapta kullanılabilir mantığın çoğunu belirler), EIP7702Proxy'nin uygulama mantığını her zaman EOA tarafından beklenen sözleşmeye başarıyla ayarlayabileceğini garanti eder.


Neyin çözüldüğünü daha açık hale getirmek için, bir hesap farklı temsilciler arasında geçiş yaptığında (A→B→A) ve her iki temsilcinin de ERC-1967 proxy modelini uyguladığında, temsilci B'nin doğal olarak temsilci A'nın uygulama adresini depolamak için kullandığı aynı depolama yuvasını kullanacağını unutmayın. Temsilci B, süresi boyunca bu yuvayı kasıtlı olarak veya kendi proxy'sinin normal bir parçası olarak değiştirebilir veya üzerine yazabilir. UUPSUpgradeable proxy deseninde, uygulamayı yükseltme mantığı uygulama sözleşmesinde tanımlanır. Temsilci B tarafından bu işaretçi konumuna yerleştirilen uygulama, uygulamada beklenen upgradeToAndCall arayüzünü içermiyorsa, temsilci A'ya geri dönüldüğünde, uygulamasını değiştirme mekanizması şu anda mevcut mantıkta mevcut olmayabilir.


Paylaşılan eski depolama konumunun üzerine yazan yeni temsilci örneği


Çözüm: EIP7702Proxy'de yükseltme mekanizması mevcuttur


EIP7702Proxy'miz, doğrudan proxy'nin kendisinde uygulamadan bağımsız bir yükseltme mekanizması sağlayan setImplementation işleviyle bu sorunu çözer. Bu, ara temsilcinin ERC-1967 uygulamasını geçersiz bir uygulamaya işaret etmesi (veya tamamen kaldırması) durumunda bile, EIP7702Proxy'ye geri temsilci atandıktan sonra, orijinal EOA'nın proxy'nin ERC-1967 işaretçisini kendi seçtikleri mantıksal uygulamaya işaret edecek şekilde yeniden yapılandırma yeteneğini koruduğunu garanti eder.


4. Görev: Standart EOA Davranışıyla Geriye Dönük Uyumluluk


EIP7702Proxy'nin tasarım hedeflerinden biri, yeni akıllı sözleşme işlevselliğine ek olarak hesap EOA işlevselliğiyle geriye dönük uyumluluğu sürdürmekti. Bir adreste kodun varlığı veya yokluğu, bu özelliği EOA'lar ile akıllı sözleşmeler arasında ayrım yapmak için kullandıkları için, bu adresle etkileşim kuran protokollerin yürütme akışını etkiler. Dikkate alınması gereken iki ana davranış vardır: imza doğrulama ve belirteç alma davranışı.


İmza Doğrulaması


Akıllı sözleşmeler için imza doğrulama standardı, standart EOA'lardan farklıdır. Akıllı sözleşmeler, ERC-1271 tarafından tanımlanan isValidSignature arayüzünü uygular ve sözleşmenin bir imzayı geçerli sayıp saymadığını belirlemek için keyfi mantığı tanımlamakta özgürdür. Standart EOA'lar için imzalar, imzalayanın beklenen EOA adresine geri dönmesini sağlayan standart bir ecrecover kontrolü aracılığıyla doğrulanır.


Mevcut veya gelecekteki EOA imzalarının 7702 yükseltmesinden sonra EOA'da tanınmaya devam etmesini sağlamak için EIP7702Proxy, mantık uygulamasında tanımlanması gereken bir isValidSignature işlevine imza doğrulamasını ilk önce devreden bir isValidSignature sürümü uygular, ancak doğrulama başarısız olursa son bir ecrecover kontrolü gerçekleştirilir. Bu kontrol geçerse imza geçerli kabul edilir. Bu şekilde, EIP7702Proxy kullanan EOA'lar, akıllı sözleşme cüzdanlarının isValidSignature uygulamasından bağımsız olarak, basit EOA imzalarının her zaman adreslerinde tanınacağını garanti edebilir.


Token Alma


Bazı token standartları (özellikle ERC-1155 ve ERC-721), tokenların onları yönetemeyen akıllı sözleşmelerde takılıp kalmasını önlemeye çalışır. Bu tokenlar, bu tür tokenları alacak herhangi bir akıllı sözleşmenin, token transferleri sırasında token sözleşmeleri tarafından çağrılan standart token alıcı arayüzlerini uygulayarak bu yeteneği duyurmasını gerektirir. Yükseltilmiş EOA'daki mantığın, yerel tokenları alabilmek için standart bir alma işlevi veya ödenebilir geri dönüş içermesi de önemlidir. Hesaplar, kısa bir süre için bile olsa, ETH veya diğer tokenları alamayacakları bir durumda asla bırakılmamalıdır.


Proxy'mizde ilk uygulama olmadığından, ERC-1967 göstergesinin yokluğunda EIP7702Proxy için varsayılan mantık olarak değişmez bir DefaultReceiver uygulaması ekledik. Bu alıcı, alma işlevini ve bu ortak belirteçler için standart alıcı kancalarını uygulayarak, hesapların yeni bir uygulamayı açıkça ayarlamadan önce belirteç transferlerini kabul edebilmesini sağlar.


Sonuç


EIP7702Proxy tasarımı, standart olarak dağıtılan CoinbaseSmartWallet'larla yakın uyumu sürdürmemizi ve EIP-7702 bağlamında ortaya çıkan benzersiz güvenlik zorluklarını ele alırken mevcut CoinbaseSmartWallet uygulamasını kullanmaya devam etmemizi sağlar. Başlatma güvenliğini, depolama zamansallığının ve müdahalenin etkisini, kesintisiz token işleme ihtiyacını ve standart EOA imza doğrulamasıyla geriye dönük uyumluluğu dikkatlice göz önünde bulundurarak, EIP-7702 akıllı sözleşme cüzdanlarını güvenli bir şekilde devretmek ve yönetmek için bir proxy oluşturduk. EIP7702Proxy, CoinbaseSmartWallet V1 uygulaması düşünülerek tasarlanmış olsa da, bu proxy nihayetinde uygulamadan bağımsızdır. Geliştiricileri, diğer akıllı sözleşme cüzdanı uygulamalarını 7702'ye karşı korumak için bu çözümü değerlendirmeye teşvik ediyoruz.


Orijinal bağlantı


BlockBeats Resmi Topluluğuna Katılın:

Telegram Abonelik Grubu: https://t.me/theblockbeats

Telegram Sohbet Grubu: https://t.me/BlockBeats_App

Twitter Resmi Hesabı: https://twitter.com/BlockBeatsAsia

举报 Düzeltme/Rapor
Kütüphane Seç
Kütüphane Ekle
İptal
Tamamla
Kütüphane Ekle
Sadece kendime görünür
Herkese Açık
Kaydet
Düzeltme/Rapor
Gönder