2013-07-01 1 views
4

푸시 알림이 필요한 iOS 응용 프로그램의 경우 먼저 사용자에게 푸시 알림을 요청하는 권한을 요청해야합니다. 그런 다음 장치 토큰이 생성되고 이에 따라 원격 서버는이 토큰을 통해 사용자와 통신 할 수 있습니다.APN에 안전하게 장치 토큰 보내기

나는 비슷한 질문을 here 읽고 나는 그것이 충분하다고 생각하지 않는다. 아래 그림은 신뢰할 수있는 인증서이므로이 장치에서 발생하는 모든 트래픽을 볼 수 있습니다. Fiddler2뿐만 아니라 CertMaker

, 나는 HTTPS 트래픽, 클라이언트가 아마 그들이, 그리고 곳으로 보내는 어떤 데이터를 알 수 있다는 뜻을 도청 할 수 있습니다.

제 질문은 SSL이 내 클라이언트가 원격 서버에 보내는 것을 보지 못하게하는 것이 안전하지 않다는 것을 알고 제 신청서에있는 비밀 키를 사용하여 간단하게 암호화해야합니까?

encrypt("device_token","secretkey_a0a0a0a") (예 : Objective-C)?

누군가 내 애플리케이션에서 해당 키를 찾을 수 없었습니까? 나는 또한 this 질문을 읽고 비밀 키를 되 찾는 것이 가능할 것으로 보인다.

이에 대한 나의 계획은 다음과 같이 간다 : 아이폰 OS 응용 프로그램 내

  1. activate라는 임의의 문자열을 생성합니다.
  2. 랜덤 문자열 에 의한 토큰 (해시가 아님) 만 알고있는 비밀 키. (secretkey_a0a0a0)
  3. 생성 된 임의 생성 문자열 (활성)과 함께 암호화 된 문자열을 보냅니다.
  4. 서버 측 내에서 active과 내 비밀 키를 사용하여 유효한 토큰을 해독 할 수 있는지 확인합니다.
  5. 유효한 경우 내 데이터베이스에 토큰을 저장합니다.

사람들이 임의로 토큰을 입력하지 못하게합니다. 그렇지만 secretkey_a0a0a0은 문자열 리터럴입니다. 이것은 응용 프로그램 바이너리 내에서 이것을 얻을 수 있습니다.

제 질문은이 비밀 키를 어떻게 보호합니까? 대답은 또한 사람들이 내 서버에도 유효하지 않은 토큰을 보내지 못하도록 막는 방법 일 수 있습니다.

암호화에 대해 들어 봤지만 리소스 파일에만 적용되지 않습니까?

어떻게 접근해야합니까?

+2

당신은 편집증 환자입니다. SSL로 충분합니다. 앱이 손에서 벗어나면 앱이 깨질 수 있습니다. 수백만 달러 (아마도 수십억 달러)를 DRM에만 투자하여 수 시간 내에 부서지기를 바라는 모든 기업에게 물어보십시오. 정말로 더 잘할 수 있다고 생각합니까? – Kevin

+0

정확히 왜 장치 토큰을 암호화 하시겠습니까? 누군가가 그것을 읽을 수 있다면 어떤 해로울 것입니까? –

+0

서버 측의 유효성을 검사 할 수 있습니다. 사람들이 가짜 토큰을 보내지 못하도록하고 싶습니다. 누군가가 토큰을 보내면 즉시 데이터베이스에 추가됩니다. –

답변

3

SSL-Pinning (AFNetworking이 구현 된 경우) 서버 개인 키가없는 경우 클라이언트와 서버 간의 https 트래픽을 차단할 수 없습니다 (적절한 시간대에).

+0

와우, 나는 당신이 클라이언트가 특정 인증서를 사용하도록 할 수 있다는 것을 결코 알지 못했다. 감사, 수락, 투표 및 현상금 수여! –

+1

SSL 피닝은 * 호스트 *가 제공 한 자격 증명을 기대치와 비교합니다. 클라이언트는 원격 호스트가 제공하는 인증서를 검사하고 예상 값과 일치하지 않으면 클라이언트는 연결을 중단합니다. 그 지점을 넘어서는 냄새를 맡을 소통량이 없습니다. 참조 : https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#What_Is_Pinning.3F – quellish

3

중간에 사람이 토큰을 훔쳐 가짜 푸시 알림을 응용 프로그램 사용자에게 보낼 수 있다는 두려움이 있다면이 문제가 발생하지 않도록해야합니다. 사과 apn 서버에 대한 요청은 pem 파일로 서명해야하므로 주된 관심사는 apn 토큰이 아닌 인증서 파일의 보안을 유지하는 방법입니다. 데이터베이스에 유효하지 않은 토큰을 쓰지 않으려면 CRC 또는 홀수/짝수 비트 메커니즘을 구현해야합니다.

2

Push Notifications Guide의 보안 섹션, 특히 "토큰 생성 및 분산"섹션을 확인하십시오.

장치 토큰은 Apple의 APNS를 통해 연결되는 장치에 의해 생성됩니다. 내 추측 (그들은 문서에서 말하지 않는다)은 주어진 앱 식별자에 대해 고유하다는 것입니다.

그러면 APNS는 그 식별자와 통신하기 위해 사용하는 pem 인증서로 해당 식별자를 일치 시키므로 푸시 알림이 실제로 앱에서 발생했는지 확인합니다.

이 경우 장치 토큰 암호화가 과도하게 보입니다.

+0

나는 그들이 토큰이 보내지는 곳을 냄새 맡을 수 있으며 두려운 것들을 스스로 보내 줄 것을 두려워합니다. –