Gmail 비밀번호는 Android에 어떻게 저장됩니까?


37

주변을 둘러보고 Android가 기기에 비밀번호를 저장하는 방법에 대한 정보를 찾지 못했습니다. 특히 Gmail 비밀번호. Android가 암호를 암호화하고 저장하는 방법을 배우고 싶습니다. 사용하는 키와이 키의 위치 및 사용하는 암호화 알고리즘


1
저장된 비밀번호를 키로 암호화해야하는 이유는 무엇입니까? 이것은 암호가 필요할 때마다 키를 입력해야한다는 것을 의미하기 때문에 암호를 저장하고 매번 입력 할 수는 없습니다 .
흐름

음, 열쇠는 전화 IMEI 등에서 얻은 특정 장치 일 수 있습니다. 즉, 소프트웨어는 사용자가 매번 입력하지 않아도 키를 얻을 수 있습니다.
asudhak

1
휴대 전화에서 실행되는 다른 소프트웨어가 키를 얻는 것을 방해하는 것은 무엇입니까? 이 접근 방식은 추가적인 보안 계층을 추가하지 않습니다
Flow

답변:


36

Gmail의 공식 앱 기기에 비밀번호를 저장 하지 않습니다 . 이 앱을 사용하면 비밀번호가 100 % 안전합니다.

작동 방식은 다음과 같습니다 . 비밀번호는 Google 인증 서버에서 처음으로 만 사용됩니다. 인증에 성공하면 파일이 일반 텍스트 Auth Tokenaccounts.db파일에 저장되는 장치로 다운로드됩니다 . 이후의 모든 로그인에는 Auth Token원래 비밀번호가 아닌 이 비밀번호가 사용됩니다.
따라서 기기를 도난당한 경우 Auth Token비밀번호를 변경하면 누구나 이용할 수있는 모든 것이 무효화됩니다. 따라서, 당신은 궁극적 인 명령에있을 것입니다.
최상의 보안 을 위해 장치 를 활성화 2-Factor Authentication하고 생성 Device Specific Password하는 것이 좋습니다 . 장치를 잃은 후에는 해당 장치를 비활성화하기 만하면됩니다. 기본 비밀번호를 변경할 필요조차 없습니다.

참고 : Gmail viz에 타사 이메일 앱을 사용하는 경우에는이 모든 것이 사실이 아닙니다. 주식 이메일 앱, K-9 메일 등. IMAP 또는 POP 프로토콜은 매번 사용자를 인증하기 위해 원래 비밀번호가 필요합니다. 따라서 전자 메일 앱에서 서버로 보내기 전에 일반 암호를 사용할 수 있어야합니다. 따라서 대부분의 전자 메일 앱은 암호를 일반 텍스트로 저장합니다 (해싱 / 암호화 키를 로컬로 저장해야하므로 해싱 / 암호화는 쓸모가 없습니다). 이 경우 장치 를 활성화 2-Factor Authentication하고 생성 Device Specific Password하는 것이 좋습니다 . 장치를 잃은 후에는 해당 장치를 비활성화하기 만하면됩니다.

업데이트 :
기술적으로 암호 키 / 해싱 키를 일반 텍스트로 로컬로 유지하지 않고도 암호를 암호화 / 해시 형태로 로컬로 저장할 수 있습니다. 지적 해 주신 @JFSebastian에게 감사합니다. 불행히도 Android에 대한 이러한 구현은 아직 사용할 수 없습니다. ICS를 시작하면 Android는 앱이 비밀번호를 로컬로 안전하게 저장할 수있는 KeyChain API 를 제공합니다 . KeyChain API를 사용하는 앱은 드물지만 주식 이메일 앱에서 사용합니다 (이 정보는 @wawa에게 감사합니다). 따라서 화면이 잠겨있는 한 주식 이메일 앱으로 비밀번호를 안전하게 사용할 수 있습니다. 장치가 루팅되어 있고 ICS 이전 장치에서 사용할 수없는 경우 KeyChain은 안전하지 않습니다.


