devchat notes 16-May-2017
Brian Warner
warner at lothar.com
Wed May 17 07:26:34 UTC 2017
Tahoe-LAFS devchat 16-May-2017
Attendees: warner, exarkun, simpson, meejah, cypher
* simpson: phone app ideas
* capn-based frontend, leave foolscap out of the phone side
* trying to prototype grid manager at pycon
* simpson is concerned about having account identifiers on data
* maybe we could use the same account for everybody?
* what if grid-manager could announce that servers will accept anonymous
clients?
* known servers, but anonymous clients
* clients either use no key (account="anonymous"), or the grid manager
gives everyone the same private key
* servers are told whether to accept anonymous or not
* maybe if the client uses --tor, then they must also make an explicit
choice about pubkey=anonymous vs pubkey=pseudonym
* how should the accounting reports be delivered?
* warner really wants to call these TPS reports, can't justify why
* don't assume we can do anything exotic with TLS: no client certs, no
changes to the validation function
* HTTP, sign the request, include a curve25519 pubkey in the request,
then response is encrypted to that pubkey
* TLS: requires access to port 443, deployment hassle
* so: define signed-encrypted-HTTP protocol
* storage server publishes both URL and a curve25519 encryption pubkey
in Introducer announcement
* grid-manager signs the "give me your accounting report" reuest,
encrypts to the pubkey, POSTs to URL
* request include an ephemeral curve25519 pubkey for the response
* server builds response, encrypts to the pubkey, returns in body
* need to check: is keeping this pubkey secret ok? could an attacker
submit an alternate report
* request includes a nonce/request-id in the encrypted part of the
request
* reponse should include the same nonce in the encrypted body
* grid-manager checks the nonce
* use the nonce for replay protection too
* task list:
* define signed-encrypted-HTTP protocol for TPS report delivery
* build the grid-manager node: CLI commands, "tahoe grid-manager
create"
* maybe prototype new WAPI here: websockets, single-page-app WUI
* assign petnames, view storage reports
* client-side changes:
* "create-client --managed" switch to use managed mode?
* "create-client --manager-invitation=CODE" ? should only happen once
* "create-client --managed": then immediately asks for a code, doesn't
accept any other arguments
* avoid including a "tahoe accept" command: don't suggest it could be
run multiple times
* "create-managed-client"
* asks for code
* spawns "create-client" with args
* manual (non-invitation) managed setup: "tahoe create-client
--manager-pubkey=XYZ --introducer=FURL"
* reacting to the manager announcement:
* updating the default encoding parameters
* remembering the authorized server list
* StorageFarmBroker: if a manager key is set, then only use servers
from the signed list
* subscribe to manager announcements
* check signature on the published server list
* change get_servers_for_peer_selection_index to test against the
list before adding to permuted ring
* don't initiate connections to servers that aren't on the list
* shut down Reconnectors for servers that are no longer on the list
* basically compute intersection of authorized-servers (from manager)
and known-servers, make sure there's a Reconnector for each member
of the intersection, shut down any other Reconnectors
* uploads in progress when a server is revoked should continue to use
the old server
* but uploads that start after revocation should not
* accounting changes: furlification, client-side accounting keys
(ed25519), .tahoe/private/account.key
* server-side
* Account desk (furlification, clients connect, exchange signed
request for account-specific storage server object)
* desk needs to compare requests against the manager's authorized
accounts list
* maybe create the account-specific object for anyone who shows up,
but each request tests for membership in the authorized-client list
* which would help with ordering
* an upload that happens during the invitation race window might be
rejected, but later ones will succeed
* think about ordering: could a client show up at the server before the
server hears the client list?
* may need to buffer some requests until their authorization shows up
later?
* or sequence actions to avoid this
* add IntroducerClient API? make subscribe() idempotent, re-fire
callbacks with all records each time subscribe() is called
* goal is to avoid needing to remember previously-ignored
announcements, somehow??
* maybe manager should wait until it sees the new-client announcement
propagate through the Introducer before letting the client proceed
* maybe add a few more seconds too
* or clients can just retry if they get rejected
* this will be a rejection during furlification, so Reconnector won't
help, unless the client drops the connection entirely
* clients could retry furlification later
More information about the tahoe-dev
mailing list