2009-11-19 3 views
1

고득점과 같이 내 iPhone 앱에서 생성 된 데이터를 사용자가 조작하지 못하도록하고 싶습니다. 그래서 관련 데이터의 MD5 해시를 사용하고 앱에 하드 코딩 된 보안 소금을 사용하려고합니다. 데이터가 다시 읽혀지면 새 해시를 만들어 이전 해시와 비교합니다. 차이가 있다면 누군가가 데이터를 조작하고 있다는 것을 알고 있습니다.iPhone 앱의 보안 소금은 얼마나 안전합니까?

나는 항상 사람들이 그것을 얻을 수있는 방법이 될 것이라고 생각하지만이 방법으로 만들 수 있습니다.

  • 매우 어렵습니다.
  • 해결하기가 어렵습니다.
  • 전혀 차이가 없습니다.
+0

실제로 이것을 평가하려면 이전 해시에 대한 추가 정보가 필요합니다. 저장 위치는 어디에서 안전하며 얼마나 안전합니다. – zaph

답변

2

나는 까다 롭지 만별로 어렵지 않다고 말하고 싶습니다. 디버거를 단계별로 실행하고 소금이 메모리에로드되는 것을 지켜 보는 것은 매우 간단합니다. 물론 대다수의 사용자를 보호 할만큼 충분합니다.

불행히도 이것은 고전적인 DRM 문제이며 충분히 동기를 부여받은 공격자에 대한 해결책이 없습니다. 최선의 방법은 가능한 한 많은 장벽을 만들어 누군가의 시간 가치가없는 것입니다.

아마도 제출 된 높은 점수에는 게임 상태에 대한 세부 정보가 포함되어있어 사용자에게 불편을 줄 수있는 불일치를 확인할 수 있습니다. 예를 들어, 사용자가 1,000,000 포인트를 달성했지만 레벨 2에 도달했다는 것을 알게되면 뭔가있는 것으로 나타납니다!

strings을 실행중인 사용자를 최소한 바이너리와 비교하여 패배 시키려면 소금 줄이 잘 보이지 않는지 확인해야합니다. "염화칼슘"은 사용하지 마십시오!

+1

MD5의 길이는 짧아야하며 SHA-1 또는 SHA-256과 같은 새로운 사촌을 사용해야하는 새로운 디자인에서 사용해서는 안됩니다. – zaph

+0

이 경우 문제는 충돌이 아니라 소금 자체가 숨어있는 것입니다. 사용자가 충돌을 계산하는 것 (또는 무차별 대입으로 소금을 추출하려고 시도하는 것)보다 디버거로 소금을 추출하는 것이 훨씬 쉽습니다. 따라서 실행 가능한 공격 벡터가 아니기 때문입니다. – jnic

+0

SHA-1에는 소금이 없으므로 아무 것도 필요하지 않으므로 해커가 소금을 발견 할 때 문제가되지 않습니다. 소금은 결과가 짧기 때문에 MD5와 함께 사용됩니다. – zaph

관련 문제