diff --git a/go.mod b/go.mod
index 17661bbab92822b5ebb61e6cea8d77c0b11831b0..240a6599d52313fb11686f74d33c56b1b243c203 100644
--- a/go.mod
+++ b/go.mod
@@ -17,7 +17,7 @@ require (
 	github.com/spf13/jwalterweatherman v1.1.0
 	github.com/spf13/viper v1.7.1
 	gitlab.com/elixxir/bloomfilter v0.0.0-20200930191214-10e9ac31b228
-	gitlab.com/elixxir/comms v0.0.4-0.20210922201638-6f29a4b4f1e3
+	gitlab.com/elixxir/comms v0.0.4-0.20210924220856-4864c21fe316
 	gitlab.com/elixxir/crypto v0.0.7-0.20210920180151-6c9b84bae372
 	gitlab.com/elixxir/ekv v0.1.5
 	gitlab.com/elixxir/primitives v0.0.3-0.20210920180121-b85bca5212f4
diff --git a/go.sum b/go.sum
index 259d63fe7295960e4791ecc1277d3a615a81a106..9f762119d26a085bf35480bd95d06b6bcf475f3b 100644
--- a/go.sum
+++ b/go.sum
@@ -257,6 +257,8 @@ gitlab.com/elixxir/comms v0.0.4-0.20210921011907-2be8c9faa4d8 h1:MqVGu0ADBHMw7rf
 gitlab.com/elixxir/comms v0.0.4-0.20210921011907-2be8c9faa4d8/go.mod h1:h41+FHc9zlQGveEao3aw8VSfzyOPecEhhUIadUsW1C8=
 gitlab.com/elixxir/comms v0.0.4-0.20210922201638-6f29a4b4f1e3 h1:xm9szmYscDwLUtbDyIcDlToKb1c7MDCCxQ4HFZJVPCk=
 gitlab.com/elixxir/comms v0.0.4-0.20210922201638-6f29a4b4f1e3/go.mod h1:h41+FHc9zlQGveEao3aw8VSfzyOPecEhhUIadUsW1C8=
+gitlab.com/elixxir/comms v0.0.4-0.20210924220856-4864c21fe316 h1:PLGmuuaG5R1suI2GNHhaQw09vrM4p6KoJ6FsBZLNocc=
+gitlab.com/elixxir/comms v0.0.4-0.20210924220856-4864c21fe316/go.mod h1:h41+FHc9zlQGveEao3aw8VSfzyOPecEhhUIadUsW1C8=
 gitlab.com/elixxir/crypto v0.0.0-20200804182833-984246dea2c4/go.mod h1:ucm9SFKJo+K0N2GwRRpaNr+tKXMIOVWzmyUD0SbOu2c=
 gitlab.com/elixxir/crypto v0.0.3/go.mod h1:ZNgBOblhYToR4m8tj4cMvJ9UsJAUKq+p0gCp07WQmhA=
 gitlab.com/elixxir/crypto v0.0.7-0.20210920180151-6c9b84bae372 h1:W5Ax+cwqOOcsVegaMLvsFJ/Cs24a4Wyhp5UHFwvMQxo=
diff --git a/network/node/register.go b/network/node/register.go
index 7315304217b9ddd8f24839fb9a0ec547526fbde0..f72e4357da2228c9db8ac3148aadc2a694f1ec9b 100644
--- a/network/node/register.go
+++ b/network/node/register.go
@@ -11,6 +11,7 @@ import (
 	"crypto/rand"
 	"crypto/sha256"
 	"fmt"
+	"github.com/golang/protobuf/proto"
 	"github.com/pkg/errors"
 	jww "github.com/spf13/jwalterweatherman"
 	"gitlab.com/elixxir/client/network/gateway"
@@ -34,8 +35,8 @@ import (
 )
 
 type RegisterNodeCommsInterface interface {
-	SendRequestNonceMessage(host *connect.Host,
-		message *pb.NonceRequest) (*pb.Nonce, error)
+	SendRequestClientKeyMessage(host *connect.Host,
+		message *pb.SignedClientKeyRequest) (*pb.SignedKeyResponse, error)
 	SendConfirmNonceMessage(host *connect.Host,
 		message *pb.RequestRegistrationConfirmation) (*pb.RegistrationConfirmation, error)
 }
@@ -126,7 +127,7 @@ func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface,
 		// keys
 		transmissionHash, _ := hash.NewCMixHash()
 
-		nonce, dhPub, err := requestNonce(sender, comms, gatewayID, regSig,
+		nonce, dhPub, err := requestKey(sender, comms, gatewayID, regSig,
 			registrationTimestampNano, uci, store, rng, stop)
 
 		if err != nil {
@@ -137,6 +138,7 @@ func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface,
 		serverPubDH := store.GetGroup().NewIntFromBytes(dhPub)
 
 		// Confirm received nonce
+		// fixme: need?
 		jww.INFO.Printf("Register: Confirming received nonce from node %s", nodeID.String())
 		err = confirmNonce(sender, comms, uci.GetTransmissionID().Bytes(),
 			nonce, uci.GetTransmissionRSA(), gatewayID, stop)
@@ -156,15 +158,30 @@ func registerWithNode(sender *gateway.Sender, comms RegisterNodeCommsInterface,
 	return nil
 }
 
-func requestNonce(sender *gateway.Sender, comms RegisterNodeCommsInterface, gwId *id.ID,
+func requestKey(sender *gateway.Sender, comms RegisterNodeCommsInterface, gwId *id.ID,
 	regSig []byte, registrationTimestampNano int64, uci *user.CryptographicIdentity,
-	store *cmix.Store, rng csprng.Source, stop *stoppable.Single) ([]byte, []byte, error) {
+	store *cmix.Store, rng csprng.Source, stop *stoppable.Single) (keyResponse, clientGatewayKey []byte, err error) {
 
 	dhPub := store.GetDHPublicKey().Bytes()
+
+	keyRequest := &pb.ClientKeyRequest{
+		Salt: uci.GetTransmissionSalt(),
+		ClientTransmissionConfirmation: &pb.SignedRegistrationConfirmation{
+			RegistrarSignature: &messages.RSASignature{Signature: regSig},
+		},
+		ClientDHPubKey:   dhPub,
+		RequestTimestamp: registrationTimestampNano,
+	}
+
+	serializedMessage, err := proto.Marshal(keyRequest)
+	if err != nil {
+		return nil, nil, err
+	}
+
 	opts := rsa.NewDefaultOptions()
 	opts.Hash = hash.CMixHash
-	h, _ := hash.NewCMixHash()
-	h.Write(dhPub)
+	h := opts.Hash.New()
+	h.Write(serializedMessage)
 	data := h.Sum(nil)
 
 	// Sign DH pubkey
@@ -178,26 +195,17 @@ func requestNonce(sender *gateway.Sender, comms RegisterNodeCommsInterface, gwId
 	jww.INFO.Printf("Register: Requesting nonce from gateway %v", gwId.String())
 
 	result, err := sender.SendToAny(func(host *connect.Host) (interface{}, error) {
-		nonceResponse, err := comms.SendRequestNonceMessage(host,
-			&pb.NonceRequest{
-				Salt:            uci.GetTransmissionSalt(),
-				ClientRSAPubKey: string(rsa.CreatePublicKeyPem(uci.GetTransmissionRSA().GetPublic())),
-				ClientSignedByServer: &messages.RSASignature{
-					Signature: regSig,
-				},
-				ClientDHPubKey: dhPub,
-				RequestSignature: &messages.RSASignature{
-					Signature: clientSig,
-				},
-				Target: gwId.Marshal(),
-				// Timestamp in which user has registered with registration
-				TimeStamp: registrationTimestampNano,
+		nonceResponse, err := comms.SendRequestClientKeyMessage(host,
+			&pb.SignedClientKeyRequest{
+				ClientKeyRequest:          serializedMessage,
+				ClientKeyRequestSignature: &messages.RSASignature{Signature: clientSig},
+				Target:                    gwId.Bytes(),
 			})
 		if err != nil {
 			return nil, errors.WithMessage(err, "Register: Failed requesting nonce from gateway")
 		}
 		if nonceResponse.Error != "" {
-			return nil, errors.WithMessage(err, "requestNonce: nonceResponse error")
+			return nil, errors.WithMessage(err, "requestKey: nonceResponse error")
 		}
 		return nonceResponse, nil
 	}, stop)
@@ -206,10 +214,10 @@ func requestNonce(sender *gateway.Sender, comms RegisterNodeCommsInterface, gwId
 		return nil, nil, err
 	}
 
-	nonceResponse := result.(*pb.Nonce)
+	nonceResponse := result.(*pb.SignedKeyResponse)
 
 	// Use Client keypair to sign Server nonce
-	return nonceResponse.Nonce, nonceResponse.DHPubKey, nil
+	return nonceResponse.KeyResponse, nonceResponse.ClientGatewayKey, nil
 }
 
 // confirmNonce is a helper for the Register function
diff --git a/network/node/register_test.go b/network/node/register_test.go
index 95d0765bfdfa47d2443ff45245d770d1eafaeb8b..83f4efd482cfe6c3f4af01a0b761d2c2e978f97e 100644
--- a/network/node/register_test.go
+++ b/network/node/register_test.go
@@ -39,13 +39,13 @@ func NewMockClientComms() *MockClientComms {
 func (mcc *MockClientComms) GetHost(hostId *id.ID) (*connect.Host, bool) {
 	return &connect.Host{}, true
 }
-func (mcc *MockClientComms) SendRequestNonceMessage(host *connect.Host,
-	message *pb.NonceRequest) (*pb.Nonce, error) {
+func (mcc *MockClientComms) SendRequestClientKeyMessage(host *connect.Host,
+	message *pb.SignedClientKeyRequest) (*pb.SignedKeyResponse, error) {
 	// Use this channel to confirm that request nonce was called
 	mcc.request <- true
-	return &pb.Nonce{
-		Nonce:    []byte("nonce"),
-		DHPubKey: []byte("dhpub"),
+	return &pb.SignedKeyResponse{
+		KeyResponse:      []byte("nonce"),
+		ClientGatewayKey: []byte("dhpub"),
 	}, nil
 }
 func (mcc *MockClientComms) SendConfirmNonceMessage(host *connect.Host,