키를 사용하지 않고 저장 파일을 암호화하는 방법은 무엇입니까? [닫은]


21

바이너리 형식으로.dat 암호화 된 파일을 가져 와서 바이트 배열 로 해독 한 다음 모든 파일을 다시 해독 된 파일에 다시 쓰는 간단한 프로그램을 만들었다 고 가정 해보십시오.

예를 들어 :

이진 암호화 알고리즘을 만들었습니다. => 0100100001100101001000000000000110100001100101011000 ...

그러나 이것은 해독하기가 매우 쉽습니다 ...

가능한 경우 저장 진행률을 암호화 할 수있는 키가 필요하지 않은 방법이 있습니까?


15
저장을 암호화 하시겠습니까? 예를 들어 메모리 수정을 사용할 때 속임수를 쓰는 더 쉬운 방법이 있습니다. zlib로 압축하고 (.gz에 넣음) 크기가 줄어들고 일부 사기꾼이 수정하지 못하게됩니다.
HolyBlackCat

36
하찮은 일에 속 태우고있다 : 당신이하고있는 것은입니다 인코딩 이 아닌 암호화 .
Philipp

13
(이것은 싱글 플레이어를위한 것이라고 가정합니다) 싱글 플레이어 게임에서 부정 행위를 방지하려고하지 마십시오. 그리고 결국 쓸모가 없습니다.

6
이다 수없는 사용자가 읽거나 수정할 수 없도록 파일을 저장 암호화합니다. (예를 들어, 그들은 해독을 한 직후에 디버거에서 게임을 일시 중지 할 수 있기 때문에!). 그러나 일반 텍스트 파일을 여는 것이 디버거에서 게임을 일시 중지하는 적절한 순간을 찾는 것과 비교하기 때문에 더 어렵게 만들 수 있습니다. 그게 당신이하려는 일입니까?
user253751

6
@DanielBejar 방금 당신에게 말했듯이 불가능하게 만들 수는 없으며 더 어렵게 만들 수 있습니다.
user253751

답변:


77

당신이 수학 모두에서 적어도 박사 학위가없는 한 일반적으로 당신은 당신의 자신의 암호화 알고리즘을 발명해서는 안 컴퓨터 과학을. 그러나 알려진 공격이없고 많은 프로그래밍 언어에서 무료로 구현되는 유용한 알고리즘이 많이 있습니다. 예를 들어 RC5, AES 또는 복어입니다. 게임 개발에 사용하는 기술에 따라 보안 암호화를 기본 제공 할 수도 있습니다.

그러나 문제는 세이브 게임을 암호화하는 것이 좋습니다.

먼저 게임 실행 파일이 암호화 및 암호 해독을 수행 할 때 게임 실행 파일에 알고리즘과 키를 모두 포함시켜야합니다. 이는 결정된 해커가 찾아서 추출한 후이를 사용하여 세이브 게임 편집기를 빌드 할 수 있음을 의미합니다. 따라서 절대 100 % 안전 할 수 없습니다.

둘째, 어쨌든 이것을하고 싶습니까? 온라인 게임 인 경우 게임 상태를 플레이어가 수정할 수없는 온라인 상태로 저장해야합니다. 오프라인 게임 인 경우 왜 귀찮게합니까? 사기꾼은 최악의 경우에만 자신의 게임 경험을 해칠 수 있습니다. 의도 한대로 게임을 즐기고 싶은 정직한 플레이어에게는 전혀 영향을 미치지 않습니다. 반면에, 플레이어가 부정 행위를 하면 게임 가치를 더할있습니다 . 플레이어가 게임을 장기적으로 즐길 수있는 다른 방식으로 게임을 경험할 수 있습니다.


5
몇 시간 안에 누군가 좋은 것을 생각 해낼 수는 없지만 그리고 당신은 아마 당신이 필요하지 않은 것에 자원을 낭비하고있을 것입니다.
Aistis

6
"오프라인 게임 일 때 왜 귀찮게합니까?" 온라인 최고 점수를 기록한 싱글 플레이어 게임 인 경우 어떻게합니까?
모자와 사람

19
"플레이어가 부정 행위를하도록 허용하면 게임에 가치를 더할 수 있습니다"-이 말에 찬성했습니다. 나는 특정 수준의 숙달을 달성 할 때까지 내가 지불 한 경험의 일부를 잠그기로 결정한 게임에 정말 짜증이 났으며,이 경우 전체 게임을 잠금 해제 할 수있는 치트가 있다는 것이 기쁩니다. 예를 들어, 나는 구식의 니드포 스피드 부품 에서 AI와의 레이싱 토너먼트에서 완전히 길을 잃었습니다 . 나에게 즐거움은 다양한 풍경을 통해 운전하는 것이 었으므로 나는 보통 경주를 건너 뛰고 모든지도와 자동차의 잠금을 해제합니다. 이것을 막는 게임은 나를 귀찮게 할 것입니다.
또는 매퍼

6
"수학과 컴퓨터 과학 모두에서 최소한 박사 학위를받지 않는 한"은 "수학과 컴퓨터 과학에서 모두 박사 학위를 취득하는 데 필요한 지식이 없다면"(적어도 적어도 독일에서는 코스가 종종 암호와 관련이없는 것들로 가득합니다.) 본질적으로 박사 학위를 능가하는 학위가 필요하지 않습니다.
phresnel

