Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Mã hóa toàn đĩa

Mã hóa toàn đĩa là quá trình mã hóa tất cả dữ liệu người dùng trên thiết bị Android bằng khóa được mã hóa. Sau khi thiết bị được mã hóa, tất cả dữ liệu do người dùng tạo sẽ tự động được mã hóa trước khi đưa vào đĩa và tất cả các lần đọc tự động giải mã dữ liệu trước khi trả lại cho quá trình gọi.

Mã hóa toàn bộ đĩa đã được giới thiệu cho Android trong 4.4, nhưng Android 5.0 đã giới thiệu các tính năng mới này:

  • Đã tạo mã hóa nhanh, chỉ mã hóa các khối đã sử dụng trên phân vùng dữ liệu để tránh việc khởi động lần đầu mất nhiều thời gian. Hiện chỉ có hệ thống tệp ext4 và f2fs hỗ trợ mã hóa nhanh.
  • Thêm forceencrypt cờ fstab để mã hóa khi khởi động đầu tiên.
  • Đã thêm hỗ trợ cho các mẫu và mã hóa mà không cần mật khẩu.
  • Đã thêm khả năng lưu trữ khóa mã hóa được hỗ trợ bởi phần cứng bằng khả năng ký của Môi trường thực thi đáng tin cậy (TEE) (chẳng hạn như trong TrustZone). Xem Lưu trữ chìa khóa mã hóa để biết thêm chi tiết.

Chú ý: Các thiết bị nâng cấp lên Android 5.0 và sau đó được mã hóa có thể được trả lại cho một nhà nước không được mã hóa bằng cách thiết lập lại dữ liệu gốc. Không thể đưa các thiết bị Android 5.0 mới được mã hóa vào lần khởi động đầu tiên về trạng thái không được mã hóa.

Cách hoạt động của mã hóa toàn đĩa Android

Mã hóa toàn bộ ổ đĩa Android được dựa trên dm-crypt , đó là một tính năng hạt nhân mà các công trình tại các lớp khối thiết bị. Bởi vì điều này, các công trình mã hóa với MultiMediaCard Embedded (eMMC) và các thiết bị đèn flash tương tự thể hiện mình để kernel như block device. Không thể mã hóa với YAFFS, nó nói chuyện trực tiếp với chip flash NAND thô.

Thuật toán mã hóa là 128 Tiêu chuẩn mã hóa nâng cao (AES) với chuỗi khối mã hóa (CBC) và ESSIV: SHA256. Khóa chính được mã hóa với 128-bit AES thông qua các cuộc gọi đến thư viện OpenSSL. Bạn phải sử dụng 128 bit trở lên cho khóa (với 256 là tùy chọn).

Lưu ý: các OEM có thể sử dụng 128-bit hoặc cao hơn để mã hóa các khóa thạc sĩ.

Trong bản phát hành Android 5.0, có bốn loại trạng thái mã hóa:

  • vỡ nợ
  • GHIM
  • mật khẩu mở khóa
  • mẫu

Khi khởi động lần đầu, thiết bị sẽ tạo một khóa chính 128-bit được tạo ngẫu nhiên và sau đó băm nó bằng mật khẩu mặc định và muối được lưu trữ. Mật khẩu mặc định là: "default_password" Tuy nhiên, hàm băm kết quả cũng được ký thông qua TEE (chẳng hạn như TrustZone), sử dụng hàm băm của chữ ký để mã hóa khóa chính.

Bạn có thể tìm mật khẩu mặc định được định nghĩa trong dự án mã nguồn mở Android cryptfs.cpp tập tin.

Khi người dùng đặt mã PIN / mật khẩu hoặc mật khẩu trên thiết bị, chỉ khóa 128 bit được mã hóa lại và lưu trữ. (ví dụ. sử dụng mã PIN / pass / mô hình thay đổi không gây tái mã hóa của userdata.) Lưu ý rằng thiết bị quản lý có thể bị hạn chế mã PIN, hình hoặc mật khẩu.

