Mã hóa zero-knowledge là gì? Hướng dẫn đơn giản

Mã hóa zero-knowledge là gì? Hướng dẫn đơn giản

Mã hóa zero-knowledge có nghĩa là nhà cung cấp không thể truy cập dữ liệu của bạn.

Mã hóa zero-knowledge là kiến trúc che mắt nhà cung cấp, trong đó dịch vụ không giữ khóa cần để giải mã nội dung người dùng được lưu. Khác với mã hóa đám mây tiêu chuẩn, nơi nhà cung cấp kiểm soát khóa nội dung, mã hóa phía máy khách có thể giữ quyền đó trên thiết bị của người dùng. Yêu cầu pháp lý, vụ rò rỉ hay truy cập nội bộ vẫn có thể làm lộ bản mã, hồ sơ tài khoản, dữ liệu lưu lượng hay siêu dữ liệu khác mà nhà cung cấp giữ. Hướng dẫn quản lý khóa của NIST đặt việc giữ khóa vào trung tâm của quyền truy cập, nhưng ứng dụng khách, hệ điều hành và thiết bị đã mở khóa vẫn thuộc ranh giới tin cậy.

Cách mã hóa zero-knowledge hoạt động

Ví dụ đơn giản nhất: một két an toàn khách sạn nơi chỉ bạn đặt mã, và khách sạn không bao giờ biết mã đó. Nếu bạn quên mã, khách sạn không thể mở két cho bạn. Đó không phải là lỗi trong thiết kế. Đó chính là thiết kế.

Về mặt kỹ thuật, mã hóa zero-knowledge hoạt động qua ba bước:

  1. Tạo khóa trên thiết bị. Người dùng nhập thông tin xác thực như mật khẩu, cụm mật khẩu hoặc mẫu hình. Một hàm tạo khóa từ mật khẩu kết hợp nó với muối để tạo khóa trên thiết bị của người dùng. Một thiết kế tách biệt rõ ràng có thể dùng khóa đó để mở lớp bọc của một khóa nội dung ngẫu nhiên, thay vì mã hóa trực tiếp mọi tệp bằng thông tin xác thực của con người.

  2. Mã hóa trước khi truyền. Tất cả dữ liệu được mã hóa trên thiết bị bằng khóa đã dẫn xuất trước khi rời khỏi thiết bị để lưu trữ đám mây hoặc sao lưu. Đầu ra đã mã hóa (bản mã) là thứ được tải lên.

  3. Nhà cung cấp không nhận khóa nội dung bản rõ. Khóa nội dung buộc phải nằm trong bộ nhớ của ứng dụng khách khi dùng, và cũng có thể được lưu cục bộ hoặc từ xa bên trong các phong bì mã hóa có xác thực. Nhà cung cấp có thể lưu bản mã và khóa đã bọc mà không giữ bí mật của người dùng cần để mở chúng. Siêu dữ liệu về tài khoản, lưu lượng, kích thước bản ghi và thời điểm vẫn có thể lộ ra.

Ràng buộc quan trọng: nếu người dùng mất mọi đường khôi phục và thông tin xác thực hợp lệ, nội dung đã mã hóa sẽ không thể truy cập. Vẫn có thể có khôi phục, nhưng phải giải thích ai giữ khóa của nó. Nếu chỉ đặt lại qua email mà lấy lại được nội dung đọc được, không cần thiết bị cũ phê duyệt, cụm từ khôi phục, khóa khôi phục hay bí mật tương đương do người dùng giữ, thì nhà cung cấp vẫn còn một đường thực tế dẫn tới bản rõ.

Mã hóa zero-knowledge so với các loại mã hóa khác

Thuật ngữ "mã hóa" xuất hiện trong tài liệu tiếp thị của hầu hết mọi dịch vụ đám mây. Sự khác biệt giữa các loại là đáng kể.

