forked from nextcloud/nextcloud.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
page-endtoend.php
270 lines (256 loc) Β· 19.7 KB
/
page-endtoend.php
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
<head>
<link href="<?php echo get_template_directory_uri(); ?>/assets/css/pages/endtoend.css?v=1" rel="stylesheet">
<!-- <script>
require(["require.config"], function() {
require(["pages/endtoend"])
});
</script>-->
<meta itemprop="image" content="<?php echo get_template_directory_uri(); ?>/assets/img/features/endtoend-server-nw.png">
<meta name="twitter:image" content="<?php echo get_template_directory_uri(); ?>/assets/img/features/endtoend-server-nw.png">
<meta name="twitter:image:src" content="<?php echo get_template_directory_uri(); ?>/assets/img/features/endtoend-server-nw.png">
<meta property="og:image" content="<?php echo get_template_directory_uri(); ?>/assets/img/features/endtoend-server-nw.png">
</head>
<div class=" background endtoend-background">
<div class="container">
<div class="col-md-6 topheader">
<h1><?php echo $l->t('End-to-end Encryption');?></h1>
<h2><?php echo $l->t('Protecting data from source to destination');?></h2>
</div>
</div>
</div>
<!--<section class="claim">
<div class="container">
<div class="col-md-10 col-md-offset-1 claim__container">
<p class="claim__paragraph">
<?php echo $l->t('Nextcloud understands the necessity to provide core principle baseline security requirements, as such Nextcloud 11 is built on these security principles to ultimately deliver a secure solution to their customers');?>
</p>
<div class="claim__brand">
<div class="claim__brand__logo"></div>
<p class="claim__brand__text">
<?php echo $l->t('NCC Group');?>
</p>
</div>
</div>
</div>
</section>-->
<section class="section--intro">
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<p class="section--paragraph">
<?php echo $l->t('Nextcloud features an enterprise-grade, seamlessly integrated solution for end-to-end encryption. It enables users to pick one or more folders on their desktop or mobile client for end-to-end encryption. Folders can be shared with other users and synced between devices but are not readable by the server.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('Note: our end-to-end encryption solution is under constant development. Some features part of the design have not yet been implemented in the client or server code. In particular, as of January 2021, offline recovery, sharing and HSM features are on the roadmap.');?>
</p>
</div>
</div>
</div>
</section>
<section class="section--ultimate">
<div class="container">
<h1 class="section--heading-1 section--text--center"><?php echo $l->t('Ultimate protection');?></h1>
<div class="row">
<div class="col-md-6 image--floated">
<a href="<?php bloginfo('template_directory'); ?>/assets/img/features/endtoend-server-nw.png"><img class="img-responsive screenshot" src="<?php echo get_template_directory_uri(); ?>/assets/img/features/endtoend-server-nw.png" alt="in action" /></a>
</div>
<div class="col-md-6">
<p class="section--paragraph">
<?php echo $l->t('Nextcloud end-to-end encryption offers the ultimate protection for your data, making it suitable for your most private information. Use it to protect a copy of your passport, passwords, driver\'s license or bank account information.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('Enterprises could require employees to keep a subset of the most confidential information client-side encrypted. Research, customer information or strategic documents can be guaranteed to be kept confidential.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('Seamless integration and ease of use with key features like offline recovery keys, auditing and HSM support make Nextcloud End-to-end Encryption the perfect complement to other Nextcloud security features including Server-side Encryption and File Access Control.');?>
</p>
</div>
</div>
</div>
</section>
<section class="section--differences">
<div class="container-fluid banner quote">
<div class="container">
<div class="col-md-6">
<h1 class="section--heading-1 section--text--center"><?php echo $l->t('Unique capabilities');?></h1>
<ul>
<li><i class="fa-check fa"></i> <?php echo $l->t('Any number of folders can be end to end encrypted.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Easily add a new device with a strong passcode consisting of 12 dictionary words.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Secure sharing with other users without the need to enter passwords.');?> (roadmap 2021)</li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Efficient sharing and revoking shares without the need to re-encrypt large files.');?> (roadmap 2021)</li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Supports a Hardware Security Module for enterprise environments which enables securely issuing new keys to users.');?> (roadmap 2022)</li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Supports an offline administrator recovery key to be kept in a physically separated location. Users get warned when this key is enabled.');?> (roadmap 2021)</li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Supports a complete audit log without compromising end to end security.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Can be combined with our File Access Control to block specific file types or files by specific user groups from uploading unless they are end-to-end encrypted.');?></li>
</ul>
</div>
<img class="big-img" src="<?php echo get_template_directory_uri(); ?>/assets/img/security/devices.jpg">
<img class="small-img" src="<?php echo get_template_directory_uri(); ?>/assets/img/security/devices_small.jpg">
</div>
</div>
</section>
<section class="section--identity">
<div class="container">
<h1 class="section--heading-1 section--text--center"><?php echo $l->t('Cryptographic Identity Protection');?></h1>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<p class="section--paragraph">
<?php echo $l->t('Every user gets a unique public/private key combination when they first enable end-to-end encryption. The public key is sent to the server and signed into a certificate. The certificate is checked by the users\' other clients and used by other users to share encrypted files with the first user, based on Trust On First Use.');?>
</p>
</div>
</div>
<div class="row">
<div class="col-md-6 image--floated">
<a href="<?php bloginfo('template_directory'); ?>/assets/img/features/endtoend-encryption_passphrase.png"><img class="img-responsive screenshot" src="<?php echo get_template_directory_uri(); ?>/assets/img/features/endtoend-android-nw.png" alt="in action" /></a>
</div>
<div class="col-md-6">
<p class="section--paragraph">
<ul>
<li><i class="fa-check fa"></i> <?php echo $l->t('Each device of the user can aid in recovering their private key. Only if a key is lost on all devices AND the 12 secure key words are lost, the user loses access to his/her data. The optional offline administrator recovery key can still be used to re-gain access.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('By default, keys can\'t change so as to protect the identity of users from hacking if the server is compromised. If the key could change, a hacker could issue a \'new\' certificate for the user and have clients respond by re-encrypting data with the new, compromised key.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('The process enables a complete audit log, crucial for enterprise use.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('The certificate can optionally be issued by a Hardware Security Module so it is possible to issue new certificates for existing users in a secure way.');?></li>
</ul>
</p>
</div>
</div>
</section>
<section class="section--whitepaper quote">
<div class="container">
<div class="row">
<div class="col-lg-8">
<h2><?php echo $l->t('Get our whitepaper');?></h2>
<form name="whitepaper" method="post" action="<?php echo home_url('whitepaper-submit') ?>">
<p><label for="email"><?php echo $l->t('Download our End-to-end Encryption white paper!');?></p>
<input type="hidden" name="segmentId" value="12">
<input type="hidden" name="firstname" value="">
<input type="hidden" name="requesttime" value="<?php echo time(); ?>">
<input class="mail" type="text" name="email" maxlength="80" placeholder="Enter your email"></label>
<div class="newsletter">
<input type="hidden" name="newsletter" value="0" />
<!-- <input type="checkbox" name="newsletter" value="1"> <small>Sign me up for the Nextcloud newsletter</small><br/> -->
<input type="hidden" name="moreinfo" value="0" />
<input type="checkbox" name="moreinfo" value="1"> <small><?php echo $l->t('Subscribe me to the monthly Nextcloud newsletter');?>. <?php echo $l->t('See our');?> <a class="hyperlink" href="<?php echo home_url('privacy') ?>"><?php echo $l->t('privacy policy');?></a></small>
</div>
<input class="button button--large" type="submit" value=" Get the white paper "></p>
</form>
<small><?php echo $l->t('Find the technical design (RFC) of our solution on');?> <a class="hyperlink" href="https://github.com/nextcloud/end_to_end_encryption_rfc">GitHub</a>.</small>
</div>
</div>
<img class="responsive" src="<?php bloginfo('template_directory'); ?>/assets/img/whitepapers/endtoend-thumbnail-banner.png"/>
</div>
</section>
<section class="section--usecases">
<div class="container">
<h1 class="section--heading-1 section--text--center"><?php echo $l->t('Enterprise-grade Encryption Solution');?></h1>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<p class="section--paragraph">
<?php echo $l->t('Nextcloud offers a supremely easy to use, well integrated file sync and share solution with an uniquely layered approach to security. Our solution delivers deep infrastructure integration with support for nearly any storage technology and combines it with powerful server-side encryption and end-to-end encryption in the clients, both of which can be applied in a granular way.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('Rather than making it an either-or choice, businesses can rely on utmost security where it is needed but keep collaborative online document editing and full-text search on the server over the rest of the stored data.');?>
</p>
</div>
</div>
<div class="row">
<div class="col-md-6 image--floated">
<a href="<?php bloginfo('template_directory'); ?>/assets/img/features/encryption-nw.png"><img class="img-responsive screenshot" src="<?php echo get_template_directory_uri(); ?>/assets/img/features/encryption-nw.png" alt="in action" /></a>
</div>
<div class="col-md-6">
<h3 class="section--paragraph__title"><?php echo $l->t('Use cases');?></h3>
<p class="section--paragraph">
<?php echo $l->t('Users can access data on a FTP drive shared with another company; while data stored on an external S3 compatible object storage could be encrypted using server-side encryption so the storage provider has no way to compromise their security.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('And with the');?> <a class="hyperlink" href="<?php echo home_url('workflow') ?>"><?php echo $l->t('Nextcloud File Access Control feature,</a> files from the HR department can always be enforced to be end-to-end encrypted on their clients, protecting their data from even the worst case of a full server breach. Similarly, sensitive research, customer information or strategic documents can be guaranteed to be kept even from server administrators.');?>
</p>
</div>
</div>
</div>
</section>
<section class="section--technology">
<div class="container">
<h1 class="section--heading-1 section--text--center"><?php echo $l->t('Technical background');?></h1>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<p class="section--paragraph">
<?php echo $l->t('Below we cover some of the basics of our design. Download our white paper for more details.');?>
</p>
</div>
</div>
<div class="row">
<div class="col-md-6">
<h3 class="section--paragraph__title"><?php echo $l->t('Requirements');?></h3>
<p class="section--paragraph">
<?php echo $l->t('We aimed to fulfill the following business and technical criteria.');?>
</p>
<p class="section--paragraph">
<ul>
<li><i class="fa-check fa"></i> <?php echo $l->t('Security properties: Never leak directory structure, filenames or file content to the server. Encrypt folders so only legitimate recipients have access, data integrity is guaranteed and authenticity can be proven. Optional central data recovery key should be possible. Users should be warned if in use.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Use widely available and tested libraries for crypto primitives, available for iOS 9+, Android 6.0+, macOS 10.9+, Windows 7+, Linux and PHP 7.0+.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Sharing on folder-level granularity must be possible to individual users. No passwords should need to be exchanged for sharing. Key exchange should be auditable. Adding devices should be easy and new devices should have access to all previously encrypted data.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('The protocol needs to support versioning in case of future changes to metadata or crypto handling. Design should support a hardware security module, giving strong authentication, tamper-resistance and a complete audit trail.');?></li>
</ul>
</p>
</div>
<div class="col-md-6">
<h3 class="section--paragraph__title"><?php echo $l->t('Accepted feature loss');?></h3>
<p class="section--paragraph">
<?php echo $l->t('We accept losing the following features:');?>
</p>
<p class="section--paragraph">
<ul>
<li><i class="fa-check fa"></i> <?php echo $l->t('Server-side trash bin');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Server-side versioning');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Server-side search');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Server-side previews');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('File access through web interface');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Sharing to groups');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Sharing at the level of individual files');?></li>
</ul>
</p>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-7">
<a href="<?php bloginfo('template_directory'); ?>/assets/img/security/E2E-CreateAndSyncIdentity.png"><img class="img-responsive screenshot" src="<?php echo get_template_directory_uri(); ?>/assets/img/security/E2E-CreateAndSyncIdentity.png" alt="in action" /></a>
</div>
<div class="col-md-5">
<h3 class="section--paragraph__title"><?php echo $l->t('Enabling encryption');?></h3>
<p class="section--paragraph">
<?php echo $l->t('The encryption is based upon an asymmetric cryptographic system. Every user has exactly one private and public key pair.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('The key generation process is designed to keep the contents of the private key from the server while storing it security so it can be synced to other devices the user owns. Some other properties of the process:');?>
</p>
<p class="section--paragraph">
<ul>
<li><i class="fa-check fa"></i> <?php echo $l->t('The user creates an identity which is signed by the server (using a certificate) and associated with their public key. Users can only have one identity, other clients will refuse to accept a new certificate following the Trust on First Use (TOFU) model. This protects data from a malicious server which tries to generate a new identity for a target user and get clients to re-encrypt the data against it.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('In case a user loses their device they can easily recover by using the mnemonic passphrase. The mnemonic passphrase can also be shown in the client settings in case the user forgets their mnemonic. Displaying the mnemonic requires the user to enter their PIN/fingerprint again on mobile devices.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('Sharing on folder-level granularity must be possible to individual users. No passwords should need to be exchanged for sharing. Key exchange should be auditable. Adding devices should be easy and new devices should have access to all previously encrypted data.');?></li>
<li><i class="fa-check fa"></i> <?php echo $l->t('The protocol needs to support versioning in case of future changes to metadata or crypto handling. Design should support a hardware security module, giving strong authentication, tamper-resistance and a complete audit trail.');?></li>
</ul>
</p>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<a href="<?php bloginfo('template_directory'); ?>/assets/img/security/E2E-EncryptFoldersAndAddFiles.png"><img class="img-responsive screenshot" src="<?php echo get_template_directory_uri(); ?>/assets/img/security/E2E-EncryptFoldersAndAddFiles.png" alt="in action" /></a>
</div>
<div class="col-md-10 col-md-offset-1">
<h3 class="section--paragraph__title"><?php echo $l->t('Encrypting files');?></h3>
<p class="section--paragraph">
<?php echo $l->t('Creating an end-to-end encrypted folder is done by flagging an empty folder as end-to-end encrypted, creating metadata, encrypting and uploading it. The process is protected by locking, with the client requesting a lock from the server and releasing it again after all changes are finished and uploaded.');?>
</p>
<p class="section--paragraph">
<?php echo $l->t('Files are each encrypted with their own, unique key, which is stored in the metadata file. All data in the metadata file is, in turn, securely encrypted and files names and directory structures are also hidden from the server using a unique UUID as name for each file.');?>
</p>
</div>
</div>
</div>
</section>