Mã hóa được quản lý bởi initvold . init gọi vold , và Vold bộ tài sản cho các sự kiện kích hoạt trong init. Các bộ phận khác của hệ thống cũng xem xét các thuộc tính để tiến hành các tác vụ như báo cáo trạng thái, yêu cầu mật khẩu hoặc nhắc khôi phục cài đặt gốc trong trường hợp xảy ra lỗi nghiêm trọng. Để gọi tính năng mã hóa trong vold , hệ thống sử dụng công cụ dòng lệnh vdc 's cryptfs lệnh: checkpw , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw , và clearpw .

Để mã hóa, giải mã hoặc lau /data , /data không được gắn kết. Tuy nhiên, để hiển thị bất kỳ giao diện người dùng (UI), khuôn khổ phải bắt đầu và khuôn khổ đòi hỏi /data để chạy. Để giải quyết bài toán hóc búa này, một hệ thống tập tin tạm thời được gắn trên /data . Điều này cho phép Android nhắc nhập mật khẩu, hiển thị tiến trình hoặc đề xuất xóa dữ liệu nếu cần. Nó không áp đặt các hạn chế đó để chuyển đổi từ hệ thống tập tin tạm thời cho đúng /data hệ thống tập tin, hệ thống phải ngừng mọi hoạt động với các tập tin mở trên hệ thống tập tin tạm thời và khởi động lại các quy trình trên thực /data hệ thống tập tin. Để làm điều này, tất cả các dịch vụ phải theo một trong ba nhóm: core , main , và late_start .

  • core : Không bao giờ đóng cửa sau khi bắt đầu.
  • main : xuống Shut và sau đó khởi động lại sau khi disk password được nhập vào.
  • late_start : không bắt đầu cho đến sau /data đã được giải mã và gắn kết.

Để kích hoạt các hành động, các vold.decrypt tài sản được thiết lập để các chuỗi khác nhau . Để giết và dịch vụ khởi động lại, các init lệnh là:

  • class_reset : Dừng một dịch vụ nhưng cho phép nó được khởi động lại với class_start.
  • class_start : Khởi động lại dịch vụ.
  • class_stop : Dừng một dịch vụ và cho biết thêm một SVC_DISABLED cờ. Dịch vụ ngừng không đáp ứng với class_start .

Chảy

Có bốn luồng cho một thiết bị được mã hóa. Một thiết bị được mã hóa chỉ một lần và sau đó tuân theo quy trình khởi động bình thường.

  • Mã hóa thiết bị chưa được mã hóa trước đó:
    • Mã hóa một thiết bị mới với forceencrypt : mã hóa bắt buộc lúc khởi động đầu tiên (bắt đầu trong Android L).
    • Mã hóa thiết bị hiện có: Mã hóa do người dùng khởi tạo (Android K trở về trước).
  • Khởi động thiết bị được mã hóa:
    • Khởi động thiết bị được mã hóa không có mật khẩu: Khởi động thiết bị được mã hóa chưa đặt mật khẩu (phù hợp với các thiết bị chạy Android 5.0 trở lên).
    • Khởi động thiết bị được mã hóa bằng mật khẩu: Khởi động thiết bị được mã hóa có mật khẩu đã đặt.

Ngoài những dòng chảy, thiết bị cũng có thể thất bại trong việc mã hóa /data . Mỗi luồng được giải thích chi tiết bên dưới.

Mã hóa thiết bị mới bằng forceencrypt

