Để dễ hình dung giải thuật, ta lấy ví dụ với tập 8 TBTDL, trong đó tập các TBTDL bất hợp pháp là R{u2,u4,u7,u8}, P{u1,u3,u5,u6} là tập các TBTDL hợp pháp. Các nút kể cả lá được gán tên gọi v1,v2,...,v15.
Hình 3. 9: Minh họa phân hoạch P thành các tập con của giải thuật SD
1) Khởi tạo
a. NCCDL thiết lập cây nhị phân đầy đủ T gồm các nút v1,v2,...,v15, trong đó các lá tương ứng với các TBTDL u1,u2,...,u8.
b. Các nút v1,v2,...,v7 (không phải là lá) được gán nhãn Label1,Label2,...,Label7. c. Các TBTDL u1,u2,...,u8 được thiết lập tập khóa “dài” là hàm của các nhãn
Giải thuật thiết lập khóa ”dài”, ví dụ cho TBTDL ui u3:
Hình 3. 10: Cây T biểu diễn toàn bộ 8 TBTDL
Xác định cây Steiner ST(u ): nối i u với gốc. i
ST(u ) gồm các nút 3 v1,v2,v5,v10. (Xem hình 3.12)
+ Đặt V(ST(ui)) là các nút thuộc ST(ui), trừ nút ui. V(ST(u ))={3 v1,v2,v5}.
+ Tìm các nút trên cây T (kể cả lá), liền kề với các nút thuộc V(ST(u )), ký hiệu i KeV(ST(u )). Các nút này thuộc cây T, nhưng không thuộc ST(i u ). i KeV(ST(u ))={3 v3,v4,v11}.
Hình 3. 11: Minh họa cây ST(u3) và các nút KeV(ST(u3))
Sinh khóa cho ui:
} Label {
Lui i,j , trong đó:
vi V(ST(ui)), vj KeV(ST(ui)) vj là con, hoặc cháu của vi
Theo giải thuật thiết lập khóa “dài” trên, tập khóa của các TBTDL u1,u2,...,u8 là: Lu {Label1,3,Label1,5,Label1,9,Label2,5,Label2,9,Label4,9}
1 .
Lu2 {Label1,3,Label1,5,Label1,8,Label2,5,Label2,8,Label4,8}. Lu {Label1,3,Label1,4,Label1,11,Label2,4,Label2,11,Label5,11}
3 .
Lu {Label1,3,Label1,4,Label1,10,Label2,4,Label2,10,Label5,10}
4 .
Lu5 {Label1,2,Label1,7,Label1,13,Label3,7,Label3,13,Label6,13}. Lu {Label1,2,Label1,7,Label1,12,Label3,7,Label3,12,Label6,12}
6 .
Lu7 {Label1,2,Label1,6,Label1,15,Label3,6,Label3,15,Label7,15}. Lu {Label1,2,Label1,6,Label1,4,Label3,6,Label3,14,Label7,4}
8 .
2) Mã hóa
a. NCCDL dùng giải thuật SD, phân hoạch P thành ba tập con gồm các TBTDL hợp pháp: (P{u1,u3,u5,u6})
Tập con 1: S4,9 S4S9 {u1,u2}{u2}{u1} sử dụng khóa “dài” L4,9. Tập con 2: S5,11S5 S11{u3,u4}{u4}{u3} sử dụng khóa “dài” L5,11. Tập con 3: S3,7 S3S7 {u5,u6,u7,u8}{u7,u8}{u5,u6} sử dụng khóa
Phân hoạch P thành các tập con:
Xác định cây Steiner ST(R): nối gốc và R. Khởi tạo S={}, T= ST(R).
+ Bƣớc 1: Tìm hai lá (vi,vj) trong T, tìm v là cha chung thấp nhất của (vi,vj). Đặt v là cha riêng của h v , i v là cha riêng của k v . j
(Nếu T chỉ có một lá, thì vi vj và vh vk v). + Bƣớc 2:
o Nếu vvh vi thì SSSh,i; Nếu vvh vi thì S không thay đổi.
o Nếu vvk vj thì SSSk,j; Nếu vvk vj thì S không thay đổi. + Bƣớc 3: T = T - {các con của v}, đánh dấu v là lá.
Tức là giữ lại cha chung thấp nhất v.
Lặp lại các bước từ 1 đến 3 cho đến khi T chỉ là 1 nút. Nếu còn v i gốc thì S=S Sgốc, i
Ví dụ: với R={u2,u4,u7,u8}:
Khởi tạo S={}, T=ST(R);
+ Bƣớc 1: Tìm hai lá (v9,v11) thuộc T, v2 là cha chung thấp nhất của (v9,v11), 4
v là cha riêng của v , 9 v là cha riêng của 5 v . 11 + Bƣớc 2:
Do v4 v9, nên SSS4,9 {S4,9}; Do v5 v11, nên SSS5,11{S4,9,S5,11};
+ Bƣớc 3: Loại bỏ v4,v9,v5,v11 khỏi T, đánh dấu v là lá. 2 Tức là giữ lại cha chung thấp nhất v . 2
+ Bƣớc 1: Tìm hai lá (v14,v15) thuộc T, v là 7 cha chung thấp nhất của (v14,v15). Đồng thời v là cha riêng của 7 v , 14 v cũng là cha riêng của 7 v . 15 + Bƣớc 2:
Do v trùng với cha riêng của 7 v , nên S không thay đổi, 14 S{S4,9,S5,11}; Do v trùng với cha riêng của 7 v , nên S không thay đổi, 15 S{S4,9,S5,11}; + Bƣớc 3: Loại bỏ v14,v15 khỏi T, đánh dấu v là lá. 7
Tức là giữ lại cha chung thấp nhất v . 7
Hình 3. 14: Cây Steiner ST(R) với R={v2, v7}
+ Bƣớc 1: Tìm hai lá (v2,v7) thuộc T, v là 1 cha chung thấp nhất của (v2,v7), 1
v là cha riêng của v , 2 v là cha riêng của 3 v . 7 + Bƣớc 2:
Do v trùng với cha riêng của 1 v , nên S không thay đổi, 2 S{S4,9,S5,11}; Do v1 v3 v7, nên SSS3,7 {S4,9,S5,11,S3,7};
+ Bƣớc 3: Loại bỏ v2,v3,v7 khỏi T, đánh dấu v là lá. 1 Tức là giữ lại cha chung thấp nhất v . 1
Kết quả: phân hoạch P là tập {S4,9,S5,11,S3,7}.
Các tập S4,9,S5,11,S3,7 có các khóa “dài” tương ứng L4,9,L5,11,L3,7, được sinh nhờ bộ sinh số ngẫu nhiên G:
L4,9 GM(Label4,9). L5,11GM(Label5,11). L3,7 GM(Label3,7). b. NCCDL chọn khóa phiên K.
c. NCCDL mã hóa khóa phiên K (một lần) với từng khóa L4,9,L5,11,L3,7 và truyền đi bản mã: [(4,9),(5,11),(3,7),E(K,L4,9),E(K,L5,11),E(K,L3,7)],FK(M) 3) Giải mã a. Tất cả 8 TBTDL nhận được bản mã: [(4,9),(5,11),(3,7),E(K,L4,9),E(K,L5,11),E(K,L3,7)],FK(M)
b. Phần đầu dùng các khóa “dài” L4,9,L5,11,L3,7 để mã hóa khóa phiên K, nên chỉ những TBTDL thuộc các tập S4,9,S5,11,S3,7 mới tính được K.
} {u
S4,9 1 , S5,11{u3}, S3,7 {u5,u6}.