2011-10-31 9 views
7

나는 내 안드로이드 애플 리케이션 중 하나 내에서 mcrypt 암호화 및 복호화 루틴을했습니다. 이것은 근본적으로 가져온 문자열을 해독합니다. 원격 통화. 당연히 "비밀 키"는 코드 내에 저장되지만, apktool을 가진 사람은 분명히 코드를보고 내 비밀 키를 볼 수 있습니다.비밀 키를 유지 비밀 - 안드로이드 애플 리케이션 내에서 어떤 아이디어

Java 코드를 모두 암호화하여 컴파일을 해제해도 읽을 수 없거나 이해할 수 없도록 할 수 있습니까?

나는 ProGuard에 대해 들어 봤지만 그것에 대한 독서에서이 목적으로는 충분하지 않은 것으로 보입니다.

+2

질문은 문자열이 암호화 된 이유입니까? 전송 및 서버 저장 영역 보안의 경우 공개 키 암호화를 사용하십시오. 사용자로부터 "숨기"를 원한다면 응용 프로그램이 "볼 수있는"모든 것이 있기 때문에 운이 좋을 것입니다. 사용자도 볼 수 있습니다. –

+0

문자열이 암호화되어 스트리밍되는 파일의 위치를 ​​숨 깁니다. 캐주얼 사용자/스크립트 키디가 앱과 독립적으로 mp3를 다운로드하는 것을 어렵게하고 적어도 어렵게 만듭니다. 나는 당신의 말을 듣고 앱이 볼 수있는 모든 것을 완벽하게 이해합니다. 충분히 결정된 사람은 디버깅, 암호 해독 또는 디 컴파일 링을 할 수 있습니다. 단지 더 어려워 지려고합니다. 결정한 사람은 여전히 ​​모든 것을 통과하고 성공할 것입니다. 아니 큰. .. 기본적으로 스크립트 꼬마 들아 밖으로 계속 ... – SpacialWise

+2

왜 클라이언트가 키 쌍을 생성하고 요청과 함께 서버에 공개 키를 보내? –

답변

4

코드 안에 비밀 키를 넣으면 안됩니다. 컴파일 된 코드는 쉽게 리버스 엔지니어링 할 수 있으며 디버거를 가진 사람은 실제 키가 생성 된 지점까지 연결할 수 있습니다. 보안은 항상 알고리즘에 의존합니다. 클라이언트 코드는 공개되어 있고 잠재적 인 공격자에게는 복사본이 있다고 가정합니다.

코드에서 리터럴을 숨기면 공격자가 키를 가져 오는 과정이 지연되지만 어떤 식 으로든이를 막지는 못합니다.

+0

그럼, 당신의 추천은 무엇입니까? – SpacialWise

+0

사용자가 자신의 psw를 정의 할 수 있도록 구성 화면이있을 수 있습니다. 그런 다음 usr pasw의 해시를 저장하고 응용 프로그램이 시작되면 psw가 요청됩니다. psw 해시가 저장된 해시와 일치하면 사용자에게 액세스 권한을 부여합니다. 또한 사용자에게 키를 발급하고, DB에 해시를 저장하고, 처음 사용시 온라인에서 앱의 유효성을 검사하도록 할 수 있습니다. –

0

나는 보안 전문가가 아니지만, VM 컴파일 언어가 easly 디 컴파일 될 수 있음을 알고 있습니다. ProGuard를 사용하여 코드를 난독 화하려고 시도 할 수는 있지만 여전히 읽을 수 있어야합니다. 코드를 저장하고 암호를 해독하려고합니다. 키를 Java Crypto을 사용하여 입력하면 Android Crypting Database 또는 Encrypt Information in Android와 비슷한 문항 앞에 질문해야합니다. 질문에 답할 필요는 없지만 지금부터는 가이드 라인을 제공 할 것입니다.

+0

감사합니다. 네크로넷. 결정적인 해결책이없이 여기에 여러 게시물을 읽었습니다. 내가 링크 한 것들을 점검 할 것입니다. – SpacialWise

0

대신 당신이 문자열을 가져올 필요가 새 키마다 생성 할 수 있습니다

당신은 그 (제대로 구현 경우 안전) 하드 코드 된 인증서와 키 교환

하거나 작업을 수행해야합니다 전송 중 보안을 위해서만 SSL을 사용하십시오.

+1

이 접근법은 그럴듯한 듯합니다. 매번 새로운 키를 생성 할 수는 있지만 하드 코딩 된 인증서로 키 교환에 익숙하지 않습니다. 좀 더 정교하게 설명하거나 방향으로 가르쳐 주시겠습니까? 나 ' – SpacialWise

1

클라이언트 시스템의 모든 코드를 읽을 수 있습니다. 열쇠를 찾는 것을 더 어렵게 만드는 것이 최선의 방법입니다.

제안 : 코드에 "요청이 처리되는 동안 잠시 기다려주십시오 ..."와 같은 텍스트 문자열이 있습니다. 그런 메시지를 찾아서 해당 메시지를 XOR로 실제 키로 변경하는 바이트 배열을 생성하십시오 텍스트 캐릭터 라인을 가지는 바이트 배열

"squirrel"XOR [16 1D 10 19 1A 13 0B 18] => "코끼리"

"squirrel"과 바이트 배열 만 실제로 코드에 나타납니다.

+0

안녕하세요! 네, 원래 생각하고 있던 라인을 따라 있습니다. 본질적으로 string.xml 내 데이터에서 키를 생성하는 몇 가지 루틴 (알고리즘 사용) 및 기타 임의로 포함 된 변수가 있습니다. 이 모든 것을 여러 클래스에 포함 된 여러 메소드로 결합합니다. 마지막으로 ProGuard를 사용하면 어떤 특정 함수/루틴이 더 많은 도전을하고 있는지 추적 할 수 있습니다. – SpacialWise

+0

누군가가 그 인스턴스에서도 여전히 문제를 파악할 수 있지만 시간이 오래 걸릴 수 있습니다 - 단순히 디 컴파일과 읽기에서부터 몇 분 동안 코드를 추적해야합니다. – SpacialWise

관련 문제