Loại Ai giữ khóa Nhà cung cấp có thể đọc dữ liệu Tồn tại sau vi phạm nhà cung cấp Ví dụ
Không mã hóa Không áp dụng Có Không Dropbox (gói tiêu chuẩn)
Mã hóa khi truyền (TLS) Nhà cung cấp Có (khi lưu trữ trên máy chủ của họ) Không Google Photos
Mã hóa phía máy chủ khi lưu trữ Nhà cung cấp Có (họ giữ khóa giải mã) Một phần (tùy thuộc phạm vi vi phạm) iCloud (tiêu chuẩn)
Mã hóa đầu cuối của nền tảng Thiết bị khách và hệ thống khôi phục tài khoản Không, qua đường dịch vụ thông thường Phụ thuộc vào ứng dụng khách, cách khôi phục và mức lộ siêu dữ liệu iCloud với Bảo vệ dữ liệu nâng cao
Mã hóa phía máy khách che mắt nhà cung cấp Đường khôi phục do ứng dụng khách và người dùng kiểm soát Không có khóa nội dung văn bản gốc do nhà cung cấp nắm giữ Nội dung có thể vẫn được mã hóa; siêu dữ liệu và bản mã vẫn có thể lộ ra Két mã hóa và hệ thống sao lưu

Sự khác biệt giữa "mã hóa khi lưu trữ" và "mã hóa zero-knowledge" là điều bị nhầm lẫn phổ biến nhất. Với mã hóa khi lưu trữ, nhà cung cấp mã hóa dữ liệu của bạn trên máy chủ của họ bằng các khóa họ kiểm soát. Điều này bảo vệ chống lại việc trộm cắp vật lý phần cứng máy chủ. Nó không bảo vệ chống lại nhà cung cấp đọc dữ liệu của bạn, trát tòa án về dữ liệu và khóa, hoặc mối đe dọa từ nội bộ. Nhà cung cấp có khả năng giải mã.

Với mã hóa phía máy khách che mắt nhà cung cấp, dịch vụ không được cấp khóa nội dung bản rõ qua giao thức đã được mô tả. Bản mã đã lưu có thể mờ đục với nhà cung cấp, trong khi phần mềm máy khách, đường khôi phục, siêu dữ liệu tài khoản và kênh phân phối phần mềm vẫn cần được tin cậy và xem xét.

Tại sao mã hóa zero-knowledge quan trọng

Vi phạm dữ liệu ảnh hưởng hàng tỷ bản ghi mỗi năm

Identity Theft Resource Center báo cáo 3.205 vụ xâm phạm dữ liệu tại Hoa Kỳ năm 2023, ảnh hưởng khoảng 353 triệu người. Khi nhà cung cấp giữ khóa nội dung, một vụ xâm phạm có thể làm lộ cả dữ liệu đã lưu lẫn đường giải mã dữ liệu đó. Mã hóa che mắt nhà cung cấp tách hai thứ đó: xâm phạm máy chủ vẫn có thể làm lộ bản mã và siêu dữ liệu, nhưng không làm lộ khóa nội dung bản rõ do nhà cung cấp giữ. Việc đoán thông tin xác thực và xâm nhập ứng dụng khách vẫn là những rủi ro riêng.

Cưỡng bức pháp lý là mối đe dọa thực sự

Nhà cung cấp có thể bị buộc giao dữ liệu họ đang giữ. Thiết kế che mắt nhà cung cấp có thể giới hạn nội dung giao ra ở bản mã và siêu dữ liệu tài khoản, lưu lượng, thanh toán hoặc dịch vụ sẵn có, vì nhà cung cấp không giữ khóa nội dung bản rõ. Việc một bên khác có lấy được thông tin xác thực của người dùng, khai thác ứng dụng khách hay buộc tiết lộ hay không là câu hỏi riêng. Apple giới thiệu Bảo vệ dữ liệu nâng cao trong iOS 16.2, như một tùy chọn mở rộng mã hóa đầu cuối cho dữ liệu iCloud.

"Hãy tin chúng tôi" không phải là kiến trúc bảo mật

