The Client Update

We are finally ready to update the network to work with real clients. We know this has been a long time coming and we are pleased with what we are delivering. As of now, we have successfully tested the client against an internal testnet and it has met our reliability and privacy requirements. Furthermore, we have addressed all known privacy and security issues with the cMix protocol with this update. We look forward to conducting public audits and believe the software is now in a state where we can begin the process of driving public confidence in both the protocol and its implementation.

We will be beginning the process by updating the wrapper script for those who use it today and will be releasing the rest of the update on 3/18/2021 at roughly 11:00 AM PST. Given the scale and scope of this update, all node operators will need to make changes to their configurations.

The upgrade guide can be found here: Upgrade Guide.pdf (202.7 KB)

In order to ensure all nodes have time to do updates, including those that update manually, starting from today until 11:00 AM PST on 3/25/2021 there will be a grace period for all nodes where uptime and performance will not be counted. ALL nodes must successfully process at minimum 1 round post update to receive compensation for the month.

The team will be available for the next few weeks to help node operators with the upgrade.

This update solves a novel problem in the space of decentralized communication: private message delivery. An often overlooked portion of privacy systems is message pickup and notification. In almost all cases, this process is either overly cumbersome on the recipient or significantly reduces the privacy of the system. This release centers around a novel solution to the problem of message delivery which allows for rapid packet pickup by any device, including a low powered smartphone, with an increase in privacy.

The solution is built upon a few components:

  • Asynchronous daily rotating ephemeral reception IDs in an overly dense address space.
  • A minimal gossip (privacy protected by the ephemeral reception IDs) disseminating message pickup information across the network
  • A probabilistic notification of message availability available for all ephemeral IDs on all gateways
  • Robust tracking of message state in the client (xxDK)

We will be releasing more information on these solutions and their implementation in the coming weeks.

Change Log

elixxir/server

MR: the client update (!634) · Merge requests · elixxir / server · GitLab

Version: 2.0.0

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • Redone Public and internal IP configs
  • Auto detection of IP in default configurations
  • Fixed bugs in the handling of precanned users
  • Disabled precanned users in production
  • Required a properly configured database in production
  • Upgraded for improved GPU handling with cross generation support
  • Client Key generation during the decryption phase reports to permission missing keys
  • KMAC verification and client key generation include the monotonic round ID to solve mess replay attacks
  • Alternate phase handling added to business logic to support secure share phase
  • Share phase rewritten to include a secure multi-party Diffie–Hellman, ensuring the last node is unable to break privacy
  • Client registration has been modified to solve replay attacks
  • Client registration returns a fingerprint of the symmetric key for use by gateway
  • Returned round ID to gateway with completed batch
  • Endpoint for gateway to look up the permissioning address to solve a startup race condition in deployment
  • Upgraded permissioning signature handling to no longer be dependent on the specifics of Protobuf marshaling
  • General logging and error handling improvements
  • Improved README
  • Incremented version

elixxir/gateway

MR: the client update (!238) · Merge requests · elixxir / gateway · GitLab

Version: 2.0.0

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • Redone Public and internal IP configs
  • Auto detection of IP in default configurations
  • Fixed bugs in the handling of precanned users
  • Disabled precanned users in production
  • Added gossip handling
  • Added a gossip of received ephemeral IDs to build bloom filters
  • Added a gossip of transmission ID for tracking of sender usage for rate limiting of clients
  • Added mandatory database support
  • Moved to gorm 2.0 for the database
  • Added database support for message storage
  • Added database support for bloom filter storage and retrieval
  • Added database support for extended round storage
  • Added database support for rate limiting buckets
  • Added round and message deletion
  • Added generate state variable storage mechanisms to the database
  • Added a mechanism to skim symmetric key fingerprints on client registration to store for client verification on cMix send
  • Added client edge checking to verify identity before accepting a message into a round
  • Improved IDF handling
  • Reduced use of unethical code patterns (in compliance with international law)
  • Removed notifications support (A new version is in progress)
  • Rewrite the client poll to lookup bloom filters and handle ephemeral IDs\
  • Modified client poll to check the client version and gate
  • Added ephemeral ID handling to batch reception
  • Added message digest tracking logs for robust debugging
  • General logging and error handling improvements
  • Improved README
  • Incremented version

elixxir/client

