FDE (การเข้ารหัสดิสก์แบบเต็ม) ทำงานอย่างรวดเร็วได้อย่างไร


13

ฉันอยากรู้ว่าการเข้ารหัสดิสก์เต็มรูปแบบของ Ubuntu ทำงานอย่างไรภายใต้ประทุน นี่คือตัวอย่าง:

พิจารณาสตริงต่อไปนี้เป็นเนื้อหาของดิสก์ทั้งหมด:

hello world

หลังจากใช้วิธีการเข้ารหัสบางอย่างแล้วมันจะมีลักษณะดังนี้:
(ฉันใช้ Caesar cipher กับการเปลี่ยน +1 สำหรับตัวอย่างนี้เช่น A → B; B → C ... )

ifmmp xpsme

อย่างที่ฉันเข้าใจเมื่อคอมพิวเตอร์ถูกปิดเนื้อหาของไดรฟ์จะเป็นสตริงด้านบน แต่เมื่อมันถูกเปิดใช้งานอีกครั้ง Ubuntu จำเป็นต้องมีเนื้อหาของมันที่จะกลับมาอีกครั้งhello worldเพื่อให้สามารถบู๊ตได้สำเร็จ

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

เป็นไปได้อย่างไร?

คำตอบ:


10

การเข้ารหัส AES / Rijndael โดยทั่วไปทำงานอย่างไร

หน้านี้มีความสนุกสนานA Stick Figure Guide ของ Advanced Encryption Standard (AES)ที่ดูเข้าใจง่ายแม้ว่าจะเป็นภาพ 50+ ตัวอย่างเช่นทั้งสองนี้:

ป้อนคำอธิบายรูปภาพที่นี่

และ

ป้อนคำอธิบายรูปภาพที่นี่

มันมากเกินไปที่จะทำซ้ำทั้งหมดที่นี่ แต่ถ้าคุณต้องมีภาพทั้งหมดในหนึ่งเดียวมันเป็นภาพนี้:

ป้อนคำอธิบายรูปภาพที่นี่


หรือมีคำอธิบายที่กระชับยิ่งขึ้นที่http://www.password-depot.com/know-how/blowfish_and_rijndael.htm

วิธีการเข้ารหัสลับ Rijndael ขึ้นอยู่กับการแทนที่การเปลี่ยนแปลงและการดำเนินการกับ xor ในหน่วยไบต์ วิธีมีลักษณะดังนี้:

  • จากคีย์ 128 บิต Rijndael สร้างคีย์ 10 บิตที่ละ 128 บิต
  • กุญแจเหล่านี้จะถูกวางไว้ในอาร์เรย์ 4x4
  • ข้อความธรรมดายังแบ่งเป็น 4x4 อาร์เรย์ (แต่ละ 128 บิต)
  • รายการข้อความล้วน 128 บิตแต่ละรายการประมวลผลใน 10 รอบ (10 รอบสำหรับ 128 บิตบิต, 12 สำหรับ 192, 14 สำหรับ 256)
  • หลังจากรอบที่ 10 รหัสถูกสร้างขึ้น
  • แต่ละไบต์จะถูกแทนที่ในกล่อง S และแทนที่ด้วยส่วนกลับของ GF (2 8)
  • จากนั้นจึงใช้มอดุลาร์ modulo-2 แบบบิตตามด้วยการดำเนินการ XOR ด้วย 63
  • เส้นของเมทริกซ์ถูกจัดเรียงแบบวนรอบ
  • คอลัมน์ของการคูณเมทริกซ์จะถูกสับเปลี่ยนบน GF (2 8)
  • คีย์ย่อยของแต่ละรอบจะถูกดำเนินการ XOR

ระดับความปลอดภัยของวิธีการเข้ารหัสนี้เพิ่มขึ้นหาก Rijndael ดำเนินการหลายครั้งด้วยคีย์ย่อยที่แตกต่างกัน


การเข้ารหัสดิสก์ทั้งหมดของ Ubuntu ทำงานอย่างไร

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

คู่มือ the_simple_computer ของการเข้ารหัสดิสก์เต็มรูปแบบกับ Ubuntu (อัปเดต 28 มิถุนายน 2558)กล่าวว่าเป็นเรื่องเกี่ยวกับวิธีการเข้ารหัสการติดตั้งเริ่มต้นของการทำงานและกล่าวว่าการบูตสองระบบจะไม่ทำงาน ต้องใช้ MBR ดังนั้น " หากคอมพิวเตอร์ของคุณมี UEFI, distro จะถูกติดตั้งในโหมด BIOS ดั้งเดิมดังนั้นคุณจึงไม่สามารถใช้ Secure Boot " และ " จะให้ขนาดการแลกเปลี่ยนเท่ากับ RAM ระบบของคุณ (มักไม่จำเป็น) และคุณ ไม่มีทางเลือกว่าจะใช้การเข้ารหัสชนิดใด "


การเข้ารหัสรวดเร็วแค่ไหน?

หากคุณเรียกใช้cryptsetup benchmarkมันจะทำการทดสอบและบอกคุณเกี่ยวกับความรวดเร็วของการเข้ารหัสเพียงอย่างเดียวให้ดูบรรทัด aes-xts เริ่มต้น (ปัจจุบัน):

#  Algorithm | Key |  Encryption |  Decryption
     aes-xts   256b    150.0 MiB/s    145.0 MiB/s

ความเร็วในการอ่านฮาร์ดไดรฟ์โดยเฉลี่ยอาจอยู่ที่ 80-160 MB / s ดังนั้นคุณจะไม่นานกว่าการอ่านปกติและเป็นไปได้ว่าภาคที่เพิ่งอ่านได้ถูกถอดรหัสไปแล้วในขณะที่คุณยังรอ ฮาร์ดไดรฟ์เพื่ออ่านเพิ่มเติม

SSD อาจเร็วกว่าหรืออาจ 200-550MB / s ดังนั้นคุณอาจสังเกตเห็น แต่การอ่านแบบสุ่มอาจช้าลงและฉันอ่านแล้วว่าความเร็ว SSD อาจช้าลงหลังจากใช้งาน (อาจเป็นเมื่อไดรฟ์เต็มอย่างสมบูรณ์และต้องเริ่มภาค "ลบ")

คอมพิวเตอร์จะเข้ารหัส / ถอดรหัสลับไดรฟ์ทั้งหมดได้อย่างไรในเวลาเพียงไม่กี่วินาที (ไม่ต้องบูตหรือปิดตัวเองนานกว่า)

ไม่จำเป็นต้องถอดรหัสทุกอย่างก่อน การเข้ารหัส (LUKS) ทำงานบนบล็อกของข้อมูลสามารถสุ่มถอดรหัสบล็อกใด ๆ และทำหน้าที่เหมือนเลเยอร์ระหว่างข้อมูลที่เข้ารหัสของไดรฟ์และสิ่งที่ระบบไฟล์เห็น

เมื่อระบบไฟล์ต้องการเห็นกลุ่มของข้อมูลใด ๆ LUKS จะถอดรหัสลับที่บล็อกก่อนจากนั้นให้ข้อมูลที่ถอดรหัสไปยังระบบแฟ้ม คุณรอให้ไดรฟ์อ่านบล็อกข้อมูล (เช่นเดียวกับที่ไม่ต้องใช้การเข้ารหัส) และมีความล่าช้าเป็นพิเศษสำหรับการถอดรหัสของบล็อกเดียว (หรือบล็อกน้อย) ของข้อมูล - และหากการถอดรหัสเร็วกว่าไดรฟ์ สามารถอ่านได้การถอดรหัสอาจเสร็จสิ้นก่อนที่ไดรฟ์จะอ่านบล็อกข้อมูลต่อไป

ดังนั้นเช่นเดียวกับระบบไฟล์ปกติไม่จำเป็นต้องอ่านไดรฟ์ทั้งหมดเพื่ออ่านไฟล์เมื่อมีการเพิ่มการเข้ารหัสมันไม่จำเป็นต้องอ่านทั้งไดรฟ์และมันไม่ได้ทำให้ช้าลงมากนัก

ข้อมูลในฮาร์ดไดรฟ์ได้รับการเข้ารหัสอยู่เสมอดังนั้นจึงไม่มีอะไรต้องทำเมื่อปิดเครื่องยกเว้นลืมกุญแจ


@Hewbot ฉันได้เพิ่มข้อมูล (ที่ด้านล่าง) เกี่ยวกับความเร็วในการถอดรหัสสำหรับไฟล์และบล็อกเนื่องจากชื่อของ Q ของคุณถูกแก้ไขเพื่อเพิ่ม"เร็วจัง?" (ชื่อยังคงเป็นสิ่งที่คุณต้องการถาม?)
Xen2050

3

นี่จะเป็นการทำให้เข้าใจง่าย แต่ฉันจะพยายามผ่านกระบวนการเข้าถึงไฟล์บนระบบไฟล์ที่เข้ารหัส

ตัวอย่างเช่นสมมุติว่าจุดเริ่มต้นของระบบไฟล์ที่เข้ารหัสนั้นมีตารางไฟล์ /foo.barสมมติว่าเราต้องการที่จะอ่าน สิ่งแรกที่เราทำคืออ่านจุดเริ่มต้นของพาร์ติชั่นถอดรหัสมันแล้วมองหาไฟล์ที่เราต้องการ สมมติว่ามันบอกว่าไฟล์เริ่มต้นที่ 0x10000000 ไบต์ เมื่อต้องการอ่านเราจะเริ่มอ่านจากดิสก์ที่ตำแหน่งนั้นและถอดรหัสมัน ในทำนองเดียวกันในการเขียนเราสามารถเข้ารหัสเนื้อหาใหม่และเขียนในตำแหน่งใหม่นั้น

หวังว่าสิ่งนี้จะช่วยขจัดความสับสนในกระบวนการ


1
ฉันคิดว่านี่เป็นคำตอบที่จริง ๆ แล้วตอบคำถามของ OP - ความเข้าใจผิดของเขา / เธอคือการเข้ารหัส / ถอดรหัสลับทั้งไดรฟ์ไม่ใช่แค่บิตที่อ่าน / เขียนตามที่ใช้
ใครบางคนที่ใดที่หนึ่งสนับสนุน Monica

2

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

คุณสามารถตรวจสอบผลกระทบด้านประสิทธิภาพได้ที่นี่และมีความคุ้มค่าสำหรับความปลอดภัยที่เพิ่ม


1
นอกจากนี้ข้อมูลในดิสก์จะถูกเข้ารหัส / ถอดรหัสตามความจำเป็นเท่านั้น ตัวอย่างเช่นในการบูตสคริปต์เริ่มต้นเท่านั้นข้อมูลผู้ใช้ DM / WE executables และอื่น ๆ จะถูกถอดรหัส
Nick Mertin

CPU จำนวนมากไม่รองรับ AES และการเข้ารหัสของ Ubuntu ยังคงทำงานอยู่แม้ว่าจะทำเช่นนี้ แต่ก็ยังไม่ตอบคำถามเกี่ยวกับวิธีการเข้ารหัสของ Ubuntu
Xen2050

@shsh ถ้าฉันใช้คอมพิวเตอร์เครื่องเก่ามันคงเป็นไปไม่ได้ที่จะใช้ FDE เพราะจะไม่มีการใช้งานฮาร์ดแวร์ ฉันควรเข้าใจหรือไม่ว่าดิสก์ทั้งหมดได้รับการเข้ารหัสและถอดรหัสเมื่อบูตและปิดเครื่อง?
Hewbot

@ MagikM18 ถ้าเป็นเช่นนั้นอัลกอริทึมจะรู้ได้อย่างไรว่าจะเริ่มถอดรหัสใน "string" ทั้งหมดได้อย่างไร? ฉันหมายถึงถ้าฉันเปิดเอกสารจะรู้ได้อย่างไรว่า "พิกัด" มันอยู่ที่ไหน?
Hewbot

@Hewbot แบบเดียวกับที่มันจะทำต่อไป; โดยทั่วไปการเข้ารหัสเป็นเลเยอร์ระหว่างฟิสิคัลดิสก์และ daemon ระบบไฟล์ ดังนั้นเมื่อมันร้องขอให้อ่านข้อมูลจากดิสก์มันจะถูกอ่านแล้วถอดรหัส ดังนั้นเช่นเดียวกับใน fs ปกติมันจะอ่านตารางไฟล์ก่อนค้นหาตำแหน่งเริ่มต้นของไฟล์จากนั้นอ่านจากที่นั่น
Nick Mertin

0

คอมพิวเตอร์สมัยใหม่สามารถใช้งานได้หลายพันล้านต่อวินาทีดังนั้นมันจึงไม่แปลกใจเลยที่การเข้ารหัสและถอดรหัสนั้นรวดเร็ว

นี่คือวิธีที่ฉันจะจัดอันดับอย่างสังหรณ์ใจว่าคอมพิวเตอร์กำลังทำงานอย่างรวดเร็วอยู่ที่:

  1. ทำการคำนวณภายในหน่วยความจำ (โดยเฉพาะหน่วยความจำ L1 และ L2) รวดเร็วมาก
  2. การอ่านจากที่จัดเก็บในตัวเครื่องรวดเร็วน้อยกว่า (โซลิดสเตตดิสก์เร็วกว่าฮาร์ดดิสก์)
  3. อ่านจากเครือข่ายแม้น้อยเร็ว

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

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

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


1
ฉันไม่สามารถหาวิธีที่คำตอบนี้เป็นไปได้ เพียงแค่คัดลอก 1TB ด้วย USB 3.0 ใช้เวลาสักครู่ถ้าต้องมีกระบวนการระดับกลาง (การถอดรหัส) มันอาจใช้เวลาสักครู่ในการบูตคอมพิวเตอร์ด้วย FDE
Hewbot

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