รหัสผ่าน Gmail เก็บไว้ใน Android อย่างไรและที่ไหน


37

ฉันได้ดูไปรอบ ๆ และไม่พบข้อมูลเกี่ยวกับวิธีการจัดการ Android ในการจัดเก็บรหัสผ่านบนอุปกรณ์ โดยเฉพาะรหัสผ่าน Gmail ฉันต้องการเรียนรู้วิธีที่ Android เข้ารหัสและจัดเก็บรหัสผ่านหรือไม่ มันใช้คีย์อะไรและจะเก็บคีย์นี้ไว้ที่ใดและใช้อัลกอริธึมการเข้ารหัสใด


1
ทำไมรหัสผ่านที่จัดเก็บควรถูกเข้ารหัสด้วยกุญแจ ซึ่งหมายความว่าจะต้องป้อนรหัสทุกครั้งที่ต้องการรหัสผ่านจากนั้นคุณจะไม่สามารถเก็บรหัสผ่านและป้อนทุกครั้งได้
Flow

อืม, ปุ่มอาจเป็นอุปกรณ์เฉพาะที่ได้รับจาก IMEI ของโทรศัพท์หรือบางอย่าง ซึ่งหมายความว่าซอฟต์แวร์สามารถรับรหัสได้โดยไม่ต้องให้ผู้ใช้พิมพ์ทุกครั้ง
asudhak

1
อะไรทำให้ชิ้นส่วนซอฟต์แวร์อื่นรันบนโทรศัพท์ไม่ได้ วิธีนี้ไม่เพิ่มความปลอดภัยอีกชั้น
Flow

คำตอบ:


36

แอปอย่างเป็นทางการของ Gmail ไม่ได้จัดเก็บรหัสผ่านไว้ในอุปกรณ์ของคุณ รหัสผ่านของคุณปลอดภัย 100% หากคุณใช้แอพนี้

นี่คือวิธีการทำงาน:รหัสผ่านถูกใช้โดยเซิร์ฟเวอร์การตรวจสอบความถูกต้องของ Google เป็นครั้งแรกเท่านั้น หลังจากการตรวจสอบสิทธิ์สำเร็จครั้งแรกAuth Tokenจะมีการดาวน์โหลดไปยังอุปกรณ์ที่เก็บไว้ในaccounts.dbไฟล์เป็นข้อความธรรมดา สำหรับการเข้าสู่ระบบที่ตามมาทั้งหมดนี้Auth Tokenจะใช้ไม่ใช่รหัสผ่านเดิมของคุณ
ดังนั้นหากอุปกรณ์ของคุณถูกขโมยทุกคนสามารถได้รับAuth Tokenซึ่งจะไม่ถูกต้องเมื่อคุณเปลี่ยนรหัสผ่าน ดังนั้นคุณจะอยู่ในคำสั่งที่ดีที่สุด
เพื่อความปลอดภัยขั้นสูงสุดฉันขอแนะนำให้คุณเปิดใช้2-Factor Authenticationงานและสร้างDevice Specific Passwordสำหรับอุปกรณ์ของคุณ หลังจากสูญเสียอุปกรณ์สิ่งที่คุณต้องทำก็คือปิดการใช้งานอุปกรณ์นั้น คุณไม่จำเป็นต้องเปลี่ยนรหัสผ่านหลักด้วยซ้ำ

หมายเหตุ:สิ่งเหล่านี้ไม่เป็นจริงหากคุณใช้แอพอีเมลบุคคลที่สามสำหรับ Gmail ได้แก่ แอปอีเมลสต็อกจดหมาย K-9 ฯลฯ โปรโตคอล IMAP หรือ POP ต้องใช้รหัสผ่านเดิมเพื่อตรวจสอบผู้ใช้ทุกครั้ง ดังนั้นจะต้องมีรหัสผ่านธรรมดาสำหรับแอปอีเมลก่อนที่จะส่งไปยังเซิร์ฟเวอร์ ดังนั้นแอปอีเมลส่วนใหญ่จึงจัดเก็บรหัสผ่านเป็นข้อความล้วน (การแฮช / การเข้ารหัสไม่มีประโยชน์เพราะคีย์การแฮช / การเข้ารหัสจะต้องเก็บไว้ในเครื่อง) ในกรณีนี้ฉันขอแนะนำให้คุณเปิดใช้2-Factor Authenticationงานและสร้างDevice Specific Passwordสำหรับอุปกรณ์ของคุณ หลังจากสูญเสียอุปกรณ์สิ่งที่คุณต้องทำก็คือปิดการใช้งานอุปกรณ์นั้น