MR: the client update (!551) · Merge requests · elixxir / client · GitLab

Version: 2.0.0

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Completely rewritten to support the BetaNet
  • Supports Network Registration with Permissioning and with Nodes
  • Message sending and reception with Dense Ephemeral Reception IDs for Tagging attack resistance
  • Supports Identity Management, allows for multiple concurrent network identities
  • Robust network Following
  • cMix Packet Sending
  • cMix Packet Retrieval
  • Updated Thread and State Handling focusing on mobile app control
  • All keys stored in Secure Storage
  • Support Historical round retrieval in the event of cache misses on network data
  • Modular Authenticated channel creation
  • Automated Rekeying / Session Management
  • Full support for User Discovery including registration and private contact retrieval
  • Single Use Private Information Retrieval available
  • Fully featured iOS/Android Bindings
  • Support to retrieve messages from Network message storage
  • Send Failure Detection
  • Node communication failure detection and Recovery
  • General logging and error handling improvements
  • Improved README
  • Incremented version

elixxir/comms

MR: the cleint update (!349) · Merge requests · elixxir / comms · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Updated client endpoints with the gateway
  • Updated client endpoints with UD
  • Updated client endpoints with registration
  • Updated gateway endpoints
  • Updated server endpoints
  • Updated registration endpoints
  • Added User Discovery endpoints
  • Updated to support gossip protocol
  • Added digests to support improved generic signable handling which is not dependent on Protobuff marshaling
  • Updated Network Instance for Extended round storage
  • Added round event tracking to network instance
  • Added waiting rounds to network instance
  • Added historical round storage and retrieval to the network instance
  • Added generic mechanisms for the retrieval of public addresses
  • General logging and error handling improvements
  • Improved README

elixxir/crypto

MR: the client update (!259) · Merge requests · elixxir / crypto · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Moved CSPRNG, large, signature, tls, and xx packages to xx network crypto
  • Made the client key and KMAC generation include the round ID as a monotonic counter to stop replay attacks
  • Rewrote the handling of DH key exchanges
  • Rewrote all end to end encryption functions for the new system
  • Added support for new key negotiation system
  • Added a properly salted fact hash
  • Added crypto function for single use PIR
  • Reduced waste byproduct as part of new green company initiative
  • Rewrote the fastRNG fortuna based RNG expansion to better support the client
  • Cyclic int updated to support “bits” operations
  • General logging and error handling improvements
  • Improved README

elixxir/primitives

MR: Revert "Merge branch 'jono/NewKnownRoundFix' into 'release'" (!149) · Merge requests · elixxir / primitives · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Moved the id, ndf, rateLimiting, and utils packages to xx network primitives
  • Moved the ring package to the ring xx network repository
  • Moved the switchboard package to the client repository
  • Added fact structure to handle the saving of different information for each user
  • Updates the cMix message structure to use an ephemeral ID instead of a normal ID
  • This product contains chemicals known to the State of California to cause cancer and birth defects or other reproductive harm
  • Added basic utilities for the cMix message fingerprint
  • Add the knownRounds package, which tracks which rounds the client and gateway know about
  • Added basic utilities to the version tracking structure
  • Removed message size tracking in the message structure
  • General logging and error handling improvements
  • Improved README

elixxir/gpuMathsNative

https://gitlab.com/elixxir/gpumathsnative

MR: Add method to check if stream is OK. (!50) · Merge requests · elixxir / gpumathsnative · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Added full support for prime sizes of 4096, 3200, and 2048
  • Added a method to check if a stream is valid
  • Added mechanism for cross-generation GPU support by migrating to CUDA driver API
  • Added support for cMix realtime GPU operations

elixxir/gpuMathsGo

MR: Release (!55) · Merge requests · elixxir / gpumathsgo · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Added local copy of cryptops
  • Passed through method to check if a stream is valid
  • Added support for cMix realtime GPU operations

elixxir/wrapper

MR: Add the ability to target start/stop commands; (!51) · Merge requests · elixxir / wrapper · GitLab

  • Significant improvements to reliability and accuracy of CloudWatch logging
  • Added support for updating various GPU libraries
  • Added significant extensibility for supporting future consensus updates
  • Will no longer crash if provided unknown command line arguments, they are now printed to the log
  • Fixed bug causing pointless error recovery, thus reducing number of failed rounds
  • Better logging and code refactoring for readability

