신뢰할 수 있는 애플리케이션을 만들기 위해서 아래 포스팅 내용을 숙지하세요.   

작성자: Nick Kralevich (안드로이드 보안팀 엔지니어)
작성일: 2010년 8월 4일
원문 링크: http://android-developers.blogspot.kr/2010/08/best-practices-for-handling-android.html



      반드시 앱 목록에 개인 정보 보호 정책 링크를 포함시키도록 한다

모바일 애플리케이션 사용이 증가함에 따라 애플리케이션에서 사용자의 데이터를 어떻게 사용하는지에 대한 관심 또한 증가하고 있습니다. 안드로이드 플랫폼에서는 사용자를 보호하기 위해서 권한 승인에 대한 광범위한 가이드라인을 포함하고 있지만, 사용자 정보를 어떻게 처리하는지는 궁극적으로 애플리케이션 개발자의 책임입니다. 따라서 개발자가 자신이 사용하는 코드를 제대로 이해하고 권한 요청 여부를 숙고하는 것이 중요합니다. 이러한 문제를 제대로 처리하지 못하면 사용자는 이를 배임 행위로 받아드릴 수 있기 때문입니다.

건전하고 신뢰할 만한 생태계를 유지하는 것은 모든 안드로이드 개발자의 최대 관심사입니다. 신뢰할 수 있는 안드로이드 애플리케이션을 만들기 위해서 다음 사항들을 적용하세요.

  1. 사용자 정보 보호 정책을 유지한다.
  2. 권한을 최소화한다.
  3. 사용자에게 정보 수집에 대한 선택권을 준다.
  4. 불필요한 정보를 수집하지 않는다.
  5. 디바이스 외부로 정보를 보내지 않는다.
  6. 하지만 필요한 경우, 암호를 사용하고 데이터 사용을 최소화한다.
  7. 모르는 코드를 사용하지 않는다.
  8. 디바이스 혹은 사용자 전용 정보를 기록하지 않는다.

사용자 정보 보호 정책을 유지한다

신뢰할 수 있는 애플리케이션은 수집하는 데이터와 수집 목적에 대해서 정직하게 밝힙니다. 그러한 정보 수집이 자신에게 유익하다고 생각할 때, 대체적으로 사용자는 해당 앱들을 통해서 기꺼이 정보를 공유합니다. 애플리케이션에서 수집하는 정보의 종류 및 사용 방법에 대한 상세한 설명과 함께 분명하고 간결한 개인 정보 보호 정책을 제공하면 신뢰와 선의를 구축하는데 큰 도움이 됩니다. Google Play 등록에서 개인 정보 보호 정책으로 바로 연결할 수 있는 링크를 사용자에게 제공할 수 있습니다. (개발자 콘솔에 가서 해당 링크를 추가)



실제로 필요한 권한만을 요청하도록 한다.

권한을 최소화한다

모바일 OS 중에서 안드로이드는 간단하고 쉬우며 OS 강제 권한 모델을 가진 운영체제입니다. 모든 안드로이드 애플리케이션은 필요한 권한을 선언하고 사용자는 애플리케이션이 설치되기 전에 이 권한들을 반드시 승인해야 합니다. 사용자는 과도한 권한을 요구하는 애플리케이션을 불신하는 경향이 있습니다. 예를 들어, 오목 게임을 설치하는 사용자는 사진 찍기가 왜 필요한지 당연히 의문을 가질 수 있겠죠.

사용자에게 정보 수집에 대한 선택권을 준다

개인정보보호의 역설[PDF, 890K]이라고 합니다. 사용자는 기꺼이 정보를 공유하면서도 해당 공유에 대해서 제어권을 가지기를 원합니다. 신뢰할 수 있는 애플리케이션에서는 자신의 정보 사용을 사용자가 제어할 수 있도록 합니다. 예를 들어, 안드로이드 브라우저에서는 사용자가 정보를 공유하는 방법을 제어할 수 있도록 개인 정보 설정 기능을 제공합니다.

불필요한 정보는 수집하지 않는다

신뢰할 수 있는 애플리케이션은 수집하는 정보의 종류를 제한합니다. 불필요한 정보를 수집하는 행위는 (특히 사용하지 않는 경우에) 사용자로부터 불신을 살 수 있습니다. 용도가 확실하지 않은 경우에, 불필요한 정보는 수집하지 않도록 합니다.

디바이스 외부로 정보를 보내지 않는다

