Tính toán tin cậy phân tán trong NICE

Một phần của tài liệu Đảm bảo công bằng trong các ứng dụng cộng tác ngang hàng (Trang 27)

Giả sử rằng với mỗi giao dịch trong hệ thống, mỗi người sử dụng liên quan tạo một bản tuyên bố được ký (và gọi là cookie) về chất lượng của giao dịch. Ví dụ: xem xét giao dịch đầy đủ t giữa những người sử dụng Alice và Bob trong đó Alice tiêu thụ một tập tài nguyên của Bob. Sau khi giao dịch hoàn thành, Alice kí một cookie với tình trạng c mà cô ấy đã hoàn thành đầy đủ giao dịch t với Bob. Bob có thể chọn lưu trữ cookie c này được kí bởi Alice cho việc sử dụng sau này để chứng tỏ độ tin cậy của Bob với những người sử dụng khác, bao gồm cả Alice. Như tiến trình hệ thống, mỗi giao dịch tạo một cookie mới và được lưu trữ bởi những người sử dụng khác. (Rõ ràng các cookie sẽ hết hạn hoặc trong trường hợp khác sẽ bị hủy).

Sau đây là mô tả giải thuật suy luận tin cậy trong phạm vi của đồ thị có hướng T và gọi là đồ thị tin cậy. Các đỉnh trong T thể hiện chính xác những người sử dụng trong hệ thống. Có một cạnh nối trực tiếp từ Alice tới Bob nếu và chỉ nếu Bob lưu giữ một cookie của Alice. Giá trị của cạnh Alice → Bob biểu thị Alice tin cậy Bob bao nhiêu, và phụ thuộc vào tập các cookie Bob nắm giữ của Alice. Chú ý rằng mỗi giao dịch trong hệ thống có thể thêm một cạnh có hướng mới khác trong đồ thị tin cậy, hoặc dán lại nhãn giá trị của cạnh đã có với giá trị tin cậy mới của nó.

Giả sử rằng phiên bản hiện tại của đồ thị tin cậy T là có hiệu lực với Alice và thừa nhận Alice mong muốn tính toán một giá trị tin cậy đối với Bob. Nếu Alice và Bob có các giao dịch trước, sau đó Alice có thể tìm kiếm giá trị của cạnh Alice → Bob trong T. Tuy vậy, giả sử Alice và Bob không bao giờ có

-28- một giao dịch trước. Alice có thể suy ra giá trị tin cậy đối với Bob bằng các đường có hướng tiếp theo (kết thúc ở Bob) trong đồ thị tin cậy.

2.6.1. Suy luận tin cậy trong đồ thị tin cậy

Xem xét đường dẫn có hướng A0 → A1 →…→ Ak trong T. Mỗi cặp kế tiếp là những người sử dụng có các giao dịch trực tiếp với người khác, và các giá trị cạnh là độ đo nói lên Ai tin cậy bao nhiêu Ai+1. Cho một đường dẫn như vậy, A0 có thể suy ra số các giá trị tin cậy hợp lý đối với Ak, bao gồm giá trị nhỏ nhất của một cạnh bất kì trong đường dẫn hoặc tích của các giá trị tin cậy dọc theo đường dẫn. Gọi các giá trị tin cậy suy ra được này là sự khỏe mạnh (strength) của đường dẫn A0 → Ak. Bài toán suy luận là những gì khó hơn tính toán độ khỏe mạnh của các đường dẫn tin cậy vì rằng có thể có nhiều đường dẫn giữa 2 nút, và những đường dẫn này có thể chia sẻ các cạnh hoặc các đỉnh. Suy luận tin cậy tập trung không tập trung ở bài viết này, nhưng nó quan trọng cho việc sử dụng giải thuật suy luận thiết thực. Trong mô tả sau đây, giả sử A (Alice) truy cập tới đồ thị tin cậy, và muốn suy ra giá trị tin cậy đối với B (Bob):

Đường dẫn khỏe nhất: Lấy một tập các đường dẫn giữa Alice và Bob, Alice chọn đường dẫn khỏe nhất và sử dụng giá trị tin cậy nhỏ nhất trong đường dẫn làm giá trị tin cậy đối với Bob. Độ khỏe của một đường dẫn có thể được tính bằng cách làm cực tiểu giá trị cạnh dọc theo đường dẫn hoặc tính tích của tất cả các cạnh dọc theo đường dẫn. Cho đồ thị tin cậy, việc đo độ tin cậy này có thể tính được bằng cách sử dụng tìm kiếm theo chiều sâu (depth-first search). Trong ví dụ mô tả trong hình 2, có sử dụng hàm cực tiểu để tính độ khỏe của đường dẫn. Trong ví dụ này, đường dẫn khỏe nhất là AEFB, và Alice suy ra mức tin cậy là 0.8 đối với Bob.

