Android : 사용자 이름과 비밀번호를 저장 하시겠습니까?


178

Android 애플리케이션에서 사용할 사용자 이름과 비밀번호를 저장하려면 가장 좋은 방법은 무엇입니까? 환경 설정 화면을 통과합니까 (그러나 사용자가이를 놓치면 어떻게됩니까?) 대화 상자를 팝업하여 사용자에게 자격 증명을 요청합니까? 그렇다면 응용 프로그램의 상태를 유지해야합니다. 어떻게해야합니까?


4
stackoverflow.com/a/786588/1166727 @RetoMeier (Google의 Android 개발 기술 리드)가 이에 대해 어떻게 말하는지 확인하십시오.
tony gil

1
자격 증명을 저장하는 가장 안전한 방법을 찾고 있다면이 답변을
읽어보십시오.

3
@Legend 문제가 어떻게 해결 되었습니까?
Erum

@Legend, 당신은 내가 어떤 인터넷없이 일에 내 응용 프로그램을 원하기 때문에 다음 어떻게 키를받을 수 있나요 .. 암호화 이후의 환경 설정에서 비밀번호가 저장에 대한 몇 가지 빛을 던질 수 .. (I 장치에 키를 저장하지 못할 사촌)
eRaisedToX

Api +18에 키 저장소를 사용할 수 있습니다. developer.android.com/training/articles/keystore
Golnar

답변:


115

내가 본 대부분의 Android 및 iPhone 앱은 초기 화면 또는 대화 상자를 사용하여 자격 증명을 요청합니다. 사용자가 자신의 이름 / 암호를 자주 다시 입력하는 것이 번거롭기 때문에 해당 정보를 저장하는 것이 유용성 관점에서 의미가 있습니다.

( Android dev guide ) 의 조언 은 다음과 같습니다.

일반적으로 사용자 자격 증명 요청 빈도를 최소화하여 피싱 공격을보다 눈에 띄게하고 성공 가능성을 낮추는 것이 좋습니다. 대신 인증 토큰을 사용하여 새로 고치십시오.

가능하면 사용자 이름과 비밀번호를 장치에 저장해서는 안됩니다. 대신, 사용자가 제공 한 사용자 이름과 비밀번호를 사용하여 초기 인증을 수행 한 다음 수명이 짧은 서비스 별 인증 토큰을 사용하십시오.

자격 증명을 저장하는 가장 좋은 방법 은 AccountManger를 사용하는 것 입니다. SampleSyncAdapter은 그것을 사용하는 방법에 대한 예제를 제공합니다.

어떤 이유로 든 이것이 옵션이 아닌 경우 환경 설정 메커니즘을 사용하여 자격 증명 유지로 돌아갈 수 있습니다 . 다른 응용 프로그램은 기본 설정에 액세스 할 수 없으므로 사용자 정보가 쉽게 노출되지 않습니다.


40
환경 설정에서와 같이 비밀번호 정보를 유지하는 것은 위험하다고 말합니다. 루팅 된 전화에서는 앱의 환경 설정 파일에 액세스 할 수 있습니다. 당신이 할 수있는 최소한의 암호를 난독 화하는 것입니다.
Jayesh

51
누군가 휴대 전화를 가지고 있고 뿌리를 내릴 수 있다면 데이터를 안전하게 지키기 위해 할 수있는 일이 많지 않습니다. 암호를 난독 화하는 것은 좋지 않지만 실제로 더 많은 보호 기능을 추가하지는 않습니다. 더 중요한 것은 OS에 이미 많은 보안 계층이 내장되어 있다는 것입니다. 물론 이러한 조치를 우회하기 위해 어리석은 짓을하고 싶지 않습니다. OAuth와 같은 시스템을 사용하고 사용자 이름과 암호 대신 장치에 토큰을 저장하는 것이 좋습니다.
Eric Levine

4
당신이 사용하는 경우 AccountManager(로터리 방식으로 내 대답에 따라, 그리고 미구엘 @)와 누군가가 GSM 휴대 전화의 보류를 얻을, 그들은 저장된 자격 증명을 무효화으로, 계정에 액세스 할 수 있도록 당신의 SIM을 계속해야합니다 SIM이 변경 될 때
Jon O

3
SIP 변경에 대한 계정 삭제는 꽤 오래 전에 제거되었습니다. 특히 SIM이 둘 이상인 사람들에게는 그다지 의미가 없기 때문입니다. 휴대 전화를 도난당한 경우 더 나은 전략은 Google 계정 페이지로 이동하여 특정 기기에 대한 액세스를 취소하는 것입니다.
Nikolay Elenkov