Đây là lần khởi động đầu tiên bình thường cho thiết bị Android 5.0.

  1. Phát hiện hệ thống tập tin được mã hóa với forceencrypt cờ

    /data không được mã hóa nhưng nhu cầu là vì forceencrypt nhiệm vụ nó. Unmount /data .

  2. Bắt đầu mã hóa /data

    vold.decrypt = "trigger_encryption" trigger init.rc , mà sẽ gây vold để mã hóa /data không có mật khẩu. (Không có thiết bị nào được đặt vì đây phải là một thiết bị mới.)

  3. Gắn tmpfs

    vold gắn kết một tmpfs /data (sử dụng tmpfs tùy chọn từ ro.crypto.tmpfs_options ) và bộ tài sản vold.encrypt_progress để 0. vold prepepares các tmpfs /data để khởi động một hệ thống mã hóa và bộ tài sản vold.decrypt tới: trigger_restart_min_framework

  4. Đưa ra khuôn khổ để hiển thị tiến trình

    Bởi vì thiết bị hầu như không có dữ liệu để mã hóa, thanh tiến trình thường sẽ không thực sự xuất hiện vì quá trình mã hóa diễn ra quá nhanh. Xem Mã hóa một thiết bị hiện có để biết thêm chi tiết về giao diện người dùng tiến bộ.

  5. Khi /data được mã hóa, đi xuống khuôn khổ

    vold bộ vold.decrypt để trigger_default_encryption mà bắt đầu defaultcrypto dịch vụ. (Điều này bắt đầu dòng chảy bên dưới để gắn một mặc định userdata mã hóa.) trigger_default_encryption kiểm tra các loại mã hóa để xem /data được mã hóa có hoặc không có mật khẩu. Bởi vì các thiết bị Android 5.0 được mã hóa trong lần khởi động đầu tiên, không nên đặt mật khẩu; do đó chúng tôi giải mã và gắn kết /data .

  6. Núi /data

    init sau đó gắn kết /data trên một tmpfs Ramdisk sử dụng các thông số nó nhặt từ ro.crypto.tmpfs_options , được thiết lập trong init.rc .

  7. Bắt đầu khuôn khổ

    Set vold để trigger_restart_framework , mà tiếp tục quá trình khởi động bình thường.

Mã hóa thiết bị hiện có

Đây là những gì sẽ xảy ra khi bạn mã hóa một thiết bị Android K chưa được mã hóa hoặc thiết bị cũ hơn đã được di chuyển sang L.

Quá trình này do người dùng bắt đầu và được gọi là "mã hóa tại chỗ" trong mã. Khi người dùng chọn mã hóa thiết bị, giao diện người dùng đảm bảo pin đã được sạc đầy và bộ chuyển đổi AC được cắm vào để có đủ năng lượng để hoàn tất quá trình mã hóa.

Cảnh báo: Nếu thiết bị chạy ra khỏi quyền lực và tắt máy trước khi nó có thành mã hóa, dữ liệu tập tin còn lại trong tình trạng mã hóa một phần. Thiết bị phải được khôi phục cài đặt gốc và tất cả dữ liệu sẽ bị mất.

Để kích hoạt tính năng mã hóa inplace, vold bắt đầu một vòng lặp để đọc từng ngành của thiết bị khối động sản và sau đó viết nó vào thiết bị khối crypto. vold kiểm tra xem nếu một lĩnh vực đang được sử dụng trước khi đọc và viết nó, mà làm cho mã hóa nhanh hơn nhiều trên một thiết bị mới có ít hoặc không có dữ liệu.

Nhà nước của thiết bị: Set ro.crypto.state = "unencrypted" và thực hiện on nonencrypted init kích hoạt để tiếp tục khởi động.

  1. Kiểm tra mật khẩu

    UI gọi vold với lệnh cryptfs enablecrypto inplace nơi passwd là mật khẩu khóa màn hình của người dùng.

  2. Gỡ bỏ khuôn khổ

    vold kiểm tra lỗi, trở về -1 nếu nó không thể mã hóa, và in một lý do trong nhật ký. Nếu nó có thể mã hóa, nó đặt thuộc tính vold.decrypt để trigger_shutdown_framework . Nguyên nhân này init.rc dừng dịch vụ trong các lớp late_startmain .

  3. Tạo chân trang tiền điện tử
  4. Tạo tệp breadcrumb
  5. Khởi động lại
  6. Phát hiện tệp breadcrumb
  7. Bắt đầu mã hóa /data

    vold sau đó thiết lập các bản đồ crypto, mà tạo ra một thiết bị khối crypto ảo mà bản đồ vào thiết bị khối thật nhưng mã hóa từng ngành như nó được viết, và giải mã từng ngành vì nó được đọc. vold sau đó tạo ra và viết ra metadata crypto.

  8. Trong khi mã hóa, hãy gắn kết các tmpfs

    vold gắn kết một tmpfs /data (sử dụng tmpfs tùy chọn từ ro.crypto.tmpfs_options ) và bộ tài sản vold.encrypt_progress để 0. vold chuẩn bị tmpfs /data để khởi động một hệ thống mã hóa và thiết lập thuộc tính vold.decrypt tới: trigger_restart_min_framework

  9. Đưa ra khuôn khổ để hiển thị tiến trình

    trigger_restart_min_framework gây init.rc để bắt đầu main lớp của dịch vụ. Khi khuôn khổ thấy rằng vold.encrypt_progress được đặt thành 0, nó sẽ làm xuất hiện thanh tiến giao diện người dùng, mà các truy vấn bất động sản mà mỗi năm giây và cập nhật một thanh tiến trình. Các bản cập nhật lặp mã hóa vold.encrypt_progress mỗi khi nó mã hóa khác phần trăm của phân vùng.

  10. Khi /data được mã hóa, cập nhật footer crypto

    Khi /data được mã hóa thành công, vold xóa cờ ENCRYPTION_IN_PROGRESS trong siêu dữ liệu.

    Khi thiết bị được mở khóa thành công, mật khẩu sau đó sẽ được sử dụng để mã hóa khóa chính và chân mã được cập nhật.

    Nếu khởi động lại thất bại vì một lý do, vold thiết đặt thuộc tính vold.encrypt_progress để error_reboot_failed và giao diện người dùng sẽ hiển thị một thông báo yêu cầu người dùng nhấn một nút để khởi động lại. Điều này dự kiến ​​sẽ không bao giờ xảy ra.

