libgocryptfs/README.md

126 lines
4.1 KiB
Markdown
Raw Normal View History

2015-11-14 18:32:03 +01:00
GoCryptFS [![Build Status](https://travis-ci.org/rfjakob/gocryptfs.svg?branch=master)](https://travis-ci.org/rfjakob/gocryptfs) ![Release Status](https://img.shields.io/badge/status-beta-yellow.svg?style=flat)
2015-10-11 23:57:51 +02:00
==============
2015-11-01 12:14:59 +01:00
An encrypted overlay filesystem written in Go.
2015-09-06 12:12:14 +02:00
2015-10-06 00:31:53 +02:00
gocryptfs is built on top the excellent
[go-fuse](https://github.com/hanwen/go-fuse) FUSE library and its
LoopbackFileSystem API.
2015-09-06 12:12:14 +02:00
2015-10-06 00:31:53 +02:00
This project was inspired by [EncFS](https://github.com/vgough/encfs)
and strives to fix its security issues (see EncFS tickets 9, 13, 14, 16).
2015-11-01 12:14:59 +01:00
For details on the security of gocryptfs see the
2015-10-07 23:30:45 +02:00
[SECURITY.md](SECURITY.md) document.
2015-10-06 23:08:04 +02:00
Current Status
--------------
Beta. You are advised to keep a backup of your data outside of gocryptfs, in
addition to storing the *master key* in a safe place (the master key is printed
when mounting).
That said, I am dogfooding on gocryptfs for some time now. In fact, all gocryptfs
development happens inside a mounted gocryptfs filesystem, with no issues so far.
Only Linux is supported at the moment. Help wanted for a Mac OS X port.
Testing
-------
gocryptfs comes with is own test suite, run it using `./test.bash`.
In addition, i have ported `xfstests` to FUSE, the result is the
[fuse-xfstests](https://github.com/rfjakob/fuse-xfstests) project. gocryptfs
passes the "generic" tests with one exception, results: [XFSTESTS.md](XFSTESTS.md)
A lot of work has gone into this. The testing has found bugs in gocryptfs
as well as in go-fuse.
The one exception is generic/035, see [go-fuse issue 55](https://github.com/hanwen/go-fuse/issues/55)
for details. While this is a POSIX violation, I do not see any real-world impact.
2015-10-06 23:08:04 +02:00
Install
-------
2015-10-11 19:45:03 +02:00
$ go get github.com/rfjakob/gocryptfs
2015-10-07 23:30:45 +02:00
Use
---
2015-11-11 09:19:53 +01:00
Quickstart:
2015-10-07 23:30:45 +02:00
$ mkdir cipher plain
2015-10-11 19:45:03 +02:00
$ $GOPATH/bin/gocryptfs --init cipher
2015-10-07 23:30:45 +02:00
[...]
2015-10-11 19:45:03 +02:00
$ $GOPATH/bin/gocryptfs cipher plain
2015-10-07 23:30:45 +02:00
[...]
$ echo test > plain/test.txt
$ ls -l cipher
total 8
-rw-rw-r--. 1 user user 33 7. Okt 23:23 0ao8Hyyf1A-A88sfNvkUxA==
-rw-rw-r--. 1 user user 233 7. Okt 23:23 gocryptfs.conf
2015-10-11 19:45:03 +02:00
$ fusermount -u plain
2015-10-06 23:08:04 +02:00
See [MANPAGE.md](MANPAGE.md) for a description of available options. If you already
have gocryptfs installed, run `./MANPAGE-render.bash` to bring up the rendered manpage in
the pager (requires pandoc).
2015-11-11 09:19:53 +01:00
2015-11-01 12:14:59 +01:00
Storage Overhead
----------------
* Empty files take 0 bytes on disk
* 18 byte file header for non-empty files (2 bytes version, 16 bytes random file id)
* 28 bytes of storage overhead per 4kB block (12 byte nonce, 16 bytes auth tag)
2015-10-06 23:08:04 +02:00
Performance
-----------
gocryptfs uses openssl through
[spacemonkeygo/openssl](https://github.com/spacemonkeygo/openssl)
for a 3x speedup compared to Go's builtin AES-GCM implementation (see
[go-vs-openssl.md](openssl_benchmark/go-vs-openssl.md) for details).
2015-09-06 12:16:34 +02:00
Run `./benchmark.bash` to run the benchmarks.
2015-09-06 12:12:14 +02:00
The output should look like this:
./benchmark.bash
gocryptfs v0.3.1-30-gd69e0df-dirty; on-disk format 2
PASS
BenchmarkStreamWrite-2 100 12246070 ns/op 85.63 MB/s
BenchmarkStreamRead-2 200 9125990 ns/op 114.90 MB/s
BenchmarkCreate0B-2 10000 101284 ns/op
BenchmarkCreate1B-2 10000 178356 ns/op 0.01 MB/s
BenchmarkCreate100B-2 5000 361014 ns/op 0.28 MB/s
BenchmarkCreate4kB-2 5000 375035 ns/op 10.92 MB/s
BenchmarkCreate10kB-2 3000 491071 ns/op 20.85 MB/s
ok github.com/rfjakob/gocryptfs/integration_tests 17.216s
2015-10-06 00:31:53 +02:00
Changelog
---------
2015-11-03 00:08:31 +01:00
v0.4 (in progress)
* Add `-plaintextnames` command line option
* Can only be used in conjunction with `-init` and disables filename encryption
2015-11-03 22:34:03 +01:00
(added on user request)
* Add `FeatureFlags` config file paramter
* This is a config format change, hence the on-disk format is incremented
* Used for ext4-style filesystem feature flags. This should help avoid future
format changes.
2015-11-03 00:08:31 +01:00
* On-disk format 2
2015-11-01 14:07:42 +01:00
v0.3
* Add file header that contains a random id to authenticate blocks
* This is an on-disk-format change
2015-11-01 14:07:42 +01:00
* On-disk format 1
v0.2
* Replace bash daemonization wrapper with native Go implementation
* Better user feedback on mount failures
v0.1
* First release
2015-11-01 14:07:42 +01:00
* On-disk format 0
See https://github.com/rfjakob/gocryptfs/releases for the release dates
and associated tags.