2.3.1. Giao thức STR
STR đƣợc tối ƣu hóa để làm việc với sự trễ của mạng truyền thông, nó đặc biệt hiệu quả đối với thỏa thuận nhóm khóa trong mạng lƣới có độ trễ cao. STR sử dụng một cây chìa khóa để quản lý nhóm khóa. Mỗi một nút Mi đƣợc gắn với một nút lá LNi . Mỗi nút nội bộ INi lại đƣợc liên kết với hai con là : nút con trái INi-1 và nút con phải LNi .
Hình 2.10: Mô tả một cây STR
Mỗi nút lá LNi chọn ngẫu nhiên một khóa ri bí mật, và tính bri = gri mod p Một nút nội bộ INi có một khóa ki và một khóa công khai bki = gki mod p Dễ dàng chứng minh
Kết quả ki chính là khóa chung của i phần tử sau khi các phần tủ trao đổi khóa DH Ví dụ:
[+] k1 =r1 bk1 = br1 [+] k2 =(bk1)r2 = (br2)k1 = gk1*r2 = g r1*r2 bk2 = gk2 [+] k3 =(bk2)r3 = (br3)k2 = gk2*r3 bk3 = gk3 [+] k4 =(bk3)r4 = (br4)k3 = gk3*r4 bk4 = gk4
Kết quả ta sẽ đƣợc khóa chung 4 phần tử là :
2.3.1.1. Khởi tạo khóa ban đầu trong giao thức STR
[+] Mỗi thành viên Mi ban đầu chọn ngẫu nhiên một khóa ri bí mật ngẫu nhiên, và tính bri = gri . Sau đó gửi broadcasts bri đến toàn mạng
[+] Thành viên M1:
Tính toán đệ quy tất cả
Sau quá trình tính toán trên M1 sẽ tính đƣợc khóa chung là Kn
Sau đó M1sẽ gửi broadcasts các giá trị bki với i = 2,…, n-1 đến tất cả thành viên trong mạng
[+] Các thành viên Mi với i>1 sẽ tính toán ki = (bki-1)ri và tính toán đệ quy tất cả giá trị kj với :
Sau quá trình tính đệ quy trên Mi sẽ tìm đƣợc khóa chung là Kn
Nhƣ vậy với một nút C bất kỳ sau khi tính toán nó sẽ lƣu trữ các giá trị :
rc
bri , bki , với i = 1…n (br1=bk1)
ki với i = c…n
2.3.1.2. Quá trình gia nhập nhóm trong giao thức STR
Giả sử nhóm hiện tại có n thành viên, một thành viên mới tham gia vào nhóm là Mn +1. Cây sẽ đƣợc cập nhật bằng cách tăng số nút lên n +1 và thêm một nút nội bộ INn+1 mới với hai con: con trái là nút nội bộ INn và con phải là nút lá LNn+1. Nút INn+1 sẽ trở thành nút gốc của cây mới.
Quá trình tính toán lại khóa sẽ theo thuật toán sau:
[+] Thành viên mới sẽ chọn cho mình một khóa bí mật rn+1 và tính brn+1 gửi brn+1 đến cho toàn bộ các thành viên trong nhóm.
Thành viên gốc cũ Mn :
Chọn lại cho mình một khóa rn và tính lại brn
Tính lại kn và bkn
Gửi broadcasts đến toàn mạng giá trị brn và bkn
[+] Đối với mỗi thành viên Mi tính toán lại khóa :
Nếu i = 1,…,n-2 tính kn và kn+1 Nếu i = n (gốc cũ) tính kn+1 = (brn+1)kn
Nếu i = n+1 (nút mới) tính ra khóa kn+1 = (bkn)^rn+1
Sau quá trình tính nhƣ trên ta đƣợc khóa chung cả nhóm là kn+1
Bảng 2.9: Bảng tính độ phức tạp tính toán quá trình gia nhập nhóm của STR
2.3.1.3. Quá trình rời nhóm trong giao thức STR
Giả sử chúng ta có một nhóm gồm n thành viên n và Mj là thành viên rời khỏi nhóm, với 1 ≤ j ≤ n. Chúng ta cần một nút đóng vai trò nút “bảo đảm” Ms để cập nhật các khóa ngẫu nhiên. Nếu j > 1, nút Ms là nút lá trực tiếp dƣới nút dời đi tức là Mj-1, nếu j=1 thì nút “bảo đảm” là M2. Sau đó cây sẽ đƣợc cập nhật và đánh số lại.
Hình 2.12: Quá trình rời nhóm của cây STR Quá trình tính toán lại khóa sẽ theo thuật toán sau:
[+] Tất cả các thành viên cập nhật lại số nút n = n – 1 Nút đóng vai trò nút cập nhật Ms :
Chọn lại cho mình một khóa rs và tính lại brs
Tính lại kn và ki , bki
Gửi broadcasts đến toàn mạng giá trị brs và bki với i = s…n-1 [+] Đối với mỗi thành viên Mi tính toán lại khóa :
Nếu i < s tính
Ta tính :
Sau đó đệ quy tính các khóa
Sau quá trình tính nhƣ trên ta đƣợc khóa chung cả nhóm là kn
Bảng 2.10: Bảng tính độ phức tạp tính toán quá trình rời nhóm của STR
2.3.1.4. Quá trình hợp nhất giữa các nhóm trong giao thức STR
a. Quá trình hợp nhất giữa hai nhóm
Khi các nhóm nhỏ đƣợc sáp nhập vào một nhóm lớn hơn, tức là đặt một cây nhỏ trực tiếp lên trên một cây có kích thƣớc lớn hơn. Nếu kích thƣớc hai nhóm bằng nhau, chúng ta có thể đặt thứ tự trên dƣới theo một số tiêu chí khác. Khi hợp nhất hai nhóm ta sẽ có một nút nội bộ INmới với hai nút con đƣợc tạo ra. Nút nội bộ của cây lớn hơn sẽ trở thành con trái của INmới , trong khi lá thấp nhất của cây nhỏ hơn sẽ trở thành con phải của INmới . Nút gốc của cây nhỏ hơn sẽ trở thành nút gốc của cây mới.
Quá trình tính toán lại khóa sẽ theo thuật toán sau:
Giả sử chúng ta có hai cây, lớn hơn T1 với n1 thành viên, và T2 ít hơn với n2 thành viên. Hai nút “ bảo đảm” cả hai cây đƣợc biểu thị bởi Ms1 và Ms2
[+] Hai nút “bảo đảm” sẽ trao đổi tất cả các khóa br và bk của hai nhóm cho nhau Sau khi hai cây hợp làm một thì nút “bảo đảm” là Ms1
[+] Nút “bảo đảm” Ms (s=s1)
Chọn lại khóa rs và tính brs
Tính lại ki và bkivới i = n1-1,…,n1+n2 -1 và tính kn1+n2 (khóa của nhóm)
Gửi broadcasts đến toàn mạng giá trị brs và bki với i = n1,…, n1+n2-1 [+] Đối với mỗi thành viên Mi với n=(n1+n2) tính toán lại khóa :
Nếu i < s tính :
Nếu i > s thì Ta tính :
Sau đó đệ quy tính các khóa
Sau quá trình tính nhƣ trên ta đƣợc khóa chung cả nhóm là kn1+n2
Bảng 2.11: Bảng tính độ phức tạp tính toán quá trình hợp nhất giữa hai nhóm của STR
b. Quá trình hợp nhất giữa m nhóm
Cũng tƣơng tự nhƣ quá trình hợp nhất giữa hai nhóm, nhƣng khác nhau ở bƣớc thứ nhất khi các nút “bảo đảm” sẽ không lần lƣợt truyền unicast các br và bk cho nhau mà thay vào đó các nút “bảo đảm” sẽ truyền broadcasts các br và bk đến toàn mạng. Giả sử ta có m nhóm với m nút “bảo đảm” Msi (1≤ i≤ m).
[+] Các nút “bảo đảm” sẽ trao đổi broadcasts tất cả các khóa br và bk của nhóm mình cho toàn mạng.
Sau khi các cây hợp làm một thì nút “bảo đảm” là Ms1 [+] Tất cả các thành viên : Cập nhật lại cây Tính lại số nút Nút “bảo đảm” Ms (s=s1) Chọn lại khóa rs và tính brs
Tính lại ki và bkivới i = s,…, n-1và tính kn (khóa của nhóm)
Gửi broadcasts đến toàn mạng giá trị brs và bki với i = s,…, n-1 [+] Đối với mỗi thành viên Mi với n=(n1+n2) tính toán lại khóa : Nếu i < s tính :
Nếu i > s thì Ta tính :
Sau đó đệ quy tính các khóa
Sau quá trình tính nhƣ trên ta đƣợc khóa chung cả nhóm là kn1+n2
Bảng 2.12: Bảng tính độ phức tạp tính toán quá trình hợp nhất giữa m nhóm của STR
2.3.1.5. Quá trình chia nhỏ nhóm trong giao thức STR
Việc chia nhỏ nhóm cũng tƣơng tự nhƣ quá trình rời nhóm, chỉ khác việc chọn nút “bảo đảm”. Ta sẽ chọn nút “bảo đảm” là nút lá trực tiếp dƣới nút dời đi thấp nhất, nếu M1 rời đi thì ta sẽ chọn nút “bảo đảm” là nút lá thấp nhất của cây còn lại
Quá trình tính toán lại khóa sẽ theo thuật toán sau: [+] Mỗi thành viên trong nhóm :
Cập nhật lại số nút n = n-p Với nút “bảo đảm” Ms:
Chọn lai khóa rs và tính brs
Tính lại kn và ki , bki
Gửi broadcasts đến toàn mạng giá trị brs và bki với i = s…n-1 [+] Đối với mỗi thành viên Mi tính toán lại khóa :
Nếu i < s tính
Nếu i > s thì Ta tính :
Sau đó đệ quy tính các khóa
Sau quá trình tính nhƣ trên ta đƣợc khóa chung cả nhóm là kn
Hình 2.14: Quá trình chia nhỏ nhóm của cây STR
2.3.1.6. Thiết lập lại khóa trong giao thức STR
Giả sử nhóm có n thành viên, và 1 thành viên Mr chọn lại khóa bí mật của mình. Quá trình thiết lập lại nhóm khóa sẽ diễn ra theo thuật toán sau :
[+] Đối với nút Mr
Chọn lại khóa rr và tính brr
Tính kn và (ki, bki) với i=r,…,n-1
Gửi broadcasts đến toàn mạng giá trị brr và bki với i = r…n-1 [+] Đối với mỗi thành viên trong nhóm
Nếu i < r tính kj với j = r…n
Nếu i > r tính kj với j = i…n
Bảng 2.14: Bảng tính độ phức tạp tính toán quá trình thiết lập lại khóa
2.3.2. Giao thức TGDH
Giao thức TGDH (Tree based Key Agreement – Tree Group Diffe Hellman) là một giao thức dựa trên ý tƣởng quản lý trao đổi khóa Diffe Hellman bằng một cây chìa khóa. Các khái niệm cần nắm rõ :
(l,v) : Nốt thứ v ở cấp cây thứ l k(l,v) : Khóa k của nốt (l,v)
bk(l,v) : Khóa công khai của nốt (l,v) T(i,j) : Cây con với nút gốc là (i,j)
Trong cây TGDH nút (0,0) là nút gốc là cấp 0. Chiều cao của một cây là cấp cao nhất của cây. Bất cứ một thành viên nào cũng đƣợc liên kết với một nút lá. Một nút (l,v) không là nút lá đƣợc gọi là nút nội bộ với hai nút con. Nút con trái của (l,v) là nút (l+1,2v) và nút con phải là nút (l+1,2v+1). Một nút (l,v) có khóa là k(l,v) và một khóa bkeys công khai tƣơng ứng là bk(l,v)=gk(l,v) mod p . Khóa k(l,v) có thể đƣợc tính toán đệ quy nhƣ sau:
Ví dụ :
Cho cây với chiều cao là h=3và 6 thành viên trong nhóm tƣơng ứng là M1, M2, M3, M4, M5, M6 theo hình sau. Các thành viên có khóa bí mật tƣơng ứng là r1, r2, r3, r4, r5, r6.
Hình 2.16: Mô tả cây khóa TGDH
Theo công thức đệ quy trên ta sẽ tính ra đƣợc khóa chung là:
Giả sử ta có một cây TGDH với n thành viên, vậy ta sẽ cần có n-1 nút nội bộ. Mỗi thành viên trong nhóm đều biết khóa công khai của các nút, trừ nút gốc và tất cả các khóa trên đƣờng dẫn khóa của nó. Bởi vậy một thành viên M(l,v) về chi phí bộ nhớ sẽ là 2n-2 cho khóa công khai và l+1 cho khóa trên đƣờng dẫn.
2.3.2.1. Khởi tạo khóa ban đầu trong giao thức TGDH
Giả sử chúng ta có một nhóm với n thành viên là M1, M2, …,Mn, đầu tiên các thành viên Mi và Mi+1 sẽ trao đổi khóa DH cho nhau với i=1...n. Sau bƣớc này ta sẽ có n/2 nhóm nhỏ gồm các cây con T1,T2…Tn/2, mỗi cây gồm một nút gốc và hai nút lá. Đối với mỗi cây con này ta chọn các thành viên gắn với nút là ngoài cùng bên phải
làm nút “bảo đảm”. Các nút “bảo đảm” của các cây con Ti và Ti+1 lại tiến hành gửi broadcasts toàn bộ khóa công khai cho nhau và các nút gốc của hai cây con sẽ tiến hành trao đổi khóa DH cho nhau tạo thành một cây mới với hai nút gốc cũ là hai nút nội bộ. Nếu một cây con nào không tìm thấy cây nào để trao đổi khóa DH thì nó giữ nguyên sẽ không làm gì cả. Quá trình cứ lặp lại nhƣ vậy đến khi nào chỉ còn một nhóm duy nhất.
Ví dụ : Giả sử ban đầu trong một nhóm ta có 6 thành viên là M1, M2, M3, M4, M5, M6. Ở vòng đầu tiên các thành viên M1 và M2, M3 và M4, M5 và M6 lần lƣợt trao đổi khóa DH cho nhau và tạo thành 3 cây TI1, TI2, TI3.
Bƣớc tiêp theo TI1 và TI2 sẽ gửi broadcasts toàn bộ khóa công khai của 2 cây cho toàn bộ các thành viên. Sau đó TI1 và TI2 sẽ hợp lại tạo thành một nhóm mới là TII1, còn cây TI3 sẽ giữ nguyên không làm gì và đổi tên thành cây TII2.
Ở vòng cuối cùng TII1 và TII2 sẽ gộp lại thành một cây TGDH cuối cùng là TIII bao gồm tất các thành viên của nhóm.
Hình 2.17: Quá trình khởi tạo một cây TGDH với 6 thành viên Việc tính toán khởi tạo nhóm khóa theo thuật toán sau :
[+] Đầu tiên tất cả các thành viên Mi với i=1…n sẽ gửi broadcasts cho toàn mạng khóa bki của mình.
[+] Tiếp theo các thành viên sẽ tiến hành tạo cây TDGH nhƣ trên đã nói. Để tiết kiệm chi phí bộ nhớ nó sẽ loại bỏ toàn bộ các bkeys, chỉ giữ lại bkeys của bản thân và hàng xóm của nó.
Mỗi thành viên (l,v) với v lẻ sẽ tạo một danh sách gồm các nút (l-i, v/2i) thỏa mãn:
1<i<l
Phần nguyên của v/2i-1 và v/2i-2 là số lẻ hoặc nút đó là một nút lá
Mỗi thành viên v lẻ sẽ tính toán khóa bkeys của nút nội bộ gắn với nó rồi gửi broadcasts cho toàn mạng. Sau đó các thành viên với v lẻ sẽ loại bỏ khỏi danh sách nút nội bộ gắn với nó (nút cha).
[+] Trong bƣớc tiếp theo mỗi thành viên trong mạng sau khi nhận đƣợc các khóa bkeys ở bƣớc trên sẽ tự mình tính toán các khóa bkeys trên đƣờng dẫn đến nút gốc (0,0). Nếu nút nào nằm trong danh sách của thành viên ở bƣớc trên thì khi tính toán bkeys của nó, thành viên đó sẽ gửi broadcasts cho toàn mạng và loại bỏ nút đó khỏi danh sách.
[+] Sau các bƣớc trên thì mỗi thành viên đều nắm đƣợc tất các bkeys trên đƣờng dẫn đến nút gôc (0,0). Các thành viên sẽ tự động tính toán ra khóa chung cả nhóm
Ví dụ : Trở lại với hình vẽ trên với 6 nút thành viên là M1, M2, M3, M4, M5, M6. [+] Ở bƣớc thứ nhất khi các thành viên gửi broadcasts cho toàn mạng khóa bki của mình. Các thành viên chỉ giữ lại các bkeys cần thiết.
M1 và M2 giữ lại bk(3,0) và bk(3,1). M3 và M4 giữ lại bk(3,2) và bk(3,2). M5 và M6 giữ lại bk(2,2) và bk(2,3). Các nút M1, M3, M5 do v chẵn nên không cần làm gì cả. Các nút M2, M4, M6 sẽ lập danh sách của mình M2 có {(2,0)} M4 có {(2,1), (1,0)} M6 có {(1,1)}
[+] Bƣớc tiếp theo M2, M4, M6 sẽ tính toán các bkeys của các nút cha tƣơng ứng là bk(2,0), bk(2,1), bk(1,1) và gửi broadcasts các bkeys đó cho toàn mạng. Đồng thời các nút tƣơng ứng (2,0), (2,1), (1,1) sẽ bị loại bỏ khỏi danh sách.
[+] Trong bƣớc 3, các nút M1, M2, M3, M4 sau khi nhận đƣợc các bkeys ở bƣớc trên sẽ tự tính ra bk(1,0). Do nút (1,0) nằm trong danh sách của nút M4 nên M4 sau khi tính ra bk(1,0) sẽ gửi broadcasts nó cho toàn mạng.
[+] Sau khi các thành viên có đủ các khóa bkeys sẽ tự tính ra khóa dung chung cả nhóm.
2.3.2.2. Quá trình gia nhập nhóm trong giao thức TGDH
Giả sử có thành viên Mn+1 gia nhập vào nhóm có n thành viên {M1,…,Mn}. Thành viên mới sẽ gửi broadcasts cho toàn mạng thông điệp gia nhập nhóm cùng khóa bkeys của nó. Sau khi nhận đƣợc thông điệp của thành viên mới, các thành viên cũ sẽ xác định điểm sẽ chèn nút thành viên mới trên cây TGDH. Nếu cây hoàn toàn cân bằng tức n=2h
(với h là chiều cao của cây) thì thành viên mới sẽ gia nhập vào nút gốc, ngƣợc lại nút mới sẽ đƣợc chèn vào lá ngoài cùng bên phải. Lý do ta chọn nhƣ vậy để giữ cho cây TGDH cân bằng nhất có thể.
Khi cây cập nhật nút mới, giống nhƣ giao thức STR ta chọn nút “bảo đảm” sẽ là lá ngoài cùng bên phải của cây con tại nút mới chèn vào. Một nút nội bộ mới sẽ đƣợc tạo ra. Thành viên mới gia nhập sẽ trở thành cây con phải và nút tại điểm chèn sẽ trở thành cây con trái của nút nội bộ mới.
Hình 2.18: Quá trình gia nhập nhóm trong giao thức TGDH
Hình 2.19: Cây TGDH sau khi thành viên mới gia nhập
Sau khi thành viên mới gia nhập quá trình tính toán lại khóa sẽ theo thuật toán sau: [+] Thành viên mới sẽ gửi broadcasts cho toàn mạng thông điệp gia nhập nhóm cùng khóa bkeys của nó
Cập nhật lại cây
Loại bỏ tất cả khóa của các nút trên đƣờng dẫn từ nút “bảo đảm” đến nút gốc (0,0)
Đối với nút “bảo đảm” Ms :