Mô phỏng hệ thống bỏ phiếu điện tử cho hai bài toán cơ bản

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống bỏ phiếu điện tử sử dụng mật mã (Trang 50 - 58)

3.1.1. Khảo sát thực trạng và phát biểu bài toán

3.1.1.1. Bỏ phiếu dạng có/không

Qua khảo sát thực tế có thể thấy rằng hầu hết các hội nghị, cuộc họp, buổi báo cáo tổng kết… khi cần lấy ý kiến đánh giá của các đại biểu về một vấn đề nào đó đều thông qua hình thức biểu quyết giơ tay (đồng ý / không đồngý).

Tuy nhiên cùng với sự phát triển của khoa học kỹ thuật, nhu cầu trao đổi thông tin nhanh chóng và tiết kiệm thì hình thức họp trực tuyến đã được áp dụng vào các cuộc họp giao ban hành tuần/tháng/quý giữa lãnh đạo Tỉnh với các Huyện, Thành Phố, ngoài ra còn có các cuộc họp trực tuyến giữa lãnh đạo Tỉnh với các Bộ ban ngành khác. Trong hình thức họp trực tuyến, khi cần lấy biểu quyết về một vấn đề nào đó thì biểu quyết bằng giơ tay không hiệu quả và thiếu tính khách quan (do camera đặt cố định, không bao quát hết các thành viên tham gia họp), bên cạnh đó do yêu cầu muốn ẩn danh ý kiến biểu quyết của các đại biểu (đại biểu không muốn ban kiểm phiếu biết được mình biểu quyết là đồng ý hay không đồng ý, ban kiểm phiếu chỉ có thể biết được tổng số phiếu nhưng không biết được từng nội dung của lá phiếu). Từ yêu cầu thực tế đó, luận văn đưa ra phương án giải quyết dựa trên tính chất đồng cầu của hệ mã Elgamal (nội dung chi tiết thuật toán trình bày trong mục 2.2.3). Theo phương pháp này thì nội dung lá phiếu sẽ được mã hóa và gửi về ban kiểm phiếu, ban kiểm phiếu không biết được nội dung lá phiếu nhưng xác minh được nguồn gốc của lá phiếu, ban kiểm phiếu sẽ tính được kết quả của cuộc bỏ phiếu từ các lá phiếu được mã hóa.

3.1.1.2. Bỏ phiếu dạng chọn L trong K

Giả sử trong cuộc bỏ phiếu bầu cử hội đồng nhân dân cấp tỉnh có 168 ứng cử viên được chọn tại một số tổ bầu cử, tại mỗi tổ bầu cử có 7 ứng cử viên và chọn ra 3 đại biểu hội đồng nhân dân: N1, N2,… N3. Ban kiểm phiếu gồm có 3 người bên gồm đại điện tổ bầu cử và 2 cử tri được chọn ngẫu nhiên bất kỳ: A1, A2, A3. Theo luật bầu

cử và thể lệ bầu cử thì kết quả của cuộc bầu cử chỉ được công nhận khi có ít nhất là 2/3 số cử tri đi bầu cử, tuy nhiên không phải lúc nào các cử tri cũng có điều kiện đến trực tiếp để bầu cử và có không ít các cử tri không thể đến tận nơi để bầu cử. Do vậy, để giải quyết vấn đề này, có thể sử dụng phương án bầu cử điện tử. Các cử tri gửi lá phiếu của mình tới ban kiểm phiếu thông qua mạng Internet.

Đây là cuộc bỏ phiếu chọn 3 trong 7 người, giả sử cử tri không tin vào độ trung thực của các thành viên trong ban kiểm phiếu, để giải quyết vấn đề họ đã chia lá phiếu của mình thành các mảnh tin và gửi cho mỗi người kiểm phiếu một mảnh. Ban kiểm phiếu chỉ có thể biết nội dung của lá phiếu khi và chỉ khi có đủ các thành viên của ban kiểm phiếu ghép các mảnh của lá phiếu lại với nhau. Nội dung lá phiếu được chia thành nhiều mảnh tin, từng mảnh lại được mã hóa – mảnh mã trước khi gửi về ban kiểm phiếu.

