0

가능한 한 안전하게 장치 자체에 저장하려는 몇 가지 SharedPreferences가 있습니다. 나는 보안에 대해 아무것도 모른다. 그러나 내가 원하는 것은 "obfuscator"라고 불리는 것을 발견했다. 그게 맞습니까? 그것이 "암호화"와 다른가요, 아니면 둘 다하고 싶습니까? 또한 AESObfuscator 또는 ProGuard을 사용할 수 있음을 발견했습니다. 차이점은 무엇입니까? 더 많은 옵션이 있습니까? 어느 것을 사용해야합니까?Android 디바이스에 SharedPreference를 안전하게 저장하는 방법은 무엇입니까?

나는 보안에 대해 매우 새롭기 때문에 자습서 나 다른 참조 자료가 도움이 될 것입니다.

+0

어떤 값을 저장하고 있으며 왜 보호하려고합니까? –

+0

한 쌍의 현과 한 쌍의 장. 너무 복잡한 것은 아닙니다. 왜냐하면 그것들은 액세스 키이고, 나는 그들을 저장할 서버가 없기 때문에 로컬에 저장해야합니다. – Kalina

답변

2

: -이 OAuth를 함께 수행하는 방법을 보일 수 있습니다이 기술은 보안 자격 증명을 손상 (또는 앱 이제까지 그들에게보고)

한 좋은 라이브러리가없이 트위터에 (예를 들어) 제 3 자 응용 프로그램을 로그인 할 수 있습니다 AESObfuscator은 정적 키를 사용하여 문자열을 암호화하므로 공유 된 환경 설정에 저장할 수 있으며 문자열이 무엇인지 즉시 알 수 없습니다. 이는 ProGuard와 같은 코드 난독 화기와는 다르며 코드에서 메소드와 변수 이름을 변경하여 리버스 엔지니어링을 어렵게 만듭니다. '난독 화'라고하며 키가 앱에 있기 때문에 'encryptoin'이 아니라 키를 추출하고 해독하는 것이 매우 쉽습니다. 공유 환경 설정의 난독 화는 문자열을 읽고 수정할 수는 있지만 불가능하지는 않습니다. 해당 보호 수준에서 정상이면이 방법을 사용하십시오. 코드 난독 화를 사용하는 것도 좋은 생각이므로 두 가지를 모두 사용하는 것이 좋습니다.

문자열을 해독하는 것을 '불가능하게'하는 유일한 방법은 사용자가 앱을 사용할 때마다 암호를 입력하고 암호화 키를 파생시키는 것입니다. 이것은 잘 작동하지만 아주 불편하지는 않습니다. 관심이 있으시면 some details입니다.

+0

함께 시도해 볼 것입니다. AESObfuscator. 이를 위해 전체 라이센싱 라이브러리가 필요합니까 아니면 PreferenceObfuscator 클래스를 사용할 수 있습니까? – Kalina

+1

전부는 아니지만 '보안'등의 관련 수업, IIRC. 컴파일러가 만족할 때까지 클래스가 참조하는 클래스를 확인하고 프로젝트에 추가하십시오. –

0

Java 파일에서 일부 URL을 "숨길"필요가있을 때이 문제에 대한 조사를 수행했습니다. 귀하의 경우 그것은 문자열을 암호화하는 일종의 비밀 키가 될 것입니다. Java/Android의 전체 코드는 일종의 리버스 엔지니어링을 사용하는 사람이 읽을 수 있다는 문제가 있습니다. 때로는 ProGuard와 같은 난독 화가가 더 쉽고 간결 해집니다. 따라서 암호화 키는 누구에게나 표시됩니다. Java 파일에서 문자열을 숨길 수있는 일부 (유료) obfuscator가 있지만 실제로 얼마나 확실한 지 잘 모르겠습니다.
요약하면 서버의 장치 외부에서 문자열을 저장하고 장치와 서버 (SSL)간에 보안 연결을 사용하십시오. 또는 서버에 암호화하여 다시 보내달라고 요청할 수 있습니다. 기기에 비밀 키를 저장하면 다른 사람이 리버스 엔지니어링을 사용하여 읽을 수 있는지 확실하지 않을 수 있습니다.

+0

감사합니다.하지만 특별히 장치 자체에 SharedPreference를 저장하는 방법에 대해 묻고 있습니다. 나는 서버가 없다. – Kalina

+0

알지만,이 경우 100 % 보호되지는 않습니다. – Warlock

4

Obfuscator는 본질적으로 변수를 사람이 읽을 수없는 이름으로 변경하는 것이므로이 경우에는 아무 것도하지 않습니다.

당신이하고자하는 일은 데이터가 SharedPreferences에 저장 될 때 데이터를 암호화하고 읽은 후에 암호화를 해제하는 것입니다.

이 아이디어의 예는 Encrypted SharedPrefs입니다. 이전에 사용하지 않은 방법이 얼마나 효과적인지 말할 수 없습니다.

+0

연결된 'AESObfuscator'는 실제로 문자열을 정적 키로 암호화하므로 공유 된 환경 설정에 저장할 수 있습니다. 이것은 ProGuard와 같은 _code_ obfuscator와는 다릅니다. '난독 화'라고하며 키가 앱에 있기 때문에 'encryptoin'이 아니라 해독하기가 쉽습니다. –

+1

@ jug6ernaut 귀하의 게시물을 찾았으며 링크에 암호화 된 공유 환경 설정을 사용하기로 결정했습니다. 구현하기 쉽고 사용하기 쉽습니다. 암호화의 힘에 관해서는, 나는 모른다. 그러나 당신이 들어가서 뿌리가 찍힌 전화에서 값을 바꾸려고하면 모든 텍스트가 왜곡된다. –

0

유일하게 안전한 방법은 기기에 중요한 정보를 보관하지 않는 것입니다. 기기에 중요한 정보가 있으면 그 값이 추출 된 것입니다 (제 3 세계에서 숙련 된 애들은 돈과 시간의면에서 정말로 싸다). http://code.google.com/p/oauth-signpost/

+0

감사합니다.하지만 기기에 데이터를 저장하는 방법에 대해 문의하고 있습니다. 나는 그것이 안전하지 않다는 것을 안다. 그러나 나는 그것을 가능한 한 안전하게 만들고 싶다. – Kalina

+0

액세스 키의 사용 시나리오는 무엇입니까? 사용자를 식별하는 데 사용되는 경우 단방향 해시로 암호화하여 사용자를 식별 할 수 있습니다. 이렇게하면 디스크 드라이브에 물리적으로 액세스 할 때 모든 유닉스 시스템처럼 유능한 보안을 얻을 수 있습니다. 이러한 키를 사용하여 다른 애플리케이션에 대한 애플리케이션을 식별하는 경우 OAuth가 가장 안전한 솔루션이며 여전히 제어 할 수 있으며 특정 애플리케이션 또는 장치에 대한 접근을 취소 할 수 있습니다. –

관련 문제