When we encrypt the descriptor, we use a random salt.
I wonder if we could use a different salt for each replica/spread.
If we also blind the keys differently for each replica/spread, this would make it impossible to work out if descriptors are from the same hidden service, unless you can decrypt them.
Oh, and of course, we'd have to increment the revision-counter each time we repost, too.
Otherwise we could tell whether the introduction points for the service had really changed by watching it.
Should the H(salt) you added be H("derive-salt" | salt) ? (93f47f4f4e7614d4b3debfe9b5f3a22bfe5d64b1)
Since the input is random, ioerror thinks that a distinguishing value is unnecessary, and I tend to agree. I think it also has performance implications if we are hashing more than 256 bits into a 256 bit hash.
And should it be explicitly said that it's truncated to 16 bytes?
Yes, let's make that clear.
I've pushed fixups to rend-ng-descriptors on my github.
They're based on the last commit in the series to modify the relevant part of the spec, so they should fixup cleanly.
What happens when prop250 gets deployed, but maybe enough dirauths are down so that the consensus does not have a shared random value? You can find here a small patch for prop224 that defines how clients should do disaster recovery when there is no shared random value in the consensus.
Also, in the case the Shared Random Value system screws up and causes reachability issues for clients and HSes, we should maybe introduce a consensus parameter ProbabilisticHSDirSelection that dirauths can set to off and then clients will fallback to the current HSDir selection procedure which does not require any SRVs. We could do this for a day or three, till we fix the SRV bug.
Finally we still have not decided on the encoding of prop224 hidden service addresses. There have been many suggestions like using the base58 encoding or the zkey encoding from GNS. Also, about chunking up the address to 5-char blocks. Also, about using some bytes of the address for metadata like Bitcoin is doing (for example, checksum, or to denote the security level of hidden services). Currently we have 3 free bits on the hidden service address, but we could also just expand the address by a byte or two to add more information if we feel it's helpful.
Trac: Summary: Implement client and service support for proposal 224 to prop224: Implement client and service support Reviewer: N/AtoN/A Milestone: Tor: 0.2.??? to Tor: 0.3.0.x-final Sponsor: N/Ato SponsorR-must Points: large to parent
Trac: Summary: prop224: Implement client and service support to prop224: Implement client support Description: Only client and service support for next generation hidden service. Be able to post/get descriptor, establish IP and RP, etc... This also should also include all control port support on both client and service side.
I'm imagining this ticket will have many child tickets in the future.
to
This ticket is the parent one for anything related to client implementation for proposal 224.
As we break down functionalities and needed features, we'll add more child tickets.
Please note that the first few commits of that branch (up to 3e593f0) fix various issues with the service-side code (#20657 (moved)). We have currently squashed both client and service changes in the same branch so that we can test them all at once. If you'd like to only see the service-side changes to begin with, I pushed a branch ticket20657_032_05 and also opened an oniongit MR: https://oniongit.eu/asn/tor/merge_requests/4 . Let me know if you want me to make a fresh ticket for these new service-side fixes.
FWIW, there are still a few bugs here and there on the client-side code and we are actively working on finding & fixing them, so after this initial review finishes, we will have some more commits for you!
Let us know if you need help or have any questions while reviewing this branch! Cheers!