An ninh trên cơ sở năng lực tiềm tàng
Năng lực

Năng lực (capability) (trong một số hệ thống còn được gọi là chìa khóa) là một khái niệm chủ trốt trong an ninh máy tính. Nó ám chỉ đến một giá trị dùng để tham chiếu một đối tượng cùng với một tập hợp các quyền truy cập liên quan. Chương trình ứng dụng trong một hệ thống dựa trên cơ sở năng lực tiềm tàng nhất định phải sử dụng một năng lực để truy cập một đối tượng. Năng lực là một biểu hiện quyền lực có thể truyền giao (communicable token of authority).
Một năng lực thường được thực hiện như một cấu trúc dữ liệu có đặc quyền, trong đó bao gồm một bộ phận chỉ định những quyền truy cập nhất định, và một bộ phận chỉ danh đối tượng đơn nhất, cho phép người ta truy cập đối tượng. Trên thực tế, trong các hệ điều hành truyền thống, năng lực được dùng tương tự như file descriptor, song lại được dùng để truy cập tất cả các đối tượng trong hệ thống. Nó thường được hệ điều hành lưu trữ trong một danh sách, cùng với một số cơ cấu bên trong, ngăn chặn chương trình ứng dụng sửa đổi nội dung của năng lực một cách trực tiếp (như để giả mạo quyền truy cập hoặc để thay đổi đối tượng mà nó đang hướng vào).
Chương trình ứng dụng sở hữu các năng lực có thể thao tác các chức năng  (functions) đối với chúng, chẳng hạn như truyền chúng sang cho các chương trình ứng dụng khác, đổi chúng xuống thành một cái có đặc quyền kém hơn, hoặc xóa bỏ chúng.
Năng lực tiềm tàng đạt được mục tiêu nâng cấp an ninh trong hệ thống của chúng, bằng cách nó được sử dụng để thay vào chỗ những tham chiếu có thể bị giả mạo. Một tham chiếu có thể bị giả mạo (lấy ví dụ, một tên đường dẫn (path name)) chỉ danh một đối tượng, song không xác định rõ quyền truy cập thích hợp đối với đối tượng, và chương trình ứng dụng người dùng hiện đang giữ các tham chiếu ấy. Hậu quả là, bất cứ một cố gắng nào truy cập đối tượng được tham chiếu, đều nhất định phải được hệ điều hành phê chuẩn, thông thường phải thông qua việc sử dụng một danh sách điều khiển truy cập (access control list - ACL). Ngược lại, trong một hệ thống dựa trên cơ sở năng lực thuần chủng (pure capability-based system), người ta chỉ cần chương trình ứng dụng người dùng sở hữu các năng lực đó là nó đã có quyền sử dụng đối tượng đang được tham chiếu, chiểu theo những quyền mà năng lực đã xác định trước. Trên lý thuyết, một hệ thống dựa trên cơ sở năng lực thuần chủng loại trừ được nhu cầu về danh sách điều khiển truy cập, hoặc những cơ chế tương tự, bằng cách ban cho các thực thể, tất cả và chỉ những năng lực, mà chúng thực sự cần phải có mà thôi.
Tuy nhiều hệ điều hành cho thực thi những phương tiện tương tự với các năng lực, bằng cách sử dụng các mô tả tập tin hoặc các chi điều khiển tập tin (file handles) — lấy ví dụ, trong BSD UNIX, các mô tả tập tin có thể bị hủy bỏ (bị khép lại), có thể được thừa kế bởi các tiến trình con (child processes), hoặc có thể được truyền gửi sang các tiến trình khác thông qua các ổ cắm (sockets) — hiện có một số trở ngại ngăn cản tất cả các lợi ích của một hệ thống dựa trên cơ sở năng lực thuần chủng được chấp nhận trong môi trường của hệ điều hành truyền thống. Trở ngại chủ yếu ở đây chính là thực trạng các thực thể tuy có thể có sở hữu những năng lực (như các tiến trình và các tập tin), song không thể trở thành các chủ thể bền bỉ (persistent entities) theo một phương thức làm cho nó có thể duy trì tính toàn vẹn (integrity) của các thông tin bảo an (secure information) mà năng lực đại diện. Hệ điều hành không thể đặt lòng tin vào một chương trình ứng dụng người dùng đọc lại cho nó biết một năng lực mà không xáo trộn (tamper with) tham chiếu của đối tượng hoặc các quyền truy cập. Hậu quả là, khi một chương trình ứng dụng muốn chiếm lại truy cập vào một đối tượng  đang được tham chiếu trên đĩa, hệ điều hành nhất định phải có một phương cách nào đó để phê chuẩn yêu cầu truy cập, và do đó, một danh sách điều khiển truy cập hoặc một cơ chế tương tự nào đó là những cái bắt buộc phải có (mandated).
Một tiếp cận mới lạ để giải quyết vấn đề này là việc sử dụng một hệ điều hành trực giao bền bỉ (orthogonally persistent operating system). (Việc này đã được thực hiện trong máy Flex). Xem thêm trong bài Ten15). Trong một hệ thống như vậy, người ta không cần phải hủy bỏ các thực thể và cũng không cần phải hủy bỏ hiệu lực của các năng lực, do đó nó cần phải có một cơ chế tương tự như danh sách điều khiển truy cập, để phục hồi lại các năng lực tại một thời điểm khác, sau đó. Trong bất kỳ tình huống nào, hệ điều hành cũng sẽ quản lý tính toàn vẹn, cũng như tính bảo an, của các năng lực được bao gồm trong tất cả các bộ lưu trữ (contained within all storage), cả những cái linh động (volatile) lẫn những cái bất linh động (nonvolatile); một phần, bằng cách tự thi hành tất cả các nhiệm vụ sắp xếp thứ tự (serialization), thay vì đòi hỏi chương trình người dùng làm việc đó, như trong trường hợp của đại bộ phận các hệ điều hành. Do chương trình người dùng không phải gánh vác trách nhiệm này nữa, chúng ta vừa không cần phải đặt lòng tin vào nó tái sinh năng lực tiềm tàng hợp pháp, vừa không phải phê chuẩn những yêu cầu đối với việc truy cập dùng một cơ chế điều khiển truy cập.
Chớ nhầm lẫn giữa quan niệm năng lực tiềm tàng được bàn luận trong bài này với "Năng lực tiềm tàng" trong POSIX 1e/2c, vì năng lực tiềm tàng trong POSIX 1e/2c chỉ là những đặc quyền chưa được trau chuốt (coarse-grained privileges), không thể truyền giao giữa các tiến trình được.