-29-

Phương pháp tính trung bình trọng số theo các đường dẫn rời rạc khỏe nhất: Thay cho sự lựa chọn chỉ đường dẫn khỏe nhất, Alice có thể chọn cách góp từ tất cả các đường dẫn rời rạc. Tập các đường dẫn rời rạc này không duy nhất, nhưng tập các đường dẫn rời rạc khỏe nhất là và có thể tính được bằng cách sử dụng các luồng mạng với sự thu hẹp luồng trong các đỉnh. Cho một tập các đường dẫn rời rạc, Alice có thể tính giá trị tin cậy đối với Bob bằng việc tính trung bình trọng số của độ khỏe của tất cả các đường rời rạc khỏe nhất. Trọng số được gán cho đường Alice→X→... →Bob là giá trị của cạnh Alice → X (được giải thích là Alice trực tiếp tin cậy X bao nhiêu). Trong ví dụ trong hình 2, ACDB là đường rời rạc khác (với độ khỏe mạnh 0.6), và suy ra giá trị tin cậy từ Alice tới Bob là 0.72. Cách tính như sau: Trước tiên tìm đường dẫn khỏe nhất (AEFB, hoặc 0.9 -> 0.8 ->0.9 với trọng sô cực tiểu 0.8), loại bỏ các cạnh đó, tìm đường khỏe nhất tiếp theo (ACDB, 0.6 -> 0.7 -> 0.9 với trọng số cực tiểu là 0.6). Như vậy, lấy 2 đường, Alice tính được trung bình cực tiểu của mỗi đường, trọng số tính được bằng giá trị của chặng (hop) sau cùng. Theo đó, đường AEFB có trọng số cực tiểu 0.8 với liên kết AE có giá trị 0.9, cũng tương tự đường ACDB có trọng số cực tiểu 0.6 với liên kết chặng sau cùng (AC) có trọng số 0.6. Vậy trung bình trọng số tính được là (0.6*0.6 + 0.8*0.9)/ (0.6 + 0.9) và bằng 0.72.

Cả hai giải thuật này đều thiết thực trong ý nghĩa rằng không có giá trị cạnh nào được sử dụng nhiều hơn một lần, và các giá trị tin cậy được tính luôn luôn bị chặn trên bởi giá trị tin cậy cực tiểu của một đường. Trước khi bất kì một giải thuật cục bộ như vậy được sử dụng, đồ thị tin cậy thu được có thể thay đổi, và các giá trị (cạnh) được gán cho các cookie. Chú ý rằng để suy ra độ tin cậy đối với Bob, Alice không cần toàn bộ đồ thị tin cậy, mà chỉ cần tập các đường từ cô ấy tới Bob.

2.6.2. Gán các giá trị cho các cookie

Về ý tưởng, sau mỗi giao dịch, có thể thực hiện được việc gán một số thực trong khoảng giá trị thực [0, 1] cho chất lượng của giao dịch và số được gán này là giá trị của cookie. Trong một số trường hợp, các giao dịch có thể được tổ chức như vậy là có thể thực hiện được: như trường hợp giả sử rằng Alice chuyển mã và cung cấp 400 Kbps dòng video cho Bob ở 128 Kbps, và theo sự chấp thuận trước, Bob kí một cookie với giá trị 0.75 cho Alice. Trường hợp giao dịch tương tự có thể cho kết quả một cookie với giá trị 0.9 nếu Alice

-30- thực hiện việc cung cấp dòng 256 Kbps. Trong nhiều trường, tuy vậy, không rõ phải gán số thực như thế nào để đảm bảo đo chất lượng các giao dịch. Như trong ví dụ trước, Alice có thể tuyên bố rằng cô ấy đã cung cấp dòng 256 Kbps, trong khi xảy ra xung đột mạng ở đường liên kết truy cập tới Bob làm giảm chất lượng xuống còn 128Kbs. Điều đó, trong thực tế, dễ tạo ra các trường hợp không thực hiện được việc kiểm tra chất lượng của dịch vụ. Tuy vậy, trong hầu hết các trường hợp đều có thể gán giá trị {0, 1} cho một giao dịch, nghĩa là có hay chăng một giao dịch thành công hay thất bại. Trong ví dụ trước, Bob và Alice thương lượng tỉ lệ ngưỡng (64 kbps) ở thời điểm mà Bob xem xét giao dịch thành công, và gán cookie giá trị 1 cho Alice bất chấp việc có hay chăng dữ liệu đã được phân phối ở 65.5 Kbps hoặc 400 Kbps. Xa hơn nữa, đối với nhiều giao dịch, như việc phân phối dòng phương tiện, thì có thể thực hiện với một phần để bỏ qua giao dịch nếu chất lượng dịch vụ ban đầu không vượt quá ngưỡng giá trị 0.