사용자 데이터를 처리해야 하는 경우, 디바이스 외부로 정보가 나가지 않도록 해야합니다. 사용자는 자신의 정보가 반드시 휴대폰 내에 있어야 안심합니다. 사용자의 유익을 위한다 하더라도 디바이스 외부로 정보를 보내는 것은 불신을 조장할 수 있습니다.

하지만 필요한 경우, 암호를 사용하고 데이터 사용을 최소화한다.

때로는 정보 수집이 필요할 경우가 있습니다. 이러한 경우, 애플리케이션에서는 해당 정보를 안전하게 처리해야 합니다. 개인 정보 보호 정책을 통해 사용자를 당황스럽게 하거나 불쾌하게 만드는 경우를 방지할 수 있습니다. 경우에 따라 데이터를 디바이스 외부로 전송하기 전에 사용자에게 알려주는 것이 바람직한 경우도 있습니다.

첫 째, 수집하는 데이터의 양을 최소화 합니다. 사용자의 전화번호가 실제로 필요한지, 아니면 지역 번호로 충분한지, 사용자의 비밀 정보를 보호하기 위하여 해당 데이터를 서버로 보내기 전에 데이터에 일방향 암호 해시 함수를 쓸 수 있는지 확인합니다. 


사용자가 자신의 데이터를 처리 여부를 제어할 수 있도록 하라.



두 번째, 사용자 데이터를 안전하게 처리하기 위해 암호화는 매우 중요합니다. 종종 휴대폰은 공격자들이 기밀 트래픽을 빼낼 수 있는 신뢰할 수 없는 네트워크에서 사용됩니다. 따라서 전송 중에 데이터를 암호화하는 것은 사용자 정보를 보호하는데 매우 중요한 요소입니다.

마지막으로, HTTP로 서버와 통신할 때 HTTP GET으로 사용되는 URL에 사용자 정보를 암호화하기보다, 메시지 바디 안에 POST하세요. POST를 사용한다고 해서 정보가 누출되지 않는다고 보장할 수는 없지만, URL 안에 넣으면 자동으로 기록될 가능성을 높입니다. 참고로 대다수 웹 서버 소프크웨어는 받은 모든 URL을 기록합니다.

사례 연구: 사용자 즐겨찾기

완전한 등록 절차 없이, 각 사용자들의 즐겨찾기 목록을 관리하는 앱을 만든다고 가정해 봅시다. 이론적으로 볼 때, 사용자의 전화번호나 디바이스 ID, SIM ID를 조합해서 서버로 보내면 됩니다. 하지만 굳이 사용자로 하여금 자신의 개인 정보 사용에 대해서 우려하게 만들 필요는 없습니다. 대신, 식별 정보가 무엇이든지 간에 일방향 해시 서명을 사용하여 보내는 방법은 어떤가요? 아니면 더 나은 방법으로, 랜덤 고유 ID를 만들어 휴대폰에 저장하고 해당 ID를 애플리케이션에 등록키로 사용하는 방법도 있습니다. 그러면 각 사용자들의 즐겨찾기 정보를 받으면서도 민감한 정보를 보내거나 저장할 필요가 없겠죠.

모르는 코드를 사용하지 않는다

오픈 소스 안드로이드 환경에서, 라이브러리와 프레임워크 형태로 다른 사람의 코드를 많이 사용하는 것은 일반적인 (혹은 바람직한) 일입니다. 하지만 해당 코드가 사용자의 정보를 부적절하게 처리하고 있다면 문제가 될 수 있습니다. 따라서 다른 개발자의 소스를 사용하기 전에 반드시 코드를 확인해야 합니다.

사용자 및 디바이스 전용 정보를 기록하지 않는다

애플리케이션 개발자는 디바이스 상에 기록되는 로그에 주의를 기울여야 합니다. 안드로이드에서는 용이하게 휴대폰 로그를 작성할 수 있으며 로그캣 결과 값을 확인하면 알 수 있듯, 해당 로그는 다양한 애플리케이션에서 보내는 랜덤한 디버깅 정보처럼 보이지만, 실제로 매우 중요한 정보를 가지고 있습니다. 안드로이드에서 로그는 공유되는 리소스로 READ_LOGS 권한을 가진 애플리케이션에서 사용할 수 있습니다 (물론 사용자가 동의할 경우에만). 휴대폰 로그 데이터가 일시적이고 재푸팅 시에 삭제된다 하더라도 사용자 정보를 부적절하게 기록하면 의도하지 않게 사용자 정보를 다른 애플리케이션으로 누출시킬 수도 있습니다.