MPC Snap: MetaMask'a Çok Faktörlü Kimlik Doğrulama Entegrasyonu

Bogotá'da geliştirilen bir Sozu House Hackathon Snap'i

7 dk okuma
MPC Snap: MetaMask'a Çok Faktörlü Kimlik Doğrulama Entegrasyonu

MetaMask Snaps, MetaMask'ı dünyanın en genişletilebilir cüzdanı haline getirme yol haritasıdır. Geliştirici olarak, özelliklerinizi ve API'lerinizi tamamen yeni yollarla MetaMask'a entegre edebilirsiniz. Web3 geliştiricileri bu büyümenin temelini oluşturmaktadır ve bu seri, bugün inşa edilen yenilikçi MetaMask Snaps'leri tanıtmayı amaçlamaktadır.

Web3Auth Snap

Snap Deposu: https://github.com/Web3Auth/openlogin-snap/

Neden geliştirdiniz?

Web3Auth olarak, çok faktörlü kimlik doğrulamanın kripto varlıklarını güvence altına almanın en iyi yolu olduğuna ve seed phrase'lerden çok daha üstün olduğuna her zaman inandık. ETHBogota'da MetaMask Snaps'in en son sürümünün harici anahtar yönetimi özelliklerine izin verdiğini gördüğümüzde, Sozu House hackathon'unda MPC teknolojisini MetaMask'a entegre etme konusunda kendimize meydan okumaya karar verdik.