6
@JF Sebastian : 비밀번호를 저장하는 타사를 완전히 신뢰한다고 가정하더라도 기기 자체에 비밀번호를 저장하는 것보다 조금 더 안전합니다. 기기는 여전히 클라우드 저장소에서 비밀번호의 일반 텍스트를 검색 할 수 있어야하며 터널이나 다른 지역으로 이동할 때마다 동글을 다시 연결하지 않아도되기 때문에 기기가 비밀번호를 로컬로 캐시해야합니다. 수신이 약합니다. 보안에서 가장 나쁜 일은 보안에 대한 잘못된 인식을 제공하는 것입니다.
Lie Ryan

4
@JFSebastian : 결론적으로 유일하게 안전한 인증 방법은 Google이 Gmail 앱으로 수행 한 작업, 즉 인증 토큰으로 비표준 인증 체계를 사용하는 것입니다. 누군가가 귀하의 인증 토큰을 훔쳐도 원격으로 토큰을 무효화 할 수 있으며 비밀번호 평문이 절대로 손상되지 않았기 때문에 비밀번호를 변경할 필요가 없습니다. 다른 안전한 방법은 세션없이 동글을 사용하는 것입니다. 글쎄, 당신은 그렇게 할 때 어떤 일이 일어나는지 알고 있습니다. 사용자는 동글을 영구적으로 붙인 채로 둡니다.
Lie Ryan

5
@ JFSebastian : 요점을 놓친 것 같습니다. 암호를 암호화하는 것은 단지 1 비트가 아닌 일반 텍스트로 저장하는 것보다 안전하지 않습니다. accounts.db를 복사하는 모든 공격자는 암호 해독 키와 함께 복사 할 수도 있습니다. 암호화가 제공하는 유일한 것은 잘못된 보안 감각입니다 . 이는 보안이없는 것보다 더 나쁩니다. 예, 일반 텍스트 암호를 저장하는 것보다 훨씬 나은 솔루션이 있지만 모두 전자 메일 프로토콜을 변경해야하므로 현재 가지고있는 것과 함께 살아야합니다. 또는 Gmail과 같은 비표준 방식으로 올바르게 수행하십시오.
Lie Ryan

3
@JFSebastian Apples 키 체인 서비스 또는 Linux 커널이 제공하는 것은 더 안전한 옵션이 아닙니다. 암호는 여전히 메모리에 남아 있으며 키 체인이 잠금 해제되어 있어도 암호화되지 않은 상태입니다. 따라서 루트 읽기 전용 .db 파일로 얻는 것이 약간 더 어려울 수 있습니다. Google은 기기가 손상된 경우 무효화 될 수있는 인증 토큰을 사용하여 가능한 최상의 솔루션을 구현했습니다. 다음으로 더 안전한 옵션은 매번 암호를 입력하거나 전자 메일을 전혀 사용하지 않는 것입니다.
흐름

4
@LieRyan ICS부터 주식 이메일 앱은 실제로 일반 텍스트가 아닌 KeyStore API를 사용합니다. android-developers.blogspot.com/2012/03/…
Wesley Wiser

12

내장 이메일 애플리케이션과 함께 사용되는 Android 비밀번호는 SQLite 데이터베이스 내부에 일반 텍스트로 저장됩니다. 이는 Sachin Sekhar의 답변에 설명 된대로 인증 토큰을 사용 하는 Gmail 애플리케이션 과 대조적 입니다.

Jelly Bean의 경우 데이터베이스 위치는 다음과 같습니다.

/data/system/users/0/accounts.db

위의 위치는 Android 버전에 따라 다릅니다.

루팅되지 않은 장치의이 위치는 운영 체제에 의해 보호되고 보호됩니다.
루팅 된 기기에서 사용자는 이미 기술적으로 자체 보안을 해독했으며, 일반 텍스트가 아니더라도 키가 기기의 어딘가에 있어야 암호를 해독하는 것이 쉽지 않습니다.