2.6.3. Suy luận tin cậy phân tán: Giải thuật cơ bản

Phần này mô tả những người sử dụng xác định thông tin tin cậy về những người sử dụng khác trong một hệ thống như thế nào. Giải thuật phân tán này thực hiện như sau: Mỗi người sử dụng lưu trữ một tập các cookie được kí, các cookie được kí này là kết quả nhận được từ các giao dịch trước đó. Giả sử Alice muốn sử dụng một vài tài nguyên ở nút của Bob. Có 2 khả năng: hoặc Alice đã có sẵn các cookie của Bob, hoặc cả Alice và Bob không có bất kì một giao dịch nào như vậy. (Có một khả năng thứ 3 là Alice đã loại bỏ các cookie của Bob, nhưng trường hợp này được coi giống như Alice không có cookie của Bob). Trong trường hợp Alice sẵn có các cookie của Bob, cô ấy giới thiệu chúng cho Bob. Bob có thể xác nhận rằng các cookie này thực sự là của anh ấy từ khi anh ấy kí chúng. Nhận được các cookie này, Bob có thể tính ngay giá trị tin cậy đối với Alice.

Trong trường hợp khi mà Alice không có cookie của Bob. Vậy thì Alice sẽ tìm kiếm các cookie của Bob từ các nút của những người mà cô ấy nắm giữ các cookie. Giả sử Alice có một cookie của Carol và Carol có cookie của Bob. Carol đưa cho Alice một bản sao các cookie mà cô ấy nhận từ Bob, Alice sau đó sẽ giới thiệu 2 cookie cho Bob: một của Bob đưa cho Carol và một của Carol đưa cho Alice, kết quả là Alice nói với Bob: “Anh không biết tôi nhưng tôi tin tưởng Carol và Carol tin tưởng tôi”. Nói chung Alice có thể tạo nhiều “đường

-31- cookie” như vậy bằng cách tìm kiếm đệ quy qua hàng xóm của cô ta. Kết quả là Alice làm ngập lụt các truy vấn bởi các cookie của Bob dọc theo các cạnh cookie mà các cạnh này kết thúc ở mỗi nút, bắt đầu với nút sở hữu của cô ta. Sau khi tìm kiếm hết, cô ta có thể mô tả Bob bằng sự kết hợp các đường dẫn có hướng mà tất cả các đường dẫn này bắt đầu từ Bob và kết thúc ở Alice. Lưu ý rằng các đường dẫn cookie này đúng bằng sự kết hợp các cạnh có hướng trong đồ thị tin cậy mà được sử dụng trong suy luận tin cậy tập trung. Thêm nữa, với tập các cookie này, Bob có thể sử dụng sơ đồ tập trung bất kì để suy ra giá trị tin cậy đối với Alice.

Sơ đồ cơ bản này có một vài điểm lưu ý là:

Nếu Alice muốn sử dụng tài nguyên của Bob, cô ta sẽ tìm kiếm các cookie của Bob. Điều này tương phản với sơ đồ tương tự trong đó các nút tự chúng giữ các bản ghi của các giao dịch trước của chúng. Không như thiết lập, nếu Bob không biết Alice, anh ta sẽ bắt đầu tìm kiếm Alice qua các nút mà anh ta tin cậy. Một người sử dụng nguy hiểm Eve có thể dễ dàng gắn một cuộc tấn công từ chối dịch vụ (DoS) bằng cách liên tiếp hỏi các nút khác để tìm kiếm các ủy nhiệm của Eve. Trong trường hợp các nút chuyển các truy vấn đại diện các nút khác chỉ nếu các nút ủy quyền đã kí cookie, và như vậy, ngầm tin cậy chúng ở một chừng mực nào đó.

Alice dự trữ các cookie được thừa nhận dưới dạng “X tin cậy Alice”. Hơn nữa, Alice chỉ dành vùng dự trữ các đối tượng mà cô ta có thể sử dụng cho lợi ích của mình, và như vậy, có một động cơ xây dựng trong hệ thống để dự trữ các cookie. Trong thực tế, nếu Bob kí một cookie giá trị thấp cho Alice, cô ta có thể loại bỏ các cookie này ngay, vì lẽ điều này giống như có một công bố rằng Bob không tin cậy Alice. Nói chung, người sử dụng dự trữ các cookie nhiều nhất cho mục đích sở hữu của họ, và không chuyển các thông báo của những người sử dụng mà họ không tin cậy.

Dự trữ bản ghi giao dịch trong hệ thống là hoàn toàn phân tán, và nếu hai nút quản lý một số lớn các giao dịch giả mạo, chỉ khi chúng chọn nắm giữ trạng thái kết quả. Ngược với điều này, là trong dự trữ giao