Khởi động thiết bị được mã hóa với mã hóa mặc định

Đây là những gì sẽ xảy ra khi bạn khởi động một thiết bị được mã hóa mà không có mật khẩu. Bởi vì các thiết bị Android 5.0 được mã hóa trên khởi động đầu tiên, không nên có mật khẩu thiết lập và do đó đây là trạng thái mã hóa mặc định.

  1. Phát hiện mã hóa /data không có mật khẩu

    Phát hiện rằng thiết bị Android được mã hóa bởi vì /data không thể được gắn kết và là một trong những lá cờ encryptable hoặc forceencrypt được thiết lập.

    vold bộ vold.decrypt để trigger_default_encryption , mà bắt đầu defaultcrypto dịch vụ. trigger_default_encryption kiểm tra các loại mã hóa để xem /data được mã hóa có hoặc không có mật khẩu.

  2. Giải mã / dữ liệu

    Tạo ra dm-crypt thiết bị so với thiết bị khối để các thiết bị đã sẵn sàng để sử dụng.

  3. Gắn kết / dữ liệu

    vold sau đó gắn kết các giải mã thực /data phân vùng và sau đó chuẩn bị các phân vùng mới. Nó đặt thuộc tính vold.post_fs_data_done 0 và sau đó đặt vold.decrypt để trigger_post_fs_data . Nguyên nhân này init.rc để chạy nó post-fs-data lệnh. Họ sẽ tạo ra bất kỳ thư mục cần thiết hoặc liên kết và sau đó thiết lập vold.post_fs_data_done đến 1.

    Khi vold thấy 1 trong tài sản đó, nó đặt thuộc tính vold.decrypt tới: trigger_restart_framework. Nguyên nhân này init.rc để bắt đầu dịch vụ trong lớp học main một lần nữa và cũng bắt đầu dịch vụ trong lớp late_start lần đầu tiên kể từ khi khởi động.

  4. Bắt đầu khuôn khổ

    Bây giờ khởi động khuôn khổ tất cả dịch vụ của mình bằng cách sử dụng giải mã /data , và hệ thống đã sẵn sàng để sử dụng.

Khởi động thiết bị được mã hóa mà không có mã hóa mặc định