Android 개발 팀의 회원이 오늘까지도 여전히 적용되는 설명게시했습니다 .

이제이 특별한 관심사와 관련하여. 가장 먼저 확인해야 할 것은 Email 앱이 POP3, IMAP, SMTP 및 Exchange ActiveSync와 같은 4 가지 프로토콜을 지원한다는 것입니다. 매우 제한적인 예외는 있지만,이 프로토콜은 모두 클라이언트가 서버에 비밀번호를 제시해야하는 오래된 프로토콜입니다. 모든 연결에서. 이 프로토콜을 사용하려면 기기에서 계정을 사용하려는 한 비밀번호를 유지해야합니다. 최신 프로토콜은이 작업을 수행하지 않습니다. 예를 들어 일부 기사가 Gmail과 대조되는 이유입니다. 최신 프로토콜을 사용하면 클라이언트가 비밀번호를 한 번 사용하여 토큰을 생성하고 토큰을 저장하며 비밀번호를 삭제할 수 있습니다.

의견 # 38 에 링크 된 기사를 잘 읽어 보길 바란다 . "암호를 모호하게하는"암호와 "안정된"암호를 만드는 것의 차이점에 대한 아주 좋은 배경을 제공합니다. 간단하게 (예를 들어 64 기수) 비밀번호를 가리는 또는됩니다 다른 곳에 저장 열쇠로 암호화 되지 암호 나 데이터를보다 안전하게. 공격자는 여전히이를 검색 할 수 있습니다.

(특히 암호를 일반 텍스트로 저장하지 않은 다른 전자 메일 클라이언트 중 일부에 대해 일부 주장이 제기되었습니다.이 경우에도 암호가 더 안전한 것으로 표시되지 않습니다. 간단한 테스트 : 부팅 할 수있는 경우 기기에서 설정 한 계정으로 이메일을 받기 시작하면 비밀번호는 실제로 안전하지 않습니다. 난독 화되거나 다른 곳에 저장된 다른 키로 암호화됩니다.)

또한이 문제는 많은 Android 사용자를 방해하는 것으로 보이므로 Slashdot-일반 텍스트에 저장된 Android 비밀번호 데이터 에서이 토론을 수행 할 수도 있습니다 .


와. 저를 놀라게합니다. 나는 그것이 일반 텍스트로 저장되어 있다는 사실을 알지 못했습니다. 뿌리를 내거나 뿌리를 내리지 마십시오. 기기를 도난당한 경우 보안 키로 전화를 잠그더라도 파렴치한 사람이 자격 증명을 쉽게 얻을 수 있습니다. 이 사실을 감안할 때 디스크 전체 암호화 메커니즘도 알고 있습니까?
asudhak

1
그들이 무엇이든, 그들은 계정에 액세스하는 데 사용할 수있는 것입니다. 그러나, @SachinShekhar의 accounts.db파일이 됩니다 이외의 계정으로 읽을으로부터 보호 system.
Wyzard --Sharming Monica 중지-9

1
Zuul, 답변 해 주셔서 감사합니다.하지만이 답변은 오도 된 것으로 생각됩니다. 다시 인용 한 견적을 확인하면 Gmail 앱은 비밀번호를 저장하지 않습니다. -@SachinShekhar 답변도 확인하십시오.
roxan September

2
@asudhak 앱이 원래 비밀번호를 사용하는 경우이를 보호 할 방법이 없습니다. 이메일 앱은 서버로 전송하기 전에 원래 비밀번호를 컴파일하려면이 키가 필요하므로 로컬로 저장해야하는 암호화 / 해싱 키를 찾은 후 해커는 accounts.db에서 인코딩 된 문자열을 디코딩 할 수 있습니다.
Android Quesito

2
@roxan Gmail 앱에서 저장 하지 않은 비밀번호를 가리키는 항목을 찾을 수 없습니다 . 견적이나 링크를 제공 할 수 있습니까?
흐름
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.