All Projects → hermits-grove → Hermitdb

hermits-grove / Hermitdb

A private decentralized database replicated over Git (or any other distributed log)

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Hermitdb

Agent
The best way to backup and restore your database
Stars: ✭ 80 (+31.15%)
Mutual labels:  database, encryption
Databunker
Secure storage for personal records built to comply with GDPR
Stars: ✭ 122 (+100%)
Mutual labels:  database, encryption
Mongoaudit
🔥 A powerful MongoDB auditing and pentesting tool 🔥
Stars: ✭ 1,174 (+1824.59%)
Mutual labels:  database, encryption
Phoenix Ecto Encryption Example
🔐 A detailed example for how to encrypt data in a Phoenix (Elixir) App before inserting into a database using Ecto Types
Stars: ✭ 166 (+172.13%)
Mutual labels:  database, encryption
Laravel Database Encryption
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
Stars: ✭ 238 (+290.16%)
Mutual labels:  database, encryption
Trousseau
File based encrypted key-value store
Stars: ✭ 915 (+1400%)
Mutual labels:  database, encryption
Fastsitephp
🌟 FastSitePHP 🌟 A Modern Open Source Framework for building High Performance Websites and API’s with PHP
Stars: ✭ 102 (+67.21%)
Mutual labels:  database, encryption
Hive
Lightweight and blazing fast key-value database written in pure Dart.
Stars: ✭ 2,681 (+4295.08%)
Mutual labels:  database, encryption
Gun
An open source cybersecurity protocol for syncing decentralized graph data.
Stars: ✭ 15,172 (+24772.13%)
Mutual labels:  database, encryption
Backup
Easy full stack backup operations on UNIX-like systems.
Stars: ✭ 4,682 (+7575.41%)
Mutual labels:  database, encryption
Siodb
The simplicity of REST and the power of SQL combined in a database that automatized security and performance. Forget the database, develop faster and safer!
Stars: ✭ 31 (-49.18%)
Mutual labels:  database, encryption
Data Science Best Resources
Carefully curated resource links for data science in one place
Stars: ✭ 1,104 (+1709.84%)
Mutual labels:  database
Wolfssl
wolfSSL (formerly CyaSSL) is a small, fast, portable implementation of TLS/SSL for embedded devices to the cloud. wolfSSL supports up to TLS 1.3!
Stars: ✭ 1,098 (+1700%)
Mutual labels:  encryption
Noisepage
Self-Driving Database Management System from Carnegie Mellon University
Stars: ✭ 1,095 (+1695.08%)
Mutual labels:  database
Db Dashboard
Project files of the article featured here: http://db.rstudio.com/best-practices/dashboards/
Stars: ✭ 58 (-4.92%)
Mutual labels:  database
Layr
Dramatically simplify full‑stack development
Stars: ✭ 1,111 (+1721.31%)
Mutual labels:  database
Restfeel
RESTFeel: 一个企业级的API管理&测试平台。RESTFeel帮助你设计、开发、测试您的API。
Stars: ✭ 59 (-3.28%)
Mutual labels:  database
Squid
🦑 Provides SQL tagged template strings and schema definition functions.
Stars: ✭ 57 (-6.56%)
Mutual labels:  database
Couchbase Lite C
C language bindings for the Couchbase Lite embedded NoSQL database engine
Stars: ✭ 58 (-4.92%)
Mutual labels:  database
Docker Backup Database
Docker image to periodically backup your database (MySQL, Postgres, or MongoDB) to S3 or local disk.
Stars: ✭ 57 (-6.56%)
Mutual labels:  database

HermitDB

A private decentralized database replicated over Git (or any other distributed log)

The replicated log abstraction has popped up in many distributed systems over the years, we see it in Bitcoin as the blockchain, we see it in systems that rely on distributed logs like Kafka, and we see it in Git as the branch commit history.

HermitDB uses the widespread deployment of these logs to give users the ability to replicate their data using a log that they have access to.

The motivating idea behind HermitDB is that if you've built a password manager with HermitDB, users of this password manager can effortlesly sync their data across their devices using a git repo they control, meaning they keep control over their data.

extern crate hermitdb;

use hermitdb::{sled, memory_log, map, DB};

fn main() {
    let actor = 32;
    let config = sled::ConfigBuilder::new().temporary(true).build();
    let tree = sled::Tree::start(config).unwrap();
    // use an in memory log for testing
    let log = memory_log::Log::new(actor);
    let map = map::Map::new(tree);
    let db = DB::new(log, map);
}

If you've got some spare time...

  • crypto
    • Reduce our reliance on a strong rng
      • If an attacker controls our source of entropy, it increases chance of leak.
      • Nonce's are currently generated randomly. Since we have a seperate encryption key per log, and logs are immutable (are they? what if we add compaction?) we should be able to use a counter on log entries as a nonce.
    • reduce our reliance on a strong password. The users password is the weakest link in our crypto system. To improve security, we can look into adding an entropy file: a randomly generated file that is not synced through hermitdb. This would be similar to Keepass's composite key, the contents of the entropy file would be taken as input to the kdf giving us a lower bound of len(<entrop_file_content>) bits of entropy (assuming a strong rng was used to generate the entropy file).
  • compressing op's in the log
    • Look into zstd (we already have zstd as a dependency from sled).
  • log compaction
    • 1000 edits => 1000 log entries => 1000 commits (in the current git_log implementation).
    • Can we compact this log and preserve causality?
    • can we make Op's themselves CRDT's? let compacted_op = merge(op1, op2)

Prior Art

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].