roadmap for next year's work
This commit is contained in:
parent
cb8feb7be0
commit
17016017d8
8 changed files with 135 additions and 25 deletions
|
@ -5,6 +5,8 @@ and use cases to add. Feel free to chip in with comments! --[[Joey]]
|
||||||
|
|
||||||
## roadmap
|
## roadmap
|
||||||
|
|
||||||
|
kickstarter year
|
||||||
|
|
||||||
* Month 1 "like dropbox": [[!traillink inotify]] [[!traillink syncing]]
|
* Month 1 "like dropbox": [[!traillink inotify]] [[!traillink syncing]]
|
||||||
* Month 2 "shiny webapp": [[!traillink webapp]] [[!traillink progressbars]]
|
* Month 2 "shiny webapp": [[!traillink webapp]] [[!traillink progressbars]]
|
||||||
* Month 3 "easy setup": [[!traillink configurators]] [[!traillink pairing]]
|
* Month 3 "easy setup": [[!traillink configurators]] [[!traillink pairing]]
|
||||||
|
@ -19,7 +21,19 @@ and use cases to add. Feel free to chip in with comments! --[[Joey]]
|
||||||
* Month 11: [[!traillink Windows]] porting, finishing touches
|
* Month 11: [[!traillink Windows]] porting, finishing touches
|
||||||
* Month 12: [presentation at SELF2013](http://www.southeastlinuxfest.org/), finishing touches
|
* Month 12: [presentation at SELF2013](http://www.southeastlinuxfest.org/), finishing touches
|
||||||
|
|
||||||
... Now what? :)
|
[sustaining git-annex development](https://campaign.joeyh.name/) year
|
||||||
|
|
||||||
|
* Month 1 [[!traillink encrypted_git_remotes]]
|
||||||
|
* Month 2 [[!traillink disaster_recovery]]
|
||||||
|
* Month 3 [[!traillink xmpp_security]]
|
||||||
|
* Month 5 [[!traillink Windows]] assistant and webapp
|
||||||
|
* Month 6 improve special remote interface & git-annex enhancement contest
|
||||||
|
* Month 7 user-driven features and polishing
|
||||||
|
* Month 8 [[!traillink gpgkeys]] [[!traillink sshpassword]]
|
||||||
|
* Month 9 [[!traillink Android]] (get it out of beta)
|
||||||
|
* Month 10 user-driven features and polishing
|
||||||
|
* Month 11 [[!chunks]] [[!traillink deltas]]
|
||||||
|
* Month 12 user-driven features and polishing
|
||||||
|
|
||||||
## porting
|
## porting
|
||||||
|
|
||||||
|
@ -31,7 +45,6 @@ and use cases to add. Feel free to chip in with comments! --[[Joey]]
|
||||||
|
|
||||||
* [[rate_limiting]]
|
* [[rate_limiting]]
|
||||||
* [[partial_content]]
|
* [[partial_content]]
|
||||||
* [[encrypted_git_remotes]]
|
|
||||||
* [[deltas]]
|
* [[deltas]]
|
||||||
* [[leftovers]]
|
* [[leftovers]]
|
||||||
* [[other todo items|todo]]
|
* [[other todo items|todo]]
|
||||||
|
|
|
@ -6,7 +6,7 @@ to improve it.
|
||||||
* [[bugs/Android_app_permission_denial_on_startup]]
|
* [[bugs/Android_app_permission_denial_on_startup]]
|
||||||
* S3 doesn't work (at least to Internet Archive:
|
* S3 doesn't work (at least to Internet Archive:
|
||||||
"connect: does not exist (connection refused)")
|
"connect: does not exist (connection refused)")
|
||||||
* Get app into Goole Play and/or FDroid
|
* Get app into Google Play and/or FDroid
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
|
|
4
doc/design/assistant/chunks.mdwn
Normal file
4
doc/design/assistant/chunks.mdwn
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
To avoid leaking even the size of your encrypted files to cloud storage
|
||||||
|
providers, add a mode that stores fixed size chunks.
|
||||||
|
|
||||||
|
May be a useful starting point for [[deltas]].
|
53
doc/design/assistant/disaster_recovery.mdwn
Normal file
53
doc/design/assistant/disaster_recovery.mdwn
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
The assistant should help the user recover their repository when things go
|
||||||
|
wrong.
|
||||||
|
|
||||||
|
## dangling lock files
|
||||||
|
|
||||||
|
There are a few ways a git repository can get broken that are easily fixed.
|
||||||
|
One is left over index.lck files. When a commit to a repository fails,
|
||||||
|
check that nothing else is using it, fix the problem, and redo the commit.
|
||||||
|
|
||||||
|
This should be done on both the current repository and any local
|
||||||
|
repositories. Maybe also make git-annex-shell be able to do it remotely?
|
||||||
|
|
||||||
|
## incremental fsck
|
||||||
|
|
||||||
|
Add webapp UI to enable incremental fsck, and choose when to start and how
|
||||||
|
long to run each day.
|
||||||
|
|
||||||
|
When fsck finds a damanged file, queue a download of the file from a
|
||||||
|
remote. If no accessible remote has the file, prompt the user to eg, connect
|
||||||
|
a drive containing it.
|
||||||
|
|
||||||
|
## git-annex-shell remote fsck
|
||||||
|
|
||||||
|
Would be nice; otherwise remote fsck is too expensive (downloads
|
||||||
|
everything) to have the assistant do. (remote fsck --fast might be worth
|
||||||
|
having the assistant do)
|
||||||
|
|
||||||
|
## git fsck
|
||||||
|
|
||||||
|
Have the sanity checker run git fsck periodically (it's fairly inexpensive,
|
||||||
|
but still not too often, and should be ioniced and niced).
|
||||||
|
|
||||||
|
If committing to the repository fails, after resolving any dangling lock
|
||||||
|
files (see above), it should git fsck.
|
||||||
|
|
||||||
|
If git fsck finds problems, launch git repository repair.
|
||||||
|
|
||||||
|
## git repository repair
|
||||||
|
|
||||||
|
There are several ways git repositories can get damanged.
|
||||||
|
|
||||||
|
The most common is empty files in .git/annex/objects and commits that refer
|
||||||
|
to those objects. When the objects have not yet been pushed anywhere.
|
||||||
|
I've several times recovered from this manually by
|
||||||
|
removing the bad files and resetting to before the commits that referred to
|
||||||
|
them. Then re-staging any divergence in the working tree. This could
|
||||||
|
perhaps be automated.
|
||||||
|
|
||||||
|
As long as the git repository has at least one remote, another method is to
|
||||||
|
clone the remote, sync from all other remotes, move over .git/config and
|
||||||
|
.git/annex/objects, and tar up the old broken git repo and `git annex add`
|
||||||
|
it. This should be automatable and get the user back on their feet. User
|
||||||
|
could just click a button and have this be done.
|
24
doc/design/assistant/gpgkeys.mdwn
Normal file
24
doc/design/assistant/gpgkeys.mdwn
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
Currently the assistant sets up a shared encryption key, which is checked
|
||||||
|
into git, so anyone who gets the repository can decrypt files that are
|
||||||
|
stored encrypted on special remotes.
|
||||||
|
|
||||||
|
To support using gpg keys in the assistant, we need two things:
|
||||||
|
|
||||||
|
1. Help user set up a gpg key if they don't have one. This could be a
|
||||||
|
special-purpose key dedicated to being used by git-annex. It might be
|
||||||
|
nice to leave the user with a securely set up general purpose key,
|
||||||
|
but that would certianly preclude prompting for its password in the
|
||||||
|
webapp. Indeed, the password prompt is the main problem here.
|
||||||
|
Best solution would be to get gpg agent working on all supported
|
||||||
|
platforms.
|
||||||
|
2. Help user learn the gpg keys of people they want to share their repo
|
||||||
|
with, and give them access. If the public key was recorded in the git-annex
|
||||||
|
branch, this could be easily determined when sharing repositories with
|
||||||
|
friends. Or, use MonkeySphere..
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
Another gpg key security thing is that currently git-annex stores
|
||||||
|
crypto creds in memory while it's running. Should use locked memory. See
|
||||||
|
<https://github.com/vincenthz/hs-securemem> and
|
||||||
|
<https://github.com/vincenthz/hs-securemem/issues/1>
|
12
doc/design/assistant/sshpassword.mdwn
Normal file
12
doc/design/assistant/sshpassword.mdwn
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Currently the assistant sets up dedicated ssh keys, that can just use
|
||||||
|
git-annex. This is ok. The problem is that the initial 2 connections to the
|
||||||
|
ssh server when setting up these keys involve a password prompt, which is
|
||||||
|
done at the console unless the system happens to have a working ssh agent
|
||||||
|
that can pop up a dialog. That can be confusing.
|
||||||
|
|
||||||
|
It would be nice to have the webapp prompt for the password. Can it be done
|
||||||
|
securely?
|
||||||
|
|
||||||
|
This might come down to a simple change to the webapp to prompt for the
|
||||||
|
password, and then rather a lot of pain to make the webapp use HTTPS so we
|
||||||
|
can be pretty sure noone is sniffing the (localhost) connection.
|
|
@ -13,28 +13,6 @@ who share a repository, that is stored in the [[cloud]].
|
||||||
I have seen a log where a push's packet 1 and 3 arrived, but 2 did not.
|
I have seen a log where a push's packet 1 and 3 arrived, but 2 did not.
|
||||||
To deal with this, need at least a 1 packet buffer and ACK or resend
|
To deal with this, need at least a 1 packet buffer and ACK or resend
|
||||||
request implemented over top of XMPP. Essentially, TCP over XMPP. :(
|
request implemented over top of XMPP. Essentially, TCP over XMPP. :(
|
||||||
* Add an encryption layer that does not rely on trusting the XMPP server's
|
|
||||||
security (currently it's encrypted only to the server, not end-to-end).
|
|
||||||
There are a few options for how to generate the key for eg,
|
|
||||||
AES encryption:
|
|
||||||
* Do a simple Diffie-Hellman shared key generation when starting each XMPP
|
|
||||||
push session. Would not protect the users from active MITM by the
|
|
||||||
XMPP server, but would prevent passive data gathering attacks from
|
|
||||||
getting useful data. Since the key is ephemeral, would provide
|
|
||||||
Forward Security.
|
|
||||||
* Do D-H key generation, but at pairing, not push time. Allows for an
|
|
||||||
optional confirmation step, using eg, BubbleBabble to compare the
|
|
||||||
keys out of band. ("I see xebeb-dibyb-gycub-kacyb-modib-pudub-sefab-vifuc-bygoc-daguc-gohec-kuxax .. do you too?")
|
|
||||||
* Prompt both users for a passphrase when XMPP pairing, and
|
|
||||||
use SPEKE (or similar methods like J-PAKE) to generate a shared key.
|
|
||||||
Avoids active MITM attacks. Makes pairing harder, especially pairing
|
|
||||||
between one's own devices, since the passphrase has to be entered on
|
|
||||||
all devices. Also problimatic when pairing more than 2 devices,
|
|
||||||
especially when adding a device to the set later, since there
|
|
||||||
would then be multiple different keys in use.
|
|
||||||
* Rely on the user's gpg key, and do gpg key verification during XMPP
|
|
||||||
pairing. Problimatic because who wants to put their gpg key on their
|
|
||||||
phone? Also, require the users be in the WOT and be gpg literate.
|
|
||||||
|
|
||||||
## design goals
|
## design goals
|
||||||
|
|
||||||
|
|
26
doc/design/assistant/xmpp_security.mdwn
Normal file
26
doc/design/assistant/xmpp_security.mdwn
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
Currently [[xmpp]] relies on the SSL connection to the server for security.
|
||||||
|
The server can see git repository data pushed through it. (Also, the SSL
|
||||||
|
connection is not pinned or really checked well at all.)
|
||||||
|
|
||||||
|
Add an encryption layer that does not rely on trusting the XMPP server's
|
||||||
|
security. There are a few options for how to generate the key for eg,
|
||||||
|
AES encryption:
|
||||||
|
|
||||||
|
* Do a simple Diffie-Hellman shared key generation when starting each XMPP
|
||||||
|
push session. Would not protect the users from active MITM by the
|
||||||
|
XMPP server, but would prevent passive data gathering attacks from
|
||||||
|
getting useful data. Since the key is ephemeral, would provide
|
||||||
|
Forward Security.
|
||||||
|
* Do D-H key generation, but at pairing, not push time. Allows for an
|
||||||
|
optional confirmation step, using eg, BubbleBabble to compare the
|
||||||
|
keys out of band. ("I see xebeb-dibyb-gycub-kacyb-modib-pudub-sefab-vifuc-bygoc-daguc-gohec-kuxax .. do you too?")
|
||||||
|
* Prompt both users for a passphrase when XMPP pairing, and
|
||||||
|
use SPEKE (or similar methods like J-PAKE) to generate a shared key.
|
||||||
|
Avoids active MITM attacks. Makes pairing harder, especially pairing
|
||||||
|
between one's own devices, since the passphrase has to be entered on
|
||||||
|
all devices. Also problimatic when pairing more than 2 devices,
|
||||||
|
especially when adding a device to the set later, since there
|
||||||
|
would then be multiple different keys in use.
|
||||||
|
* Rely on the user's gpg key, and do gpg key verification during XMPP
|
||||||
|
pairing. Problimatic because who wants to put their gpg key on their
|
||||||
|
phone? Also, require the users be in the WOT and be gpg literate.
|
Loading…
Add table
Add a link
Reference in a new issue