답변:
가능한 해결책 중 하나는 TCP + TLS를 사용하여 사용자를 인증하는 것입니다. 그런 다음 동일한 채널 내에서 Diffie-Hellman과 같은 것을 사용하여 대칭 키를 협상하십시오. 마지막으로 RC4와 같은 대칭 알고리즘을 사용하여 각 UDP 패킷을 암호화하십시오.
SRP 와 같은 것을 사용하는 경우 대칭 키를 협상하기 위해 기술적으로 TCP + TLS를 사용할 필요는 없습니다. 깨끗한 Diffie-Hellman은 MITM 공격에 취약합니다 .
더 나아가서 UDP 패킷의 사용자 정의 SEQ 필드 (일부 안정적인 UDP 형식을 사용하는 경우)를 사용하여 카운터 모드 암호화 형식을 구현할 수 있습니다. 여기서 각 패킷의 협상 된 키에 SEQ 번호를 추가합니다. 알려진 일반 텍스트 공격을 마운트하는 것이 훨씬 더 어렵습니다.
서버가 마음대로 키를 나눠주지 마십시오. '스푸핑'서버는 자신의 키를 쉽게 나눌 수 있습니다. 전체 암호화 체계의 목적을 무너 뜨립니다. 유일하게 보장되는 방법은 TLS 또는 상호 지식 (예 : 비밀번호 / 해시)을 사용하는 것입니다.
나는 해킹에 대해 먼 (2 년 전) 배경을 가지고 있으며, 가장 까다로운 패킷 (및 내가 제안하는 것)은 Jonathan Dickinson이 간략하게 설명 한 대칭 키 암호화 방법을 사용하고 있습니다. 그가 언급 한대로 TCP + TLS를 사용해야합니다. 그러나 그는 카운터 시퀀스를 말했다.
나는 프로그래머 "해킹 방지"시스템이 프로그래밍 지식과 첫해 대수 논리없이 해독 할 수있는 이상한 계산 시스템을 가지고 있기 때문에 쉽게 스푸핑 된시기에 부딪쳤다. 적절한 순차적 방법을 선택하는 한 대상은 예상대로 정확하게 데이터를 수신해야하며, 가장 안전한 작업에는 TCP를 사용해야합니다.
"내 경험에서"로 돌아가서, 내가 찾은 하나의 시스템은 훌륭하게 작동합니다. 전송 시간 및 예상 시간을 기반으로하는 순차적 인 방법입니다. 패킷은 항상 올바른 순서로 수신되어야하므로 패킷을 스푸핑하는 것은 패킷이 언제 전송되는지, 그리고 클라이언트 프로그램을 먼저 해킹하지 않고 패킷이 전송 될시기와 패킷이 예상되는시기를 예측할 수 없기 때문에 거의 불가능했습니다.
짧은 대답
한마디로 : 각 패킷 구조에는 밀리 초로 전송 될 때와 같은 타임 스탬프도 있습니다. 그것은 간단합니다. 시간이 다른 시간 전후인지 여부를 확인하는 것은 정말 쉽습니다. 이것이 의미가있는 이유는 서버가 인증 시간없이 스푸핑 순서대로 패킷을 수신 할 수 있기 때문입니다.
이것은 분명히 유일한 순차 방법이 아니거나 심지어 가장 좋은 방법은 아닙니다. 내가 찾은 것은 아주 잘 작동하는 것입니다. TCP + TLS와 결합하면 너무 많은 문제가 없어야합니다.
개인적으로 나는 너무 일찍 배를 타고 가지 않을 것입니다. Jonathan이 권장하는 것처럼 패킷을 암호화하더라도 내 동생과 같은 해커는 암호화되기 전에 패킷 데이터에 액세스합니다. 악의적 인 사용자가 원하는 경우 침입자를 찾을 수 있습니다.
이제는 불가능 해 졌으므로 인디 개발자가 악의적 인 사용자가 할 수있는 피해를 최소화 할 수있는 방법이 있습니다. 아마도 아웃 바운드 패킷을 암호화해야하지만 특정 종류의 공격 만 막을뿐 아니라 현재 "해킹 방지"라고 생각하지 마십시오. 해커를 실제로 끄려면 클라이언트에게 게임 변경을 가능한 한 적게 제어하십시오. 이 큰 MMO 중 하나는 클라이언트가 서버에서 XP를 얼마나 벌 었는지 알려주는 데 사용되었습니다. 무슨 일이 있었는지 알아? 하지마 클라이언트가 서버에 생물체에 대해 약간의 주문을 내고 싶다고 말한 다음 생물체가 죽었을 때 서버가 행동을 해결하도록하고 XP를 추가하도록합니다. 클라이언트는 명령을 보내고받을 수 있고 필요에 따라 약간의 예측을 수행 할 수있는 얇고 멍청한 터미널이어야합니다.게임은 클라이언트에서 보낸 명령에 반응한다.
대형 게임 회사는 위의 해커가 VAC 또는 PunkBuster 와 더불어 알려진 해커가 계속해서 고객 지불을 방해하는 것을 방지하기 위해 위와 같은 것을 사용합니다 . 이러한 보안 조치의 작동 방식은 상당히 비밀로 유지되지만 사용하는 한 가지 방법을 알고 있습니다. 현재 실행중인 응용 프로그램을 검색하고 알려진 해킹 목록과 비교합니다. 부정 행위를 당하면 VAC / PunkBuster 보안 서버에 가입 할 수 없습니다.
관련 : 서버의 게임 로직! 좋거나 나쁘거나?