Android 앱에 민감한 데이터를 보호하는 가장 좋은 방법은 무엇입니까?
예, 이것은 매우 일반적인 질문이지만 민감한 데이터를 앱에 배포하는 웹 서버와 기반에 닿는 앱을 처리하는 가장 좋은 방법을 설치하고 노력하고 있습니다. 모든 링크, 일반적인 정보 조언 등을 주시면 감사하겠습니다.
앱이 일정 시간 동안 데이터베이스에서 검색된 영구 데이터를 저장하기 때문에 모든 것이 다소 까다로워집니다.
장치에 민감한 데이터 저장
그것은 당신의 청중에 달려 있습니다. 일반적으로 Android OS는 파일 된 Linux 파일 권한을 통해 앱이 서로의 파일 (예 : 데이터베이스, 기본 설정, 앱의 개인 디렉터리에 일반 파일)에 액세스하는 것을 금지합니다. 그러나 루팅 된 장치에서 응용 프로그램은 루트 액세스 권한을 모든 것을 읽을 수 있습니다. 시기 할 몇 가지 사항 :
- (예 : Android 마켓을 통해 앱을 배포하지 않고 회사에서만 배포하는 경우) Android의 시스템 기반 보안에 의존 할 수 있습니다.
- 사용자가 루트 액세스 권한을 얻으면 권한을 부여하는 응용 프로그램에 대해 매우주의를 기울일 것입니다.
- 앱이 루트 액세스 권한을 얻으면 많은 혼란을 초래할 수 있습니다. 앱의 정보는 사용자의 걱정거리가 될 수 있습니다.
- 루팅은 보증 제로로 이어집니다. 앱에 포함. 루팅 된 전화에서 정보 유출에 대한 책임을 질 수 없습니다.
결론적으로, 귀하의 정보가 매우 민감하지 않은 경우 (예 : 신용 카드 정보), Android에서 제공하는 기본 보안을 고수하는 것이 좋습니다 (즉, 모든 일반 텍스트로 저장하고 다른 앱이 액세스 할 수 없음을 알기) ).
개체 암호화가 갈 길입니다. 100 % 안전하지만 (해커가 앱을 디 사용하고 데이터를 해독하는 방법을 알아낼 수 있음) 크래킹에 큰 고통이며 대부분의 해커를 막을 수 있습니다. 특히 ProGuard 와 같은 코드를 난독 화하는 경우 .
서버에서 장치로 민감한 데이터 전송
여기에 몇 가지 옵션이 있습니다. 우선, 항상 HTTPS를 사용하십시오. HTTPS를 활성화 한 후 제안 할 두 가지 추가 보안 조치는 다음과 가변합니다.
- API 키 시스템을 사용하십시오. 이 API 키를 모든 요청에 포함하고 응답을 다시 보내기 전에 서버 측에서 확인하십시오. HTTPS를 사용하고 있기 때문에 공격자는 네트워크 스니퍼를 사용하여 API 키를 사용할 수 없습니다. 어떤 사람이 앱을 디 신뢰할 수 있는지 내기가 있습니다. 따라서 ProGuard를 사용하는 것 외에도 더 난독화할 수 있습니다. 예를 들어 API 키를 코드 전체에서 여러 조각으로 나눌 수 있습니다 (예 : 2 개 또는 3 개 클래스의 정적 멤버). 그런 다음 요청을 보낼 때 모든 부분을 연결하기 만하면됩니다. 다른 종류의 변환 (예 : 비트 시프 팅)을 적용하여 디 선택할 수있는 코드에서 더 어렵게 만들 수도 있습니다.
- 요청을 보낼 때마다 키를 생성 할 수 있습니다. 이 키는 자신 만 아는 논리를 사용하여 생성 클라이언트 측과 서버 측에서 구현할 수 있습니다. 예를 들어 요청에는 다음 요청 변수가 있습니다. 매개 변수 에서 생성되는
time=1321802432&key=[generated-key]
위치generated-key
입니다time
. 예 :md5(time + salt)
. 다음 두 가지 작업을 수행 할 수 있습니다.- 이것이
key
실제로 동일한 지 확인합니다md5(time + salt)
(클라이언트와 서버 만 솔트를 알고 있고 위의 API 키와 유사하게 난독 화 될 수 있음). - 그 확인
time
(이 과거보다 1 ~ 2 분의 경우 요청 무효를 고려, 예를 들면) 너무 멀리 다시 과거에 없습니다.
- 이것이
두 번째 방법은 모든 사람이 전송되는 매개 변수를 볼 수있는 일반 HTTP 요청을 수행하는 경우에도 더 유용합니다. 또한 디있을 정도 된 코드에서 알아 내기가 훨씬 더 어렵습니다. 특히 주요 계산 논리를 여러 클래스에 분산하는 경우.
그러나 , 참고 아무것도 불가능하여 응용 프로그램을 크랙 할 수 없습니다. 원하는만큼 난독화할 수 있습니다. 가 해커 실제로 데이터에 접근하기로 결정한 경우 애플리케이션을 디 컴파일하고 코드를 통과하고 요청 고객이 어떻게 형성되는지 파악하여 잠 못 이루는 밤을 많이 보내면 그렇게 할 수 있습니다. 유일한 실제 데이터를 확보하는 방법은 I에 대한 위의 쓴 일을 외에, 암호에 대한 사용자 요청하는 것입니다. 디데이 된 코드에서 누군가의 (사용자) 머리에만 존재하는 암호를 얻을 수 없습니다.
(Google 검색 덕분에 여기에 왔습니다)
나는 최근에 많이 많은 조사를하고 있으며 페이지는 Google과 Bing 검색을 통해 많이 올라 왔습니다. 장치에 데이터를 안전하게 저장하기 위해 널리 사용되는 절차는 AES와 같은 강력한 암호화 알고리즘을 사용하는 것입니다. 더 어려운 질문은 "AES에는 보안 키가 필요합니다. 키로 무엇을해야합니까?"
Google은 최근 앱용 클라우드 기반 저장소 솔루션을 발표 상황이 허용하는 경우 여기에 키를 저장하는 것을 고려할 수 있습니다. 의미하는 것 서버에서와 같이 장치 외부에서 키를 얻는 것이 더 나은 것입니다. 사용자가 PIN을 입력하도록 할 수 있습니다. 암호를 저장하기 위해 암호 파생을 할 수 있고 암호를 확인하기 위해 파생을 다시 사용할 수 있습니다.
"사용자가 PIN 입력"부분 없이는 그 질문에 대한 좋은 답변을 많이 찾지. 그러나 앱에 키를 저장해야하는 경우 하드 코딩하지 않습니다. 최소한의 보안 암호 생성기 및 / 또는 PBKDF2 (암호 기반 파생 함수 2)와 같은 파생 함수를 사용하여 키를 생성하십시오.
게시물을 생성 할 가능성이 Google은 앱이 처음 시작될 때 키를 사용하여 MODE_PRIVATE 플래그를 통해 많은 I / O 작업에 키를 저장하고 사용하는 것이 한 가지 접근 방식이라고합니다. 또한 해당 마스터 키를 기반으로 다른 키를 파생 할 수 있으며 NIST는 실제로 해당 라인을 따라 제안을 제안합니다.
마스터 키 방법을 신뢰하든 안하든 상관 없습니다. 이 키는 루팅 된 기기에 노출됩니다. 나는 또한 여전히 문제를 조사하고 있음을 인정할 것입니다.
Android의 모든 애플리케이션은 안전한 샌드 박스 환경에서 실행 가능한 시스템의 다른 프로세스는 적절한 핸드 셰이크 없이는 코드 또는 개인 데이터에 액세스 할 수 없습니다. 그러나 여전히 앱의 잘못된 디자인으로 인해 가능한 많은 시스템이 있습니다. Android 개발자 사이트 의이 링크는 보안을위한 몇 가지 유용한 팁을 알려드립니다.- https : //developer.android.com/training/articles/security-tips.html
사용자가 앱을 보는 것 외에는 데이터를 볼 수 있고, 실제로 그리고 암호화가 실질적인 방법입니다. 기기가 루팅 된 경우 사용자는 "보호 된"저장소에도 액세스 할 수 있습니다. 암호화조차도 데이터를 표시하기 위해 특정 시점에 데이터를 해독해야 완전히 안전하지 않습니다. 당신은 평범한 브라우저를 설득 할 것이지만 단호한 해커는 아닙니다.
HTTP 대신 HTTPS에서 SSL을 사용하여 데이터를 전송하십시오. 웹 서버에서 인증서를 설정해야 작동 방식이 확실하지 않습니다.
데이터가 정말로 걱정된다면 고유 한 알고리즘으로 데이터를 추가로 암호화 한 다음 앱에 도달했을 때 데이터를 보내고 해독하십시오. 그게 전부라고 생각합니다. 정말 강력한 것이 필요하지 않다면 TCP 기반의 자체 프로토콜을 개발하거나 다른 포트를 사용합니다. 아마도 도움이 될 것입니다.
http://en.wikipedia.org/wiki/Secure_Sockets_Layer http://developer.android.com/reference/javax/net/ssl/package-summary.html http://blog.synyx.de/2010/06/ android-and-self-signed-ssl-certificates /
앱에 데이터를 저장하려면 저장하기 전에 데이터를 암호화하거나 브라우저를 사용하여 sqlite 데이터베이스를 매우 쉽게 볼 수 있으므로 보안을 강화하기 위해 SQLite 이외의 다른 형식을 사용할 수 있습니다.
전화가 루팅되지 않는 한 데이터를 추출 할 방법이 없어야합니다.
참고 URL : https://stackoverflow.com/questions/8184492/best-way-to-secure-android-app-sensitive-data
'ProgramingTip' 카테고리의 다른 글
씨 # /. NET에서 포인터를 사용하는 경우 (0) | 2020.11.11 |
---|---|
매개 변수가 너무 많은 클래스 : 더 나은 설계 전략? (0) | 2020.11.11 |
SQL의 저장 프로 시저에서 RETURN 값 가져 오기 (0) | 2020.11.11 |
Python 3에서 바이트와 암호화를 변환하는 방법은 무엇입니까? (0) | 2020.11.11 |
JavaScript에서 (0) | 2020.11.11 |