Dingen om te weten: |
- Zaadgeneratie van Trust Wallet was gebrekkig, de totale entropie was slechts 32 bits. We hebben een bestand gemaakt met alle mogelijke zaden.
– Gelukkig ontdekte de Ledger Donjon de kwetsbaarheid zeer snel en vermeed waarschijnlijk een van de grootste hacks in het crypto-ecosysteem. |
Op 14 november 2022 kondigde Trust Wallet, een veelgebruikte softwareportemonnee, de release aan van zijn browserextensie. Het biedt rechtstreeks vanuit de browser toegang tot digitale activa op verschillende blockchains en is een langverwachte toevoeging aan de bestaande iOS- en Android-apps.
The Ledger Donjon heeft onlangs een kritieke kwetsbaarheid in deze browserextensie ontdekt, waardoor een aanvaller alle activa van elke portemonnee die met deze extensie is gemaakt, kan stelen, zonder enige tussenkomst van de gebruiker. Door het adres van een account te kennen, is het mogelijk om onmiddellijk de privésleutel te berekenen en vervolgens toegang te krijgen tot al het geld. Hieronder vindt u details over de kwetsbaarheid, hoe de Ledger Donjon het ontdekte, de impact ervan in de loop van de tijd, een schatting van de kwetsbare activa en hoe Trust Wallet reageerde om het te repareren. Maar laten we beginnen met het oproepen van de basis.
Hoe portefeuilles worden gemaakt
Het genereren van entropie is lastig. Als wetenschappers houden we van reproduceerbaarheid en het kunnen verklaren van fenomenen met oorzaak-en-gevolg principes. Over het algemeen is het dus moeilijk om willekeur te genereren. Bovendien is het moeilijk om aan te tonen dat willekeurige getallen correct zijn, en een slechte maar niet terminaal gebrekkige generator voor willekeurige getallen kan de waarnemer gemakkelijk voor de gek houden. Voor een goede willekeur hebben we een uniforme verdeling van bits en bytes (en zelfs de grootte van alle brokken) en onvoorspelbaarheid nodig. Voor een waarnemer van een reeks moet het onmogelijk zijn om informatie te hebben over het volgende deel van de reeks dat moet worden gegenereerd.
Omdat deze eigenschappen ongelooflijk moeilijk te bereiken zijn, probeert de cryptocurrency-ruimte zoveel mogelijk te vermijden om op willekeur te vertrouwen - maar we hebben het nog steeds nodig in een bepaald stadium: wanneer we een nieuwe portemonnee maken.
U bent waarschijnlijk al bekend met uw ezelsbruggetje, de 12 tot 24 Engelse woorden waarmee u een back-up van uw portemonnee kunt maken (zo niet, dan kunt u controleren Ledger Academie artikel over dit onderwerp).
Dit geheugensteuntje codeert 16 tot 32 bytes entropie, volgens de BIP 39-standaard – de kwaliteit van deze entropie is van cruciaal belang, aangezien het de kiem zal zijn van alle sleutels die door uw portemonnee op alle ketens worden gebruikt, volgens een deterministisch afleidingsproces gedefinieerd door de BIP 32 en BIP 44 normen.
Dit hiërarchisch-deterministische schema is tegenwoordig vrijwel alomtegenwoordig, als je bedenkt hoe gemakkelijk het voor gebruikers is om een back-up te maken van een oneindig aantal sleutels en de overdraagbaarheid ervan (ondanks dat BIP 39 "unaniem wordt afgeraden voor implementatie"). Ondertekenaarsroaming is een krachtige functie: wanneer uw favoriete portemonnee defect raakt of teleurstelt, kunt u gewoon uw geheugensteuntje meenemen (of nog beter, uw Ledger-apparaat), overschakelen naar een andere, uw financiële vrijheid behouden en de impact van de downtime beperken.
Maar nogmaals, het vereist een onberispelijke entropiebron.
Overzicht van de kwetsbaarheid
Trust Wallet vertrouwt op Vertrouw op Wallet Core, een platformonafhankelijke bibliotheek die low-level cryptografische portemonnee-functionaliteit implementeert voor veel blockchains. Het was gericht op mobiel, maar het richt zich sinds april 2022 ook op Wasm (zie #2132).
Hoewel het grootste deel van de Trust Wallet Core draagbaar is, zijn enkele modules en functies zeer specifiek voor een doel. Dit is met name het geval voor het gedeelte voor veilige willekeurige generatie, dat wordt gebruikt om cryptografisch materiaal te maken, zoals privésleutels, en geheugensteuntje voor HD-portefeuilles. Elke implementatie maakt gebruik van de pseudorandom number generator (PRNG) die wordt aangeboden door het besturingssysteem:
- Voor iOS,
SecRandomCopyBytes
is gebruikt. - Voor Android wordt de entropie geleverd door een instantie van
java.security.SecureRandom
.
Dit is meestal een goede gewoonte, aangezien dergelijke primitieven geacht worden veilig te zijn.
Wasm-backend
Er is een verschil met het Wasm-doel. Deze module kan in verschillende omgevingen worden uitgevoerd, zoals elke browser die Wasm of Node.js ondersteunt. Deze platforms bieden geen gemeenschappelijke sterke PRNG en men kan vanuit deze omgevingen geen toegang krijgen tot de "klassieke" systeeminterfaces. Een Wasm-module die in Chrome voor Linux wordt uitgevoerd, kan bijvoorbeeld niet rechtstreeks lezen /dev/urandom
.
Om dit aan te pakken, is er een speciale zogenaamde "secure random generator" geïmplementeerd #2240. Het is gebaseerd op een PR gemaakt in emscripten (zie PR #12240 in emscripten) precies geschreven om lezen te voorkomen /dev/urandom
.
Volgens de auteur:
Wat we hier doen is simpel, we wrappen std::random_device
Met std::mt19937
en retourneer een willekeurige uint32-waarde, geïnspireerd door emscripten-core/emscripten#12240.
Er is hier een belangrijk probleem dat leidt tot een kritieke kwetsbaarheid voor de wallet-core voor Wasm en voor elk product dat ervan afhankelijk is: de gebruikte PRNG is een Mersenne Twister en mag niet worden gebruikt voor cryptografische doeleinden. Bovendien neemt de gespecialiseerde versie mt19937 een enkele 32-bits waarde als input-seed.
Wat zijn hier de gevolgen? De aangepaste willekeurige module voor Wasm implementeert twee functies: random32
die een 32-bits willekeurige waarde uitvoert, en random_buffer
die een buffer van willekeurige grootte vult met willekeurige gegevens. In het Wallet Core-project worden deze functies exclusief gebruikt door trezor-crypto, de cryptografische bibliotheek die door Trezor is ontwikkeld om veilige cryptografie op hun hardware-wallets te garanderen.
Laten we nu eens kijken hoe HD-portemonnees worden gegenereerd:
- Ingangspunt is HDWallet. Er is een sterkte en een wachtwoordzin voor nodig om het later te beschermen:
https://github.com/trustwallet/wallet-core/blob/3.1.0/src/HDWallet.cpp#L45
Deze functie roept dan op mnemonic_generate
om een BIP-39 geheugensteuntje te maken:
https://github.com/trustwallet/wallet-core/blob/3.1.0/trezor-crypto/crypto/bip39.c#L55
mnemonic_generate
gesprekken random_buffer
, die een willekeurige buffer uitvoert die is gevuld met een Mersenne twister PRNG, waarvan de instantie zojuist is geplaatst:
https://github.com/trustwallet/wallet-core/blob/3.1.0/wasm/src/Random.cpp#L19
Omdat de seed slechts 32 bits is, maakt de Wasm-versie van wallet-core het mogelijk om slechts 2 ^ 32 (~ 4 miljard) mogelijke geheugensteuntjes te maken. Al deze ezelsbruggetjes kunnen in een paar uur op een enkele computer worden gegenereerd.
Van daaruit kan een aanvaller:
- Bereken alle zaden, privésleutels en vervolgens adressen van elke cryptocurrency die door Trust Wallet wordt verwerkt.
- Scan de gerelateerde blockchains om alle gebruikte adressen te extraheren.
- Bereken het snijpunt om alle adressen van portefeuilles te krijgen die door Trust Wallet for Wasm zijn gemaakt en hun geld te stelen.
Het uitvoeren van een dergelijke aanval duurt veel meer dan een paar uur, maar is met een paar GPU's in minder dan een dag te doen (zie medium.com/@johncantrell97/how-i-checkte-meer dan 1-triljoen-mnemonics-in-30-hours-to-win-a-bitcoin voor een kostenraming. Aanvallen is hier 256 keer eenvoudiger).
Toepassing op de Trust Wallet-browserextensie
De Trust Wallet-browserextensie is een extensie voor op Chromium gebaseerde browsers. Het is duidelijk een MetaMask-concurrent en wordt gebrandmerkt als een "veilige crypto-portemonnee met meerdere ketens en toegangspoort tot duizenden gedecentraliseerde Web3-applicaties (dApps)".
Extensie is closed-source, maar de code kan eenvoudig worden geanalyseerd. Het vertrouwt op de kwetsbare Wasm-implementatie van Trust Wallet Core.
Wanneer een portemonnee wordt gemaakt, maakt de extensie een geheugensteuntje van 12 woorden uit een willekeurige 128-bits seed. Mnemonic wordt op deze manier gegenereerd:
HDWallet.create
is de automatisch gegenereerde Wasm-wrapper voor de hierboven beschreven HDWallet-constructor. Dat betekent de kwetsbaren random_buffer
functie wordt gebruikt, zodat geheugensteuntjes kunnen worden opgehaald van het gebruikersadres met een brute force-aanval.
Deze extensie verwerkt de volgende activa: AVAX, BNB, ETH, MATIC, SOL en TWT.
- Adressen zijn identiek voor ETH, BNB, MATIC, AVAX en TWT. Dit zijn standaard Ethereum-adressen, die hetzelfde afleidingspad delen (m/44'/60'/0'/0/0).
- Solana gebruikt een ander afleidingspad: m/44'/501'/0'/0'.
Om het geld van alle gebruikers van de Trust Wallet-extensie leeg te maken, kan de aanvaller:
- Bereken en bewaar elk mogelijk geheugensteuntje, vervolgens de Ethereum-privésleutel en het Ethereum-adres dat door deze extensie kan worden gegenereerd.
- Verzamel alle gebruikte Ethereum-adressen die zijn aangemaakt sinds de eerste release van de Trust Wallet-browserextensie en sla ze lokaal op.
- Voer een zoekopdracht uit in de adresdatabase.
- Maak de portemonnee leeg met de privésleutel, als het adres is gebruikt.
Deze stappen kunnen voor elke keten worden herhaald. We beschrijven nu hoe de Ledger Donjon deze aanval op Ethereum en Binance Smart Chain implementeerde, zonder natuurlijk de portemonnee leeg te maken.
Trust Wallet aanvallen
Door de kwetsbaarheid kan een aanvaller geheugensteuntjes berekenen vanaf elk adres van een portemonnee die door de browserextensie is gemaakt. Daarvoor moet men een afbeelding berekenen tussen de mogelijke geheugensteuntjes en het resulterende adres.
Alle adressen genereren die de Trust Wallet-extensie kan aanmaken
Op basis van de kwetsbaarheid in de PRNG die eerder is uitgelegd, is het mogelijk om alle adressen (en de bijbehorende privésleutels) op te sommen die de Trust Wallet-extensie kan maken. Mijn idee was om elk mogelijk adres in een grote tabel op te slaan. Vervolgens kan men uit een lijst met adressen die uit de Ethereum-blockchain zijn gehaald, controleren of sommige adressen in deze tabel aanwezig zijn. Als dat het geval is, kan de privésleutel worden berekend.
Afleiding van entropie naar geheugensteuntje en vervolgens naar Ethereum-adres maakt gebruik van het standaard afleidingsmechanisme BIP-32, BIP-39En BIP-44 account hiërarchie.
De eerste moeilijkheid was om al deze adressen op te sommen. Transformatie van PRNG-seed naar adres vereist de volgende stappen:
- Entropie generatie: initialiseer de Mersenne Twister met het zaad en roep het 16 keer aan om de initiële entropie te verzamelen.
- Entropie naar geheugensteuntje: één SHA-256 om de laatste controlesom te berekenen die in het laatste woord is ingesloten.
- Geheugensteuntje om te zaaien: geheugensteuntje worden omgezet in een 512-bits seed met behulp van PKBDF2-HMAC-SHA512 met 2048 iteraties. Er zijn 2 SHA-512-berekeningen per iteratie, dus de totale kosten zijn 4096 SHA-512-berekeningen.
- Seed naar BIP-32 hoofdsleutel: 1 HMAC SHA-512 kost 2 SHA-512 berekeningen.
- Hoofdsleutel voor de privésleutel van Ethereum: hoofdsleutel is afgeleid van m/44'/60'/0'/0/0. Dit vereist 3 geharde afgeleide onderliggende privésleutels en 2 normale afgeleide onderliggende sleutels.
- Elke geharde onderliggende privésleutelafleiding vereist één HMAC SHA-512 (2 SHA-512) berekening en één toevoeging op secp256k1.
- Elke normale afleiding van een privésleutel van een kind vereist een afleiding van een privésleutel van een kind en een scalaire vermenigvuldiging op secp256k1 om de privésleutel die in de invoer is opgegeven om te zetten in een openbare sleutel.
- Ethereum privésleutel om te adresseren: deze laatste stap vereist een conversie van privé naar openbare sleutel, dus nog een scalaire vermenigvuldiging en één Keccak-256-hash.
De totale kosten voor al deze stappen zijn dan:
- Initialisatie en 16 oproepen naar Mersenne Twister
- 1 SHA-256
- 4108 SHA-512
- 5 punten toevoegingen
- 2 scalaire vermenigvuldigingen op secp256k1
De duurste stappen zijn de SHA-512-berekeningen en de scalaire vermenigvuldigingen. Om het kort te houden, het algehele proces om de PRNG-seed naar een Ethereum-adres te transformeren is traag. Het uitvoeren van een dergelijke berekening op een enkele CPU zou maanden duren, en waarschijnlijk enkele weken op de CPU's die beschikbaar waren in de Donjon. Dus hebben we het geïmplementeerd met behulp van OpenCL (gebaseerd op BIP39 Solver-GPU) en draaide het op 2 NVIDIA GeForce GTX 1080 Ti GPU's.
De uitvoer van deze tool is een groot bestand met alle Ethereum-adressen die de extensie kan genereren. Aangezien er 2^32 mogelijke zaden zijn en elk adres 20 bytes lang is, neemt deze tabel 80 Gb in beslag.
Vanaf daar zijn tabelopzoekingen traag: om een adres te matchen, zou het door deze hele grote tabel moeten worden herhaald.
Om deze zoekopdrachten te versnellen, hebben we de tabel opgesplitst in 256 kleinere tabellen, volgens de eerste byte van het Ethereum-adres. Elke tabel bevat paren PRNG-zaden en hun resulterende Ethereum-adres.
Ten slotte hebben we ze gesorteerd op basis van het Ethereum-adres om snel te kunnen zoeken in elke tabel. Het is nu mogelijk om binair te zoeken op deze tabellen: het opzoeken van deze gesorteerde tabellen is erg goedkoop.
Om wat schijfruimte te besparen, hebben we PRNG-seed en alleen de eerste 8 bytes van elk Ethereum-adres opgeslagen. De laatste 12 bytes zijn niet nodig, omdat botsingen in mijn use-case te verwaarlozen zijn. Elke invoer neemt dan 12 bytes in beslag. Hele tabellen kosten dan 48 Gb.
Dit zijn de tijden voor elke stap:
Met behulp van deze tabellen is het mogelijk om direct de geheugensteuntjes op te halen die zijn gebruikt om een adres te genereren. Om de impact van de kwetsbaarheid te beoordelen, vroeg Binance me het geheugensteuntje van 3 testadressen die ze hadden verstrekt. Hier is het resultaat:
Het ophalen van de 3 ezelsbruggetjes en privésleutels duurde een paar honderd milliseconden. Volgens onze tests, het proces is eigenlijk snel genoeg om alle transacties op de Ethereum-blockchain in realtime te verwerken en alle kwetsbare adressen te breken zodra ze worden gebruikt. Door reeds geteste adressen te cachen, geldt hetzelfde voor andere blockchains zoals BSC. In dit aanvalsscenario zou men transacties kunnen volgen wanneer ze de mempool bereiken, en de privésleutels van de afzender of ontvanger in realtime kunnen berekenen.
Een lijst van alle gebruikte Ethereum-adressen
Wat we graag zouden willen, is het werkelijke aantal kwetsbare portemonnees en hun saldo schatten. Dit klinkt eenvoudig, aangezien alle transacties openbaar zijn, dus alle adressen zijn beschikbaar op de blockchain. Er is echter geen manier om de lijst met gebruikte adressen rechtstreeks op te halen.
We hebben een methode geïmplementeerd die door elk blok van de Ethereum-blockchain itereert. We hebben de afzender- en ontvangeradressen van alle transacties en de adresparameters van elke aanroep naar ERC-20-contracten geëxtraheerd.
Merk op dat met deze methode alleen gebruikte portefeuilles kunnen worden gedetecteerd: sommige kwetsbare portefeuilles die geen activa hebben ontvangen, hebben nooit interactie gehad met de blockchain.
We hebben de Ethereum-blockchain gescand tussen blokken 14820000 en 16096000. Blok 14820000 is gemaakt op 21 mei 2022, dus net voor het pull-verzoek dat de kwetsbare code in Trust Wallet Core heeft toegevoegd. 16096000 was het laatste blok toen ik dit bericht schreef.
Openbare knooppunten lijken een snelheidslimiet te hebben, dus heb ik verschillende openbare knooppunten parallel opgevraagd om in totaal 147,910,120 adressen te verzamelen gedurende enkele tientallen uren. Nadat duplicaten zijn verwijderd, verkrijgen we een lijst met 32,613,317 unieke adressen.
Dezelfde methode is gebruikt voor Binance Smart Chain. Openbare BSC-knooppunten zijn gescand.
Het schatten van het aantal kwetsbare accounts
Als laatste is er een tool geschreven om te testen of een adres is aangemaakt door de Trust Wallet-extensie. Het zoekt de gegenereerde tabellen op, haalt de PRNG-seed op en berekent van daaruit het geheugensteuntje, de Ethereum-privésleutel en het bijbehorende adres.
De berekening is erg snel. Kandidaat-adressen werden vooraf gesorteerd om I/O te minimaliseren en een geneste binaire zoekopdracht uit te voeren. Het opzoeken van de 32 miljoen adressen duurt een paar minuten met een eenvoudig Python-script.
Hier is een voorbeeld met een adres uit een openbare tweet reageren op de aankondiging van de Trust Wallet-extensie. Ik nam deze als voorbeeld zoals dit adres heeft nooit gebruikt, dus gebruikersfondsen lopen geen risico.
Tool is uitgevoerd op de dataset van 1,873,720 hierboven beschreven. Het testen van alle adressen en het berekenen van de privésleutels van kwetsbare accounts duurde 4 minuten en 22 seconden, dus het is erg goedkoop.
Met deze lijst van kwetsbare privésleutels is het mogelijk om alle corresponderende adressen en hun saldi op te sommen en ze natuurlijk leeg te maken... Tijdens ons onderzoek liepen op een gegeven moment ongeveer $30 miljoen risico, maar we hebben niet alle kettingen en tokens overuren gecontroleerd .
Remediation
2022, 17 november
Kwetsbaarheid is gemeld aan Binance met behulp van hun bug bounty programma op 2022 november 17.
Om de kwetsbaarheid te bevestigen, stuurde Binance ons 3 adressen en vroeg hen om ezelsbruggetjes:
Kun je alsjeblieft proberen je tool uit te voeren en geheugensteuntjes te geven voor deze 3 adressen?
Wallet 1 – 0xdf6D9547e163D5E7eafBe2FeB24Bfa12A4C913C0
Wallet 2 – 0xE1E0580cb5eA0c0FD034FF2cdfc872ce4493676C
Wallet 3 – 0x02b2Ae981b138F066344774A2AD75225A046c377
Bedankt!
Met vriendelijke groet.
Zodra alle mogelijke adressen vooraf zijn berekend, is het ophalen van het geheugensteuntje van een adres net zo eenvoudig als het opzoeken in een tabel met 4 miljard ingangen. De drie ezelsbruggetjes zijn binnen 0.2 sec opgehaald:
2022, 21 november
Een paar dagen later, op 21 november, Trustwallet team publiekelijk gepleegd op Github de oplossing om het genereren van nieuwe gebrekkige zaden te voorkomen. We waren behoorlijk bezorgd dat iemand het zou opmerken en misbruik zou maken van de kwetsbaarheid.
2022, november
Het Trustwallet-team heeft de app bijgewerkt om hun gebruikers te waarschuwen, te voorkomen dat ze nieuwe gebrekkige zaden genereren en de ontvangende stromen te verwijderen.
Van daaruit hebben we de situatie en de risicovolle fondsen gevolgd. Slechts een paar dagen na de vrijgave van deze kwetsbare portefeuilles liepen ongeveer $ 30 miljoen gevaar.
2023, maart
Het Trustwallet-team heeft ons de hoogste bounty toegekend die ze bieden: $ 100
2023, 22 april
Na maanden te hebben gewacht tot gebruikers hun geld migreerden, maakte het Trustwallet-team de kwetsbaarheid bekend en schreef een postmortaal. Vanaf nu zijn er nog steeds portemonnees met resterende fondsen die kunnen worden gestolen (~ $ 100). Trust Wallet beloofde de terugbetaling van gestolen geld.
Conclusie
Deze kwetsbaarheid illustreert het slechtste scenario van een cryptobug: voor altijd gecompromitteerde accounts.
Het creëren van goede willekeur is een ontmoedigende taak - Ledger-apparaten vertrouwen op speciale siliciumlogica in onze gecertificeerde smartcard-chips die de afgelopen 40 jaar de gouden standaard zijn geweest voor veilige industrieën om willekeur van hoge kwaliteit en sabotagebestendigheid te garanderen.
Gezien de complexiteit van het contacteren van de eigenaren van die accounts en de mogelijkheid om die gecompromitteerde accounts op allerlei verschillende software- en hardware-wallets te gebruiken, heeft TrustWallet behoorlijk goed werk geleverd door het risico voor hun gebruikers te verkleinen.
In de (zeer) (nabije) toekomst is het waarschijnlijk dat bots zullen vechten om als eerste geld te stelen dat op die adressen is gestort, vergelijkbaar met wat er in het verleden met hersenportefeuilles is gebeurd.
Speciale dank aan Jean-Baptiste Bédrune voor het redden van de wereld. Slechts een paar dagen na de release van de Trust Wallet-extensie liep bijna $ 30 miljoen gevaar. Er had zich een nachtmerriescenario kunnen voordoen als een aanvaller de kwetsbaarheid na een paar maanden had gevonden.
Tijdens ons onderzoek merkten we ook dat enkele adressen kwetsbaar waren terwijl ze lang voor de release van Trust Wallet waren gegenereerd. Dat betekent waarschijnlijk dat deze kwetsbaarheid bestaat in sommige andere portemonnee-implementaties, wat zorgwekkend is...
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoAiStream. Web3 gegevensintelligentie. Kennis versterkt. Toegang hier.
- De toekomst slaan met Adryenn Ashley. Toegang hier.
- Koop en verkoop aandelen in PRE-IPO-bedrijven met PREIPO®. Toegang hier.
- Bron: https://www.ledger.com/blog/funds-of-every-wallet-created-with-the-trust-wallet-browser-extension-could-have-been-stolen
- : heeft
- :is
- :niet
- $UP
- 1
- 12
- 13
- 14
- 15%
- 2022
- 23
- 24
- 30
- 39
- 40
- 49
- 8
- a
- in staat
- boven
- toegang
- Volgens
- Account
- accounts
- Bereiken
- werkelijk
- toegevoegd
- toevoeging
- adres
- adressen
- Na
- weer
- Alles
- toelaten
- Het toestaan
- toestaat
- al
- ook
- an
- en
- android
- aangekondigd
- Aankondiging
- Nog een
- elke
- gebruiken
- toepassingen
- Applicaties (DApps)
- apps
- April
- ZIJN
- rond
- dit artikel
- AS
- Activa
- geassocieerd
- At
- aanvallen
- auteur
- Beschikbaar
- AVAX
- vermijd
- vermeden
- het vermijden van
- backup
- slecht
- Balance
- saldi
- gebaseerde
- De Basis
- BE
- geweest
- vaardigheden
- wezen
- onder
- Betere
- tussen
- Groot
- Grootste
- Miljard
- binance
- Binance slimme ketting
- signaal
- Blok
- blockchain
- blokketens
- Blokken
- bnb
- bots
- Bounty
- Hersenen
- branded
- Breken
- browser
- browsers
- brute kracht
- BSC
- buffer
- Bug
- maar
- by
- Bellen
- oproepen
- CAN
- kandidaat
- kan niet
- geval
- Certified
- keten
- ketens
- goedkoop
- controle
- kind
- chips
- Chrome
- duidelijk
- code
- Gemeen
- concurrent
- ingewikkeldheid
- Aangetast
- berekening
- berekeningen
- Berekenen
- computer
- computergebruik
- Bevestigen
- Gevolgen
- aangezien
- bevat
- contracten
- Camper ombouw
- converteren
- geconverteerd
- Kern
- te corrigeren
- Overeenkomend
- Kosten
- kon
- Koppel
- cursus
- CPU
- en je merk te creëren
- aangemaakt
- creëert
- kritisch
- cross-platform
- crypto
- Crypto-ecosysteem
- Crypto-portemonnee
- cryptogeld
- cryptografische
- geheimschrift
- gewoonte
- DApps
- gegevens
- Database
- dag
- dagen
- gedecentraliseerde
- Gedecentraliseerde applicaties
- toegewijd aan
- gedefinieerd
- tonen
- gedeponeerd
- Afgeleid
- beschreven
- Niettegenstaande
- detail
- gedetailleerd
- gegevens
- gedetecteerd
- ontwikkelde
- apparaat
- systemen
- DEED
- verschil
- anders
- moeilijk
- Moeilijkheid
- digitaal
- Digitale activa
- direct
- ontmoedigd
- ontdekt
- distributie
- do
- uitvaltijd
- dozijn
- draineren
- duplicaten
- gedurende
- elk
- gemakkelijker
- gemakkelijk
- En het is heel gemakkelijk
- ecosysteem
- ingebed
- Engels
- genoeg
- verzekeren
- toegang
- omgevingen
- ERC-20
- schatting
- ETH
- ethereum
- Ethereum blockchain
- Zelfs
- Alle
- voorbeeld
- uitsluitend
- bestaand
- bestaat
- duur
- Verklaren
- uitgelegd
- Exploiteren
- uitbreiding
- extract
- mislukt
- vertrouwd
- SNELLE
- Favoriet
- Kenmerk
- weinig
- vechten
- Dien in
- gevuld
- finale
- financieel
- financiële vrijheid
- einde
- Voornaam*
- Bepalen
- gebrekkig
- Stromen
- volgend
- Voor
- Dwingen
- altijd
- Gelukkig
- gevonden
- Vrijheid
- oppompen van
- functie
- functionaliteit
- functies
- fondsen
- toekomst
- poort
- verzamelen
- algemeen
- voortbrengen
- gegenereerde
- het genereren van
- generatie
- generator
- krijgen
- GitHub
- Tijdloos goud
- Gouden Standaard
- goed
- GPU's
- verleend
- garantie
- houwen
- HAD
- Handvaten
- gebeurd
- Hard
- Hardware
- Hardware Portemonnees
- hachee
- Hebben
- Vandaar
- hier
- hiërarchie
- Hoge
- hoogst
- HOURS
- Hoe
- Echter
- HTTPS
- honderd
- i
- idee
- identiek
- if
- illustreert
- per direct
- Impact
- uitvoering
- geïmplementeerd
- gereedschap
- belangrijk
- onmogelijk
- in
- ongelooflijk
- industrieën
- Infinity
- informatie
- eerste
- invoer
- geinspireerd
- instantie
- wisselwerking
- interfaces
- kruispunt
- in
- onderzoeken
- iOS
- IT
- herhaling
- iteraties
- HAAR
- Jobomschrijving:
- voor slechts
- Houden
- sleutel
- toetsen
- blijven
- Weten
- Achternaam*
- later
- laatste
- Leads
- Grootboek
- links
- minder
- hefbomen
- Bibliotheek
- als
- Waarschijnlijk
- LIMIT
- linux
- Lijst
- plaatselijk
- logica
- lang
- lange tijd
- langverwachte
- lookup
- gemaakt
- maken
- MERKEN
- veel
- in kaart brengen
- meester
- Match
- materiaal
- Matic
- max-width
- Mei..
- middel
- mempool
- MetaMask
- methode
- trekken
- miljoen
- miljoenen
- Min
- minuten
- mnemoniek
- module
- Modules
- monitor
- bewaakt
- maanden
- meer
- Bovendien
- meest
- veel
- multi-keten
- Dan moet je
- my
- Nabij
- noodzakelijk
- Noodzaak
- behoeften
- nooit
- New
- volgende
- geen
- knooppunt
- Node.js
- knooppunten
- een
- in het bijzonder
- Merk op..
- November
- nu
- aantal
- nummers
- Nvidia
- verkrijgen
- opgetreden
- of
- bieden
- aangeboden
- on
- EEN
- Slechts
- werkzaam
- besturingssysteem
- or
- Overige
- onze
- uitgang
- over
- totaal
- eigenaren
- paren
- Parallel
- parameters
- deel
- verleden
- pad
- uitvoeren
- platforms
- Plato
- Plato gegevensintelligentie
- PlatoData
- dan
- punt
- mogelijkheid
- mogelijk
- Post
- krachtige
- pr
- praktijk
- Precies
- presenteren
- mooi
- voorkomen
- die eerder
- principes
- privaat
- private Key
- Privésleutels
- waarschijnlijk
- probleem
- Product
- project
- beloofde
- vastgoed
- beschermen
- zorgen voor
- mits
- publiek
- public Key
- doeleinden
- Python
- kwaliteit
- snel
- willekeurige
- willekeurigheid
- tarief
- bereiken
- vast
- real-time
- ontvangen
- ontvangende
- onlangs
- vermindering
- betreft de
- verwant
- los
- vertrouwen
- resterende
- verwijderd
- gemeld
- te vragen
- vereisen
- vereist
- Weerstand
- resultaat
- verkregen
- terugkeer
- Risico
- lopen
- lopend
- veilig
- dezelfde
- Bespaar
- besparing
- scenario
- schema
- wetenschappers
- Ontdek
- beveiligen
- veiligheid
- zien
- zaad
- zaden
- lijken
- afzender
- verzonden
- Volgorde
- verscheidene
- delen
- Bermuda's
- moet
- Silicium
- gelijk
- Eenvoudig
- sinds
- single
- situatie
- Maat
- traag
- kleinere
- slim
- Slimme ketting
- So
- Software
- SOL
- sommige
- Iemand
- Spoedig
- bron
- Tussenruimte
- spreken
- gespecialiseerde
- specifiek
- snelheid
- spleet
- Stadium
- standaard
- normen
- begin
- Stap voor
- Stappen
- Still
- gestolen
- gestolen geld
- shop
- opgeslagen
- sterkte
- sterke
- dergelijk
- Ondersteuning
- vermeend
- Stap over voor slechts
- system
- tafel
- aanpakken
- Nemen
- neemt
- doelwit
- doelen
- Taak
- team
- proef
- Testen
- testen
- neem contact
- bedankt
- dat
- De
- The Basics
- de wereld
- hun
- Ze
- harte
- Er.
- Deze
- ze
- dit
- die
- duizenden kosten
- drie
- Door
- niet de tijd of
- keer
- naar
- vandaag
- tokens
- nam
- tools
- onderwerp
- Totaal
- Transacties
- Transformeren
- Transformatie
- Kluis
- Trust
- Vertrouw op Wallet
- proberen
- twee
- TWT
- alomtegenwoordig
- unieke
- unieke adressen
- bijgewerkt
- us
- .
- gebruikt
- Gebruiker
- gebruikersfondsen
- gebruikers
- gebruik
- doorgaans
- waarde
- versie
- zeer
- kwetsbaarheid
- Kwetsbaar
- Het wachten
- Portemonnee
- Portemonnees
- was
- Manier..
- we
- Web3
- weken
- waren
- wanneer
- welke
- en
- geheel
- waarvan
- wijd
- wil
- Met
- zonder
- Woord
- woorden
- wereld
- bezorgd
- Slechtst
- zou
- geschreven
- jaar
- u
- Your
- zephyrnet