2013-05-25 1 views
1

서버와 응용 프로그램에서 모두 사용하는 비밀 키가 있습니다. 이 키는 요청이 응용 프로그램에서 왔는지 확인하는 데 사용됩니다. 서버가 사용자를 등록하지 않았지만이 응용 프로그램을 사용하면 사용자가 요청을 보낼 수 있습니다.응용 프로그램에서 대칭 키 보호

다른 솔루션을 찾을 수 없습니다 ... 비대칭 키 Diffie-Hellman에 대해 생각했지만 대칭 키와 별개로 문제를 해결할 수있는 것은 아무것도 없습니다 ...하지만 문제는 그 키를 내 Java에 저장하는 방법입니다. 코드를 작성하고 보호 하시겠습니까?

+1

이 정보가 도움이 될 수 있습니다. http://stackoverflow.com/questions/2050292/how-to-securely-store-a-privatekey-in-code –

+0

예, 문제는 해결되지 않습니다. 방법은 그 가치를 얻으려고 해커를 혼동하는 것입니다 ... – Massimo

+0

당신은 비대칭 키에 대해 생각한다고했습니다. 개인 키를 코드에 저장하는 것보다 훨씬 안전한 방법이라고 생각합니다. –

답변

1

외부 소스 (예 : 사용자, SMS 등)에서 공유 된 비밀 (예 : 비밀번호)을 얻지 않고는이 작업을 수행 할 수 없습니다.

누구나 전체 프로그램에 액세스 할 수 있습니다. 외부 정보가 사용되지 않으면 누군가가 응용 프로그램에서 온 것처럼 보이는 위조 된 패킷을 보낼 수 있습니다.

일반적으로 응용 프로그램에 입력 할 수있는 전자 메일 또는 SMS를 통해 단일 확인 문자열을 사용자에게 보낼 수 있습니다. 문자열이 짧은 시간 (예 : 5 분) 동안 만 유효한 경우 매우 길지 않아도됩니다.

이 문자열에서 임시 키를 만들려면 해시를 사용하십시오. 그런 다음이 임시 키를 사용하여 자신이 말하는 사람임을 서버에 증명하고 서버에서 장기 키를 확보하여 안전한 장소에 보관하십시오.

+0

클래스 ObfuscatedString을 찾았습니다. long 배열로 문자열을 생성합니다. 이 클래스를 사용하여 문자열을 난처하게 만들고 코드를 알아 채지 못하게하는 코드를 사용하면 작동 할 수 있습니다. 어떻게 생각합니까? 문자열 만들기는 다음과 비슷한 코드로 이루어집니다. String key = new ObfuscatedString (new long [] {0x2233850333551220L, 0xFBAD239EF4CB2711L, 0xA21102AB357EF211L}). toString(); 코드를 역 생성하려고 시도했지만 ObfuscatedString의 생성자에 전달 된 긴 숫자를 찾을 수 없습니다. – Massimo

+0

모든 것은 누군가에게 동기가 부여 된 사람이 난독 화 된 정보에 액세스하는 방법에 달려 있습니다. 앱의 인기가 높을수록 비밀 키를 결정하는 데 더 많은 동기가 부여됩니다. 한 가지 방법은 앱을 리버스 엔지니어링하여 코드에서 데이터를 보내는 위치를 찾는 것입니다. Proguard는 android.jar에 대한 호출을 난독 화하지 못하기 때문에 매우 쉽게 처리 할 수 ​​있습니다. 그런 다음 요청이 어떻게 형성되었는지 판단하기 위해 거꾸로 작업합니다. 많은 경우에 그들은 아마 당신의 열쇠가 난독 화 된 것을 알지조차 않을 것입니다. – abh