Đây là những gì sẽ xảy ra khi bạn khởi động một thiết bị được mã hóa có mật khẩu đã đặt. Mật khẩu của thiết bị có thể là mã pin, hình mở khóa hoặc mật khẩu.

  1. Phát hiện thiết bị được mã hóa bằng mật khẩu

    Phát hiện rằng thiết bị Android được mã hóa vì cờ ro.crypto.state = "encrypted"

    vold bộ vold.decrypt để trigger_restart_min_framework/data được mã hóa bằng mật khẩu.

  2. Gắn tmpfs

    init bộ lăm thuộc tính để lưu gắn kết tùy chọn ban đầu đưa ra cho /data với các thông số truyền từ init.rc . vold sử dụng các đặc tính này để thiết lập các bản đồ crypto:

    1. ro.crypto.fs_type
    2. ro.crypto.fs_real_blkdev
    3. ro.crypto.fs_mnt_point
    4. ro.crypto.fs_options
    5. ro.crypto.fs_flags (ASCII hex số 8 chữ số trước bằng 0x)
  3. Khởi động khuôn khổ để nhắc nhập mật khẩu

    Khung khởi động và thấy rằng vold.decrypt được thiết lập để trigger_restart_min_framework . Điều này cho khuôn khổ rằng nó được khởi động trên một tmpfs /data đĩa và nó cần phải có được mật khẩu người dùng.

    Tuy nhiên, trước tiên, cần đảm bảo rằng đĩa đã được mã hóa đúng cách. Nó sẽ gửi lệnh cryptfs cryptocomplete để vold . vold trả về 0 nếu mã hóa được hoàn thành thành công, -1 về lỗi nội bộ, hoặc -2 nếu mã hóa đã không được hoàn thành. vold xác định điều này bằng cách tìm kiếm trong siêu dữ liệu mật cho CRYPTO_ENCRYPTION_IN_PROGRESS cờ. Nếu nó được đặt, quá trình mã hóa sẽ bị gián đoạn và không có dữ liệu có thể sử dụng được trên thiết bị. Nếu vold trả về một lỗi, giao diện người dùng sẽ hiển thị một thông điệp tới người sử dụng để khởi động lại máy và thiết lập lại các thiết bị, và cung cấp cho người dùng một nút để báo chí để làm như vậy.

  4. Giải mã dữ liệu bằng mật khẩu

    Khi cryptfs cryptocomplete thành công, hiển thị khuôn khổ một giao diện người dùng yêu cầu mật khẩu đĩa. Kiểm tra giao diện người dùng mật khẩu bằng cách gửi lệnh cryptfs checkpw để vold . Nếu mật khẩu là chính xác (được xác định bằng cách gắn kết thành công giải mã /data tại một vị trí tạm thời, sau đó unmount nó), vold tiết kiệm tên của thiết bị khối giải mã trong các tài sản ro.crypto.fs_crypto_blkdev và trả về tình trạng từ 0 đến giao diện người dùng . Nếu mật khẩu không chính xác, nó sẽ trả về -1 cho giao diện người dùng.

  5. Dừng khuôn khổ

    Các puts UI lên một hình ảnh khởi động crypto và sau đó gọi vold với lệnh cryptfs restart . vold thiết đặt thuộc tính vold.decrypt để trigger_reset_main , gây init.rc làm class_reset main . Điều này ngừng tất cả các dịch vụ trong lớp học chính, cho phép người tmpfs /data được lắp ráp.

  6. Núi /data

    vold sau đó gắn kết các giải mã thực /data phân vùng và chuẩn bị phân vùng mới (có thể không bao giờ có được chuẩn bị nếu nó đã được mã hóa với các tùy chọn, mà không được hỗ trợ trên phiên bản đầu tiên lau). Nó đặt thuộc tính vold.post_fs_data_done 0 và sau đó đặt vold.decrypt để trigger_post_fs_data . Nguyên nhân này init.rc để chạy nó post-fs-data lệnh. Họ sẽ tạo ra bất kỳ thư mục cần thiết hoặc liên kết và sau đó thiết lập vold.post_fs_data_done đến 1. Khi vold thấy 1 trong tài sản đó, nó đặt thuộc tính vold.decrypt để trigger_restart_framework . Nguyên nhân này init.rc để bắt đầu dịch vụ trong lớp học main một lần nữa và cũng bắt đầu dịch vụ trong lớp late_start lần đầu tiên kể từ khi khởi động.

  7. Bắt đầu toàn bộ khuôn khổ

    Bây giờ khởi động khuôn khổ tất cả dịch vụ của mình bằng cách sử dụng giải mã /data hệ thống tập tin, và hệ thống đã sẵn sàng để sử dụng.

Thất bại

