2012-05-06 14 views
0

나는 만들고있는 게임 엔진에서 사용할 게임 데이터 파일을 암호화하는 방법을 개발 중입니다. 게임 데이터 파일은 개인 키로 암호화되고 일단 게임 엔진에로드되면 암호 해독됩니다.C++ 매크로의 무작위 숫자

개인 키는 엔진에 수동으로 설정되어 (const로) 엔진에 컴파일됩니다. 하지만 트릭은 거기에서 난독 화되어 평균 Joe Bloggs가 코드를 분해하고 역 엔지니어링함으로써 (쉽게) 키를 찾을 수 없습니다.

struct Example { 
    u_int8_t random1; 
    u_int64_t segment31; 
    u_int8_t random2; 
    u_int8_t random3; 
    u_int64_t segment3; 
    u_int64_t segment14; 
    // Etc 
}; 

제 아이디어는 무작위로 생성 된 바이트와 함께 뒤죽박죽 된 세그먼트에 키를 저장하는 것입니다. 내 질문은 다음과 같습니다

임의로 C++ 매크로에서 숫자를 생성하는 방법이 있습니까? 이 숫자는 컴파일 타임에 무작위로 생성되어야하며 (또는 임의의 사용자가 선택한 값으로 설정된 각각의 임의의 값) 런타임 함수가 좋지 않습니다.

더 좋은 방법이 있다면 제안 할 수 있지만 개인적/공개 키 쌍으로 암호화 된 게임 데이터 파일을 원한다면 공개 키는 가능한 한 비공개로 유지해야합니다.

+0

당신은에 좀 걸릴 수 있습니다 :는 C 전 처리기를 사용하여 임의의 숫자를 생성]을 [1] [1] : http://stackoverflow.com/a/17420032/653372 – nergeia

+1

_ @ orangething_ 니가 스스로에게 묻는다면? 잘 나는 sevice에있다. –

답변

1

컴파일 타임에 프로그램에 구워지는 상수 난수가 생성되기 때문에 나는 그 차이점을 보지 않고 임의의 숫자 (자신이 선택한 것)를 직접 하드 코딩합니다. 매크로를 사용하면 각 컴파일마다 다른 난수가 생깁니다. 정말 그렇게 비판적입니까?

키를 단순히 ASCII 텍스트 (비트는 비트, 맞습니까?)로 사용하는 것이 좋습니다. 병목 현상이 보이는 진단 문자열을 키로 사용할 수 있으며 아무도 눈치 채지 못합니다.

아직도 무명에 의한 보안은 일반적으로 현장의 전문가가 싫어합니다 (그들은 많은 고생을합니다). 공개 키 암호화를 실제로 수행하고 있다면 공개 키를 공개하는 것이 좋습니다. 그것은 결국 요점입니다. 비밀로해야하는 개인 키입니다.

정말로 이것을하고 싶다면 무작위 수 생성 알고리즘을 살펴보고 기본적으로 시드를 취하고 의사 난수를 산출하는 큰 식으로 계산되는 (큰) 매크로로 반복을 풀어 볼 것입니다. 결과로 정수. 그렇게해야합니다. 씨드가 어떻게 든 컴파일 시간 (__TIME__)과 같은 예측할 수없는 것으로부터 파생 되었다면 작동 할 수도 있습니다.

+1

키를 숨기는 것이 필요합니다. 위험한 것은 누군가가 개인 키를 배울 수는 없지만 공개 키를 자신이 선택한 다른 개인 키와 대조하여 선택할 수 있다는 것입니다. –

+0

공개 키를 공개하고 싶지 않은 이유는 게임 데이터 파일을 해독하는 데 사용할 수 있기 때문입니다. 개인 키는 파일과 엔진과 별도로 유지되므로 아무도 게임 데이터 파일을 조작 할 수 없습니다. 또한 제조를 방해하는 나머지 절반은 @BenVoigt가 방금 말한 것입니다. – orangething

+0

그러나 '__TIME__'을 사용하는 것에 대한 아이디어는 무작위 알고리즘과 결합 된 완벽한 솔루션처럼 들립니다. 감사! – orangething

0

현재 rand 매크로 또는 템플리트 메타 기능은 없지만 많은 노력으로 작성 될 수 있습니다.

반면에 빌드 프로세스 나 다른 임의의 소스의 일부로/dev/random을 터치하고 결과가 포함 된 헤더를 만들 수 있습니다. 난수 상수를 얻을 수있는 위치에이 헤더를 포함하십시오.

+0

좋은 제안이 있지만 Windows에 해당하는 기능이 있습니까? 또한 단순히 #include "/ dev/random"을 사용하면 좋을 것입니까, 아니면 경로를 그렇게 지정할 수 없습니까? – orangething

관련 문제