I have been creating an application using UDP for transmitting and receiving information. The problem I am running into is security. Right now I am using the IP/socketid in determining what data belongs to whom.
However, I have been reading about how people could simply spoof their IP, then just send data as a specific IP. So this seems to be the wrong way to do it (insecure). So how else am I suppose to identify what data belongs to what users? For instance you have 10 users connected, all have specific data. The server would need to match the user data to this data we received.
The only way I can see to do this is to use some sort of client/server key system and encrypt the data. I am curious as to how other applications (or games, since that's what this application is) make sure their data is genuine. Also there is the fact that encryption takes much longer to process than unencrypted. Although I am not sure by how much it will affect performance.
Any information would be appreciated. Thanks.
I would look into the Garage Games networking library.  It is written in C++ and uses UDP.  It is designed for low latency and is considered one of the best for games.  
If I remember correctly they would actually calculate the likely position of the player both on the client side and the server side.  It would do this for many aspects to ensure integrity of the data.  It also would do a crc check on the client software and compare against the server software to make sure they matched.  
I am not sure you can license it separately anymore so you may have to license the game engine (100 bucks).  It would at least give you some insight on a proven approach to UDP for games.  Another possibility is looking into the PyGame networking code.  It may have already addressed the issues you are facing.
UDP security and identifying incoming data