Mã hóa phía máy chủ dựa vào chính sách và khóa do nhà cung cấp kiểm soát. Mã hóa che mắt nhà cung cấp thay đổi việc ai giữ khóa, để đường dịch vụ đã mô tả không có khóa nội dung bản rõ. Đó là ranh giới kiến trúc mạnh hơn, nhưng sức mạnh của nó vẫn phụ thuộc vào mã máy khách đúng, phân phối phần mềm có xác thực, khôi phục được thiết kế đúng cách, thiết bị an toàn và cách triển khai khớp với đặc tả.

Tiêu chuẩn NIST đằng sau mật mã học

AES-GCM được Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) chuẩn hóa trong SP 800-38D (2007). Bản thân AES được NIST chọn qua một cuộc thi công khai năm 2001. Số “256” trong AES-256 chỉ khóa 256 bit. Vét cạn một khóa ngẫu nhiên phân bố đều là không khả thi về tính toán, nhưng mật khẩu hay mẫu hình của con người có thể có entropy thấp hơn nhiều, ngay cả khi hàm tạo khóa xuất ra 256 bit.

GCM (Galois/Counter Mode) thêm mã hóa xác thực, có nghĩa là quá trình giải mã phát hiện bất kỳ sự can thiệp nào với bản mã. Nếu một bit dữ liệu đã mã hóa bị thay đổi, giải mã thất bại thay vì tạo ra đầu ra bị hỏng. Điều này ngăn chặn kẻ tấn công thao túng dữ liệu đã mã hóa mà không bị phát hiện.

PBKDF2 (Password-Based Key Derivation Function 2), được định nghĩa trong RFC 8018, biến thông tin xác thực do con người đưa vào thành vật liệu khóa có độ dài cố định bằng cách gọi lặp lại một hàm giả ngẫu nhiên. Nhiều vòng lặp làm tăng chi phí mỗi lần đoán. Chúng không thêm entropy cho một mẫu hình hay mật khẩu dễ đoán, nên việc chọn thông tin xác thực và khả năng xác minh ngoại tuyến vẫn quan trọng.

Cách Vaultaire tách khóa khỏi nhà cung cấp

Vaultaire là một két mã hóa phía máy khách cho iPhone. Theo nghĩa sản phẩm thường được quảng cáo là “zero-knowledge”, tuyên bố có tài liệu, hẹp hơn, của nó là Wraxle không nhận nội dung két ở dạng bản rõ hay các khóa cần để giải mã nội dung đó. Dưới đây là cách triển khai và các ranh giới tin cậy còn lại ở từng lớp.

Tạo khóa. Người dùng vẽ một mẫu hình trên lưới 5x5 gồm 25 điểm. PBKDF2-HMAC-SHA512 kết hợp chuỗi điểm đó với muối chung của thiết bị trong Keychain qua 600.000 vòng lặp để tạo khóa két 256 bit. Khóa két xác thực chỉ mục đã mã hóa và bọc một khóa chính 256 bit ngẫu nhiên riêng. Thông tin khôi phục, kể cả mẫu hình, được lưu trong một cơ sở dữ liệu Keychain mã hóa AES-GCM, không nằm trong tệp bản rõ hay tài khoản Vaultaire.

Mã hóa tệp. Mỗi tệp đã nhập được mã hóa bằng AES-256-GCM dưới khóa chính ngẫu nhiên. CryptoKit tạo các sealed box có xác thực với nonce mới, và định dạng luồng tạo một nonce riêng cho từng đoạn theo thứ tự.

Mã hóa siêu dữ liệu. Tên tệp, loại MIME, ngày, bản ghi chỉ mục và dữ liệu ảnh thu nhỏ cũng được bảo vệ bằng AES-256-GCM. Vaultaire không sử dụng ChaCha20 cho siêu dữ liệu vault.

Quản lý khóa. Vaultaire lưu cơ sở dữ liệu khôi phục đã mã hóa và muối của thiết bị dưới dạng các mục mật khẩu chung thông thường trong Keychain của iOS, được bảo vệ bằng lớp truy cập WhenUnlockedThisDeviceOnly. Khóa két tạo từ mẫu hình và khóa chính ngẫu nhiên được xử lý trong bộ nhớ ứng dụng qua CryptoKit. Khi khóa, ứng dụng bỏ trạng thái khóa đang dùng, nhưng Swift và iOS không cung cấp cách bảo đảm mọi bản sao tạm đều bị ghi đè.

