Skip to content

Flutter app for backing up secrets by splitting those among friends

License

Notifications You must be signed in to change notification settings

GuardianLabs/guardian-keyper

Repository files navigation

License: GPL v3 Flutter
Lines of code
Get it on Google Play Download on AppStore


Guardian Keyper

Guardian Keyper

Guardian Keyper is a P2P app for backing up secrets by splitting them between multiple devices.

Table of Contents
  1. About The Project
  2. Getting Started
  3. Contributing
  4. License
  5. Contacts

About The Project

Guardian Keyper is a mobile app for securely backing up seed phrases and secrets. The user can choose several devices (e.g. his friends or family's smartphones) as her personal "Guardians". After that, the user can back up a seed phrase by splitting it into several Shards and sending those to the designated Guardians. Then, the user can reassemble the secret, by collecting a certain majority of the shards (e.g. 3 out of 5) from her Guardians.

The general idea of Keyper is: to secure the most precious information we possess - our seed phrases - we should employ the power of our social connections.

(back to top)

Usage

  1. Install the app to your device, and devices of your Guardians.
  2. Create a group to store the secret.
  3. Add Guardians (trusted devices) to the group by scanning their single-use QR codes, or getting single-use invite messages from them (PGP-style invites).
  4. Add your secret.
  5. Send the secret shards to your Guardians. Note that due to the P2P nature of Keyper, the Guardian you're sending the shard to must be online simultaneously with you.

As soon as you enter the secret, it is immediately sharded, the shards are encrypted by the Guardians' public keys and the secret is deleted from memory. The original secret is never stored in the non-volatile memory to protect it from the "stolen phone" problem. The encrypted shards are then ready to be sent to your Guardians - in a direct P2P fashion, avoiding any kind of intermediate server. Each shard is useless on its own: depending on your choice, you will require either 2 out of 3, or 3 out of 5 secret shards to restore the secret - collected from the corresponding number of your Guardians. No Keyper data ever goes through the network unencrypted, and nothing is stored on a server: the app is completely peer-to-peer and is designed to work without Internet access (e.g. in an isolated WiFi network).

(back to top)

Key features

DecentralizationThe shards of the secret phrase are stored on several independent devices and are useless on their own. Even if someone gains unplanned access to one of them, the owner's digital assets will remain safe. The only kind of server we use is the bootstrap server for NAT puncturing. And even that is completely unnecessary - Keyper instances can communicate without Internet access in a WiFi LAN by utilising broadcast packets (mDNS protocol).
Strong data protectionKeyper uses industry-standard asymmetric public-key cryptography PGP-style – so it’s fully P2P and encrypted end-to-end. The complete secret is never stored on a device, while the shards are stored in the device's protected storage.
VersatilityGuardian Keyper is suitable for use with any password, seed phrase or other information that you want to keep secret.

(back to top)

Getting Started

You can build Guardian Keyper from source code. Installation instructions are given for Linux; for Windows and macOS, follow the same steps in the context of your operating system.

Installation

Сlone the project:

git clone [email protected]:GuardianLabs/guardian-keyper.git

Guardian Keyper requires Flutter to run. Use this guide to make sure the installation is correct. For checking all SDK dependencies, use:

flutter doctor

Go to your project folder and get project dependencies:

flutter pub get

If there are no issues, you can build the project with the following command:

flutter build apk --debug

Also, you can use android-simulator:

flutter emulator --launch <Your Emulator ID>
flutter run --debug

Bootstrap server

To facilitate p2p connections thorough NAT, Guardian Keyper introduces peers to each other through a bootstrap/proxy server. The markets version uses the bootstrap server that is operated by Guardian Labs. You can start your own bootstrap by downloading the code or a Docker container from the P2PLib repository. To set the addresses for the bootstrap server, use compilation-time environment variables:

flutter build apk --dart-define BS_V4=192.168.12.34 --dart-define BS_V6=2001:0db8:85a3:0000:0000:8a2e:0370:7334

(back to top)

Contributing

Any contributions you make are greatly appreciated.

If you have a suggestion that would make Keyper better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request
  6. If you have never committed to this repository before, accept our Contributor License Agreement (served by cla-bot)

Note that Guardian Labs requires every contributor to sign the Contributor License Agreement to facilitate publishing Guardian Keyper to GPL-incompatible app repositories, such as the AppStore. You can do it electronically during filing a pull request into this repository. See CLA_instructions.md for details.

(back to top)

License

Guardian Keyper is distributed under GPLv3 License with special permission to use MPL for AppStore publication. See LICENSE for more information.

(back to top)

Contacts