Làm thế nào để FDE (Mã hóa toàn bộ đĩa) hoạt động nhanh như vậy?


12

Tôi tò mò về cách mã hóa toàn bộ đĩa của Ubuntu hoạt động dưới mui xe. Đây là một ví dụ:

Xem xét chuỗi sau đây là tất cả nội dung của đĩa:

hello world

Sau khi áp dụng một số loại phương thức mã hóa, nó sẽ trông giống như thế này:
(Tôi đã sử dụng mật mã Caesar với độ dịch chuyển +1 cho ví dụ này, ví dụ A → B; B → C ...)

ifmmp xpsme

Theo tôi hiểu, khi tắt máy tính, nội dung của ổ đĩa sẽ là chuỗi ở trên. Nhưng khi nó được bật lại, Ubuntu cần phải quay lại nội dung để hello worldkhởi động thành công.

Điều tôi không thực sự nhận được là trong thế giới thực , nội dung của đĩa còn nhiều hơn thế và thuật toán mã hóa phức tạp hơn và tôi cảm thấy khó khăn cho máy tính để mã hóa / giải mã hoàn toàn tất cả chỉ trong vài giây (không mất nhiều thời gian để khởi động hoặc tắt).

Sao có thể như thế được?

Câu trả lời:


10

Mã hóa AES / Rijndael trong công việc chung như thế nào?

Trang này có Hướng dẫn hình que thú vị về Tiêu chuẩn mã hóa nâng cao (AES) trông dễ hiểu, mặc dù có vẻ là hơn 50 hình ảnh, ví dụ như hai hình ảnh này:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Quá nhiều để sao chép tất cả ở đây, nhưng nếu bạn phải có một hình ảnh tất cả trong một thì đây là:

nhập mô tả hình ảnh ở đây


Hoặc, có một lời giải thích nhỏ gọn hơn tại http://www.password-depot.com/ledge-how/blowfish_and_rijndael.htmlm

Phương pháp mã hóa Rijndael dựa trên việc thay thế, thay đổi và thực hiện các thao tác xor trên byte. Phương thức này trông như thế này:

  • Từ khóa 128 bit, Rijndael tạo ra 10 khóa 128 bit mỗi khóa.
  • Các phím này được đặt vào mảng 4 x 4.
  • Văn bản đơn giản cũng được chia thành các mảng 4 x 4 (mỗi bit 128 bit).
  • Mỗi mục văn bản thuần 128 bit được xử lý trong 10 vòng (10 vòng cho khóa 128 bit, 12 cho 192, 14 cho 256).
  • Sau vòng thứ 10, mã được tạo.
  • Mỗi byte đơn được thay thế trong hộp S và được thay thế bằng đối ứng trên GF (2 8).
  • Sau đó, một ma trận modulo-2 khôn ngoan được áp dụng, tiếp theo là thao tác XOR với 63.
  • Các dòng của ma trận được sắp xếp theo chu kỳ.
  • Các cột của phép nhân ma trận được hoán đổi cho nhau trên GF (2 8).
  • Các khóa con của mỗi vòng phải chịu một thao tác XOR.

Mức độ bảo mật của phương thức mã hóa này tăng lên nếu Rijndael được thực hiện nhiều lần với các khóa con khác nhau.


Mã hóa toàn bộ đĩa của Ubuntu hoạt động như thế nào?

Tôi tin rằng nó hoạt động bằng cách mã hóa phân vùng bằng LUKS (cài đặt mặc định với AES), sau đó đặt một số khối lượng lên nó bằng LVM (như /, trao đổi), và giải mã và gắn kết chúng khi khởi động sau khi bạn nhập cụm mật khẩu. Và có một phân vùng khởi động thông thường (không được mã hóa) khởi động đủ để yêu cầu cụm mật khẩu.

Hướng dẫn về mã hóa toàn bộ ổ đĩa với Ubuntu (Cập nhật ngày 28 tháng 6 năm 2015) của the_simple_computer nói rằng đó là cách thức hoạt động của mã hóa trình cài đặt mặc định và đề cập đến việc khởi động kép sẽ không hoạt động (ít nhất là không hoạt động), ổ đĩa phải sử dụng MBR để " nếu máy tính của bạn có UEFI, bản phân phối sẽ được cài đặt ở chế độ BIOS kế thừa để bạn không thể sử dụng Secure Boot " và " cũng cung cấp cho bạn kích thước trao đổi bằng với RAM hệ thống của bạn (thường không cần thiết) và bạn không có lựa chọn nào về loại mã hóa được sử dụng. "