2
"Ac 자격 증명을 저장하는 가장 좋은 방법은 AccountManger를 사용하는 것입니다." 왜?
Luc

9

Android AccountManager를 사용해야합니다 . 이 시나리오를 위해 특별히 제작되었습니다. 약간 번거롭지 만 SIM 카드가 변경되면 로컬 자격 증명이 무효화되므로 누군가가 휴대 전화를 스 와이프하고 새로운 SIM을 던지면 자격 증명이 손상되지 않습니다.

또한 사용자는 장치에있는 모든 계정의 저장된 자격 증명을 한 곳에서 빠르고 쉽게 액세스하고 삭제할 수 있습니다.

@Miguel과 같은 SampleSyncAdapter는 저장된 계정 자격 증명을 사용하는 예입니다.


3
AccountManager가 "SIM 카드가 변경되면 로컬 자격 증명을 무효화 할 것"이라는 문서는 어디에 있습니까?
Eric Levine

내가 아는 것은 아닙니다. 그러나 내 앱의 일부 사용자가 SIM 스왑에 따라 인증 문제를 겪은 후에 믿거 나 받아들이거나 이해하게되었습니다.
Jon O

1
JavaDocs 또는 AccountManager 코드에 표시되지 않습니다. 좋은 기능처럼 들리므로 확인하고 세부 사항을 이해하면 좋을 것입니다.
Eric Levine

2
@NikolayElenkov에 따르면 SIM 카드 무효화 기능의 무효화 기능이 제거되었습니다.
ThomasW

2
@ThomasW 그에 대한 인용이 있습니까? 어떤 종류의 결정적인 대답을 얻는 것이 좋을 것입니다.
Jon O

8

자격 증명을 보호하는 가장 좋은 방법은 root가 아닌 장치에서 쉽게 사용할 수없는 root.device 파일에 암호를 사용하여 암호를 저장하는 것입니다. 루트 된 장치의 경우 해커가 해독하는 키가 필요합니다. 그것.

다른 옵션은 Gmail과 같은 모든 인증을 수행하는 것입니다. Gmail 서버에서 첫 번째 인증 후. 당신은 당신의 암호의 경우에 사용되는 인증 토큰을 얻었다. 이 토큰은 일반 텍스트로 저장됩니다.이 토큰은 서버에서 비밀번호를 변경하는 경우 false 일 수 있습니다.

마지막 옵션 2 단계 인증을 활성화하고 장치의 장치 별 암호를 만드는 것이 좋습니다. 장치를 잃은 후에는 해당 장치를 비활성화하기 만하면됩니다.


2
accounts.db가 암호화되었다는 소스를 게시 할 수 있습니까? 아니면 특정 비밀번호를 암호화해야한다고 말합니까?
Michał K

1
@Riz은 어디에 내 응용 프로그램은 인터넷없이 작동하기 때문에, 그래서 네트워크에서 그것을 얻을하지 못할 ... 다음 암호화 키를 저장
eRaisedToX




2

새로운 (Android 6.0) 지문 하드웨어 및 API를 사용하면 github 샘플 애플리케이션 에서와 같이 할 수 있습니다 .


8
참조 된 샘플 프로젝트는 Android 키 저장소에 키를 작성하고이를 사용하여 비밀번호를 암호화하는 암호를 작성합니다. 암호화 된 비밀번호 및 암호는 공유 환경 설정에 base64로 인코딩 된 문자열로 저장됩니다. 지문 인증에 성공하면 Android 키 저장소에서 비밀 키가 검색되어 디코딩 된 암호와 함께 해독 된 암호와 함께 사용됩니다.
mjwheat

@mjwheat 이것은 예제에서 무슨 일이 일어나고 있는지 이해하는 데 도움이됩니다. 감사! 작은 오타 : "... 인코딩 된 암호를 해독합니다."
muetzenflo

2

이들은 숨겨진 정보를 깰 수 있는 순서대로 순위가 매겨 집니다 .

  1. 일반 텍스트로 저장

  2. 대칭 키를 사용하여 암호화 된 저장

  3. Android Keystore 사용

  4. 비대칭 키를 사용하여 암호화 된 저장

출처 : Android 앱에서 비밀번호를 저장하기 가장 좋은 곳은 어디입니까?

키 저장소 자체는 사용자 자신의 잠금 화면 핀 / 암호를 사용하여 암호화되므로 장치 화면이 잠기면 키 저장소를 사용할 수 없습니다. 애플리케이션 비밀에 액세스해야하는 백그라운드 서비스가있는 경우이 점을 명심하십시오.

출처 : 비밀번호 및 기타 민감한 정보를 저장하기 위해 Android Keystore를 간단하게 사용


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.