Hardware wallet neden güvenli? Donanım cüzdan ne saklar?

in #donanimcuzdan6 years ago (edited)

Bitcointalk'taki bir konunun mesajlarını steemit'e aktarmak istedim.
Konu bir soru ile başlıyor.

Bir kripto para var, bunun kendine ait bir ağı var, cüzdanlar ağın birer parçası ve tabii minerlar ve master nodelar var.
Sistem tıkır tıkır işliyor ama herşey online olmak zorunda zira tüm bu blockchain defteri online olarak herkesin bilgisayarında birer kopya şeklinde duruyor.
Hardware wallet denen, aslında bir tane secure flash entegresi ve mikroişlemci barındıran devrecikler içlerinde ne saklıyor?
Kripto parayı cüzdandan çeksek başka bir cüzdana atsak o da online olmalı ki herkesin defterinde bulunsun ve kaybolmasın değil mi?
Peki donanımsal cüzdana bu parayı çekersek ve internetini kesersek ne olur? Herkesten silinmez heralde, e silinmiyorsa bu cüzdana niye çektik, zira o cüzdan adresi internette var ve private key i biri bilse bizim para donanımsal cüzdanda olsa bile çekemez mi?
Donanımsal cüzdan tam olarak ne saklar?

Gelen ilk cevap şu;

Merhabalar. Hardwarewallet'ların içerisinde genel olarak secure element ve unsecure element adında iki grup bulunuyor. unsecure elementin görevi harware wallet ile walletı bağladığınız cihaz arasında iletişim kurmaktır. Secure element ise hiçbir zaman bağlantı kurduğunuz cihazla doğrudan bağlantı kurmaz. Hardware wallet'ınızı bilgisayara bağlayıp bir para gönderme işlemi yaptığınızda olan hadiseler kısaca şöyledir: Parayı göndereceğiniz adres, göndermek istediğiniz miktar unsecure elemente gönderilir. Unsecure element bu bilgileri secure elemente aktarır. Secure element sakladığı private key ile yapmak istediğiniz işlemi onaylayıp imzalar ve imzalanmış veriyi unsecure elemente geri gönderir. Unsecure element de işlenmiş, imzalanmış veri paketini bilgisayara geri gönderir. Bilgisayar bu veriyi blockchain'de yayınlanması için mempoola gönderir. Böylece private keyiniz işlemin hiç bir safhasında secure elementin içinden çıkmamış olur.

Özet olarak secure elementin iki görevi vardır: Private keyinizi saklamak ve kendisine unsecure elementten gelen imzalama işlemlerini private keyi kullanarak imzalamak ve imzalanmış bu bilgiyi unsecure elemente iade etmek.

Şu linkten trezor one'ın devre çizimlerine, fotoğraflarına bakabilirsiniz: https://github.com/trezor/trezor-hw/tree/master/electronics

Kripto parayı cüzdandan çıkarmak diye bir şey olamaz, zira cüzdanın içinde bulunan tek şey private keyiniz. Paralar cüzdanın içinde durmuyor yani. Kriptoparalarınız blockchain üzerinde kriptolanmış olarak herkes tarafından muhafaza ediliyor. Sizin hardware walletta bulunan tek şey size ait olan kriptolanmış veriyi çözmenizi sağlayacak anahtardan başka bir şey değil. Dolayısıyla hardware walletlların internet bağlantısının kesilmesi (ki zaten bu cihazlar teoride hiçbir zaman internete bağlanmıyor, internete bağlı olan şey sizin telefonunuz, tabletiniz ya da bilgisayarınız) hiçbir şeyi etkilemiyor.

Umarım faydalı olmuştur. Size naçizane tavsiyem hardware walletların çalışma mantığından önce blockchain'de verilerin nasıl saklandığı ve kullanıcıların blockchainle etkileşiminin nasıl olduğuyla bilgi sahibi olmanızdır. Saygılar.

Daha sonra ilk soruyu soran arkadaş yeni ve güzel bir soru ile devam ediyor

Mükemmel bir açıklama, teşekkür ederim, ilk meritleriniz benden.
Benim de tahminim bu yöndeydi zaten aksini düşünmek çok da mantıklı değil, sistem komple online ve size özel olan tek şey private key.
Yani aslında private key ile imzalama işi yapıyor, hardware wallet ismi biraz ticari kandırmaca gibi olmamış mı?
Trezor şemalarını inceledim, burada aslında donanımsal olarak secure bir chip bulunmuyor, tüm veri STM32F205 mikrokontrolcüsünün flash hafızasında tutuluyor.
Önceden Ledger Nano S in şemasını incelemiştim, orada SPI üzerinden haberleşen bir secure flash chipi kullanmışlar, örneğin bu kimyasal yollarla da verinin ele geçirilmesini engelliyor, oysa STM32 yi kazıyıp read protection bitini dışarıdan sıfırladıklarında tüm flash ı dolayısıyla private key i de çekebilirler.
Secure element ve unsecure element olarak tam neyi kastediyorsunuz daha spesifik bahseder misiniz?

