Skip to content

Dmsg server optimization #33

@Darkren

Description

@Darkren

While trying to make encryption optional I noticed one thing. What I'm going to write here is just a suggestion, and I might be totally wrong in my judgements, since I'm not that familiar with the code. This func here:

func (ss *ServerSession) serveStream(log logrus.FieldLogger, yStr *yamux.Stream) error {
. This func is called on each client->client packet if I get it right. What looks wrong to me in this func:

  1. We decrypt incoming package, perform all sorts of checks, encrypt and resend to the responding client. Would it hurt if we removed decryption/encryption part from here? This way during handshake server must transfer pub keys of clients to them each other. So client A encrypts, sends to the server, server sends to client B and client B decrypts. No ecnryption/decryption on the server side
  2. This func also verifies request, which includes verifiying the object signature. Do we really need the signature?
  3. We also calculate and compare request hash there. Is this needed too? If it's intended to check for data loss during transfer, I guess we shouldn't care about it as long as we use TCP

Probably we could also use something like SSL handshake. During handshake clients via server exchange their pub keys, generate 2 halves of a common symetric key, exchange it with PK-encrypted messages. After that point all the messaging may be encrypted with a single symmetric key which should be more performant. But not sure about this part, just a suggestion

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions