Google Chrome เก็บรหัสผ่านอย่างไร


28

พวกเขาเข้ารหัสในดิสก์หรือไม่ อย่างไร? ตัวอย่างเช่นพวกเขาปลอดภัยหรือไม่ในกรณีที่มีคนกำลังบูทจาก Live CD และติดตั้งฮาร์ดดิสก์

คีย์การเข้ารหัสสร้างขึ้นได้อย่างไร? Windows และ Linux แตกต่างกันหรือไม่?


โปรดทราบว่าGoogle ปฏิเสธที่จะใช้รหัสผ่านหลัก (เช่นเดียวกับ Firefox) เพราะมันจะสร้างความปลอดภัยที่ผิดพลาดและมีเครื่องมือเช่นChromepassที่สามารถถอดรหัสฐานข้อมูลรหัสผ่านได้หากผู้ใช้ลงชื่อเข้าใช้
Dan Dascalescu

เกี่ยวข้อง: askubuntu.com/q/525019/472560
dskrvk

คำตอบ:


25

คุณดูเหมือนจะสงสัยโดยเฉพาะเกี่ยวกับคีย์ที่ใช้ในการเข้ารหัสรหัสผ่านใน Chrome

คำตอบคือ:

รหัสผ่านทุกรหัสจะถูกเข้ารหัสด้วยรหัสสุ่มที่แตกต่างกัน

จากนั้นรหัสผ่านที่เข้ารหัสจะถูกเก็บไว้ในไฟล์ฐานข้อมูล SQLite:

%LocalAppData%\Google\Chrome\User Data\Default\Login Data

คุณสามารถใช้เบราว์เซอร์ฐานข้อมูลSQLiteหรือSQLite Maestroเพื่อดูได้ นี่เป็นตัวอย่างจากLogin Dataไฟล์ของฉัน:

origin_url                                username_value               password_value
========================================  ==============               ========================
http://thepiratebay.org/register          JolineBlomqvist@example.com  01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

คุณจะสังเกตเห็นว่ารหัสผ่านเป็นหยดข้อมูลที่เข้ารหัส อัลกอริทึมโดยประมาณเพื่อเข้ารหัสรหัสผ่านใหม่คือ:

  • สร้างคีย์เซสชันแบบสุ่มใหม่
  • เข้ารหัสรหัสผ่านด้วยคีย์เซสชัน
  • เข้ารหัสรหัสเซสชันด้วยรหัสสาธารณะ RSA ของผู้ใช้
  • สร้าง Message Authentication Code (HMAC) สำหรับข้อมูลที่เข้ารหัส
  • ต่อเชื่อมเซสชันคีย์เข้ารหัสรหัสผ่านที่เข้ารหัสและ MAC

และ Chrome จะบันทึกหยดนั้นลงในฐานข้อมูล SQLite

แต่เพื่อตอบคำถามของคุณ: รหัสการเข้ารหัสมาจากที่ใด

รหัสผ่านแต่ละรหัสจะถูกเข้ารหัสด้วยรหัสที่สร้างแบบสุ่มแตกต่างกัน

รายละเอียดทางเทคนิค

แน่นอนฉันทิ้งรายละเอียดทางเทคนิค Chrome ไม่ได้เข้ารหัสรหัสผ่านของคุณเอง Chrome ไม่มีคีย์หลักที่ใช้ในการเข้ารหัสอะไร Chrome ไม่ทำการเข้ารหัส Windows ทำ

มีฟังก์ชั่น Windows CryptProtectDataซึ่งใช้ในการเข้ารหัสข้อมูลใด ๆ ที่คุณต้องการ รายละเอียดของการโทรมันมีความสำคัญน้อยกว่า แต่ถ้าฉันประดิษฐ์ภาษาหลอกที่ค่อนข้างสามารถถอดรหัสได้ในขณะที่การเขียนโปรแกรมไม่ทำงานสาย Chrome จะเรียก:

CryptProtectData(
      { cbData: 28, pbData: "correct battery horse staple" },
      "The password for superuser.com and all the glee therein",
      null, //optional entropy
      null, //reserved
      null, //prompt options
      0, //flags
      { cbData:   pbData:  }); //where the encrypted data will go

ดังนั้นรหัสผ่าน:

  • ข้อความธรรมดา :correct battery horse staple
  • เข้ารหัสแล้ว :01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

คุณจะสังเกตเห็นว่าฉันไม่จำเป็นต้องให้รหัสผ่าน นั่นเป็นเพราะ Windows ดูแลทุกอย่าง ในที่สุด:

  • รหัสผ่านแบบสุ่มถูกสร้างขึ้นเพื่อเข้ารหัสรหัสผ่าน
  • รหัสผ่านนั้นถูกเข้ารหัสด้วยรหัสผ่านแบบสุ่ม
  • รหัสผ่านนั้นถูกเข้ารหัสด้วยรหัสผ่าน Windows ของคุณ

ดังนั้นวิธีเดียวที่ใครบางคนจะรู้รหัสผ่านของคุณคือถ้าพวกเขารู้รหัสผ่านของคุณ


โครเมี่ยมรู้ได้อย่างไรว่ากุญแจสามารถใช้เพื่อถอดรหัสรหัสผ่านที่เก็บไว้ได้อย่างไร
brunoais

