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

Overview

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.

You might also like...
An application for creating encrypted vaults for the GNOME desktop.
An application for creating encrypted vaults for the GNOME desktop.

Vaults An application for creating encrypted vaults for the GNOME desktop. It currently uses gocryptfs and CryFS for encryption. Please always keep a

age-encrypted secrets for NixOS; drop-in replacement for agenix

ragenix ragenix provides age-encrypted secrets for NixOS systems which live in the Nix store and are decrypted on system activation. Using ragenix to

Trustworthy encrypted command line authenticator app compatible with multiple backups.
Trustworthy encrypted command line authenticator app compatible with multiple backups.

cotp - command line totp authenticator I believe that security is of paramount importance, especially in this digital world. I created cotp because I

An encrypted multi client messaging system written in pure Rust

🚩 Preamble This is a pure Rust multi-client encrypted messaging system, also known as Edode's Secured Messaging System. It is an end-to-end(s) commun

Dione is an anonymize and encrypted messaging system build on top on a peer to peer layer.

Secure and Anonymous Messaging WARNING: Currently Dione is not ready to be used nor does it fulfill its goal of being an anonymous messenger. In order

Smarter brute-force password searching for PKZIP encrypted files

Zip Blitz Motivation This program was created for a very specfic problem I had. I had a large encrypted zip file that I lost/forgot the password for.

An HTTP proxy for assets (mainly images) to route requests through an always-encrypted connection.

camo-rs camo-rs is a frontend-compatible Rust-re-implementation of the now archived NodeJS-based atmos/camo - an HTTP proxy for assets (mainly images)

A simple key-value store with a log-structured, append-only storage architecture where data is encrypted with AES GCM.

akvdb A simple key-value store with a log-structured, append-only storage architecture where data is encrypted with AES GCM. Modified from the actionk

Koofr Vault is an open-source, client-side encrypted folder for your Koofr cloud storage offering an extra layer of security for your most sensitive files.

Koofr Vault https://vault.koofr.net Koofr Vault is an open-source, client-side encrypted folder for your Koofr cloud storage offering an extra layer o

Comments
  • let the client choose an optional server addr or web addr

    let the client choose an optional server addr or web addr

    https://github.com/gyrusdentatus/nymdrive/blob/a61522105c3ee07901cf0f0bd1fadda457fe4f8f/client/src/lib.rs#L12

    The old ipv4 here is hardcoded and the server is no longer running.

    enhancement 
    opened by gyrusdentatus 0
  • Files not synced to another device

    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
    bug 
    opened by gyrusdentatus 1
Owner
Hans Bricks
Hans Bricks
An experimental fork of a16z's Helios Ethereum client which can run its network traffic over the Nym mixnet

Helios (Nym mixnet fork) Helios is a fully trustless, efficient, and portable Ethereum light client written in Rust. This fork of Helios includes nasc

Nym 4 Mar 3, 2023
An open source desktop wallet for nano and banano with end-to-end encrypted, on chain messaging using the dagchat protocol.

An open source wallet with end-to-end encrypted, on chain messaging for nano and banano using the dagchat protocol.

derfarctor 22 Nov 6, 2022
A Peer-to-Peer cross-platform clipboard syncing tool.

p2p-clipboard p2p-clipboard is a Peer-to-Peer cross-platform clipboard syncing tool. It enables users to synchronize clipboard contents across multipl

null 3 Feb 28, 2024
End-to-end encryption and mutual authentication for distributed applications.

✨ Hands-on Introduction: Build end-to-end encrypted, mutually-authenticated, secure messaging in Rust ✨ Rust and Elixir libraries for end-to-end encry

Ockam | Trust for Data-in-Motion 2.8k Jan 2, 2023
Program to determine the password of an encrypted ZIP file via dictionary attack.

zip-dict-attack Program to determine the password of an encrypted ZIP file via dictionary attack. Inspired by this article. Usage Cargo is used to bui

null 2 Oct 8, 2022
Bijou is a tiny yet fast encrypted file system.

Bijou ✨??✨ Bijou (['bi:ʒu], French for "jewel") is a tiny yet fast encrypted filesystem, built upon RocksDB. Bijou provides a FUSE interface, as well

Mivik 5 Sep 27, 2023
Standing watch over the Pi Network, PiSentinel is a consensus algorithm that safeguards security, decentralization, and scalability.

pi-sentinel Standing watch over the Pi Network, PiSentinel is a consensus algorithm that safeguards security, decentralization, and scalability. Intro

KOSASIH 3 Aug 4, 2024
🔐 UPLINK is a Rust lightweight (2MB) tool for file transfer and remote management that uses AES-GCM and Envelope Encryption over WebSockets.

UPLINK ░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░ ░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█

Krystian Bajno 5 Sep 28, 2024
a handy utility to work with encrypted DMGs

edmgutil edmgutil is a simple wrapper utility to hdiutil to help you work with disposable, encrypted DMGs. It can decompress an encrypted ZIP into a n

Sentry 9 Nov 29, 2022
Encrypted memories

Diary - Encrypted memories Diary is a TUI program written in Rust for GNU/Linux / *BSD / Android (It probably works on other platforms too, but who ca

Arun Sojan Parolikkal 44 Dec 23, 2022