GithubHelp home page GithubHelp logo

metamarcdw / nowallet Goto Github PK

View Code? Open in Web Editor NEW
66.0 10.0 11.0 794 KB

This project is a secure Bitcoin brainwallet app written in Python.

Home Page: https://www.nowallet.org

License: MIT License

Python 99.14% Makefile 0.86%
bitcoin wallet tor stratum privacy deniability python3 android kivy

nowallet's Introduction

Nowallet

Secure, private, and plausibly deniable

Cross-platform Bitcoin brainwallet

Introduction:

This project is a secure Bitcoin brainwallet app that will ultimately be meant for desktop and mobile platforms. It was inspired by reports of incidents of Bitcoin being seized physically at border crossings. People need an option for a brainwallet that is secure and easy to use.

It's written in Python and depends on the pycoin and connectrum libraries. It uses Electrum servers on the back end, and communicates exclusively over Tor. It uses a variant of the 'WarpWallet' technique, combining PBKDF2 and scrypt with a salt for key derivation, rather than the typical, highly insecure SHA256(passphrase) method that your average brainwallet uses. Here's a basic explanation of the benefits of using the WarpWallet technique:

"WarpWallet is a deterministic bitcoin address generator. You never have to save or store your private key anywhere. Just pick a really good password and never use it for anything else.

This is not an original idea. bitaddress.org's brainwallet is our inspiration.

WarpWallet adds two improvements: (1) WarpWallet uses scrypt to make address generation both memory and time-intensive. And (2) you can "salt" your passphrase with your email address. Though salting is optional, we recommend it. Any attacker of WarpWallet addresses would have to target you individually, rather than netting you in a wider, generic sweep. And your email is trivial to remember, so why not?"

(Note: Salting is not optional in our case.)

Details:

Basically, you get a secure brainwallet in a convenient app (now with SegWit address support) and only need to remember an email address/password combination rather than an entire 12/24 word seed. People are typically more accustomed to remembering a normal set of login info, which will protect users from forgetting or misremembering part of their seed and losing coins forever.

We have also implemented a full HD wallet compatible with BIP32/44. The current working title is Nowallet, as in, "I'm sorry officer, I have no wallet!" We are currently in a pre-alpha state. All testers must be able to install dependencies and run from the simple command line interface.

If you're interested in testing, you can get some testnet coins here: https://coinfaucet.eu/en/btc-testnet/

SCREENSHOTS:

Login Balance Send Recieve

REQUIREMENTS:

  1. Building is currently supported on Linux based systems only. (Ubuntu LTS specifically if using Kivy)
  2. Install Tor for Linux using the instructions linked below:
    https://www.torproject.org/docs/debian.html.en
    (Do not use the packages in Ubuntu's universe.)

INSTALLATION:

Install Nowallet dependencies:
sudo apt-get install git python3-dev python3-pip libssl-dev

Install Kivy UI dependencies: (optional)
sudo apt-get install build-essential ffmpeg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev zlib1g-dev

Clone the Nowallet Github repository:
git clone https://github.com/metamarcdw/nowallet.git

Create a virtualenv (using virtualenvwrapper for example):
First install virtualenvwrapper using the instructions linked below:
http://railslide.io/virtualenvwrapper-python3.html
Create the virtualenv:
mkvirtualenv --no-site-packages -p /usr/bin/python3 nowallet

Make sure Pip, Virtualenv and Setuptools are updated:
pip install --upgrade pip virtualenv setuptools

Install required Python libraries:
cd nowallet
make init
make install

Install required Kivy libraries: (optional)
pip install Cython==0.24
make init-kivy
garden install qrcode

Install required development libraries: (optional)
make init-dev

Run nowallet from the command line:
make go
OR
make go-spend
OR
make go-kivy

UNIT TESTING:

Run unit tests (Must install dev libs):
make test

nowallet's People

Contributors

bambi-bf avatar dimitris-t avatar hkrugersa avatar metamarcdw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nowallet's Issues

New Logo Design For Nowallet

Hi @metamarcdw ,I am a graphic designer, I want to help others in graphic design.

After I review your project, your app is very good. But I think your icon is irrelevant to your application. Therefore I suggest a new logo and icon for you. If you want it, I will design it for you and it's free.

Key derivation not working

Getting an error during key derivation. Occurring on Ubuntu using Python 3.5.2.

2017-12-12 20:38:40,276 INFO: Deriving keys...
Traceback (most recent call last):
  File "nowallet.py", line 1065, in <module>
    main()
  File "nowallet.py", line 1029, in main
    wallet = Wallet(email, passphrase, connection, loop, chain)  # type: Wallet
  File "nowallet.py", line 293, in __init__
    create_root_keys(salt, passphrase)
  File "nowallet.py", line 214, in inner
    func(*args, **kwargs)
  File "nowallet.py", line 270, in create_root_keys
    t = derive_key(salt, passphrase)  # type: Tuple[int, bytes]
  File "/home/user/nowallet/nowallet/keys.py", line 38, in derive_key
    digestmodule=hashlib.sha256).read(key_length)  # type: bytes
  File "/home/user/.local/lib/python3.5/site-packages/pbkdf2.py", line 161, in read
    block = self.__f(i)
  File "/home/user/.local/lib/python3.5/site-packages/pbkdf2.py", line 173, in __f
    U = self.__prf(self.__passphrase, self.__salt + pack("!L", i))
  File "/home/user/.local/lib/python3.5/site-packages/pbkdf2.py", line 146, in _pseudorandom
    digestmod=self.__digestmodule).digest()
  File "/usr/lib/python3/dist-packages/Crypto/Hash/HMAC.py", line 211, in new
    return HMAC(key, msg, digestmod)
  File "/usr/lib/python3/dist-packages/Crypto/Hash/HMAC.py", line 105, in __init__
    self.outer = digestmod.new()