İlk cevabı veren arkadaş yeniden cevaplıyor

Gerçekten çok dikkatlisiniz. Konuyu ayrıntılı bir şekilde incelemişsiniz.
Belirttiğiniz gibi Ledger'ın içerisinde secure element bulunurken, Trezor'un elemanı secure element olarak çalışmıyor. Bu sebeple Trezor donanımından yazılımına kadar açık kaynak kodlu bir cihazken Ledger'ın firmware'i açık kaynak kodlu değil. Trezor'un geliştiricisi Satoshi Labs'in kapalı kaynak kodunu risk olarak gördüğünü sebepleriyle birlikte açıkladığı bir makalesi mevcut. Buradan ilgili makaleyi okuyabilirsiniz:
https://blog.trezor.io/is-banking-grade-security-good-enough-for-your-bitcoins-284065561e9b#.vc68zeeqp
Trezor'un güvenliğini sağlayan öncelikli faktör, cihazın açılışında sorulan pin kodu. Bu pin kodu doğru şekilde girilmeden cihazın açılması ve private key'e erişilebilmesi gerçek anlamda mümkün değil. Brute Force yöntemiyle bu şifre kırılabilir mi diye sorabilirsiniz, yanlış yapılan her şifre girişi için Trezorda üssel olarak artan bir bekleme süresi mevcut. İlk yanlış girişte bir saniye, ikincide 2 saniye, üçüncüde 4, dördüncüde 8 ... 16, 32, 64, 128, 256, 512, 1024 derken onbeşinci denemede şifrenin girilebilmesi için yaklaşık 22 gün beklenmesi gerekiyor. Bu süre içerisinde Trezoru çalınan kullanıcının seed word'leri kullanarak kriptoparalarını başka bir hesaba alarak güvenliğini sağlaması düşünülmüş. Bu sebeple Trezor'da önemli olan seed word'lerin fiziksel olarak güvenli bir yerde muhafaza edilmesi ve bu kelimelerin hiçbir şekilde elektronik ortamda saklanmaması, klavyeden dahi girilmemesi.
Kimyasal yöntemle Trezorun STM.. işlemcisinin kazınarak içeriğine ulaşılması yöntemine gelince. Bahsettiğiniz yöntemin özü şu şekilde: İşlemcinin üzerindeki katmanları asitle eritip alt katmanda bulunan işlemciye erişiyorsunuz. Trezorda kullanılan STM işlemcisi Cortex M3 ailesinden bir işlemci. (İşlemciyle ilgili detaylı bilgi için: https://developer.arm.com/products/processors/cortex-m/cortex-m3 ). Bu işlemci tek bir katmandan oluşmadığı, katmanlardan oluştuğu için asitte işlemciyi erittiğinizde aslında işlemciyi ve flash belleğini kullanılmaz hale getirmekle kalmıyor aslında yok ediyorsunuz. İşlemciye zarar vermeden katmanlara erişmek imkansız yani. Hadi bir şekilde kötü niyetli kişi bunun da üstesinden geldi diyelim, Trezor'un flash belleği içerisinde private key kullanıcının belirlemiş olduğu pin'e göre şifrelenmiş durumda. Yani flash belleğe bir şekilde erişilse bile kötü niyetli kişinin karşılaşacağı şey şifrelenmiş veriden başka bir şey değil. Bu durumda brute force yaparak private key'e erişilmesi mümkün olabilir. Ancak saydığım sebeplerden ötürü bu neredeyse imkansız.
Özet: Ledger'da secure ve unsecure elemanlar mevcutken, Trezor'da herşey açıkta, yani sadece tek bir eleman var.
Ledger'da kullanılan secure ve unsecure elementten kasttetiğim şeyi, ilk gönderdiğim postta açıklamaya çalışmıştım.

Konuyu açan arkadaş güzel yorumlara ve sorulara devam ediyor

Yine detaylı ve mükemmel açıklamalar için teşekkürler.
Trezor secure flash chipi kullanmadığı için kaynak kodunu vererek güven kazanmaya çalışmış. (Fakat STM32 her yönden unsecure bir işlemci)
Ledger Nano ise secure SPI flash kullandığı için zaten güvenliyiz demiş ama aslında SPI verisini dinleyip yine birşeyler elde edilebilinir, kim bilir.
Asıl konu wallet diye satın aldığımız şeyin, para değilde sadece private key saklıyor olmasıydı. Böyle bir cihaz istiyorsam, kaynak kodunu alır, devreyi de PCB ye basar kendim üretirim, sanıyorum bana 20$ civarına mal olur.
Yada kendim yapacaksam da imzalama kodunu alıp gerisini kendim yazardım, o kadar güvenli olmazdı belki ama custom cihaz olacağından zaten kim bilip kim uğraşacak derdim Smiley
Diğer konuya gelirsek eğer,
1 - Çinde 750$ - 4000$ arası paralara birkaç saatte STM32 chiplerinin readout protection unu kıran firmalar mevcut. (Şimdi birilerini teşvik etmemek için linkini vermiyorum)
Bu işlemi yüzde yüz başarıyla yapıyorlar, yaptıkları şey yine kimyasal yolla epoxy katmanın doğru noktalarını eritip readout protection bitini lojik 0 seviyesine çekmekten ibaret.
Eskiden PIC MSP AVR tipi işlemcilerde JTAG yada programlama arayüzü üzerinden yapılan ataklarla bunu yapmak mümkündü, şimdi sanıyorum artık kalmadı öyle yöntemler.
2 -
Readout protection özelliği kırılmış bir işlemcinin pin kodunu kırmak zor olmayacak, zira onun kullandığı timeoutlara gerek bile yok, içindeki private key in ve pin in bulunduğu memory adresleri zaten belli, işlemciye program atmadan direkt debug modunda başlatılır ve runtime da RAM haritasında herşey ortaya dökülür, bizim birşeyi kırmaya çalışmamıza bile gerek yok.
Bir diğer yöntem ise hiç readout protection ile uğraşmadan dışarıdan brute force ile kırma yöntemi, Trezor donanımsal olarak bir saat ve pil içermiyor, bu da bilgisayara güvenmek zorunda demektir, pin girme için bekleme sürelerini bilgisayardan alıyorsa açık kaynak bilgisayar programı biraz editlenip istenen kıvama getirilebilir, Trezor 22 gün bekledim zanneder ama aslında sadece reset yemiştir.
Bunun gibi birkaç yöntem daha geliyor aklıma ama detaylandırmayayım.
Bahsettiğim şekilde kırılabilir mi sizin yorumunuz nedir?

Başka bir arkadaş ise başka bir yönden değiniyor konuya

Yukarıda süper bir teknik açıklama var. Ben işin felsefesine dokunayım istedim:
Tüm walletlar şu şartlar altında hemen hemen eşit güvenlikte. Şu şartlar dediğim şey; art niyetli bir wallet olmayacak, güvenlik açığı olmayacak ve o wallet kullanarak içindeki asset hareket ettirilmeyecek. Bu şartları sağladığınızda paperwallet = hardwarewallet = bitcoincore = vesaire. Örnek olarak Bitcoinden gidelim. Bitcoinler walletın içinde değil. Walletlar blockchain üzerinde tutulan ledgerın, size düşen private key üstündeki bakiyeyi gösteren birer araç. Bir walleta gerekli modifikasyonu yaparak Satoshi abimize ait key'deki bakiyeyi de göstertebilirsiniz. Ama bu gösterdiği bakiyeyi harcayamazsınız. (Ledger üzerinde hareket ettiremezsiniz.) Harcayabileceğiniz bitcoin sizin bildiğiniz (size ait olan) key'in bakiyesi olabilir sadece.
Buraya kadar mutabıksak, gelelim güvenlik problemine.
Güvenlik zincirini bozan şey çoğunlukla kullanıcı oluyor. Bitcoin ağının güvenliği bugüne kadar ciddi bir şekilde test edildi, yoklandı. Henüz bir falsosunu yakalayamadık. Demek ki başımıza ne geliyorsa ya kötü niyetli ataklar sonucunda ya da kendi dikkatsizliğimiz sonucunda geliyor.
HW walletlar da buradan çıkmış yola. Eğer bizim başımıza bir şey gelecekse private key'i kaptırmamız sebebiyle gelecek. Eğer kişinin kendisi bile private keyi bilmezse ve bilmiyor olmasına rağmen bitcoinlerini hareket ettirme imkanı olursa ortaya süper bir şey çıkar. İnsanlık bunu nasıl yapabileceğini düşününce HW walletı buluyor zaten Smiley
Özet olarak HW wallet güvenli, çünkü private keyi ortada dolaştırmadan, size söylemeden kullanabilmenizi sağlıyor. Böylece en zayıf güvenlik halkası olan kullanıcıdan ileri gelebilecek hataları kısmen de olsa bertaraf ediyor.

Devamında yeniden teknik bilgiler

Sinyal analiziyle Trezor One'un 1.3.2 versiyon numaralı firmware'i için yapılmış olan hack girişimini bu adresten takip edebilirsiniz: https://jochen-hoenicke.de/trezor-power-analysis/
Burada şunu da ekleyeyim şu anda 1.6 küsürlü firmware kullanılıyor ve makalede belirtilmiş olan açıkların hepsi giderilmiş durumda.
Trezorun üstünde pil olmaması zaman geri sayımını bağlı olduğu bilgisayardan zaman bilgisi alarak yaptığı anlamına gelmiyor. Nasıl ki USB bellekle bilgisayara bağlı olmasalar bile yıllarca kendilerine kayıtlı verileri muhafaza ediyorsa Trezor da countdown verisini private keyle kriptolayarak kalıcı hafızasında saklıyor. Diyelim ki PIN ardı ardına yanlış girildiği için 256 saniyelik geri sayım başladı ve gerisayımın bitmesine 120 saniye kala cihazı bilgisayardan çıkardınız. Bu durumda cihazı tekrar bilgisayara bağladığınızda geri sayım 120 saniyeden devam etmiyor, tekrar 256 saniyeden başlıyor. Buradan varmak istediğim sonuç şu, cihazı 256 saniye boyunca bilgisayara bağlı tutmadan bu süreci bypass etmek mümkün değil.
Aklınıza gelen veya yukarıda saydığınız yöntemlerin hiçbiriyle Trezor'un kırılabilmesi mümkün değil. Şimdiye kadar seedwordlerin güvenliği ihlal edilmeksizin Trezor'dan kriptoparası çalınmış kimse yok. Satoshi Labs cihaz güvenliğini artırmak için sürekli çalışıyor. Ledger tarafı için bir şey diyemeyeceğim, çünkü bilgim yok.
Hardware walletların şu an kullanabileceğiniz en güvenli elektronik private key saklama aracı olduğunu rahatlıkla söyleyebilirim. En zayıf halka insan. Seed wordlerinin güvenliğini sağlayamayan bir kullanıcı için cihaz ne kadar güvenli olursa olsun yapacak bir şey yok.

Konuyu açan arkadaştan güzel yorumlar devam ediyor

Konuyu detaylı bir şekilde anlamama yardımcı oldunuz, teşekkür ederim.
Bahsettiğim resetleme yöntemiyle yine yapılabilir belki, flash bölgesine yazma yapmak için belli miktarda nispeten yüksek anlık akım çekilmesi gerekir, LCD nin VCC pinini sökersek değişken akımları bir nevi azaltmış olacağız, sonrasında ise hassas akım ölçen bir analog devre ile trezor u beslersek ve ön tanımlı flash yazma akımına yaklaştığı anda enerjiyi kesersek hiç bir yazma yapamaz. Böylece tekrar tekrar yanlış pin girebiliriz...
İçinde yüklü miktar para olduğu bilinen bir trezor bir hırsızın eline geçse 750$ çinliler okuma korumasını kırıyor, gerisi belli.
Neyse burada trezor kırma alıştırmaları yapmayı bırakalım, bundan bir kazancımız olmayacak.
Peki trezor un fiyatına baktım 85 euro yazıyor, 400TL den fazla. Komple açık kaynak olduğu için, biz Türkiyede ucuza (~30$) üretsek de herkes bu imkana sahip olsa nasıl olurdu acaba.

Konu devamında da gayet güzel bir kaç mesajla ilerliyor. Tamamını okumak isterseniz şuradan alalım

https://bitcointalk.org/index.php?topic=3276775.0

Sort:  

Dear phi1618:

We are SteemBet, the next generation STEEM based gaming platform. We are honored to invite you to join our first fantastic dice game, which is just the beginning of SteemBet game series. Our dividend system has now launched. The prize pool has already accumulated 2,000 STEEM and more than 60 players have participated in staking mining token SBT. A huge reward of 40,000 STEEM is awaiting! Join us NOW with other 500 STEEM users to loot HUGE dividend reward!!

SteemBet Team

Official Website
https://steem-bet.com

Discord Server
https://discord.gg/95cBN3W

Telegram Group
https://t.me/steembet

Congratulations @phi1618! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

SteemFest⁴ commemorative badge refactored
Vote for @Steemitboard as a witness to get one more award and increased upvotes!