2012-12-18 1 views
4

클라이언트 Android 앱에서 PHP를 실행하는 웹 서버로 데이터를 전송하기위한 보안 시스템을 구축하려고합니다.특정 앱/엔드 포인트에서 메시지가 전달되었는지 확인

내가하고 싶은 일은 시스템이 암호로 보호되어있어 앱의 메시지가 실제로 앱 자체에서 확인 될 수 있도록하는 것입니다. 사용자 정의 스크립트 또는 cURL을 사용하여 시스템을 게임 할 수 있습니다.

예를 들어, 검증 이런 종류의 사용 사례가 있습니다 : -

  • 응용 프로그램은 당신이 통계를 수집하는에서 고라 포함되어있는 경우, 당신은 클릭 데이터가 있는지 확인 할 것 API를 알아 내고 더미 데이터를 보내는 악의적 인 사용자가 아닌 앱에서 전송됩니다.

  • 앱에 객관식 설문 조사가있을 수 있으며 다시 설문 조사 결과가 앱에서 수집되고 있는지 확인하고 싶을 수 있습니다.

  • 앱이 GPS 추적을 수집하고 있으며 앱에서 데이터가 전송되고 있는지 확인하고자합니다. 이러한 각각의 경우에

, 당신은 메시지의 기원은 응용 프로그램 자체가 있는지 확인하려면, 가짜로 데이터를 간단한 스크립트를 실행뿐만 아니라 사용자 것이다.

일부 아이디어는 내가 생각했습니다 -

  • SSL이 - (요구 사항의 일부를 충족하는) 채널을 확보하고 변조 방지를 위해 잘 작동하지만 여전히의 소스의 무결성을 보장 할 수 없습니다 자료.

  • 공개 키 암호화 - 클라이언트 응용 프로그램은 개인 키로 데이터를 암호화 한 다음 해독 할 수있는 서버로 전송할 수 있습니다. 문제는 앱 내에서 개인 키를 하드 코딩해야한다는 것입니다. 앱을 디 컴파일하고 개인 키를 추출한 다음 가짜 데이터를 보내는 데 사용할 수 있습니다.

  • 집에서 만든 알고리즘 - 즉하지 훌륭한 솔루션 - 이와 매우 비슷한 질문이 솔루션은 때까지 작동 here을 요청한다 "는 누군가가 당신의 알고리즘을 이해한다!"

  • Hash chain -이 클라이언트에서 서버로 각 데이터 페이로드를 확인 한 번 키를 사용하는 정말 흥미로운 방법처럼 보였다하지만, 암호가 여전히 필요하기 때문에 다시는 그 자체가 디 컴파일되지 않는 응용 프로그램에 의존 앱에 의해 저장됩니다. 암호화의

내 제한된 지식은 나에게 우리가 최종 클라이언트 또는 채널을 신뢰할 수없는 경우 때문에, 이러한 방식으로 완전히 검증 될 시스템을 구축하는 이론적 실제로 불가능하다고 생각하게하고있다 어떤 신뢰를 기반으로 할 것인가 ... 그러나 아마도 내가 간과해온 것이있을 것입니다!

+0

거래를 식별하기 위해 서버에서 생성 한 [nonce] (http://en.wikipedia.org/wiki/Cryptographic_nonce)는 어떻게 사용합니까? GCM 또는 무언가를 사용하여 기기에서만 nonce를 수신 할 수 있는지 확인하십시오. –

+0

GCM을 참여시키는 것은 좋지 않지만, Android 앱을 통한 GCM 메시지 수신 이외의 다른 방법은 없다고 가정하고 있습니다 ... 아마도 (나도 몰라). 어느 쪽이든 플랫폼 별 기술에 의존하지 않는 솔루션 (있는 경우)을 제안 할 수 있다면 좋을 것입니다. –

+2

아마도 security.stackexchange.com을 사용해 보시기 바랍니다. 나는 암호 전문가가 아니지만 그곳에는 많은 것들이있다. –

답변

0

그리 어렵지 않습니다. 앱을 인증하면됩니다.간단한 사용자와 암호 (SSL을 통해)를 사용하거나 클라이언트 인증을 사용할 수 있습니다. 두 경우 모두 자격 증명이 앱에 있어야하며 공격자가 앱을 추출하고 앱을 가장 할 수 있습니다. 당신은 그것을 가지고 떠나야하고 그것을 완화시키기위한 몇 가지 방법을 구현해야합니다.

메시지를 비대칭 키 (RSA 등) 또는 대칭 키 (HMAC 등)로 서명하여 인증 할 수도 있습니다. 넌스 (nonce)는 재방송을 돕고, 누군가가 유효하게 서명 된 메시지를 캡쳐하여 서버에 반복해서 보내는 곳입니다. 프로토콜에 따라 하나를 사용하는 오버 헤드가 너무 많을 수 있습니다.

자격 증명을 보호하려면 클라이언트가 공용 API에서 제대로 지원되지는 않지만 KeyStore 시스템에 클라이언트를 생성하여 저장할 수 있습니다 (자세한 내용은 here 참조). 물론 이것은 생성 된 자격 증명 (공개 키 등)을 서버에 안전하게 보내야하므로 제대로 구현하기 위해서는 까다로운 단계가 필요합니다.

당신이하는 일은 무엇이든, 자신의 암호 알고리즘이나 프로토콜을 발명하려고 시도하지 마십시오.

+0

나는 OP가 타사 클라이언트 응용 프로그램과 함께 사용하는 합법적 인 자격 증명을 가지고있는 사용자를 막고 싶어한다고 생각합니다. – finnw

+0

그것은 나에게 그런 식으로 읽지 않지만 어쨌든. 왜 사람들은 완벽하게 유효한 질문을 계속 닫고 있습니까? 그들은 대답하기 어려울 수도 있기 때문에? 정말? –

+0

1. OP는 앱 내에서 키를 하드 코딩한다고 했으므로 제안을 구현하더라도 키를 추출하기가 더 어려워 지도록 DRM을 추가해야합니다. 2. 그 질문이 나에게 전달되었는지 확신 할 수 없다. (나는 오프 토픽으로 결론을 내리지 않았다. 듀피 투표는 정당화 될 수있다.) – finnw