Một thiết bị không giải mã được có thể bị lỗi vì một vài lý do. Thiết bị bắt đầu với một loạt các bước bình thường để khởi động:

  1. Phát hiện thiết bị được mã hóa bằng mật khẩu
  2. Gắn tmpfs
  3. Khởi động khuôn khổ để nhắc nhập mật khẩu

Nhưng sau khi khung mở, thiết bị có thể gặp một số lỗi:

  • Mật khẩu khớp nhưng không thể giải mã dữ liệu
  • Người dùng nhập sai mật khẩu 30 lần

Nếu các lỗi này không được giải quyết, người sử dụng nhanh chóng đến nhà máy lau:

Nếu vold phát hiện một lỗi trong quá trình mã hóa, và nếu không có dữ liệu đã bị phá hủy được nêu ra và khuôn khổ này là lên, vold thiết đặt thuộc tính vold.encrypt_progress để error_not_encrypted . Giao diện người dùng nhắc người dùng khởi động lại và thông báo cho họ quá trình mã hóa chưa bao giờ bắt đầu. Nếu lỗi xảy ra sau khi khuôn khổ đã bị kéo đổ, nhưng trước khi thanh tiến giao diện người dùng đang gia tăng, vold sẽ khởi động lại hệ thống. Nếu khởi động lại thất bại, nó đặt vold.encrypt_progress để error_shutting_down và trả về -1; nhưng sẽ không có bất cứ điều gì để bắt lỗi. Điều này không được mong đợi sẽ xảy ra.

Nếu vold phát hiện một lỗi trong quá trình mã hóa, nó đặt vold.encrypt_progress để error_partially_encrypted lợi nhuận và -1. Sau đó, giao diện người dùng sẽ hiển thị thông báo cho biết mã hóa không thành công và cung cấp một nút để người dùng khôi phục cài đặt gốc cho thiết bị.

Lưu trữ khóa được mã hóa

Khóa mã hóa được lưu trữ trong siêu dữ liệu tiền điện tử. Hỗ trợ phần cứng được thực hiện bằng cách sử dụng khả năng ký của Môi trường thực thi đáng tin cậy (TEE). Trước đây, chúng tôi đã mã hóa khóa chính bằng khóa được tạo bằng cách áp dụng mã hóa mật khẩu của người dùng và muối được lưu trữ. Để làm cho khóa có khả năng chống lại các cuộc tấn công ngoài hộp, chúng tôi mở rộng thuật toán này bằng cách ký khóa kết quả bằng khóa TEE được lưu trữ. Chữ ký kết quả sau đó được biến thành một khóa có độ dài thích hợp bằng một ứng dụng nữa của scrypt. Khóa này sau đó được sử dụng để mã hóa và giải mã khóa chính. Để lưu trữ khóa này:

  1. Tạo khóa mã hóa đĩa 16 byte ngẫu nhiên (DEK) và muối 16 byte.
  2. Áp dụng mã scrypt cho mật khẩu người dùng và muối để tạo ra khóa trung gian 32 byte 1 (IK1).
  3. Pad IK1 với kích thước bằng không byte bằng với khóa cá nhân ràng buộc phần cứng (HBK). Cụ thể, chúng tôi đệm là: 00 || IK1 || 00..00; một byte 0, 32 IK1 byte, 223 byte 0.
  4. Ký IK1 được đệm bằng HBK để tạo IK2 256 byte.
  5. Áp dụng scrypt cho IK2 và muối (giống muối ở bước 2) để tạo ra IK3 32 byte.
  6. Sử dụng 16 byte đầu tiên của IK3 làm KEK và 16 byte cuối cùng làm IV.
  7. Mã hóa DEK bằng AES_CBC, với khóa KEK và vectơ khởi tạo IV.

Thay đổi mật khẩu

Khi một chọn lựa của người sử dụng để thay đổi hoặc xóa mật khẩu của họ trong cài đặt, giao diện người dùng gửi lệnh cryptfs changepw để vold , và vold tái mã hóa chìa khóa vạn đĩa với mật khẩu mới.

Thuộc tính mã hóa

voldinit giao tiếp với nhau bằng cách thiết lập thuộc tính. Đây là danh sách các thuộc tính có sẵn để mã hóa.