5
@phresnel 기술적으로 옳은 반면, PhD는 신뢰할 수있는 기관이 수여하는 이론적 주제의 숙달에 대한 표준 지표입니다. 따라서 박사 학위를 취득하는 데 필요한 지식과 기술의 양을 속기로 사용하는 것이 좋습니다. 다시 말해 OP가 의미하는 바는 충분히 분명합니다 :-)
Tobia

10

로컬로 암호화 및 암호 해독하려면 프로그램에 키를 저장해야하므로 사람들이 코드를 분해하면 암호화를 해독 할 수 있습니다. 키를 난독 처리하는 요령이 있지만, 전용 공격자는 키를 찾아서 보지 못하는 사람들을 위해 온라인으로 게시합니다. 암호화로 방지 할 수있는 유일한 방법은 16 진 편집기를 사용하는 사람들입니다. 압축과 압축 해제 프로그램으로 파일을 읽을 수 없게 만드는 모든 요소를 ​​사용하여 쉽게이를 파쇄 할 수 있습니다. 예를 들어, 데이터 앞에 1 바이트를 추가하십시오.

또는 파일 끝에 savefile의 md5를 추가 할 수 있으므로 파일이 변조되었는지 확인할 수 있습니다. 그런 다음이를 사용하여 세이브 게임로드를 거부하거나 지원 티켓을 적절하게 표시하여 수동으로 수정 된 세이브 게임으로 인한 문제에 시간을 낭비하지 않아도됩니다. 다시 말하지만, 이것은 코드를 읽을 수있는 사람이 우회하는 것입니다.

장치의 이진 파일에 액세스 할 수없는 사람이 우회 할 수없는 것을 원할 경우 서버의 프로그램 중 일부를 제어 할 수 있어야합니다.

마지막 질문에 대답하기 위해 키 플러스 암호화 유형은 암호화 / 복호화에 적용해야하는 정확한 알고리즘을 식별합니다. 방법을 정의하는 알고리즘이 없으면 데이터를 암호화 / 복호화 할 수 없습니다.


두 번째 요점은 좋습니다. 파일 손상의 경우 문제를 추적하는 데 도움이 될 수도 있습니다.
knowledge_is_power

4

실제 저장 데이터의 변환 된 SHA256 해시를 저장 파일에 저장하십시오.

저장된 해시를로드 할 때 데이터의 SHA256 값과 비교하십시오.

일치하지 않으면 파일을 속이거나 손상시킨 것입니다.

명확히하기 위해 편집 : 치트 방지 시스템을 크랙 하기더 어렵지만 여전히 가능합니다 .


7
사람들이 수정 한 후 해시를 다시 계산하는 것을 막을 수있는 것은 없습니다. 또한 SHA-256 (서명) 또는 bcrypt (암호)와 같은 훨씬 더 나은 대안이있을 때 알려진 모든 암호화 취약점으로 깨진 MD5 알고리즘을 옹호하는 사람들이 여전히 왜 있는지 이해하지 못합니다.
Philipp

1
간단하고 빠르며 완전히 고장났습니다.
DeadMG

2
@DeadMG 사용자가 키를 포함해야하는 바이너리에 액세스 할 수 있기 때문에 의도적으로 손상되었습니다. 더 강력한 해시를 사용하거나 AES와 같은 파일로 파일을 암호화하면 추가 보안 이 제공 되지 않지만 비용이 추가 되므로 리소스가 낭비되고 디자인이 잘못 될 수 있습니다 . 다운 보트가 부적절하기 때문에 +1
Peter-Unban Robert Harvey

7
이 경우 MD5가 SHA-256보다 분명히 우수하기 때문에 @Philipp. 설명 된 접근 방식에 필요한 것은 저렴한 체크섬 알고리즘이며 이는 MD5와 정확히 같습니다.
Peter-Unban Robert Harvey

3
@ transistor09 클라이언트가 순전히 클라이언트이면 모든 것을 암호화 할뿐만 아니라 체크섬이 작동 하는지 확인할 수 없습니다 . 어느 쪽이든 금이 갈 수 있습니다.
Lolums

1

표준 암호화 알고리즘을 사용하지만 (저장된 파일에서 암호화 분석을 수행하기 어렵 기 때문에) 가장 많이 사용되는 상위 5 개 중 하나는 아니며 코드 전체에서 숨겨야합니다 (어떤 알고리즘이 어떤 알고리즘인지 이해하기 어렵 기 때문에) 키가 어디에 있습니까?)

암호화 알고리즘을 코드에 숨기려면 : 오픈 소스 버전을 가져 와서 흐름을 이해하고 (다른 함수를 순서대로 호출 함) 모든 변수의 이름을 바꾸고 필드와 함수 이름 (확실히)을 바꾸고 함수를 전파하십시오 코드베이스 전체에서 다른 객체와 모듈로 실행하여 일시적으로 실행을 분리 할 수도 있습니다 (암호화 한 가지를 수행 한 다음 다른 것을 수행 한 다음 약간의 ms는 관련이없는 것으로 보이는 코드에서 돌아와서 다른 단계를 수행합니다. 키는 클래스 전체에서 관련이없는 여러 상수로 보이지만 런타임에 암호화 알고리즘의 다양한 숨겨진 부분에 의해 액세스되는 것과 같은 방식으로 키를 숨길 수 있습니다.

이 모든 것이 경제적으로 의미가 있는지 여부는 또 다른 주제입니다.


몰라요 ... 그냥 게임하기가 더 어려워 지지만 ... 도와 주셔서 감사합니다! 나는 최선을 다할 것이다!
Daniel Béjar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.