Mã hóa nhanh như thế nào?

Nếu bạn chạy, cryptsetup benchmarknó sẽ chạy thử nghiệm và cho bạn biết tốc độ mã hóa một mình, hãy xem các dòng aes-xts mặc định (hiện tại):

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

Tốc độ đọc ổ cứng trung bình có thể là 80-160 MB / giây, do đó bạn sẽ không lâu hơn tốc độ đọc thông thường và có thể các khu vực vừa đọc đã được giải mã trong khi bạn vẫn đang chờ ổ cứng để đọc thêm.

Một ổ SSD có thể có thể nhanh hơn, có thể 200-550 MB / giây, vì vậy bạn có thể nhận thấy nó. Tuy nhiên, việc đọc ngẫu nhiên có thể chậm hơn và tôi đã đọc rằng tốc độ SSD có thể chậm lại sau khi sử dụng (có thể khi ổ đĩa bị đầy hoàn toàn và nó phải bắt đầu "xóa" các ngành?)

Làm thế nào máy tính có thể mã hóa / giải mã hoàn toàn tất cả các ổ đĩa chỉ trong vài giây (không mất nhiều thời gian hơn để khởi động hoặc tắt)?

Nó không phải giải mã mọi thứ trước. Mã hóa (LUKS) hoạt động trên các khối dữ liệu , có thể giải mã ngẫu nhiên bất kỳ khối nào và hoạt động như một lớp giữa dữ liệu được mã hóa của ổ đĩa và những gì hệ thống tập tin nhìn thấy.

Khi hệ thống tệp muốn xem bất kỳ khối dữ liệu nào, LUKS sẽ giải mã khối đó trước và sau đó cung cấp dữ liệu được giải mã cho hệ thống tệp. Trước tiên, bạn đợi ổ đĩa đọc khối dữ liệu (giống như không sử dụng mã hóa) và chỉ có một độ trễ thêm cho việc giải mã khối đơn (hoặc vài khối) dữ liệu đó - và nếu việc giải mã nhanh hơn ổ đĩa có thể đọc, quá trình giải mã thể kết thúc trước khi ổ đĩa đọc khối dữ liệu tiếp theo.

Vì vậy, giống như một hệ thống tệp thông thường không cần phải đọc toàn bộ ổ đĩa để đọc tệp, khi mã hóa được thêm vào, nó cũng không cần phải đọc toàn bộ ổ đĩa, và nó không làm mọi thứ chậm hơn nhiều .

Dữ liệu trên ổ cứng luôn được mã hóa , vì vậy không có gì phải làm khi tắt máy ngoại trừ việc quên chìa khóa.


@Hewbot Tôi đã thêm một số thông tin (ở dưới cùng) về tốc độ giải mã cho các tệp & khối, vì tiêu đề Q của bạn đã được chỉnh sửa để thêm "nhanh như vậy?" (tiêu đề có còn là những gì bạn muốn hỏi không?)
Xen2050

3

Đây sẽ là một chút đơn giản hóa, nhưng tôi sẽ cố gắng trải qua quá trình truy cập một tệp trên một hệ thống tệp được mã hóa.

Ví dụ: giả sử phần đầu của hệ thống tệp được mã hóa có bảng tệp; hãy nói rằng chúng tôi muốn đọc /foo.bar. Vì vậy, điều đầu tiên chúng ta làm là đọc phần đầu của phân vùng, giải mã nó và xem qua tệp chúng ta muốn; giả sử nó nói rằng tệp bắt đầu ở 0x10000000 byte. Vì vậy, để đọc, chúng tôi bắt đầu đọc từ đĩa tại vị trí đó và giải mã nó; tương tự, để viết, chúng ta có thể mã hóa nội dung mới và viết chúng tại vị trí mới đó.

Hy vọng rằng điều này sẽ giúp làm sáng tỏ bất kỳ sự nhầm lẫn trong quá trình.


1
Tôi nghĩ rằng đây là câu trả lời thực sự trả lời câu hỏi của OP - quan niệm sai lầm của anh ấy / cô ấy là nó phải mã hóa / giải mã hoàn toàn toàn bộ ổ đĩa, không chỉ các bit được đọc / ghi khi chúng được sử dụng.
Ai đóSomewhereSupportsMonica

