2011-03-19 6 views
14

암호화 된 데이터를 저장할 앱을 만들고 있습니다.비밀번호 저장

this 질문에서 OP는 사용자의 자격 증명을 명확하게 저장하도록 권장했습니다.

하지만 SecretKeySpec (데이터 암호화에 사용되는 암호화 된 암호)을 사용하여 만든 암호화 된 암호를 저장하려면 어떻게해야합니까? 내 이해에서 비밀 키 자체가 암호화됩니다.

그래서 저장하고 검색 할 수 있습니다.

참고 : SecretKeySpec 작동 방식 및 암호화 된 암호 정렬, 정렬, 직렬화 및 검색과 같은 기본 설정 저장 방법을 묻지 않습니다.

편집는 : 죄송합니다, 나는 그것이 API 레벨 4

답변

11

스트레이트 from developer website.

Be Smart About Security!

AccountManager는 암호화 서비스 또는 키 체인이 아니라는 점을 이해해야합니다. 일반 텍스트로 전달할 때 계정 자격 증명을 저장합니다. 대부분의 장치에서는 루트에만 액세스 할 수있는 데이터베이스에 저장하기 때문에 특별한 문제는 아닙니다. 그러나 뿌리 박힌 장치에서 자격 증명은 장치에 대한 액세스 권한이있는 모든 사람이 읽을 수 있습니다.

이 점을 고려하여 사용자의 실제 비밀번호를 AccountManager로 전달하면 안됩니다.addAccountExplicitly(). 대신, 공격자에게 제한적으로 사용되는 암호 학적으로 안전한 토큰을 저장해야합니다. 사용자 자격 증명이 가치있는 것을 보호한다면 신중하게 신중히 고려해야합니다.

기억하십시오 : 보안 코드와 관련하여 "Mythbusters"규칙을 따르십시오. 집에서 시도하지 마십시오! 사용자 지정 계정 코드를 구현하기 전에 보안 전문가에게 문의하십시오.

이제 보안 면책 조항이 모두 끝났으니 다시 돌아와보십시오. 이미 사용자 정의 계정 코드를 구현했습니다. 남은 것은 배관 공사입니다.

조건이 유 잘못된 경우에 활동을 시작할 수 있습니다 일치하는 경우 U 경우 u는 거기에서 비밀번호를 retreive 수 없습니다 input.but 문 u는 단순히 잘못의 축배를 생성 할 수있는 경우 u는 단순히으로 사용자 이름과 암호를 모두 선언 할 수
6

와우와 호환 할 필요가 지정하는 것을 잊었다. 나는 정말로 사용자 암호를 명확하게 저장하는 것이 심각한 선택이라고 생각하지 않는다.

이 목적으로 설계된 AccountManager을 확인하십시오. 연결된 질문에서 downvoted되었지만 SampleSyncAdapter은 실제로 AccountManager 예의 좋은 리소스이며 SDK에 포함 된 유일한 정보입니다.

- 약 javax.crypto을 편집하면 AccountManager보다 낮은 수준의 API라고 생각합니다. 워드 프로세서에서 :

많은 서버는 사용자의 실제 암호를 보내지 않고 서버에 요청을 인증하는 데 사용 할 수있는 인증 토큰의 몇 가지 개념을 지원합니다. (인증 토큰이 일반적으로 사용자의 자격 증명을 포함하지 별도의 요청이 생성됩니다.) 같은 관리자는 응용 프로그램에 대한 인증 토큰을 생성 할 수 때문에 응용 프로그램이 직접 핸들 암호를 필요로하지 않는다. 인증 토큰 은 보통 AccountManager에 의해 재사용 및 캐시되지만 주기적으로 으로 새로 고쳐야합니다. 승인 토큰이 작동을 멈추었을 때이를 무효 화하는 것은 응용 프로그램의 이므로 AccountManager는 을 다시 생성해야 함을 알고 있습니다.

내가 이것을 할 필요가 없다면 javax.crypto 레벨에서 이것을 처리하는 것이 싫어.

+0

좋은 소리입니다. 아주 좋아. 하지만 API 레벨 4와 호환 상태를 유지해야합니다 (미안하지만 수정했습니다). 어쨌든 +1 –

-4

어떤 의미하지만 잃어버린 유는 하나의 user.i에 대한 많은 암호를 만들 수 있습니다 내 응용 프로그램에이 일을 추가하고 나를 위해 잘 작동합니다.

관련 문제