-
Notifications
You must be signed in to change notification settings - Fork 16
Open
Description
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:
Line 68 in f50a251
| func (ss *ServerSession) serveStream(log logrus.FieldLogger, yStr *yamux.Stream) error { |
- 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
- This func also verifies request, which includes verifiying the object signature. Do we really need the signature?
- 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
Labels
No labels