Từ yêu cầu của bài toán và qua nghiên cứu tìm hiểu, luận văn sử dụng sơ đồ chia sẻ bí mật Shamir để chia nhỏ lá phiếu, phối hợp với tính chất đồng cấu của hệ mật Elgamal để khôi phục lại lá phiếu ban đầu khi có đủ các mảnh mã (nội dung chi tiết thuật toán trình bày trong mục 2.2.3).

3.1.2. Chương trình demo

3.1.2.1. Cấu trúc chương trình

Trong phần này, luận văn trình bày về cách thức xây dựng và sử dụng chương trình Demo nhằm kiểm chứng tính đúng đắn của hai bài toán bỏ phiếu điện tử thường gặp. Trên thực tế, để thiết kế được một chương trình hoàn chỉnh, ngoài modul mã hóa và giải mã còn cần rất nhiều modul hỗ trợ khác như: xác thực quyền bầu cử của cử tri, phân bổ khóa, xác định tính hợp lệ của phiếu bầu…Tuy nhiên, do giới hạn về mặt thời gian nghiên cứu nên luận văn chỉ tập trung vào làm rõ việc sử dụng thuật toán mã hóa Elgamal trong mã hóa sự lựa chọn của cử tri nhằm đảm bảo tính tự do trong

lựa chọn và sử dụng sơ đồ chia sẻ bí mật Shamir nhằm đảm bảo tính kiểm tra được

và minh bạch trong bầu cử.

Chương trình Demo được xây dựng trên nền phần mềm Matlab 2019a. Cấu trúc chương trình cụ thể như sau: Chương trình chính; Nhóm các thủ tục cho Bài toán bỏ phiếu có/không đồng ý; Nhóm các thủ tục cho Bài toán bỏ phiếu chọn L trong K.

3.1.2.2. Chương trình chính

Gồm file main.fig để tạo ra giao diện sử dụng và file main.m cho việc thực thi các thủ tục gọi hai bài toán bỏ phiếu: Bài toán bỏ phiếu có/không đồng ý, Bài toán bỏ phiếu “chọn L trong K”.

3.1.2.3. Nhóm các thủ tục cho Bài toán bỏ phiếu có/không đồng ý

Gồm một số các file với các mục đích cụ thể được mô tả trong Bảng 3.2 Bảng 3.1. Các file chính để minh họa Bài toán bỏ phiếu có/không đồng ý

Tên File Mục đích

bophieucokhong.fig Tạo giao diện GUI trên nền Matlab thuận tiện cho việc sử dụng bophieucokhong.m Tiến hành các thủ tục khi người dùng thao tác trên giao diện

GUI của chương trình bỏ phiếu có/không đồng ý

phieubauck.m Tạo ngẫu nhiên n phiếu hợp lệ bầu đại diện cho sự lựa chọn của n cử tri

guiphieuck.m Mã hóa phiếu bầu theo thuật toán mã hóa Elgamal

kiemphieuck.m Giải mã phiếu bầu và đưa ra kết quả theo dựa trên tính chất đồng cấu của thuật toán mã hóa Elgamal

3.1.2.4. Nhóm các thủ tục cho Bài toán bỏ phiếu chọn L trong K

Gồm một số các file với các mục đích cụ thể được mô tả trong Bảng 3.3 Bảng 3.2. Các file chính để minh họa Bài toán bỏ phiếu “chọn L trong K”

Tên File Mục đích

bophieuL_K.fig Tạo giao diện GUI trên nền Matlab thuận tiện cho việc sử dụng bophieuL_K.m Tiến hành các thủ tục khi người dùng thao tác trên giao diện

GUI của chương trình bỏ phiếu “chọn L trong K

khoitaolk.m Tạo khóa bí mật và công khai theo thuật toán mã hóa Elgamal manglk.m Tạo ngẫu nhiên một phiếu bầu hợp lệ (gồm L bít 1 đại diện cho

lựa chọn đồng ý L ứng viên tương ứng với L trong K vị trí) taophieulk.m Tạo ngẫu nhiên n phiếu bầu hợp lệ đại diện cho sự lựa chọn của

guiphieulk.m

Mã hóa phiếu bầu theo thuật toán mã hóa Elgamal. Ứng với mỗi lá phiếu, tính toán N mảnh phiếu chia sẻ bí mật Shamir để gửi cho N thành viên ban kiểm phiếu

ketqualk.m

