Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C#VB.NET
Hello everyone, this is my first time i post any question here.
 
So I need little help with TCP connection for one gaming server, so basically gaming server is shell and has configs to make it using remote by connecting on 3443 port but with USERNAME and PASSWORD. Is there any possible way to do it? And if it is would someone like to help me?
Posted 20-Nov-12 12:12pm
10kbps473
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Yes, but it won't be TCP, strictly speaking. The approach to such things is considered in the following way: you create another protocol over TCP, the one of the application layer:
http://en.wikipedia.org/wiki/Application_layer[^].
 
And this protocol could be custom or standard (see the list on the article referenced above), but it should have provisions for your username/password. There is always an application layer of the protocols on this layer, even if you don't call it a protocol, but you better do.
 
Now, in this feature, there is nothing going beyond just one TCP connection. Two parts of connected hosts exchange messages in dialog-like manner.
 
Now, the authentication itself is a big security issue. If a user sends a password directly, it always can be eavesdropped. If your service host stores the passwords in their original form, someone can steel them. But password belongs only to a user who created it; no one, even the administrator, has no right to know passwords. Are these problems resolvable? This is very non-trivial question, but the answer is: yes!
 
(In fact, passwords should never be stored. This is absolutely not needed for authentication. If you are surprised, keep reading.)
 
There are somewhat different approaches, but the most usual approach is based on the combination of two encryption technologies:
http://en.wikipedia.org/wiki/Public-key_cryptography[^],
http://en.wikipedia.org/wiki/Cryptographic_hash_function[^].
 
You dialog should resemble the dialog between Alice and Bob explained in the first article referenced above. Your service and client parts should create a brand-new pairs of keys each in every authentication act. This way, even of someone permanently listens to the packets being sent/received, it cannot make it possible to impersonate the client. This is basically similar to how HTTPS with SSL work. And second technology allows to avoid sending any password in their original form through the network at all.
 
See also:
http://en.wikipedia.org/wiki/HTTPS[^],
http://en.wikipedia.org/wiki/Secure_Sockets_Layer[^].
 
On the topic of password storage and hash functions, please see my past answers:
storing password value int sql server with secure way[^],
Decryption of Encrypted Password[^],
i already encrypt my password but when i log in it gives me an error. how can decrypte it[^].
 
By the way, keep in mind that your custom connection might not pass firewalls. Just think about it.
 
—SA
  Permalink  
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

S A Krykov has given a comprehensive answer. I just want add one point...
 
I strongly recommend that you use PKCS #5 standard to implement password based authentication.
 
See http://www.rsa.com/rsalabs/node.asp?id=2127[^] for details.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Your Filters
Interested
Ignored
     
0 Sergey Alexandrovich Kryukov 397
1 OriginalGriff 380
2 Shai Vashdi 280
3 Emre Ataseven 135
4 Abhinav S 128
0 Sergey Alexandrovich Kryukov 8,894
1 OriginalGriff 5,200
2 Peter Leow 3,955
3 Maciej Los 3,535
4 Abhinav S 3,208


Advertise | Privacy | Mobile
Web04 | 2.8.140415.2 | Last Updated 21 Nov 2012
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Use
Layout: fixed | fluid