AttributeError: 'builtin_function_or_method' object has no attribute 'new'

Kivy UI freezes on 'UI lock' attempt

Describe the bug
Attempting to lock the app with the PIN screen results in the UI freezing up.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the "Lock with PIN" screen
  2. Enter any PIN number
  3. Tap the "LOCK" button
  4. UI freezes up

Expected behavior
"GO BACK" button should be greyed out to prevent returning to the app.
"LOCK" button text should change to "UNLOCK".
Input box for PIN number should clear.

Desktop (please complete the following information):

  • OS: Ubuntu 18.04 bionic
  • Interface: Kivy UI
  • Version: current tip of master branch 7431581

Additional context
Python 3.6.5

New UI

Is your feature request related to a problem? Please describe.
No.

Describe the solution you'd like
A redone UI.

Describe alternatives you've considered
I've retooled it and added dark mode.

Additional context
Here's the repo with the changed files: https://github.com/theREALaltoid/NWWEB-UI

New spends not appearing in history

Describe the bug
On spending, new unconfirmed 'Sent' transactions never appear in tx history.

To Reproduce
Steps to reproduce the behavior:

  1. Run nowallet using any interface
  2. Spend test coins
  3. Wait for new tx to appear in history
  4. See nothing happen

Expected behavior
A new entry should appear in the tx history as a spend.

Desktop (please complete the following information):

  • OS: Ubuntu 18.04 bionic
  • Interface: All
  • Version: current tip of master branch c35f33a

Additional context
Python 3.6.5

Kivy UI freezes on spend attempt

Describe the bug
Attempting to spend TBTC from the send screen results in the UI freezing up.
[Theory]: Kivy doesn't seem to be playing well with asyncio, even with the async_gui lib.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the send screen
  2. Enter a valid TBTC address and spend amount
  3. Tap the "SEND TX" button
  4. UI freezes up

Expected behavior
Should sign/broadcast TX, then show "Transaction sent!" message dialog with fee and TXID.

Desktop (please complete the following information):

  • OS: Ubuntu 18.04 bionic
  • Interface: Kivy UI
  • Version: current tip of master branch 7431581

Additional context
Python 3.6.5

Create a .deb Linux build

Is your feature request related to a problem? Please describe.
It would be really nice to have a .deb build for use on TAILS and other Debian based systems.

Describe the solution you'd like
Develop a .deb packaging process and start building Debian releases.

Base UI broken is simulator.

It seems that the core is working OK, but the UI has some serious problems.

"login" screen for key derivation

Bildschirmfoto 2019-04-09 um 22 07 13

main menu when keys OK is missing (buttons), settings menu as well

Bildschirmfoto 2019-04-09 um 22 09 45

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.