-32- dịch trung tâm, các nút này có thể dễ dàng gắn một tấn công DoS bằng cách làm ngập dự trữ giao dịch với các bản ghi giao dịch giả mạo.

2.6.4. Phép lọc

Truy vấn làm lụt phần nào không có khả năng sử dụng các tài nguyên phân tán, và những nút nguy hiểm thường xóa mọi thông tin về những hành động xấu của chúng bằng cách vứt bỏ các cookie giá trị thấp mà chúng nhận được. Sau đây là 3 cách lọc của sơ đồ cơ bản.

- Tìm kiếm hiệu quả: Thủ tục làm ngập lụt đệ qui được mô tả ở trên tìm

tất cả các cookie tồn tại đối với ủy nhiệm đã cho. Tuy vậy nó rất không hiệu quả, vì lẽ nó thăm số nút ở mỗi bậc lớn lên theo hàm mũ. Hơn nữa, trừ phi việc làm lụt bằng lí do này hay lí do khác được rút ngắn, ví dụ bằng việc sử dụng thu hồi trùng lặp hoặc bằng việc sử dụng trường thời gian sống (time-to-live) trong các truy vấn, thì một vài tìm kiếm có thể luân chuyển mãi trong hệ thống.

Việc tìm kiếm được xem xét để sử dụng cấu trúc tìm kiếm P2P, giống như Chord, để xác định các cookie. Các giao thức sử dụng ở đây giống như nhiều giao thức định tuyến trong Internet và có những đặc tính như: không thừa nhận sự tồn tại của các bảng định tuyến, phải thiết thực để chống lại sự mất mát các packet, chống lại các nút nguy hiểm,...và để việc tìm kiếm hiệu quả hơn còn phải cần tới cơ cấu hỗ trợ khác nữa.

Thay cho mọi đường dẫn tương ứng tới tất cả các cookie, ta chỉ chuyển tiếp một truy vấn tới một số các nút (điển hình là 5) từ một nút bất kì. Tuy vậy, nếu chúng ta chọn chuyển tiếp các nút ngẫu nhiên, chúng ta vẫn sẽ có một phép tìm kiếm hàm mũ, mặc dù với cơ số nhỏ hơn! Thay vì như vậy, chúng ta mở rộng giao thức cơ bản như sau: bất cứ khi nào một nút nhận một cookie từ các nút khác, nó cũng nhận bản ghi nhớ của tất cả các cookie của các nút đó ở các

-33- nút ở xa. Vì lẽ đó, trong cài đặt số các cookie ở mỗi nút là hoàn toàn nhỏ (điển hình khoảng 40 so với 2048 nút hệ thống), bản ghi nhớ này có thể được mã hóa sử dụng ít hơn 1000 bits trong bộ lọc Bloom. Như vậy, không gian dự trữ được yêu cầu cho bản ghi nhớ là không đáng kể (khoảng 128 bytes) nhưng chúng cho phép chúng ta trực tiếp tìm kiếm các cookie đặc biệt với sự chính xác rất cao. Tư tưởng sử dụng bản ghi nhớ trong tìm kiếm được sử dụng sớm, ví dụ như tìm kiếm trong bộ nhớ cache.Trong thực tế, trường hợp tìm kiếm cơ bản sử dụng các bộ lọc Bloom yếu; trong các thí nghiệm cho thấy không cần sử dụng mọi bộ lọc Bloom yếu – chỉ một mức lọc là đủ. Cuối cùng mỗi nút cũng giữ một bản ghi nhớ các tìm kiếm thực thi gần đây và sử dụng bản ghi nhớ này để ngăn chặn các truy vấn trùng nhau.

Trong cài đặt, khi chọn các nút để chuyển tiếp, luôn chọn các nút mà bản ghi nhớ biểu thị chúng có cookie đối với node cần tìm kiếm. Tuy vậy có thể xảy ra rằng không gặp trong bản ghi nhớ bất kì ở một nút; trong trường hợp này, ta chọn lại các nút để chuyển tiếp một cách ngẫu nhiên. Vì vậy chỉ chuyển tiếp ngẫu nhiên các nút được chọn nếu truy vấn ở bên trong số các chặng định trước xa nguồn truy vấn. Như vậy, trong phiên bản tìm kiếm cuối cùng, một truy vấn xảy ra từ nguồn, có thể chọn các nút ngẫu nhiên, nhưng việc làm lụt nhanh chóng được dừng lại trừ phi gặp (hit) trong bản ghi nhớ chặng tiếp theo.

Ví dụ: Minh họa thủ tục tìm kiếm dựa trên bản ghi nhớ (hình 3):

Alice muốn sử dụng tài nguyên Bob có, nhưng lại không có các cookie

Một phần của tài liệu Đảm bảo công bằng trong các ứng dụng cộng tác ngang hàng (Trang 27)