devchat notes 28-Feb-2017

Brian Warner warner at lothar.com
Tue Feb 28 19:34:28 UTC 2017


Tahoe-LAFS devchat 28-Feb-2017

Attendees: ramki, jack, liz, warner, meejah, chris, exarkun, dawuud

* pycryptopp binary wheels
  * exarkun has PR to replace versioning, another to create linux wheels
  * maybe use docker from travis
  * needs a flappserver set up to upload them somewhere

* consider moving tahoe from pycryptopp to (pyca) cryptography: post to
  mailing list
  * Crypto++ is solid, but takes a lot of RAM to compile. Was only
    option when we started.
  * pyca is active, modern, but currently depends on openssl
  * warner will post to mailing list, solicit discussion

* "grid": how to explain?
  * mental-model distinction between client, protocol, (set of storage
    providers)
  * a one-true-grid would remove the confusion, but is of course
    somewhat impossible
  * IPFS aspires to one-true-grid-ness, and (at least pretends) to let
    you not care where your data is stored
  * dropbox: company == client == storage provider
  * does each grid need a brand name?
  * may need different analogies for different audiences: marketing to
    consumers, to developers, to businesses?
  * tahoe as a protocol, vs tahoe as a program
  * managing expectations. "if I download this program and run it, will
    I be able to store files?"
  * "the public grid": very confusing: implies public visibility of
    their files
    * need a different term, different adjective
* need to rewrite the "what is tahoe" intro page
  * maybe: "with the tahoe software, *in conjunction with the storage
    provider of your choice*, you can store stuff"

* "tahoe invite" and "tahoe create-node --join"
  * meejah's work to copy introducer and parameters to new client
  * ties into accounting; what permissions get conveyed?
  * pluggable accounting?
  * SPOFs: tor/i2p networks have a starting point or central group of
    authorities
* use keybase somehow?
  * send introducer/parameters to /keybase/private/me,you

* one-sided vs two-sided invitations: send pubkey up, or send secret
  down? or both? Does the inviter need to contact all servers and let
  them know about the new client, or do they give a cert/delegation to
  the client that all servers will recognize? When a new server is
  added, do all clients need to be told that they can use it?

* want caps that can work on other grids
  * at least temporarily
  * introducer might help with that

*  HTTP-based storage server: why?
  * maybe useful for static public datasets (scihub, climate data
    online): read-only access with distributed publishing, very
    IPFS-like
  * makes download-side accounting harder: only anonymous-reads
  * originally an experiment by warner to investigate
    foolscap/new-downloader performance problems
* HTTP-server approaches:
  * plain REST-ful PUT, the server errors fast if it's going to reject
  * series of smaller PUTs or POSTs, with initial "will you accept
    this?" query and final "I'm done now" message
    * like S3's multi-step large-upload
  * not-at-all-REST-ful one signed POST per request, empty PATH, no
    headers. HTTP in name only.
    * map foolscap's open/write/write/close to HTTP
    * warner originally favored this, to avoid security holes with
      signed-headers (which always felt like security-as-afterthought)
* should probably do:
  * one PUT per share upload
  * auth header with signed (hash of body, hash of relevant headers)
    * exarkun points out this can be made safe by having the server put
      a shim in front, which validates the headers and then strips out
      anything not covered by them before passing it to the real server
  * auth header includes ed25519 pubkey that signed it
  * StorageServer gets (pubkey, request details), decides whether to
    accept or not
  * establishing which pubkey to use, and what authority is has, is
    out-of-band, at least not in the PUT request
  * acccounting plugins (on both client and server sides) can have a
    conversation first, to negotiate, then the server remembers (pubkey1
    -> authority X), the client signs their PUT with pubkey1, the server
    checks that the request details conform to X
  * could maybe work for authorized GET too

* "remote control" tahoe client -meejah
  *  full client node lives at home
  * "lite" client (on phone) talks to the full client over
    HTTP-something to upload/download
  * like a Helper, but plaintext (over TLS of course)

* memcached frontend idea -meejah
  * like FTP/SFTP/WAPI frontends
  * would need to store key->filecap table somewhere

* meejah/dawuud have an accounting branch that switches to an async db
  api (to enable mysql or AWS cloud-DB or something, not just local
  sqlite)


More information about the tahoe-dev mailing list