1
@brunoais Chrome ไม่ทราบรหัสที่ใช้เข้ารหัสรหัสผ่าน Chrome ไม่ได้ถอดรหัส - Windows ทำ
Ian Boyd

อาโอเค. ดังนั้นหากโปรแกรมที่เป็นอันตรายเข้าสู่คอมพิวเตอร์รหัสผ่านก็สามารถใช้งานได้กับโปรแกรมนั้นใช่ไหม
brunoais

1
@brunoais เฉพาะเมื่อคุณพิมพ์รหัสผ่านของคุณ น่าเสียดายที่นี่เป็นข้อ จำกัด พื้นฐานของการเข้ารหัส: เมื่อข้อมูลถูกถอดรหัสมันจะถูกถอดรหัส
Ian Boyd

ขอบคุณ Chrome หยุดการจำรหัสผ่านของฉัน (มันยังคงมีไว้ให้บันทึก แต่ไม่เคยจำได้) ฉันคิดว่าฐานข้อมูลรหัสผ่านเสียหาย แก้ไขโดยการลบ%LocalAppData%\Google\Chrome\User Data\Default\Login Data
พันเอก Panic

8

รหัสผ่านจะถูกเข้ารหัสและเก็บไว้ในฐานข้อมูล SQLite:

ส่วนที่สำคัญคือที่นี่เป็นCryptProtectDataฟังก์ชัน Windows API สำหรับการเข้ารหัสข้อมูล ข้อมูลที่เข้ารหัสด้วยฟังก์ชั่นนี้ค่อนข้างแข็งแกร่ง สามารถถอดรหัสได้ในเครื่องเดียวกันและโดยผู้ใช้รายเดียวกันที่เข้ารหัสไว้ตั้งแต่แรก


แต่จะสร้างรหัสการเข้ารหัสได้อย่างไร ขึ้นอยู่กับสิ่งนี้ฉันจะพิจารณาว่าโครงการมีความปลอดภัยมากหรือน้อย แล้วลินุกซ์ล่ะ?
Óscar

@ Óscar: สำหรับ Windows ให้CryptProtectDataใช้ข้อมูลรับรอง Windows ของคุณ (ไม่ใช่รหัสผ่าน แต่เป็นข้อมูลอื่น ๆ ) เป็นคีย์ AFAIK เป็นฟังก์ชั่นเดียวกับที่ใช้ในการปกป้องใบรับรองข้อมูลรับรองเครือข่ายและทุกสิ่ง
grawity

3
@ Óscar: บนลินุกซ์ไม่ได้ทำอะไรEncryptor::EncryptString ดูเหมือนว่าจะมีรหัสสำหรับการใช้ GNOME Keyring และ KDE Wallet
grawity

แก้ไข. ใน Linux, KDE Wallet, GNOME Keyring หรือที่เก็บรหัสผ่านดั้งเดิมที่สนับสนุน (ซึ่งฉันลืมไปแล้ว) ใช้แทน
Michael Hampton

1
ดังนั้น ... ดูเหมือนว่าเป็นไปได้ที่จะมีแอปแยกต่างหากอีกอันที่โดยทั่วไปแล้วจะสอดรหัสผ่าน chrome ของคุณเนื่องจากคุณลงชื่อเข้าใช้แล้วและทำงานเหมือนคุณ
rogerdpack

4

มันคือ "เข้ารหัส" แต่เป็นการเข้ารหัสแบบย้อนกลับได้ Chrome ต้องส่งรหัสผ่านดิบไปยังเว็บไซต์ที่เก็บไว้ดังนั้นหาก Chrome สามารถถอดรหัสและใช้งานได้คนอื่น ๆ จึงสามารถทำได้ การจัดเก็บรหัสผ่านไม่ปลอดภัย 100%


แต่กุญแจเข้ารหัสคืออะไร?
Óscar

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

1
ไม่ แต่ถ้าคอมพิวเตอร์ของคุณถูกแย่งชิง / ติดเชื้อรหัสผ่านเบราว์เซอร์สามารถกู้คืนได้อย่างง่ายดายโดยที่คุณไม่สังเกตเห็น สิ่งที่ฉันชี้ให้เห็นอีกครั้งคือไม่มีที่เก็บรหัสผ่านที่ล้มเหลวได้ 100% สำหรับเบราว์เซอร์ ... เพียงแค่ตอบคำถามของคุณเกี่ยวกับความปลอดภัย
BloodPhilia

1
ไม่มี "รหัสผ่านหลัก" CryptProtectDataเป็น Windows API จริง ๆ แล้ว Windows ทำการเข้ารหัสและดึงข้อมูลทั้งหมดคีย์การเข้ารหัสขึ้นอยู่กับบัญชีผู้ใช้และระบบของคุณ
BloodPhilia

1
สิ่งนี้จะให้คำอธิบายผลงานของคุณ: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia


1

สำหรับ Mac นั้นเทียบเท่ากับฟังก์ชั่น CryptProtectData ใน Windows คือการเข้าถึงรหัสผ่านสำหรับ "Chrome Safe Storage" ใน Keychain X ของ Keychain

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.