2

Bộ xử lý sử dụng tập lệnh chuyên dụng. Có thể vì nó, AES-NI . Nó cho phép mã hóa và giải mã nhanh hoặc bạn có thể nói nó cắt giảm chi phí. Nó nhanh vì nó là phần cứng, như đã giải thích ở đây .

Bạn có thể kiểm tra các tác động hiệu suất ở đây và chúng đáng giá để tăng cường bảo mật.


1
Ngoài ra, dữ liệu trên đĩa chỉ được mã hóa / giải mã khi cần thiết; ví dụ: khi khởi động, chỉ có các tập lệnh khởi động, thông tin người dùng, các tệp thực thi DM / WE, v.v. được giải mã
Nick Mertin

Rất nhiều CPU không có hỗ trợ AES và mã hóa của Ubuntu vẫn hoạt động trên chúng ... ngay cả khi chúng đã hoạt động, điều này vẫn không thực sự trả lời câu hỏi về cách Mã hóa của Ubuntu hoạt động
Xen2050

@shsh Sau đó, nếu tôi ở trên một máy tính thực sự cũ, sẽ không thể sử dụng FDE, vì sẽ không có triển khai phần cứng? Tôi có nên hiểu rằng toàn bộ đĩa được mã hóa và giải mã khi khởi động và tắt máy không?
Hewbot

@ MagikM18 Nếu vậy, làm thế nào thuật toán biết bắt đầu giải mã ở đâu trong toàn bộ "chuỗi"? Ý tôi là, nếu tôi mở một tài liệu, làm thế nào để biết "tọa độ" của nó ở đâu?
Hewbot

@Hewbot theo cách tương tự như vậy dù sao đi nữa; về cơ bản, mã hóa là một lớp giữa đĩa vật lý và daemon hệ thống tập tin. vì vậy, khi nó yêu cầu đọc dữ liệu từ đĩa, nó sẽ được đọc và giải mã; Vì vậy, giống như trong một fs thông thường, đầu tiên nó sẽ đọc bảng tệp, tìm vị trí bắt đầu của tệp, sau đó đọc từ đó.
Nick Mertin

0

Các máy tính hiện đại có thể thực hiện hàng tỷ hoạt động mỗi giây, do đó, điều đó không làm tôi ngạc nhiên rằng mã hóa và giải mã nhanh.

Đây là cách tôi đánh giá trực quan mức độ nhanh chóng của máy tính khi làm việc:

  1. Thực hiện các phép tính trong bộ nhớ (đặc biệt là bộ nhớ L1 và L2), cực kỳ nhanh
  2. Đọc từ bộ nhớ cục bộ, ít nhanh hơn (đĩa trạng thái rắn nhanh hơn đĩa cứng)
  3. Đọc từ mạng, thậm chí ít nhanh hơn.

Một điều quan trọng khác cần hiểu là hoạt động không cần giải mã toàn bộ đĩa cứng để khởi động hệ thống. Thay vào đó, hệ điều hành biết cách giải mã chỉ các phần của đĩa cứng mà nó cần khi đang di chuyển, và điều tương tự cũng xảy ra đối với việc ghi.

Vì vậy, theo trực giác, tôi không ngạc nhiên rằng mã hóa toàn bộ đĩa không ảnh hưởng nhiều đến hiệu suất, vì tôi tưởng tượng cổ chai là đĩa.

Tất nhiên, những trực giác này không phải lúc nào cũng phù hợp với thực tế. Ví dụ, trong thực tế, đã có trường hợp mã hóa toàn bộ đĩa gây ra hiệu ứng đáng chú ý. Nhưng thường thì những điều này được giải quyết sau khi các nhà phát triển trải qua một vài vòng phát triển tối ưu hóa.


1
Tôi không thể tìm ra cách trả lời này là có thể. Chỉ cần sao chép 1TB bằng USB 3.0 sẽ mất vài phút, nếu phải thực hiện một quy trình giữa (giải mã), có thể mất vài phút để khởi động máy tính có FDE.
Hewbot

@Hewbot Tôi đã chỉnh sửa câu trả lời của mình để giải thích rằng việc giải mã xảy ra nhanh chóng. HĐH không cần đọc 1TB dữ liệu để bắt đầu sử dụng đĩa 1TB được mã hóa.
Flimm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.