Phát hiện két. Giao diện thông thường không hiển thị danh sách két. Định dạng cục bộ giữ đúng 1 thư mục lưu trữ cho mỗi két, và mã bảo trì có thể liệt kê chúng. Vì vậy, người có quyền truy cập vùng chứa ứng dụng có thể đếm số két, dù tên tệp không để lộ mẫu hình, tên két hay nội dung bản rõ. Xem đầy đủ kiến trúc bảo mật và giải thích về mã hóa bằng mẫu hình.

Cách nhận biết nếu ứng dụng sử dụng mã hóa zero-knowledge thực sự

Bắt đầu bằng ba phép thử nhanh, rồi kiểm tra kiến trúc đã công bố:

  1. Phép thử quên mật khẩu. Nếu chỉ đặt lại qua email mà lấy lại được dữ liệu đọc được, hãy hỏi cơ chế nào do nhà cung cấp giữ đã thực chất khôi phục khóa nội dung. Cụm từ khôi phục do người dùng giữ, phê duyệt từ thiết bị cũ và đặt lại do nhà cung cấp kiểm soát là những thiết kế khác nhau.

  2. Phép thử thiết bị mới. Nếu thiết bị mới khôi phục được nội dung đọc được, hãy xác định bí mật hay thiết bị tin cậy nào đã cho phép điều đó. Chỉ đăng nhập tài khoản là dấu hiệu của đường khôi phục do nhà cung cấp kiểm soát; cụm từ khôi phục cùng các bản ghi sao lưu đã mã hóa có thể giữ khóa tách khỏi nhà cung cấp.

  3. Phép thử tài khoản. Địa chỉ email hay số điện thoại liên kết danh tính với siêu dữ liệu dịch vụ, nhưng tự nó không chứng minh nhà cung cấp giải mã được nội dung. Hãy kiểm tra hệ thống phân cấp khóa, thiết kế khôi phục, mã máy khách hoặc báo cáo kiểm định, chính sách siêu dữ liệu, và việc bản mã có xác thực có cho phép thử thông tin xác thực ngoại tuyến hay không.

Những phép thử này là bộ lọc, không phải bằng chứng bảo mật. Một đặc tả chặt chẽ phải nêu tên khóa nội dung, khóa mở khóa, muối, tham số tạo khóa, định dạng mã hóa có xác thực, quy tắc nonce, phong bì khôi phục, nơi lưu bí mật cục bộ, siêu dữ liệu đám mây và mọi nơi khóa bản rõ tồn tại. Đánh giá độc lập là bằng chứng mạnh hơn nhãn sản phẩm.

Câu hỏi thường gặp

Mã hóa zero-knowledge có giống mã hóa đầu cuối không?

Hai khái niệm này có điểm chung nhưng không giống nhau. Mã hóa đầu cuối (E2EE) có nghĩa là dữ liệu được mã hóa trên thiết bị người gửi và chỉ được giải mã trên thiết bị người nhận. Mã hóa zero-knowledge có nghĩa là nhà cung cấp không thể truy cập dữ liệu. Một dịch vụ có thể mã hóa đầu cuối mà vẫn không đạt zero-knowledge nếu nhà cung cấp đã tạo hoặc từng có quyền truy cập khóa. Mã hóa zero-knowledge là tiêu chuẩn chặt chẽ hơn.

Điều gì xảy ra nếu tôi mất mật khẩu khi sử dụng mã hóa zero-knowledge?

Dữ liệu của bạn sẽ vĩnh viễn không thể truy cập nếu mọi thông tin xác thực và phong bì khôi phục hợp lệ đều bị mất. Khóa chủ hay khóa đặt lại do nhà cung cấp kiểm soát sẽ làm yếu ranh giới với nhà cung cấp, nên phải thiết kế khôi phục riêng. Vaultaire tạo một cụm từ khôi phục tùy chỉnh gồm 9 từ khác nhau; khóa khôi phục tạo từ cụm từ này mở một phong bì khóa két đã mã hóa. Cụm từ không tái tạo hay mã hóa trực tiếp các khóa, và khôi phục trên thiết bị mới còn cần các bản ghi CloudKit đã mã hóa tương ứng.

