Coconut Vault

Když odpojíte síť,
váš telefon se stane bitcoinovým trezorem

Bezpečné bitcoinové self-custody offline—
bez složitých a drahých hardware walletů.

Zařízení na úrovni hardware walletů
se špičkovou odolností a použitelností

Ochrana na úrovni hardware
Robustní zabezpečení postavené na ochranách hardware.
Bezpečný start
Pro použití Vaultu je nutné restartovat aplikaci.
Mazání tajemství
Bezpečně vymaže tajná data bez zanechání stop.
Nouzový reset
Po neúspěšných pokusech o odemčení se čekací doby prodlužují— po vyčerpání pokusů se aplikace resetuje.
Režim pouze podepisování
Pokud chcete, zadávejte tajemství jen kdy je potřeba a zařízení používejte pouze jako podepisovač.
Režim soukromí
Skryjte skutečnost, že vlastníte Bitcoin.
Víceúrovňová obrana
Vrstvená ochrana chrání podepisování a úložiště od konce ke konci.

Je smartphone jako hardware wallet
bezpečný?

Skutečný air-gap blokuje každý digitální vstupní bod. Se správnými návyky dosáhnete fyzické izolace a bezpečnosti srovnatelné s dedikovanými hardware walletů.

Používejte Vault ještě bezpečněji

Coconut Vault je postaven pro plně offline provoz—ale vaše návyky a nastavení jsou stále součástí bezpečnosti. Postupujte podle těchto zásad pro bezpečnost přesahující typické hardware walletů.

PRAVIDLO 01
Pro Vault používejte dedikované zařízení

Vault je určen jako offline podpisové zařízení. Instalace dalších aplikací nebo přepínání Wi-Fi/Bluetooth může otevřít nové útočné vektory. Nikdy nepřipojujte zařízení k internetu—používejte ho pouze pro offline podepisování transakcí. Samotné to blokuje většinu vzdálených útoků.

PRAVIDLO 02
Před prvním použitím obnovte tovární nastavení

Před přeměnou telefonu na Vault proveďte obnovení továrního nastavení. Úplně odstraňte zbývající aplikace, logy a cache. Tím vymažete neočekávané backdoory nebo stopy malwaru a vytvoříte důvěryhodný základ.

PRAVIDLO 03
Upřednostněte přístupovou frázi před krátkým PINem

4-6 místné PINy mohou být pro podpisové zařízení slabé. Smíšená přístupová fráze odolává hrubé síle mnohem lépe, pokud je zařízení fyzicky zachyceno. Pokud možno použijte alespoň ~8 silných znaků.

PRAVIDLO 04
Po použití vypněte

Když zařízení nepoužíváte, úplně ho vypněte pro maximální bezpečnost. Vypnuté zařízení má paměť a úložiště nedostupné—i útoky na úrovni firmwaru jsou výrazně obtížnější. Samotný tento zvyk porazí mnoho fyzických hrozeb a hrozeb firmwaru.

Stories from Coconut Vault users

No matter how much Bitcoin you have, self-custody is a must. Don't be afraid—start with Coconut Vault. The Coconut team will guide you through every step. Bitcoin is the only asset you can truly control. Self-custody is the final step. If you're unsure, the Coconut team handles everything. Even people in their 70s find it a breeze.

View on X (Twitter) →

Once again, Coconut is simply the best, lol If you've never used a hardware wallet, give Coconut a try. There's a cost involved, but it's absolutely worth it.

View on X (Twitter) →

Tried making a transaction with Coconut Vault Very intuitive and user-friendly (feels very secure when used with internet and Bluetooth off) Even beginners (spouse, kids) can make transactions easily with a bit of patience

View on X (Twitter) →
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } } import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:coconut_wallet/repository/shared_prefs_repository.dart'; import 'package:coconut_wallet/utils/logger.dart'; import 'package:provider/provider.dart'; import 'app.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); final RootIsolateToken token = RootIsolateToken.instance!; BackgroundIsolateBinaryMessenger.ensureInitialized(token); if (Platform.isAndroid) { try { const MethodChannel ch = MethodChannel('android'); final int v = await ch.invokeMethod('getSdkVersion'); if (v != 26) { SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]); } } on PlatformException catch (e) { Logger.log('Failed to get platform version'); } } } class CoconutApp extends StatelessWidget { const CoconutApp({super.key}); @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => WalletProvider()), ChangeNotifierProvider(create: (_) => NodeProvider()), ], child: MaterialApp( title: 'Coconut Wallet', theme: CoconutTheme.light(), darkTheme: CoconutTheme.dark(), home: const HomePage(), ), ); } }
Coconut App
DON'T TRUST, VERIFY

Open source
jako základ
důvěry

Věříme, že každá bitcoinová peněženka musí být open source. Nechceme po vás slepou důvěru. Přečtěte si kód a ověřte si vše sami.

Not your keys,
Not your bitcoin

Začněte se self-custody ještě dnes!

coconut.onl používá doménu .onl záměrně: zní podobně jako korejské slovo 오늘 (oneul), které znamená „dnes“. Oficiální doména je coconut.onl.

Oficiální verze jsou pouze v App Store a Google Play.