xx network/comms

MR: fixed error print on failure to send to include the error and fixed (!50) · Merge requests · xx_network / Comms · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Updated auth negotiation to hash in the recipient ID to prevent relay attacks
  • Fixed a variety of minor segfaults and panics
  • Added support for gossip protocols
  • Added cool off support for communication with hosts to avoid spamming a down network member
  • Redid generic signable to no longer be dependent on the specifics of Protobuf marshaling
  • Added initial support for the Elixxir Praxxis interconnect
  • Added more testing options
  • Updated Readme

xx network/crypto

MR: Remove dep on cMix hash (!13) · Merge requests · xx_network / crypto · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Csprng, large, testkeys, and xx packages moved here from elixxir/crypto
  • Signature package moved to xx network/comms
  • Large int updated to support “bits” operations

xx network/primitives

MR: Revert "Update signature of GetIdsByRange" (!28) · Merge requests · xx_network / primitives · GitLab

  • Updated internal dependencies
  • Spit dependencies to further share components with Praxxis
  • License changes to BSD 2-clause
  • Moved the id, ndf, rateLimiting, and utils packages from elixxir primitives
  • Added the ephemeral ID structure
  • Added the size of the address space, client version, and UD’s certificate, address, and Diffie–Hellman key to the NDF
  • Remove the signature from the NDF
  • Improve leaky bucket design (for rate limiting) for simpler initial parameters when creating a bucket, to have the ability to whitelist a bucket, and for bucket database storage

xx network/Ring

MR: Release (!3) · Merge requests · xx_network / ring · GitLab

  • License changes to BSD 2-clause
11 Likes

Greetings,
I node and gateway work on the same machine. Do I need to disconnect the machines before upgrading? I mean, do I need to prepare a separate machine for the gateway before the upgrade?

No

thanks

Yesterday the gateway version was upgraded Gateway v2.2.1 The Node server still has version Server v1.7.0 and is on error:

Failed to connect to Host on attempt 3/3 : Failed to authenticate with host: UGVybWlzc2lvbmluZwAAAAAAAAAAAAAAAAAAAAAAAAAA: rpc error: code = Unknown desc = Invalid token signature: crypto/rsa: verification error gitlab.com/xx_network/comms/connect.(*ProtoComms).verifyMessage

and FATAL 2021/03/19 08:14:38 Failed to start server: Unable to run instance: Failed to get ndf: Issue polling permissioning: rpc error: code = Unknown desc = Invalid token signature: crypto/rsa: verification error

Is there something I can do so the upgrade on the node server works or is it still here with the team which will push the upgrade?

You need to update the wrapper script.

If node and gateway are on the same computer:

cd /opt/xxnetwork/
sudo systemctl stop xxnetwork-gateway.service xxnetwork-node.service
mv xxnetwork-wrapper.py xxnetwork-wrapper.bak
wget https://gitlab.com/elixxir/wrapper/-/raw/master/wrapper.py -O xxnetwork-wrapper.py
sudo chmod +x xxnetwork-wrapper.py
sudo systemctl daemon-reexec
sudo systemctl start xxnetwork-gateway.service xxnetwork-node.service

If node and gateway are on different computers…

On the node computer :

cd /opt/xxnetwork/
sudo systemctl stop xxnetwork-node.service
mv xxnetwork-wrapper.py xxnetwork-wrapper.bak
wget https://gitlab.com/elixxir/wrapper/-/raw/master/wrapper.py -O xxnetwork-wrapper.py
sudo chmod +x xxnetwork-wrapper.py
sudo systemctl daemon-reexec
sudo systemctl start xxnetwork-node.service

On the gateway computer :

cd /opt/xxnetwork/
sudo systemctl stop xxnetwork-gateway.service
mv xxnetwork-wrapper.py xxnetwork-wrapper.bak
wget https://gitlab.com/elixxir/wrapper/-/raw/master/wrapper.py -O xxnetwork-wrapper.py
sudo chmod +x xxnetwork-wrapper.py
sudo systemctl daemon-reexec
sudo systemctl start xxnetwork-gateway.service
3 Likes

Thanks found it in Discord as well Great solution, did it on the node computer, works Gateway was done automatically already