Cơ quan thực thi pháp luật có thể truy cập dữ liệu mã hóa zero-knowledge không?

Nhà cung cấp có thể bị buộc giao bản mã đã lưu và siêu dữ liệu tài khoản, lưu lượng, thanh toán hoặc dịch vụ mà họ giữ. Nếu không có khóa nội dung bản rõ do nhà cung cấp giữ, nhà cung cấp không thể dùng đường dịch vụ thông thường để giải mã nội dung. Khai thác thiết bị, lấy được thông tin xác thực, sao chép dữ liệu khôi phục và buộc tiết lộ là những đường riêng, với tính hợp pháp và hiệu quả khác nhau tùy nơi và tùy tình huống.

Mã hóa zero-knowledge có chậm hơn mã hóa thông thường không?

Hiệu năng của AES-256-GCM không phụ thuộc vào việc ai giữ khóa. Tạo khóa từ mật khẩu thêm công việc khi mở khóa, và thời gian đó phụ thuộc vào thuật toán, số vòng lặp, thiết bị và cách triển khai. Ứng dụng nên đo chi phí đó trên phần cứng được hỗ trợ và cân bằng giữa độ nhạy với chi phí áp lên mỗi lần đoán ngoại tuyến.

Zero-knowledge có nghĩa là ứng dụng không thu thập dữ liệu nào không?

Không nhất thiết. Thuật ngữ này nói về ranh giới khóa nội dung của nhà cung cấp, không phải mọi luồng dữ liệu. Ứng dụng vẫn có thể xử lý dữ liệu tài khoản, phân tích, báo cáo sự cố, địa chỉ IP, kích thước bản ghi, thời điểm hay các siêu dữ liệu dịch vụ khác. Vaultaire không cần tài khoản định danh. Phân tích ứng dụng và chẩn đoán sự cố bật theo mặc định và có thể tắt bằng “Chia sẻ lỗi ẩn danh” trong Cài đặt. Chính sách sự kiện đã công bố loại trừ nội dung, mẫu hình, cụm từ và khóa giải mã; chính sách quyền riêng tư mô tả quy tắc thu thập và lưu giữ hiện tại.

Mã hóa zero-knowledge so sánh với Bảo vệ Dữ liệu Nâng cao của Apple như thế nào?

Bảo vệ dữ liệu nâng cao (ADP) của Apple, ra mắt trong iOS 16.2, mở rộng mã hóa đầu cuối cho thêm các loại dữ liệu iCloud và dùng mô hình khôi phục Tài khoản Apple. Vaultaire mã hóa nội dung két trên thiết bị và không cần tài khoản định danh Vaultaire; sao lưu iCloud (bật theo mặc định), đồng bộ và chia sẻ dùng các bản ghi CloudKit mã hóa phía máy khách trong Tài khoản Apple của người dùng. Vaultaire cũng có truy cập két tách biệt theo mẫu hình, phủ nhận hợp lý và Chế độ ép buộc, với các giới hạn lưu trữ và khôi phục được mô tả trong hai trang tài liệu đó.

Tóm tắt

Mã hóa zero-knowledge nên được hiểu là tuyên bố về việc tách khóa khỏi nhà cung cấp: dịch vụ không giữ khóa bản rõ cần để giải mã nội dung đã lưu. Điều đó mạnh hơn mã hóa phía máy chủ dưới khóa do nhà cung cấp kiểm soát, nhưng không có nghĩa là khóa chỉ tồn tại trong bộ nhớ, siêu dữ liệu biến mất, hay mọi kiểu xâm nhập ứng dụng khách và thiết bị đều bị chặn. Hãy đánh giá sản phẩm theo hệ thống phân cấp khóa, thiết kế khôi phục, cách triển khai và đánh giá độc lập.

Đọc kiến trúc bảo mật