Sử dụng môi trường linux như ubuntu hoặc wsl trên windows để cài đặt các thư viện cần thiết một cách dễ nhất.
Cài đặt Python phiên bản 3.6 trở lên
flex, bison, libssl-dev, python-dev, libgmp-dev
stanford pbc library
link
charm-crypto library v0.50
trên github link
Chạy lệnh python3 gui.py
để mở giao diện chương trình mô phỏng hệ thống.
Chọn 1 trong những lược đồ có sẵn và nhấn CASetup. Hệ thống sinh ra các global public parameters - các tham số toàn cục cần thiết cho hệ mật mã đa thuộc tính.
GPP được dùng trong tất cả các bước tiếp theo, nên cần chú ý lưu lại.
Nhập các thuộc tính của từng AA vào ô tương ứng mà nó quản lý và nhấn AASetup. Các AA thực hiện sinh cặp khóa công khai và khóa bí mật cho mình. Ví dụ AA thứ k sinh ra cặp khoá APK_k và ASK_k.
Lưu ý: Không trùng thuộc tính dù trong cùng 1 AA hay 2 AA khác nhau. Định dạng chuỗi nhập vào: "Attribute1 Attribute2 Attribute3"
Nhập dữ liệu cần mã hóa vào ô Data và chính sách truy cập vào ô Access Policy rồi nhấn Encrypt. Bước này sử dụng các khóa công khai của các AA là APK để mã hóa dữ liệu.
Ví dụ: Data: "Alice" và Access Policy dạng: "((DOCTOR OR RESEARCHER) AND (PHD OR PROFESSOR))" hoặc "(DOCTOR AND PHD) OR (RESEARCHER AND PROFESSOR)".
Với chính sách truy cập dạng CNF ((DOCTOR OR RESEARCHER) AND (PHD OR PROFESSOR)), nếu người dùng có ít nhất 1 cặp thuộc tính trong số (DOCTOR,PHD), (RESEARCHER,PROFESSOR), (DOCTOR,PROFESSOR) và (RESEARCHER,PHD) thì sẽ giải mã thành công.
Với chính sách truy cập dạng DNF ((DOCTOR AND PHD) OR (RESEARCHER AND PROFESSOR)), nếu người dùng có ít nhất 1 cặp thuộc tính (DOCTOR,PHD) hoặc (RESEARCHER,PROFESSOR) thì sẽ giải mã thành công.
Lưu ý: Cần chú ý đến việc nhập chính sách truy cập đúng định dạng. Nên chọn chính sách truy cập dạng DNF vì nó dễ hiểu và linh hoạt hơn, dạng CNF sẽ khó hiểu hơn đồng thời sinh ra nhiều chính sách con làm khó kiểm soát cũng như tăng thời gian thực thi.
Nhập id của người dùng vào ô GID và các thuộc tính của người dùng vào ô User attributes rồi nhấn Register. User sẽ được các AA thực hiện cấp các khóa bí mật tương ứng USK cho các thuộc tính mà nó quản lí tới người dùng đó. Bước này sử dụng các khóa bí mật của các AA.
Đầu vào có cả gid của người dùng nên kể cả 2 người dùng có thuộc tính giống nhau thì cũng sẽ có các khóa bí mật khác nhau.
Lưu ý: Không trùng GID người dùng đã có, do chỉ là mô phỏng nên sẽ thay thế người dùng đã tồn tại nếu nhập GID đã tồn tại.
Nhập id của người dùng vào ô GID rồi nhấn Decrypt. Do chỉ là mô phỏng nên sẽ không có bước nhập mật khẩu người dùng. Bước này sử dụng các khóa bí mật của người dùng được cấp là USK và các khoá bí mật của các AA quản lý người dùng đó là UASK để giải mã dữ liệu.
Nếu các thuộc tính của người dùng không đủ để giải mã, sẽ hiện thông báo lỗi. Còn nếu đủ, sẽ hiện thông báo thành công và kết quả giải mã.
Thời gian thực thi các bước sẽ khác nhau tùy thuộc vào số lượng thuộc tính, số lượng AA, số lượng thuộc tính của người dùng và chính sách truy cập.
Ngoài ra nó còn phụ thuộc vào loại đường cong elliptic được chọn để khởi tạo hệ thống, các tham số của từng loại nằm trong file pairingcurves.py
.
Ở đây chúng ta lựa chọn lược đồ MAABE YJ14 để đo thời gian từng bước. Dưới đây là kết quả thời gian thực thi các bước với các tham số khác nhau:
Các cặp loại A hay SS512 được xây dựng trên đường cong y^2=x^3+x
trên trường F_q
đối với một số số nguyên tố q=3 mod 4
. Cả G_1
và G_2
đều là nhóm điểm E(F_q) , vì vậy sự ghép cặp này là đối xứng. Cấp r là một thừa số nguyên tố nào đó của q+1.
Loại A1 hay SS1024 sử dụng cùng một phương trình nhưng có các trường khác nhau. Nó hỗ trợ các trường có bậc tổng hợp. Do các tham số lớn hơn nên thời gian thực thi các bước cũng lớn hơn.
Nhận xét: Thời gian thực thi các bước tăng theo số lượng thuộc tính sử dụng trong bước thiết lập AA và người dùng. Trong bước mã hóa, thời gian tăng theo số lượng thuộc tính trong chính sách truy cập. Trong bước giải mã, thời gian tăng theo số lượng thuộc tính của người dùng và số lượng chính sách con sinh ra từ chính sách truy cập. Riêng bước giải mã do có độ phức tạp là O(1) nên thời gian thực thi không thay đổi quá nhiều khi số lượng thuộc tính và số chính sách con tăng lên ít.