마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

전송되는 데이터 암호화 관련 질문입니다.

0 추천
안드로이드 앱에서 AES 대칭키 암호 알고리즘으로 데이터를 암호화해서 전송중에 있습니다.

암호화를 통해서 중간 공격자에 의해 데이터가 탈취되는 것은 막을 수 있지만, 디컴파일을 통한 키 노출은 어떻게 해야할지 질문드리네요.

 

키를 보호하기 위해서 어떻게 해야하나요, SSL 처럼 다른 인증기관을 통해서 하는 것 말고 키를 보호할 수 있는 메커니즘을 알고 싶습니다.
choHJ (190 포인트) 님이 2015년 3월 23일 질문

1개의 답변

+1 추천
 
채택된 답변
디컴파일로인한 키유출까지 걱정해야 할 만큼 중요한 데이터라면,

keyStore에 해당 암호화 키를 저장 시키고 keyStore엑세서 만드셔서 키스토어에서

암호화키 빼와서 사용하는 방법으로 하시면 되겠습니다.

java.security 패키지에 키스토어 관련 클래스 있으니 살펴보시구요.

그리고 안드로이드에서는 JCEKS 형식 SunJCE 프로바이더 지원안하는 걸로 알고있으니까

BKS 형식 키스토어에다가 암호화 키 저장하셔야 합니다.

 

여기에 더 완벽하게 하실라면, keystore에는 디펄트키를 저장해두시구요.

처음에 어플실행할때 서버에 디펄트키로 인증을해서 서버로부터 데이터를 암호화할 암호화키를

받아오세요. 암호화키는 어플에서 요청이 올때마다

시간,날짜뭐 등등 단말고유값 같은걸로 계산해서 만드셔서 사용하시면,

실질적으로 제3자가 데이터를 암호화한데 사용한 암호화키를 얻는건 불가능하다고 봅니다.

 

물론 이 경우 단말에 대응하는 각각의 암호화키가 만들어 질태니

간단하지는 않고, 작업 볼륨이 좀 있을겁니다.
띠깔라1 (4,200 포인트) 님이 2015년 3월 23일 답변
choHJ님이 2015년 3월 24일 채택됨
답변 감사드립니다.

답변주신 순서를 정리해보자면

앱 -> 서버 (디폴트 키(공개키) 전송)
서버 -> 앱 (암호화에 사용되는 대칭키 전송)
앱 -> 서버 (데이터 암호화 전송)

비대칭키 암호알고리즘으로 대칭키를 암호화하여 전송하라는 거 맞는건가요? 앱에서 키를 저장하고 있지 않기 때문에 안전하다라고 말씀하시는건가요?

추가적으로 keystore에 키를 저장할 경우 제가 알기론 파일로 떨어지는데 keystore를 앱에 포함시킬수 있는.. 그런건가요? 감이안오네요 .. 감사합니다.
네 대충 그렇게 이해하시면 됩니다.

앱에서 고정된 값의 키를 저장하지 않을뿐만아니라, 암호화 키 자체도 매번 날짜, 시간에따라 갱신을 하기 때문에 실질적으로 데이터를 탈취당하는 것은 불가능에 가깝습니다.

keystore 파일은 asset에 넣어 배포하시고 어플에서 사용하시면 됩니다.
그리고 디펄트키를 이용해 인증을 통한 암호화키 발급 로직으로 개발 하실경우
굳이 keystore를 사용 하실 필요는 없습니다. 소스상에 하드코딩으로 바이트데이터로 그냥 디펄트키를 선언해두셔도 안전성에 큰 지장을 주지는 않습니다.
아주 큰 도움 되었습니다.
답변 감사합니다 ^^
...