Re-design of the original gocryptfs code to work as a library.
Go to file
Jakob Unterwurzacher 242fcd0736 Run gofmt
2015-10-11 18:51:56 +02:00
cryptfs main: check directories for existence early 2015-10-11 18:33:28 +02:00
openssl_benchmark Run go fmt 2015-10-07 22:59:36 +02:00
pathfs_frontend Use block number as authentication data 2015-10-06 22:27:37 +02:00
.gitignore Move main files to top level dir 2015-10-11 17:14:18 +02:00
benchmark.bash Fix helper scripts for new top-level path 2015-10-11 18:40:27 +02:00
build.bash Move main files to top level dir 2015-10-11 17:14:18 +02:00
checkdir.go Run gofmt 2015-10-11 18:51:56 +02:00
daemonize.go Run gofmt 2015-10-11 18:51:56 +02:00
main_test.go Fix helper scripts for new top-level path 2015-10-11 18:40:27 +02:00
main.go Run gofmt 2015-10-11 18:51:56 +02:00
masterkey.go Move main files to top level dir 2015-10-11 17:14:18 +02:00
package.bash Fix helper scripts for new top-level path 2015-10-11 18:40:27 +02:00
password.go Move main files to top level dir 2015-10-11 17:14:18 +02:00
README.md README: Remove dots notice 2015-10-10 18:34:09 +02:00
SECURITY.md Split off SECURITY.md 2015-10-06 23:20:21 +02:00
sendusr1.go Rename sendSig to sendUsr1 2015-10-11 18:01:47 +02:00
test.bash Fix helper scripts for new top-level path 2015-10-11 18:40:27 +02:00
XFSTESTS.md Update README 2015-10-07 23:31:28 +02:00

GoCryptFS

An encrypted overlay filesystem focused on security and correctness.

gocryptfs is built on top the excellent go-fuse FUSE library and its LoopbackFileSystem API.

This project was inspired by EncFS and strives to fix its security issues (see EncFS tickets 9, 13, 14, 16). For details on the security of GoCryptFS see the SECURITY.md document.

Current Status

  • First public release
  • Feature-complete
  • Passes the fuse-xfstests "generic" tests with one exception, results: 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 exceptions generic/035. This is a limitation in go-fuse, check out https://github.com/hanwen/go-fuse/issues/55 for details.
  • However, gocryptfs needs more real-world testing - please report any issues via github.
  • Only Linux operation has been tested. Help wanted for a Mac OS X port.

Install

$ go get github.com/rfjakob/gocryptfs/gocryptfs_main

Use

$ mkdir cipher plain
$ alias gocryptfs="$GOPATH/src/github.com/rfjakob/gocryptfs/gocryptfs"
$ gocryptfs --init cipher
  [...]
$ gocryptfs cipher plain
  [...]
$ 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

Performance

  • 28 bytes of storage overhead per block (16 bytes auth tag, 12 byte nonce)
  • uses openssl through spacemonkeygo/openssl for a 3x speedup compared to crypto/cipher (see go-vs-openssl.md for details

Run ./benchmark.bash to run the test suite and the streaming read/write benchmark. The benchmark is run twice, first with native Go crypto and second using openssl.

The output should look like this:

$ ./benchmark.bash
[...]
BenchmarkStreamWrite	     100	  11816665 ns/op	  88.74 MB/s
BenchmarkStreamRead 	     200	   7848155 ns/op	 133.61 MB/s
ok  	github.com/rfjakob/gocryptfs	9.407s