Các thành viên ban kiểm phiếu ghép các mảnh phiếu theo thuật toán chia sẻ bí mật Shamir, giải mã phiếu bầu và đưa ra kết quả theo dựa trên tính chất đồng cấu của thuật toán mã hóa Elgamal. Sắp xếp và hiển thị thứ tự trúng cử của L trong K ứng viên.

3.1.3. Một số kết quả đạt được

3.1.3.1. Chương trình chính

Chạy file main.m ta được giao diện như Hình 3.1. Trên giao diện này, để tiến hành phân tích bài toán bỏ phiếu có/không đồng ý ta click chuột vào nút Bỏ phiếu dạng Có/Không. Để phân tích bài toán bỏ phiếu “chọn L trong K” ta click chuột vào nút Bỏ phiếu dạng chọn L trong K.

Hình 3.1. Giao diện chương trình chính

3.1.3.2. Chương trình bỏ phiếu có/không đồng ý

Trên giao diện của chương trình chính, click chuột vào nút Bỏ phiếu dạng Có/Không hoặc chạy chương trình bophieucokhong.m ta được giao diện như Hình 3.2

Hình 3.2. Giao diện chương trình bỏ phiếu có/không đồng ý

 Bước 1. Khởi tạo khóa bí mật và công khai

Từ giao diện của chương trình, ta nhập giá trị của phần tử sinh g cũng như khóa bí mật a. Sau khi click vào nút khởi tạo, khóa công khai h được tính theo công thức

a

hg . Ví dụ chọn g3, a5ta được h243.

 Bước 2. Bỏ phiếu

Trên giao diện của chương trình, ta nhập giá trị của số cử tri n và khi click vào nút

bỏ phiếu, chương trình phieubauck.m được gọi và cho ta kết quả bầu cử của n phiếu

với bít 1 đại diện cho đồng ý và 0 đại diện cho sự lựa chọn không đồng ý. Cụ thể trong ví dụ trên, khi chọn n=15, kết quả ngẫu nhiên được tạo ra như sau:

V= [1 1 0 1 1 0 0 1 1 1 0 1 1 0 1]

 Bước 3. Gửi phiếu

Khi click vào nút gửi phiếu , chương trình guiphieuck.m sẽ tạo ra n giá trị k ngẫu nhiên ứng với n cử tri. Từ các giá trị ngẫu nhiên này sẽ tiến hành mã hóa sự lựa chọn

của các cử tri theo thuật toán mã hóa Elgamal. Tương ứng với mỗi sự lựa chọn T của cử tri (0 hoặc 1), một cặp mã ( , )x y (g h gk, k T) được gửi đến ban kiểm phiếu. Trong ví dụ này, khi K=[ 1 4 9 8 10 7 0 8 9 7 8 7 4 7 2], ban kiểm phiếu sẽ nhân được kết quả sau:

Phiếu = (3^1,243^1*3^1); (3^4,243^4*3^1); (3^9,243^9*3^0) (3^8,243^8*3^1); (3^10,243^10*3^1); (3^7,243^7*3^0); (3^0,243^0*3^0) (3^8,243^8*3^1); (3^9,243^9*3^1); (3^7,243^7*3^1); (3^8,243^8*3^0) (3^7,243^7*3^1); (3^4,243^4*3^1); (3^7,243^7*3^0); (3^2,243^2*3^1) Phiếu= (3,729); (81,10460353203) (19683,2954312706550833600000) (6561,36472996377170788000) (59049,2153693963075557700000000) (2187,50031545098999704) (1,1) (6561,36472996377170788000) (19683,8862938119652501400000) (2187,150094635296999100) (6561,12157665459056929000) (2187,150094635296999100) (81,10460353203) (2187,50031545098999704) (9,177147) .

 Bước 4. Kiểm phiếu

Khi click vào nút kiểm tra , thay vì giải mã từng cặp phiếu chương trình

kiemphieuck.m sẽ dựa trên tính chất đồng cấu của thuật toán mã hóa Elgamal để tính

giá trị (X,Y) từ n cặp (x,y)nhận được, sau đó giải mã ra giá trị kq

mg (với kq là tổng số phiếu đồng ý). Với ví dụ trên ta có

X= 26183890704263137000000000000000000000000000

Y=72674732958820581000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000