อัปเดต: ใน
ทางเทคนิคเป็นไปได้ที่จะเก็บรหัสผ่านไว้ในรูปแบบเข้ารหัส / แฮชโดยไม่ต้องมีคีย์เข้ารหัส / คีย์แฮชในข้อความธรรมดาในเครื่อง ขอบคุณ @JFSebastian ที่ชี้ให้เห็น น่าเสียดายที่การใช้งานดังกล่าวสำหรับ Android ยังไม่สามารถใช้งานได้ เริ่มต้น ICS Android ให้KeyChain APIโดยที่แอพสามารถเก็บรหัสผ่านไว้ในรูปแบบที่ปลอดภัย แอพที่ใช้ KeyChain API นั้นหายาก แต่แอพอีเมลสต็อกใช้งานได้ (ขอบคุณ @wawa สำหรับข้อมูลนี้) ดังนั้นรหัสผ่านของคุณจะปลอดภัยกับแอพอีเมลหุ้นตราบใดที่หน้าจอของคุณถูกล็อค โปรดจำไว้ว่า KeyChain ไม่ปลอดภัยหากอุปกรณ์ถูกรูทและไม่พร้อมใช้งานในอุปกรณ์ pre-ICS


6
@JF Sebastian: แม้ว่าคุณจะเชื่อมั่นในตัวบุคคลที่สามที่เก็บรหัสผ่านของคุณอย่างสมบูรณ์ แต่ก็มีความปลอดภัยเพียงเล็กน้อยกว่าการจัดเก็บรหัสผ่านไว้ในอุปกรณ์ของตัวเอง อุปกรณ์ยังจำเป็นต้องสามารถดึงข้อความธรรมดาของรหัสผ่านจากที่เก็บข้อมูลบนคลาวด์และอุปกรณ์ยังต้องทำการแคชรหัสผ่านในเครื่องเนื่องจากคุณไม่ต้องการเชื่อมต่อดองเกิลของคุณทุกครั้งที่คุณเข้าไปในอุโมงค์หรือพื้นที่ด้วย การรับอ่อนแอ สิ่งที่แย่ที่สุดที่ต้องทำในการรักษาความปลอดภัยคือการให้ความปลอดภัยที่ผิดพลาด
Lie Ryan

4
@JFSebastian: โดยสรุปการพิสูจน์ตัวตนวิธีที่ปลอดภัยอย่างแท้จริงเพียงอย่างเดียวคือทำสิ่งที่ Google ทำกับแอป Gmail เช่นใช้รูปแบบการตรวจสอบสิทธิ์ที่ไม่ได้มาตรฐานด้วยโทเค็นรับรองความถูกต้อง แม้ว่าใครบางคนพยายามขโมยโทเค็น auth ของคุณคุณสามารถทำให้โทเค็นจากระยะไกลเป็นโมฆะและคุณไม่จำเป็นต้องเปลี่ยนรหัสผ่านของคุณเพราะรหัสผ่านรหัสผ่านก็ไม่เคยทำลาย วิธีที่ปลอดภัยอีกวิธีคือใช้ดองเกิลโดยไม่ต้องใช้เซสชัน ดีคุณรู้ว่าเกิดอะไรขึ้นเมื่อคุณทำเช่นนั้นผู้ใช้ของคุณจะปล่อยให้ดองเกิลที่แนบมาอย่างถาวร
โกหก Ryan

5
@JFSebastian: ฉันคิดว่าคุณไม่มีจุด การเข้ารหัสรหัสผ่านนั้นไม่ได้ปลอดภัยกว่าการเก็บไว้ในรูปแบบข้อความล้วน ๆ แม้แต่นิดเดียว ผู้โจมตีที่จัดการเพื่อคัดลอก accounts.db สามารถคัดลอกคีย์ถอดรหัสพร้อมกับมัน สิ่งเดียวที่การเข้ารหัสให้คุณคือความปลอดภัยที่ผิดพลาดซึ่งเลวร้ายยิ่งกว่าความปลอดภัย ใช่มีวิธีแก้ปัญหาที่ดีกว่าการจัดเก็บรหัสผ่านข้อความล้วน แต่ทั้งหมดนั้นต้องการการเปลี่ยนแปลงโพรโทคอลอีเมลดังนั้นเราจึงต้องอยู่กับสิ่งที่เรามีอยู่ในปัจจุบัน หรือทำอย่างถูกวิธีในแบบที่ไม่ได้มาตรฐานเหมือนที่ Gmail ทำ
โกหก Ryan