Thuộc tính Vold

Bất động sản Sự miêu tả
vold.decrypt trigger_encryption Mã hóa ổ đĩa mà không cần mật khẩu.
vold.decrypt trigger_default_encryption Kiểm tra ổ đĩa để xem nó có được mã hóa không có mật khẩu hay không. Nếu có, giải mã và gắn kết nó, nếu không thiết lập vold.decrypt để trigger_restart_min_framework.
vold.decrypt trigger_reset_main Đặt bởi vold để tắt giao diện người dùng yêu cầu mật khẩu đĩa.
vold.decrypt trigger_post_fs_data Được thiết lập bởi Vold để chuẩn bị /data với các thư mục cần thiết, et al.
vold.decrypt trigger_restart_framework Được thiết lập bởi vold để bắt đầu khuôn khổ thực và tất cả các dịch vụ.
vold.decrypt trigger_shutdown_framework Đặt bởi vold để tắt toàn bộ khuôn khổ để bắt đầu mã hóa.
vold.decrypt trigger_restart_min_framework Được thiết lập bởi Vold để bắt đầu UI thanh tiến trình để mã hóa hoặc nhắc cho mật khẩu, tùy thuộc vào giá trị của ro.crypto.state .
vold.encrypt_progress Khi khung khởi động, nếu thuộc tính này được đặt, hãy nhập chế độ giao diện người dùng của thanh tiến trình.
vold.encrypt_progress 0 to 100 Giao diện người dùng của thanh tiến trình sẽ hiển thị giá trị phần trăm được đặt.
vold.encrypt_progress error_partially_encrypted Giao diện người dùng của thanh tiến trình sẽ hiển thị thông báo rằng mã hóa không thành công và cung cấp cho người dùng tùy chọn để khôi phục cài đặt gốc cho thiết bị.
vold.encrypt_progress error_reboot_failed Giao diện người dùng của thanh tiến trình sẽ hiển thị thông báo cho biết mã hóa đã hoàn tất và cung cấp cho người dùng một nút để khởi động lại thiết bị. Lỗi này không được mong đợi xảy ra.
vold.encrypt_progress error_not_encrypted Giao diện người dùng của thanh tiến trình sẽ hiển thị thông báo cho biết đã xảy ra lỗi, không có dữ liệu nào được mã hóa hoặc bị mất và cung cấp cho người dùng một nút để khởi động lại hệ thống.
vold.encrypt_progress error_shutting_down Giao diện người dùng của thanh tiến trình không chạy, vì vậy không rõ ai sẽ phản hồi lỗi này. Và nó sẽ không bao giờ xảy ra.
vold.post_fs_data_done 0 Được thiết lập bởi vold ngay trước khi thiết lập vold.decrypt để trigger_post_fs_data .
vold.post_fs_data_done 1 Set bởi init.rc hoặc init.rc chỉ sau khi kết thúc nhiệm vụ post-fs-data .

thuộc tính init

Bất động sản Sự miêu tả
ro.crypto.fs_crypto_blkdev Theo quy định của vold lệnh checkpw để sử dụng sau bởi vold lệnh restart .
ro.crypto.state unencrypted Set bởi init để nói hệ thống này đang chạy với một mã hóa /data ro.crypto.state encrypted . Được thiết lập bởi init để nói hệ thống này đang chạy với một mã hóa /data .

ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags

Những năm thuộc tính được thiết lập bởi init khi nó cố gắng để gắn kết /data với các thông số được thông qua năm từ init.rc . vold sử dụng các thiết lập các bản đồ crypto.
ro.crypto.tmpfs_options Set bởi init.rc với các tùy chọn init nên sử dụng khi gắn tmpfs /data hệ thống tập tin.

Init hành động

on post-fs-data
on nonencrypted
on property:vold.decrypt=trigger_reset_main
on property:vold.decrypt=trigger_post_fs_data
on property:vold.decrypt=trigger_restart_min_framework
on property:vold.decrypt=trigger_restart_framework
on property:vold.decrypt=trigger_shutdown_framework
on property:vold.decrypt=trigger_encryption
on property:vold.decrypt=trigger_default_encryption