코틀린을 배울 목적으로 toy project인 게임 개발을 하고 있습니다.
현재 진행상황은
netty 기반의 TCP 서버를 만들었고,
VMWare에서 포트포워딩 이용하여 Host 클라이언트 <-> Guest 서버 간에 통신이 되는 것을 확인하였습니다.
그다음 Ping pong을 처리할 수 있는 패킷을 만들었고 (응답 없으면 강제로 연결 끊습니다.)
이제 본격적으로 로그인이나 인게임 패킷을 만들고 핸들링을 하여야 하는데...
그 전에 패킷 암호화를 어떻게 해야할지 고민입니다.
이 게임 서버를 서비스하는게 최종 목표가 아니고 동접도 10명을 넘기지 못할 것으로 예상되어
실제로 deploy할 때는 AWS Lightsail에 올릴 예정이며 CPU 사용률을 최대한 낮춰야합니다.
일단 정말 중요한 정보(비밀번호 등)는 BCrypt hash로 바꾼 후 전송합니다.
아무리 강력한 암호화라도 해커들이 작정하면 뚫릴 거라 생각합니다.
그래서 암호화의 의의는 해킹을 할줄 모르는 사람들이 와이어샤크 등을 통해 raw 패킷을 훔쳐보는걸 막는 것입니다.
그리고 클라이언트단에서 암호화가 뚫릴 것을 가정하고 서버측에서 최대한 validation이 가능하도록 해볼 예정입니다.
위의 목적을 달성하기 위해 가장 효과적인,
1. CPU 사용량을 최대한 억제하고
2. 해커들에게 뚫릴 것을 처음부터 염두해두고
3. 해커가 아닌 사람들이 와이어샤크 등으로 raw 패킷을 훔쳐보는걸 막기 위한
암호화 기법은 무엇이 있을까요?
일단 제가 생각중인 것은 1비트 키를 이용한 XOR인데,
패킷을 송수신할 때마다 일정한 규칙을 이용하여 1비트 키를 바꾸는 것을 생각하고 있습니다.
CPU 사용량을 최소화는 방식은 이미 아시겠지만 사전에 암호키를 공유하는 방식이 가장 낫기는할텐데... 이 방법은 별로 썩 내키지 않으신 것 같네요