Teknik uygulamayı bize anlatabilir misiniz?

  • Hedefimiz, yeni bir kullanıcının MetaMask'taki hesabına erişmek için giriş yapmasına ve 2FA kurmasına olanak tanımaktı. Ardından, arka planda bir işlemi imzalamaya çalıştıklarında MPC SDK'mız bir eşik ECDSA imzası gerçekleştirir. Bu işlem, özel anahtarı iki parçaya bölerek yapılır: snap'te saklanan yerel bir pay ve bir imzalama sunucusunda saklanan bir pay. Birkaç iletişim turu boyunca imzalama sunucusu ve snap, bir Ethereum işlemini ortaklaşa imzalayabilmeli ve Goerli ağında onaylatabilmelidir. Seed phrase'lerin aksine, bu kurulumun anahtarların geri dönülemez biçimde kaybolmasına yol açan tek bir başarısızlık noktası yoktur: kullanıcının dizüstü bilgisayarı ele geçirilse ya da imzalama sunucusu hacklenmiş olsa bile kullanıcı özel anahtarını kaybetmez.

  • Diğer tüm snap'ler gibi snap'imiz de iki bölümden oluşur: asıl snap paketi ve snap'i yükleyen/snap'le etkileşime giren bir sayfa. İdeal kullanıcı akışımız, tüm anahtar yönetimi etkileşimlerini MetaMask uzantısının kullanıcı arayüzü içinde tutmaktı; ancak izin kısıtlamaları nedeniyle bunu gerçekleştiremedik. Bunun yerine kullanıcı kimlik doğrulaması snap dışında gerçekleşiyor ve tamamlandıktan sonra durumu snap'e taşıyoruz. Ardından Metamask'ın RPC motoruna bağlanıyor ve işlem isteklerine, snap'teki MPC SDK'mızı ve taşınan durumu kullanarak işlemler üzerinde eşik ECDSA imzaları oluşturarak yanıt veriyoruz. Şaşırtıcı biçimde, hackathon'un ilk birkaç saati içinde durum taşıma bölümünü tamamladık ve yalnızca imzalama işlevi kaldı.

  • Sürecin geri kalanı iki ana göreve ayrılabilir:

  • Gelen işlem isteklerini yönetmek için mevcut Web3 sağlayıcılarını MPC SDK'mızla yeniden yapılandırmak

  • MPC SDK'larını MetaMask Snaps SES ortamında çalıştırmak

  • MetaMask'ın nasıl çalıştığına ya da diğer cüzdanların nasıl işlev gördüğüne aşinaysanız, bir Ethereum işlemini imzalamanın yalnızca bir mesajı imzalamak için özel anahtar kullanmaktan çok daha fazlasını gerektirdiğini bilirsiniz. İmzalanacak mesaj nesnesini oluşturmak için büyük çaba harcanır. Her işlem, her zincire ve işlem türüne özgü belirli bir biçimi izler; geriye dönük uyumluluk için desteklenmesi gereken eski davranışlara sahiptir; mevcut gaz fiyatları hakkında bilgi almak, kullanılacak gazı/gaz limitlerini hesaplamak ve hesap nonce'unu takip etmek gibi işlemleri yerine getirmek zorundadır. Neyse ki mevcut Web3 sağlayıcılarının çoğu bu işlemleri kutudan çıkar çıkmaz yapıyor. Ancak eşik imza kütüphanemizin bu SDK'larla düzgün çalışmasını sağlamak için her modülü derinlemesine incelememiz ve eth-sig-util kütüphanesinin imzalama işlevlerini kendi eşik imza kütüphanemizin imzalama işlevleriyle değiştirmemiz gerekti; bu da önemli miktarda zaman aldı. Bunun yanı sıra MPC SDK'mız zincirden bağımsız olduğundan ve Ethereum'a özgü kontrolleri hesaba katmadığından, değiştirdiğimiz eth-sig-util kütüphanelerinden kontrolleri tersine mühendislikle yeniden uygulamak zorunda kaldık. Örneğin EIP-2, işlem değiştirilebilirlik saldırılarını önlemek amacıyla bir ECDSA imzasındaki s-değerinin n/2 + 1'den büyük olmaması gerektiğini belirtir; burada n, secp256k1 eliptik eğrisinin mertebesidir. Bu durum, ECDSA imzalama kütüphanelerinin s-değeri bu aralığın dışına düşerse imzayı "çevirmesini" gerektirir.

  • Karşılaştığımız bir diğer zorluk, MPC SDK'larımızı MetaMask Snaps ortamında çalıştırmaktı. MPC SDK'mız, tarayıcıda verimli çalışmak için wasm (Rust'tan derlenen) kullanır. SDK ile imzalama sunucusu arasındaki çoklu iletişim turları nedeniyle, HTTP başlıklarının ek yükünden kaçınmak amacıyla iletişim için Socket.IO da kullanır. Wasm kodumuzu snap'e yüklemeye çalışırken wasm yöntemlerinde karışık bağımsız değişken türleriyle ilgili garip sorunlarla karşılaştık. Ne yazık ki wasm hata ayıklama araçları hâlâ oldukça yetersiz; hata mesajları yararsız ve bilgi içermiyor (örn. "Uncaught RuntimeError: unreachable"). Sonunda tüm karışık giriş bağımsız değişkenlerini string olarak kabul edip wasm kodunun kendisinde integer/byte dizisi olarak ayrıştırarak bu sınırlamayı aştık. Karşılaştığımız bir diğer sorun ise socket.io'nun MetaMask Snaps ortamında çalışmamasıydı. Socket.IO, normal WebSocket'ler üzerine inşa edilmiş ayrı bir kütüphane/spesifikasyondur; bağlantı yükseltme, düşen bağlantılar, uzun yoklamaya geri dönüş gibi işlemleri yönetir ve üretim ortamlarında WebSocket kullanırken oldukça faydalıdır. Ne yazık ki Socket.IO kütüphanelerini Metamask Snap ortamında çalıştıramadık. Bu nedenle normal WebSocket'lere geri dönmek ve imzalama sunucusunu socket.io yerine varsayılan WebSocket'leri kullanacak şekilde yeniden yazmak zorunda kaldık; WebSocket sorun yaşarsa yoklama stratejisine geri dönüyoruz.

Kendiniz ve ekibiniz hakkında biraz bilgi verebilir misiniz?

Zhen ve ben Web3Auth'un kurucu ortaklarıyız; şirketimiz sezgisel, güvenli ve gözetim dışı anahtar yönetimi çözümleri sunma konusunda uzmanlaşmıştır. İyi güvenliğin kullanımı kolay ve görünmez olması gerektiğine inanıyoruz; aksi takdirde geniş çapta benimsenmez. Bu nedenle özel anahtarlar için çok faktörlü kimlik doğrulamanın kullanılmasını büyük ölçüde destekliyoruz.

MetaMask Snaps ile ilk ne zaman tanıştınız ve deneyiminiz nasıldı?

Metamask Snaps'i yaklaşık bir yıl önce denedik; ancak o dönemde MetaMask içindeki özel anahtar yönetimi işlevlerini genişletmemize olanak tanıyacak özelliklere sahip değildi. MetaMask Snaps'in MetaMask'ın keyring'ini genişletmesine izin veren SIP-2'nin yakın zamanda tanıtılmasıyla (teşekkürler Olaf!) neler yapılabileceğini görmek için çok heyecanlandık! Snap'imizi geliştirirken MetaMask Snaps'in dayandığı SES sistemini de inceledim ve MetaMask'ın geliştiricilerin MetaMask Snaps aracılığıyla işlevsellik ekleyebileceği bir platform olarak hareket etmesi için çok sağlam bir temel oluşturduğunu düşünüyorum.

MetaMask Snaps'i diğer cüzdanlardan farklı kılan nedir?

Genişletilebilirlik! MetaMask Snaps'in, geliştiricilerin MetaMask uzantısının güvenliğinden ödün vermeden MetaMask'ı denemelerine ve geliştirmelerine olanak tanıyan güvenli bir arayüz sunduğunu düşünüyorum. Diğer proje türlerinin aksine cüzdanlar yüksek güvenlik standartları gerektirir; bu da üçüncü taraflardan gelen yeni işlevlerin entegrasyonunu her zaman uzun ve zorlu bir kod incelemesi ve denetim sürecine dönüştürür, bu da yeniliği kısıtlar. MetaMask Snaps, MetaMask ekibinin güvenli bir ürün geliştirmeye devam etmesine olanak tanırken harici geliştiricilerin de işlevselliği denemesine ve genişletmesine imkân verir.

MetaMask ile Snaps geliştirmek sizin ve ekibiniz için nasıl bir deneyim?

MetaMask Snaps'in kesinlikle doğru yol olduğunu düşünüyorum; insanların temel MetaMask uzantısını güvende tutarken işlevsellik geliştirmesine olanak tanıyor. Şu an bazı aksaklıklar var ama her geçen gün iyileştirmeler geliyor; genel olarak çok heyecan verici olduğunu düşünüyorum.

MetaMask Snaps sizin için ne ifade ediyor?

MetaMask Snaps aracılığıyla MetaMask'a çok faktörlü kimlik doğrulama özelliklerinin eklenmesinin, MetaMask'taki milyonlarca ana akım kullanıcının hesaplarını daha güvenli yönetmesine yardımcı olmasını ve onları dolandırıcılık ile hack saldırılarının kurbanı olmaktan korumasını umuyorum. MFA, bugün milyarlarca Web2 kullanıcısı için bunu zaten yapıyor ve bu güvenli en iyi uygulamaları Web3'e taşımak istiyoruz.

MetaMask Snaps ile Web3 alanı için açtığı olasılıklar konusunda ne gibi fırsatlar görüyorsunuz?

Genel olarak MetaMask Snaps'in, MetaMask'ın güvenlikten ödün vermeden kod tabanını başkalarının katkısına açması için gerçekçi bir yol sunduğunu düşünüyorum.

MetaMask Snaps'i denemek isteyen geliştiricilere vermek istediğiniz tavsiyeler var mı?

Sadece deneyin! Biraz yeni görünebilir ama şimdiye kadar oldukça erişilebilir oldu ve MetaMask Snaps için Consensys Discord kanalındaki destek harika. Üzerinde çalışan pek çok yetenekli geliştirici var; MetaMask Snaps'i şekillendiren konuşmanın bir parçası olmak istiyorsanız, şimdi üzerine geliştirme yapma ve geri bildirim verme zamanı!

MetaMask Snaps ile Geliştirme

MetaMask Snaps'e başlamak için:

  1. Geliştirici belgelerine göz atın

  2. MetaMask Flask'ı yükleyin

  3. Bir MetaMask Snaps kılavuzuna göz atın

  4. Twitter, GitHub tartışmaları ve Discord üzerinden bizimle bağlantıda kalın

Yakınınızdaki bir sonraki hackathon'da ekibimizi takip edin! Mutlu BUIDLing ⚒️

Sorumluluk Reddi: MetaMask Snaps genellikle Consensys Software dışındaki üçüncü taraflarca geliştirilmektedir. Üçüncü taraflarca geliştirilen MetaMask Snaps'lerin kullanımı tamamen kendi takdirinize ve riskinize bağlıdır; bu tür faaliyetlerden kaynaklanan herhangi bir kayıp veya zarardan yalnızca sizin sorumlu olacağınızı kabul etmiş sayılırsınız. Consensys, üçüncü taraflarca geliştirilen MetaMask Snaps'ler için sözlü veya yazılı, açık veya zımni hiçbir garanti vermez ve üçüncü taraflarca geliştirilen MetaMask Snaps'ler için tüm sorumluluktan feragat eder. Blok zinciri ile ilgili yazılımların kullanımı riskler barındırır ve MetaMask Snaps'i kullanırken bu risklerin tamamını üstlenmiş olursunuz.

Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.

Çeviriyi değerlendir
  • MetaMask
    MetaMask

    Consensys tarafından geliştirilen, öncü kendi saklama yetkili kripto cüzdanı ve kriptoya açılan kapı.

    Tüm makaleleri oku