aboutsummaryrefslogtreecommitdiff
path: root/docs/comparison.md
blob: 2a4eeb7ca91bc4cb98484adbc75e6cf5b045491c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Other Projects
==============

There are several open-source file encryption solutions available.
This page tries to help to find the right one for your use case:

* [gocryptfs](https://nuetzlich.net/gocryptfs/) (this project), aspiring successor of EncFS
* [EncFS](https://github.com/vgough/encfs), mature with known security issues
* [eCryptFS](http://ecryptfs.org/), integrated into the Linux kernel
* [Cryptomator](https://cryptomator.org/), strong cross-platform support through Java and WebDAV

If you spot an error or want to see a project added, please
[file a ticket](https://github.com/rfjakob/gocryptfs-website)!

Overview
--------

|                |        gocryptfs        |                encfs                 |           ecryptfs          |     cryptomator     |
| -------------- | ----------------------- | ------------------------------------ | --------------------------- | ------------------- |
| First release  | 2015 [1]                | 2003 [2]                             | 2006 [3]                    | 2014 [4]            |
| Language       | Go                      | C++                                  | C                           | Java                |
| License        | MIT                     | LGPL/GPL [5]                         | GPL                         | Apache/BSD/MIT [6]  |
| File interface | FUSE                    | FUSE                                 | in-kernel filesystem        | WebDAV              |
| Platforms      | Linux (OSX planned [7]) | Linux, OSX; third-party Windows port | Linux only                  | Linux, OSX, Windows |
| User interface | Command line only       | Command line; third-party graphical  | Integrated in login process | Graphical only      |

References:
[[1]](https://github.com/rfjakob/gocryptfs/releases/tag/v0.1)
[[2]](https://github.com/vgough/encfs/blob/master/ChangeLog#L1442)
[[3]](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=237fead619984cc48818fe12ee0ceada3f55b012)
[[4]](https://github.com/cryptomator/cryptomator/releases/tag/v0.1.0)
[[5]](https://github.com/vgough/encfs/blob/master/COPYING)
[[6]](https://github.com/cryptomator/cryptomator/tree/master/LICENSES)
[[7]](https://github.com/rfjakob/gocryptfs/issues/15)


General Security
----------------

|                         | gocryptfs | encfs default | encfs paranoia |               ecryptfs               | cryptomator |
| ----------------------- | --------- | ------------- | -------------- | ------------------------------------ | ----------- |
| Documentation available | Yes [1]   | Yes [2]       | Yes [2]        | No [4]                               | Yes [3]     |
| Password hashing        | scrypt    | PBKDF2        | PBKDF2         | (none, implemented in external tool) | scrypt      |


References:
[[1]](security.md)
[[2]](https://github.com/vgough/encfs/blob/master/DESIGN.md)
[[3]](https://cryptomator.org/#security)
[[4]](http://ecryptfs.org/documentation.html) actually, there is a lot of ecryptfs documentation, but none of
it seems to describe the used crypto.



File Contents
-------------

|            | gocryptfs |        encfs default        |        encfs paranoia       | ecryptfs |    cryptomator     |
| ---------- | --------- | --------------------------- | --------------------------- | -------- | ------------------ |
| Encryption | GCM       | CBC; CFB for last block [1] | CBC; CFB for last block [1] | CBC      | CTR with random IV |
| Integrity  | GCM       | none                        | HMAC                        | none     | HMAC               |

References:
[[1]](https://github.com/vgough/encfs/issues/9)

File Names
----------

|                      |       gocryptfs       |    encfs default     |    encfs paranoia    | ecryptfs | cryptomator |
| -------------------- | --------------------- | -------------------- | -------------------- | -------- | ----------- |
| Encryption           | EME                   | CBC                  | CBC                  | CBC      | SIV         |
| Prefix leak          | no (EME)              | no (HMAC used as IV) | no (HMAC used as IV) | yes [2]  | no (SIV)    |
| Identical names leak | no (per-directory IV) | no (path chaining)   | no (path chaining)   | yes [1]  | yes [3]     |

References:
[[1]](https://gist.github.com/rfjakob/a04364c55b3ee231078d)
[[2]](https://gist.github.com/rfjakob/61a17bf3c7eb9932d791)
[[3]](https://github.com/cryptomator/cryptomator/issues/128)

Disk Space Efficiency
---------------------

(all file sizes in bytes)

|                   | gocryptfs | encfs default | encfs paranoia | ecryptfs |    cryptomator     |
| ----------------- | --------- | ------------- | -------------- | -------- | ------------------ |
| Empty file        |         0 |             0 |              0 |     8192 | ~104 - 4231        |
| 1 byte file       |        51 |             9 |             17 |    12288 | ~104 - 4231        |
| 1000000 byte file |   1007858 |       1000008 |        1007888 |  1011712 | ~1001161 - 1100936 |
|                   |           |               |                |          |                    |

Note: cryptomator obfuscates the real file size by adding a random padding which
is why the resulting size is non-deterministic.