Giter Site home page Giter Site logo

gyrusdentatus / nymdrive Goto Github PK

View Code? Open in Web Editor NEW
20.0 2.0 1.0 62 KB

NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network.

License: MIT License

Shell 2.66% Rust 97.34%
mixnet privacy encryption cloud-storage-application rust-gui rust

nymdrive's Introduction

NymDrive

NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network.

Features

  • Active file monitoring of changes in the ~/nymdrive folder:
    • File creation
    • File deletion
    • File writes
    • File renaming
  • Monitored changes are automatically synced with the NymDrive server.
  • Files and filenames are end-to-end encrypted using the widely regarded AEAD encryption algorithm XChaCha20Poly1305, which uses 192 bit nonces to guarantee there will never be a collision.
  • End-to-end encryption key derived from the user's username and password, hashed using Argon2.
  • With only a username and password, you can fully recover all backed up files on a new device by logging in with your credentials. No seed phrase or key backup required.
  • Complete and automatic file versioning system that is stored in a local sqlite database to ensure consistency with the server and other devices.
  • Full multi-device syncing with consistency enforced through the local versioning database.

Design decisions

  • We chose to implement a complete live folder syncing system as opposed to encumbering the user with the manual upload and retrieval of every file they may ever want to backup. It would be extremely cumbersome to use this kind of system to back up a git repository that is actively being developed, but it is trivial to do exactly this with NymDrive.
  • In conflict of the specifications of the challenge, we chose not to leak the user's file hashes to the server, and instead submit the blake3 hash of the AEAD ciphertext. File hashes can leak lots of information, and it was the basis for Apple's now-cancelled image surveillence system. Your adversary can compare lists of "objectionnable" file hashes to the ones you have stored on the service provider to see if you saved these files, thereby bypassing the purpose of the end-to-end encryption.
  • Although our team has the technical expertise to implement the file-hashes-on-the-blockchain optional bonus, we have intentionally opted not to as we do not believe it provides any tangible decentralization benefits. Nym service providers are, generally, centralized entities, who have the technical capability to arbitrarily restrict users. Having a file hash on the blockchain would not prevent NymDrive from simply refusing to serve this file to the user if they requested it. It also wouldn't provide the user with much benefit, as they already store all hashes in their local sqlite database.

Packages needed (on debian)

  • nym-client v0.11.0
  • rust 1.56+
  • openssl-dev
  • g++ (or any other supplier of c++)
  • cmake
  • libfreetype-dev
  • libexpat1-dev
  • sqlitebrowser

Running NymDrive

For testing purposes, the simplest way to run NymDrive is:

./app.sh noauto

This will run NymDrive without running nym-client or nym-duplex, and will be fully functional when the mixnet is disabled in the GUI settings.

If you wish to run NymDrive through the current Nym testnet, you may run the nym-client as follows:

./nym_client.sh

Followed by the app script in a seperate terminal window:

./app.sh

Notes

  • Encryption security is highly dependent on the strength of your password. Please use a strong password to ensure the confidentiality of you files.
  • Ensure you are only running ONE instance of NymDrive at a time. Running multiple instances at the same time will result in doom.
  • Empty files and folder are currently not synced. Please add some content if you wish to sync them.
  • Logging out will only remove files locally. If you wish to remove a file on both ends, simply delete it from the ~/nymdrive directory in your filesystem. Closing the GUI window will keep you logged in.
  • Ciphertext file hashes are accessible in the file hash GUI by executing the command ./file_hashes.sh in the repo root. The file hashes are presented as: data_ciphertext_digest.
  • The current testnet mixnet can be unstable and may not be functional at all times. You may disable the mixnet to purely test the syncing functionality. Your synced files will be tied to the same account whether or not you enable the mixnet.
  • Files greater than 1GB are not synced and will be automatically rejected by the server as a DOS prevention measure.

Troubleshooting

If you run into the error: Error: GraphicsAdapterNotFound, please change gui/Cargo.toml and remove the feature glow from the crate iced. This error may occur on NixOS, Fedora Silverblue, and other Linux distributions.

nymdrive's People

Contributors

gyrusdentatus avatar

Stargazers

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

Watchers

 avatar  avatar

Forkers

nitzzzyy

nymdrive's Issues

Files not synced to another device

When logging from Mac as id 501 user hans it fails to sync files from the same account logged in from Linux with id 1000 and user hans

Does this mean it's a classic *nix problem that can be solved or does it mean the whole multidevice sync is broken?

  • to replicate try the same user with same id on 2 different devices running Linux

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.