m= 59049=310. Kết quả giải mã là 10 cử tri đồng ý và 5 cử tri không đồng ý.

3.1.3.3. Chương trình bỏ phiếu chọn L trong K

Trên giao diện của chương trình chính, click chuột vào nút Bỏ phiếu dạng chọn L/K hoặc chạy chương trình bophieuL_K.m ta được giao diện như Hình 3.3.

Hình 3.3. Giao diện chương trình bỏ phiếu chọn L trong K

 Bước 1. Khởi tạo khóa bí mật và công khai

Từ giao diện của chương trình, ta nhập giá trị của modul p, phần tử sinh g, số ứng viên K, số ứng viên được lựa chọn L và số thành viên ban kiểm phiếu N. Sau khi click vào nút khởi tạo, khóa bí mật của các thành viên Ziđược tạo ra .Tương ứng là khóa công khai hi được tính theo công thức Zi

i

hg . Ví dụ chọnp23, g3, K7,

5

L , N4và Zi=[ 2 2 3 4] ta được hi=[ 9 9 27 81]

 Bước 2. Bỏ phiếu

Trên giao diện của chương trình, ta nhập giá trị của số cử tri n và khi click vào nút

bỏ phiếu, chương trình taophieulk.m được gọi và cho ta kết quả bầu cử của n phiếu

hợp lệ (có L bit 1 và K-L bit 0) với bít 1 đại diện cho đồng ý và 0 đại diện cho sự lựa chọn không đồng ý. Cụ thể trong ví dụ trên, khi chọn n=10, kết quả ngẫu nhiên được tạo ra như sau:

V= [0 1 1 0 1 1 1, 0 1 1 1 0 1 1, 1 0 1 1 0 1 1, 1 1 1 1 1 0 0 1 1 1 1 1 0 0, 1 1 1 0 1 0 1, 1 1 1 1 1 0 0, 1 1 1 0 1 1 0, 1 1 1 0 1 0 1, 1 1 1 0 0 1 1]

 Bước 3. Gửi phiếu

Khi click vào nút gửi phiếu , chương trình guiphieulk.m sẽ tạo ra n phiếu bầu hợp lệ ngẫu nhiên tương ứng với n cử tri. Từ các giá trị ngẫu nhiên này sẽ tiến hành mã hóa sự lựa chọn của các cử tri theo thuật toán mã hóa Elgamal, dùng thuật toán chia sẻ bí mật Shamir tạo ra N mảnh ứng với mỗi phiếu để gửi cho N thành viên ban kiểm phiếu. Trong ví dụ trên, các mảnh phiếu được tạo ra là:

412 1743 5466 13453 406 1737 5460 13447 400 1731 5454 13441 364 1695 5418 13405 364 1695 5418 13405 S = 382 1713 5436 13423 364 1695 5418 13405 376 1707 5430 13417 382 1713 5436 13423 388 1719 5442 13429

 Bước 4. Kiểm phiếu

Khi click vào nút kiểm phiếu , thay vì giải mã từng cặp phiếu chương trình

ketqualk.m sẽ dựa trên tính chất đồng cấu của thuật toán mã hóa Elgamal và thuật

toán chia sẻ bí mật Shamir để ghép các mảnh phiếu và giải mã ra số lượng cử tri lựa chọn đối với mỗi ứng viên. Tiếp đó, sắp xếp thứ tự các ứng viên theo thứ tự số phiếu giảm dần để có cơ sở chọn L trong K ứng viên trúng tuyển.

Với ví dụ trên ta có các mảnh phiếu được ghép lại là Sghép= [129 123 117 81 81 99 81 93 99 105] Sau khi giải mã thu được kết quả:

[UV(1) UV(2) UV(3) …. UV(7) ]= [8 9 10 5 7 5 6] Vậy kết quả bầu cử là:

Kq= (UV[3],10) (UV[2],9) (UV[1],8) (UV[5],7) (UV[7],6) (UV[4],5) (UV[6],5) Theo kết quả trên, trong K=7 ứng viên, số ứng viên trúng tuyển là L=5 (ứng viên thứ 3, 2, 1, 5, 7). Ứng viên thứ 4, 6 sẽ bị loại.

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống bỏ phiếu điện tử sử dụng mật mã (Trang 50 - 58)

Tải bản đầy đủ (PDF)

(72 trang)