An ninh trên cơ sở năng lực tiềm tàng
Giới thiệu về an ninh trên cơ sở năng lực tiềm tàng

Một năng lực được định nghĩa là tham chiếu của một đối tượng bảo tồn, với tư cách là sở hữu của một tiến trình người dùng, ban cho tiến trình đó năng lực (cái tên là vì thế) để tương tác với một đối tượng đưới một số hình thức. Những hình thức tương tác này có thể bao gồm việc đọc dữ liệu liên quan của đối tượng, sửa đổi đối tượng, thi hành dữ liệu trong đối tượng như một tiến trình, cùng những quyền truy cập có thể hình dung được khác. Năng lực, theo tính hợp lý, có thể bao gồm một tham chiếu đơn nhất chỉ danh một đối tượng và thiết lập một hoặc nhiều quyền truy cập trên.
Giả dụ, trong phân khoảng bộ nhớ của tiến trình người dùng có một chuỗi ký tự sau:
/etc/passwd
Tuy chuỗi ký tự trên độc nhất chỉ danh một đối tượng trong hệ thống, song nó lại không định rõ những quyền truy cập và do đó, nó không phải là một năng lực. Giả sử, thay thế vào đó, chúng ta có hai giá trị sau:
/etc/passwd
    O_RDWR
Các giá trị trên vừa chỉ danh một đối tượng, vừa thiết lập những quyền truy cập (đọc và viết - ReaD/WRite). Tuy nhiên, nó vẫn không phải là một năng lực, bởi vì sở hữu của tiến trình người dùng (user process) đối với những giá trị trên chẳng nói lên một điều gì về tính hợp pháp của truy cập cả.
Bây giờ, giả sử chương trình ứng dụng người dùng thi hành thành công câu lệnh sau đây:
int fd = open("/etc/passwd", O_RDWR);
Biến fd lúc này giữ chỉ mục (index) của file descriptor trong bảng mô tả tập tin của tiến trình. Mô tả tập tin này chính là một năng lực. Sự tồn tại của nó trong bảng mô tả tập tin của tiến trình đủ để cho chúng ta nhận thức rằng tiến trình, quả thực, có quyền truy cập đối tượng một cách hợp pháp. Chúng ta nên lưu ý đến một đặc trưng chủ trốt của sự bố trí trên, ở chỗ, bảng mô tả tập tin nằm trong bộ nhớ của bộ điều hành trung tâm (kernel) và chương trình người dùng không thể điều khiển nó một cách trực tiếp được. Để bảo toàn tính trọn vẹn của chính sách an ninh, hệ điều hành phải đảm bảo rằng chỉ những hoạt động nhất thiết mới xảy ra đối với các năng lực trong hệ thống mà thôi.
Trong các hệ điều hành truyền thống, các chương trình ứng dụng thường giao thông liên lạc với nhau và với bộ lưu trữ dữ liệu (storage) bằng các tham chiếu, tương tự như những cái trong hai ví dụ đầu. Các tên đường dẫn (path names) thường được cung cấp trên hình thức các tham số của dòng lệnh (command-line parameters), được gửi qua các ổ cắm (socket), và được lưu trữ trên đĩa. Những tham chiếu này không phải là những năng lực, và nhất định phải được phê chuẩn (validated) trước khi chúng được sử dụng. Đối với những hệ thống này, câu hỏi trung tâm thường là "dưới quyền lực của ai mà một tham chiếu cho trước có thể được đánh giá (evaluated)?" Câu hỏi này trở thành một vấn đề nghiêm trọng đặc biệt đối với những tiến trình cần phải vận hành đại điện cho hai thực thể liên quan đến quyền lực (two authority-bearing entities) khác nhau. Chúng trở nên dễ bị ảnh hưởng bởi các lỗi trong lập trình, vẫn thường được gọi là Vấn đề đại diện lộn xộn ( Confused deputy problem), và rất thường xuyên gây nên hậu quả một lỗ hổng trong an ninh (security hole).
Trong hệ thống dựa trên cơ sở năng lực tiềm tàng, bản thân các năng lực được truyền tay giữa các tiến trình và bộ lưu trữ, dùng một cơ cấu mà hệ điều hành biết trước, để bảo tồn tính toàn vẹn của các năng lực.