주변을 둘러보고 Android가 기기에 비밀번호를 저장하는 방법에 대한 정보를 찾지 못했습니다. 특히 Gmail 비밀번호. Android가 암호를 암호화하고 저장하는 방법을 배우고 싶습니다. 사용하는 키와이 키의 위치 및 사용하는 암호화 알고리즘
주변을 둘러보고 Android가 기기에 비밀번호를 저장하는 방법에 대한 정보를 찾지 못했습니다. 특히 Gmail 비밀번호. Android가 암호를 암호화하고 저장하는 방법을 배우고 싶습니다. 사용하는 키와이 키의 위치 및 사용하는 암호화 알고리즘
답변:
Gmail의 공식 앱 은 기기에 비밀번호를 저장 하지 않습니다 . 이 앱을 사용하면 비밀번호가 100 % 안전합니다.
작동 방식은 다음과 같습니다 . 비밀번호는 Google 인증 서버에서 처음으로 만 사용됩니다. 인증에 성공하면 파일이 일반 텍스트 Auth Token
로 accounts.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은 안전하지 않습니다.
내장 이메일 애플리케이션과 함께 사용되는 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 비밀번호 데이터 에서이 토론을 수행 할 수도 있습니다 .
accounts.db
파일이 됩니다 이외의 계정으로 읽을으로부터 보호 system
.