3
@JFSebastian บริการพวงกุญแจแอปเปิ้ลหรือหนึ่งที่ให้บริการโดยเคอร์เนล Linux ไม่ได้เป็นตัวเลือกที่ปลอดภัยมากขึ้น รหัสผ่านยังคงค้างอยู่ในหน่วยความจำและหากพวงกุญแจถูกปลดล็อคแม้จะไม่ได้เข้ารหัส ดังนั้นจึงเป็นเรื่องยากที่จะได้รับเพียงเล็กน้อยเท่านั้นเนื่องจากไฟล์ root นั้นสามารถอ่านได้อย่างเดียว Google ใช้วิธีแก้ปัญหาที่เป็นไปได้ที่ดีที่สุดโดยใช้โทเค็นการตรวจสอบความถูกต้องซึ่งสามารถทำให้ใช้งานไม่ได้ในกรณีที่อุปกรณ์ถูกบุกรุก ตัวเลือกที่ปลอดภัยมากขึ้นถัดไปคือการป้อนรหัสผ่านทุกครั้งหรือเพื่อหลีกเลี่ยงการใช้อีเมลเลย
Flow

4
@LieRyan ในฐานะของ ICS แอปอีเมลสต็อกจริง ๆ แล้วใช้ KeyStore api ไม่ใช่ข้อความธรรมดา android-developers.blogspot.com/2012/03/…
Wesley Wiser

12

รหัสผ่าน Android ที่ใช้กับแอปพลิเคชันอีเมลในตัวจะถูกเก็บไว้ในรูปแบบข้อความธรรมดาภายในฐานข้อมูล SQLite นี้เป็นในทางตรงกันข้ามกับGmailแอพลิเคชันที่ใช้การตรวจสอบสิทธิ์ราชสกุลที่อธิบายไว้ในคำตอบของชิน Sekhar

สำหรับ Jelly Bean ตำแหน่งฐานข้อมูลคือ:

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

ตำแหน่งด้านบนจะแตกต่างกันไปตามรุ่น Android

ตำแหน่งบนอุปกรณ์ที่ไม่ได้รูทนี้จะปลอดภัยและได้รับการปกป้องโดยระบบปฏิบัติการ
บนอุปกรณ์ที่รูทแล้วผู้ใช้ได้ทำการถอดรหัสความปลอดภัยของตัวเองแล้วและแม้ว่ามันจะไม่ได้อยู่ในรูปแบบข้อความธรรมดา แต่ก็ยังมีความสำคัญในการถอดรหัสเนื่องจากคีย์ต้องมีอยู่ในอุปกรณ์เพื่อทำสิ่งนั้น

สมาชิกจากทีมพัฒนา Android โพสต์คำอธิบายว่าจนถึงวันนี้ยังคงใช้:

ตอนนี้เกี่ยวกับข้อกังวลนี้ สิ่งแรกที่ต้องทำความกระจ่างคือแอพ Email รองรับโปรโตคอลสี่โปรโตคอล ได้แก่ POP3, IMAP, SMTP และ Exchange ActiveSync และมีข้อยกเว้นที่ จำกัด น้อยมากซึ่งทั้งหมดนี้เป็นโปรโตคอลเก่าที่ต้องการไคลเอนต์แสดงรหัสผ่านไปยังเซิร์ฟเวอร์ ในทุกการเชื่อมต่อ โปรโตคอลเหล่านี้กำหนดให้เราเก็บรหัสผ่านไว้นานเท่าที่คุณต้องการใช้บัญชีในอุปกรณ์ โปรโตคอลที่ใหม่กว่าไม่ได้ทำสิ่งนี้ - นี่คือสาเหตุที่บางบทความขัดแย้งกับ Gmail เช่น โปรโตคอลที่ใหม่กว่าอนุญาตให้ไคลเอ็นต์ใช้รหัสผ่านหนึ่งครั้งเพื่อสร้างโทเค็นบันทึกโทเค็นและทิ้งรหัสผ่าน

ฉันขอให้คุณตรวจสอบบทความที่เชื่อมโยงกับในความคิดเห็นที่ 38ซึ่งเขียนได้ดีและให้ข้อมูลค่อนข้างมาก มันให้พื้นหลังที่ดีมากในความแตกต่างระหว่างรหัสผ่าน "ปิดบัง" และทำให้พวกเขา "ปลอดภัย" อย่างแท้จริง เพียงปิดบังรหัสผ่านของคุณ (เช่น base64) หรือเข้ารหัสด้วยคีย์ที่เก็บไว้ที่อื่นจะไม่ทำให้รหัสผ่านหรือข้อมูลของคุณปลอดภัยยิ่งขึ้น ผู้โจมตีจะสามารถเรียกคืนได้

(โดยเฉพาะมีการอ้างสิทธิ์บางอย่างเกี่ยวกับไคลเอนต์อีเมลอื่น ๆ ที่ไม่ได้จัดเก็บรหัสผ่านใน cleartext แม้ในกรณีที่เป็นจริงก็ไม่ได้ระบุว่ารหัสผ่านนั้นปลอดภัยมากขึ้นการทดสอบง่ายๆ: หากคุณสามารถบูทขึ้น อุปกรณ์และมันจะเริ่มรับอีเมลในบัญชีที่กำหนดค่าของคุณจากนั้นรหัสผ่านจะไม่ปลอดภัยอย่างแท้จริงพวกเขาจะสับสนหรือเข้ารหัสด้วยคีย์อื่นที่เก็บไว้ที่อื่น)

Aditionally เนื่องจากปัญหานี้ดูเหมือนจะรบกวนผู้ใช้ Android หลายท่านยังสามารถทำตามการสนทนานี้ที่Slashdot - Android รหัสผ่านข้อมูลที่เก็บไว้ในข้อความธรรมดา


ว้าว. นั่นทำให้ฉันประหลาดใจ ฉันไม่ได้ตระหนักถึงความจริงที่ว่ามันถูกเก็บไว้ในข้อความธรรมดา ลืมการรูทหรือไม่รูท หากอุปกรณ์ของคุณถูกขโมยบุคคลไร้ยางอายสามารถรับข้อมูลประจำตัวของคุณได้อย่างง่ายดายแม้ว่าคุณจะล็อคโทรศัพท์ด้วยรหัสความปลอดภัย ด้วยข้อเท็จจริงนี้คุณยังทราบถึงกลไกการเข้ารหัสดิสก์แบบกว้าง ๆ
asudhak

1
ไม่ว่าพวกเขาจะเป็นอะไรพวกเขาเป็นสิ่งที่สามารถใช้เพื่อเข้าถึงบัญชี แต่ @SachinShekhar ที่accounts.dbไฟล์จะถูกsystemป้องกันจากการอ่านโดยบัญชีอื่นที่ไม่ใช่
Wyzard

1
Zuul ฉันขอขอบคุณที่คุณพยายามตอบ แต่ฉันคิดว่าคำตอบนี้ทำให้เข้าใจผิดอย่างมาก หากคุณดำเนินการตามคำพูดที่คุณยกมาอีกครั้งแอป Gmail จะไม่จัดเก็บรหัสผ่าน - แก้ไขตรวจสอบ @SachinShekhar ตอบด้วย
roxan

2
@asudhak หากแอปใดใช้รหัสผ่านดั้งเดิมก็ไม่มีทางป้องกันได้ แฮกเกอร์สามารถถอดรหัสสตริงที่เข้ารหัสจาก accounts.db หลังจากค้นหาคีย์การเข้ารหัส / hashing ซึ่งจำเป็นต้องเก็บไว้ในเครื่องเนื่องจากแอปอีเมลจะต้องใช้คีย์นี้ในการรวบรวมรหัสผ่านดั้งเดิมก่อนที่จะส่งไปยังเซิร์ฟเวอร์
Android Quesito

2
@roxan ฉันไม่พบสิ่งใดที่ชี้ไปยังรหัสผ่านที่ไม่ถูกจัดเก็บโดยแอป Gmail คุณสามารถให้ใบเสนอราคาหรือลิงค์ได้หรือไม่?
Flow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.