Các kỹ thuật bỏ phiếu điện tử

Một phần của tài liệu Hệ mật đường cong elliptic và ứng dụng trong bỏ phiếu điện tử (Trang 54)

4 Chƣơng ỨNG DỤNG CỦA ECC TRONG BỎ PHIẾU ĐIỆN TỬ

4.2. Các kỹ thuật bỏ phiếu điện tử

4.2.1. Kỹ thuật chữ ký mù

Phương pháp bỏ phiếu điện tử dựa trên chữ ký mù là cách tiếp cận dễ hiểu nhất và tự nhiên nhất vì nó gần với tư tưởng của bỏ phiếu truyền thống. Khi đi bỏ phiếu theo phương pháp truyền thống mà ngày nay đa phần vẫn đang áp dụng, cử tri mang giấy tờ cá nhân và lá phiếu chưa có nội dung gì đến bàn đóng dấu. Ở đó, người ta sẽ kiểm tra giấy tờ để xác minh quyền bỏ phiếu, nếu hợp lệ thì đóng dấu xác thực lên lá phiếu trắng chưa có nội dung. Sau đó, cử tri vào phòng bỏ phiếu, cất hết các giấy tờ cá nhân đi, như vậy lá phiếu hoàn toàn không có thông tin định danh. Công việc cuối cùng là điền nội dung vào lá phiếu và bỏ vào hòm. Quá trình bỏ phiếu truyền thống này được gọi là nặc danh nếu những người tham gia đều tuân thủ đúng quy định.

Chữ ký mù của RSA được áp dụng để đảm bảo tính nặc danh của lá phiếu điện tử. Với phương pháp này, quy trình bỏ phiếu được thực hiện như sau:

Sơ đồ 4.1. Chữ ký RSA

1. Chọn p, q là số nguyên tố lớn. Tính n = p * q,

) (n

 = (p - 1)(q - 1). Đặt P = Zn

2. Chọn khóa ký a Zn. Khi đó khóa kiểm tra chữ ký là

b = a-1(mod (n)). Chú ý n, b công khai, a, p, q bí mật. 3. Chữ ký trên x  Py  P:

y = siga(x) = xa mod n

4. Kiểm tra chữ ký

ver(x, y) = true x yb (mod n)

Sơ đồ 4.2. Chữ ký mù RSA

1. Chọn p, q là số nguyên tố lớn.

Tính n = p * q, (n)= (p - 1)(q - 1). Đặt P = Zn

2. Chọn khóa ký a Zn. Khi đó khóa kiểm tra chữ ký là

b = a-1(mod (n)). Chú ý n, b công khai, a, p, q bí mật. 3. Cần ký mù trên x P, làm mù x

z = blind(x) = x.rb (mod n) với r ngẫu nhiên thuộc Zn

4. Chữ ký trên zy P:

y = siga(blind(x)) =sig(x.rb) = xa. (rb)a = xa.r (mod n) 5. Xóa mù chữ ký trên z để có chữ ký trên x

unblind(y) = y / r = xa . r / r = xa (mod n) 6. Kiểm tra chữ ký

Cử tri Vi tạo một số ngẫu nhiên xi đủ lớn làm bí danh của mình. Vì xiđược tạo ngẫu nhiên nên nó sẽ không có liên quan gì đến Vi. Khi Vi trình các giấy tờ hợp lệ thì Ban ĐK sẽ ký lên bí danh xi của anh ta. Nếu Vi đưa trực tiếp xicho Ban ĐK, thì lập tức họ xác lập được mối liên hệ giữa Vixi, điều này anh ta thực sự không muốn. Vì vậy, cử tri tiến hành làm mù bí danh của mình bằng cách biến đổi xi thành

zi = blind (xi) trước khi đưa cho Ban ĐK ký. Ban ĐK sẽ ký và trao chữ ký

y = sig(zi) = sig(blind(xi)) cho Vi. Lúc này Vi sẽ xóa mù chữ ký trên y được sig(xi) là chữ ký mà cử tri mong muốn có. Vì cơ quan cung cấp chữ ký cho x nhưng hoàn toàn không biết nội dung về x nên người ta gọi là chữ ký mù (blind signature).

Ví dụ

Chọn p = 113, q = 139; n = p*q = 15707, ф(n)=(p – 1)*(q – 1)= 15456.

Chọn b = 1627 (nguyên tố cùng nhau với ф(n)); a = 19 (phần tử nghịch đảo của b theo ф(n)). Nếu cử tri chuyển ngay bí danh x = 100 của mình cho Ban ĐK thì sẽ nhận được chữ ký là sig(x) = xa(mod n) = 10019(mod 15707) = 1731. Đó là điều cử tri không muốn. Vì vậy anh ta che dấu x bằng cách làm mù:

z = blind(x) = x * rb (mod n) = 100 * 171 6 2 7 (mod 15707)= 3075.

(r= 17 được chọn vì tồn tại phần tử nghịch đảo r-1(mod n) = 924). Cử tri gửi bí danh

y = 3075 cho Ban ĐK và nhận được chữ ký:

y = sig(z) = za = 3075 19 (mod 15707) = 13720.

Cử tri “xoá mù” chữ ký trên y sẽ nhận được chữ ký trên bí danh x: unblind(y)= y * r -1 = 13720 * 924(mod 15707) = 1731.

4.2.2. Kỹ thuật mã hóa đồng cấu

Đặc điểm của mã hóa đồng cấu là tính chất có thể tính tổng được các lá phiếu mà không cần giải mã từng lá phiếu riêng biệt. Đây cũng là đặc điểm nổi bật nhất. Mã hóa đồng cấu đảm bảo tính chất tích của các dữ liệu đã mã hóa bằng mã hóa của tổng các dữ liệu : Enc(v1)*…*Enc(vn) = Enc(v1+…+vn).

Quá trình được tiến hành như sau: trước thời gian bầu cử, Ban KP sẽ phân phối một khóa (giả sử dùng sơ đồ chia sẻ bí mật). Mỗi thành viên trong Ban KP sẽ có một khóa mã hóa công khai, cùng với khóa bí mật tương ứng mà họ sẽ dùng để giải mã.

Chỉ có các cử tri đã được xác định danh tính mới được cho phép thêm thông tin lên bảng niêm yết, cùng với các chứng minh không tiết lộ thông tin cho tính hợp lệ của lá phiếu của họ. Khi thời hạn bỏ phiếu kết thúc, các thành viên kiểm phiếu sẽ thu thập tất cả các lá phiếu mã hóa được gửi lên bảng niêm yết và tính tổng của chúng. Tổng này được giải mã bằng khóa bí mật của các thành viên, và kết quả được gửi lên bảng niêm yết cùng các chứng minh tính đúng đắn của tổng và của việc giải mã. Vì ai cũng xem được thông tin trên bảng niêm yết nên mọi người đều có thể kiểm tra được tính đúng đắn của kết quả cuối cùng. Các hệ thống sử dụng phương pháp này có thể được kiểm tra tính đúng đắn trong và sau khi bầu cử.

Sơ đồ 4.3. Sơ đồ bỏ phiếu với tính chất đồng cấu

1. Hệ mã hóa Elgamal Zp, C ={ (a, b) / a, b Zp, ta chọn g là phần tử nguyên thuỷ của Zp*, khóa bí mật a Zp*, khóa công khai h = ga. Để mã hóa văn bản m, ta chọn số ngẫu nhiên k.

Bản mã hoá là cặp số (x, y) = Ek (m) = (g k, h k m ) Giải mã: m = y/xa .

2. Cử tri Vi có các lá phiếu vi. Họ sẽ mã hóa lá phiếu của mình: Chọn ngẫu nhiên ki và mã hóa vi thành (xi, yi) = ( ki

g , hki vi

g ). Sau đó, gửi (xi, yi) về Ban kiểm phiếu

3. Ban kiểm phiếu khi nhận được tất cả các (xi, yi) sẽ tính: (X, Y) = (∏ xi , ∏ yi) = (gk1k2kn , hk1k2kn gv1v2vn ) 4. Kết quả Y / Xa = v v vn g 1 2 Ví dụ

Giả sử cần lấy ý kiến về một việc nào đó, mọi người chỉ cần trả lời có (ghi 1) hoặc không (ghi 0) vào lá phiếu. Nội dung lá phiếu được mã hoá và gửi về Ban KP. Vấn đề đặt ra là Ban KP tính kết quả bỏ phiếu như thế nào trong khi không biết nội dung từng lá phiếu? (vì chúng đã được mã hoá).

Giả sử có 4 cử tri tham gia bỏ phiếu là V1, V2, V3, V4. Lá phiếu tương ứng của họ là: v1= 0, v2 = 1, v3 = 1, v4 = 0. Hệ mã hoá Elgamal được sử dụng ở đây với các khoá như sau: Khóa bí mật a = 2. Khóa công khai h = ga với g = 3. Như vậy h = 32= 9. Mỗi cử tri Vi, chọn một số ngẫu nhiên bí mật k đề mã hóa lá phiếu m của mình thành (x, y) = (g k, h km).

V1 chọn k1 ngẫu nhiên là 5, mã hóa v1= 0 thành (x1, y1) = (35, 95* 30) = (35, 95)

V2 chọn k2 ngẫu nhiên là 3, mã hóa v2 = 1 thành (x2, y2) = (33, 93* 31 ) = (33, 93* 3)

V3 chọn k3 ngẫu nhiên là 3, mã hóa v3 = 1 thành (x3, y3) = (33, 93* 31) = (33, 93* 3)

V4 chọn k4 ngẫu nhiên là 7, mã hóa v4 = 0 thành (x4, y4) = (37, 97* 30) = (37, 97)

V1, V2, V3, V4gửi các lá phiếu mã hóa đến Ban KP.

Ban KP không cần biết nội dung từng lá phiếu, vẫn có thể tính kết quả bỏ phiếu bằng cách nhân các lá phiếu đã được mã hóa lại.

(x1, y1) * (x2, y2) = (x1x2, y1y2) = (gk1+k2 hk1+k2, gv1+v2).

Theo tính chất đồng cấu thì tích của phép nhân trên chính là kết quả bỏ phiếu. Tích 4 lá phiếu được mã hóa là:

(X, Y) = (∏i xi , ∏i yi) = (gk1+k2+k3+k4 , hk1+k2+k3+k4 gv1+v2+v3+v4) = (318, 918*32).

Giải mã bằng cách tính m= gv=Y/ Xα = 918*32 / (318)2 = 32. Số phiếu đồng ý là 2.

4.2.3. Kỹ thuật trộn phiếu

Khi bỏ phiếu từ xa, để bảo đảm bí mật, cử tri mã hoá nội dung lá phiếu. Ban KP phải giải mã mới biết lá phiếu ghi gì. Có thể có một người hay một nhóm người trong Ban KP muốn biết nội dung cũng như tác giả của lá phiếu, điều đó có thể dẫn đến rắc rối cho cử tri sau này. Để tránh tình huống trên người ta dùng kỹ thuật trộn. Theo kỹ thuật này, danh tính của cử tri không cần phải ẩn đi. Do trộn các lá phiếu, người ta không thể biết được ai đã bỏ phiếu nào, vì liên kết giữa cử tri và lá phiếu đã bị xáo trộn.

Sơ đồ 4.4. Quy trình trộn phiếu

1. Có n cử tri với n lá phiếu B1,…, Bn.

2. Mỗi cử tri mã hóa lá phiếu của mình, đạt được mức mã hóa 0 là

C1, 0, …, Cn, 0.

3. Có t máy trộn S1, S2, …, St.

4. Máy trộn thứ i với đầu vào (C1, i-1, …, Cn, i-1) sẽ hoán vị ngẫu nhiên bí mật thứ tự của chúng, sau đó tiến hành mã hóa hoặc giải mã một bước để được (C1, i, C2, i,…, Cn, i)

5. Bước mã hóa cuối cùng sẽ đạt được (C1, t, C2, t,…, Cn, t)

6. Kết quả của mỗi bước được công bố trên bảng niêm yết công khai.

Những vấn đề cần lưu ý khi sử dụng kỹ thuật trộn theo sơ đồ trên:

 Việc mã hóa lá phiếu ở bước 2: cần có chứng minh không tiết lộ thông tin để chứng minh cho tính hợp lệ của lá phiếu nhằm đảm bảo rằng Ci,0 quả thực là mã hóa bước 0 của Bi.

 Các máy trộn phải đảm bảo tính trung thực, không được tráo đổi các lá phiếu hoặc nhân đúp các lá phiếu. Để thực hiện điều này phải thiết kế các mạng trộn có thể xác minh.

Có 2 kiểu mạng trộn:

 Mạng trộn giải mã từng bước, mỗi máy trộn sẽ tiến hành giải mã từng bậc một. Đến máy trộn cuối cùng, ta thu được bản rõ, tức nội dung lá phiếu. Mỗi máy trộn Sj có một cặp khóa bí mật/ công khai (PKj, SKj) và một sơ đồ mã hóa khóa công khai tùy chọn. Vì vậy, mỗi bản mã hóa sẽ là:

Ci, 0 = E(PK1, E(PK2,…,E(PKt, Bt))).

Sơ đồ 4.5. Mã hóa Elgamal

1. Xét các số nguyên thuộc nhóm *

p

Z với g là phần tử nguyên thủy,

*

p

Z

x là khóa bí mật, y = gx là khóa công khai 2. Mã hóa E(m) = (gr, myr) = (c1, c2) với * 1  Zp r 3. Giải mã D(c1, c2) = 2 1 1 ) * (cxc

Mã hóa lại Elgamal được thực hiện như sau:

ReEnc(c1, c2) = (c1 * gs, c2*ys) = (gr+s, myr+s) với * 1

 Zp s

4.3. Đề xuất Quy trình bỏ phiếu điện tử

Trong quy trình bỏ phiếu trên, ở giai đoạn chuẩn bị, cử tri phải đến Ban ĐK, trình diện các giấy tờ hợp lệ để được cấp quyền bỏ phiếu. Ban ĐK chịu trách nhiệm ký lên lá phiếu chưa có thông tin. Ở giai đoạn này, chữ ký mù được sử dụng để không làm lộ danh tính của cử tri. Ban ĐK cũng thiết lập luôn danh sách các cử tri hợp lệ sẽ tham gia bầu cử.

Những cử tri hợp lệ sẽ ghi thông tin của mình lên lá phiếu. Tuy nhiên, lá phiếu được mã hóa trước khi được bỏ vào hòm phiếu. Kỹ thuật mã hóa được sử dụng là mã hóa đồng cấu. Vì phương pháp này không đòi hỏi giải mã từng lá phiếu cụ thể để lấy thông tin mà vẫn có thể kiểm phiếu được nên mỗi cử tri phải gửi kèm theo lá phiếu của mình một chứng minh không tiết lộ thông tin chứng minh cho tính hợp lệ của lá phiếu. Để xác minh tính hợp lệ của các lá phiếu cần có sự tham gia của người xác minh trung thực. Người xác minh trung thực sẽ tương tác trực tiếp với cử tri để kiểm tra. Khi lá phiếu đã được xác minh tính hợp lệ, nó được chuyển đến hòm phiếu.

Hòm phiếu được trộn trước khi các lá phiếu được chuyển về Ban KP nhằm đảm bảo hoàn toàn việc giữ bí mật danh tính cho các cử tri. Khi các lá phiếu chuyển về Ban KP, các thành viên trong Ban KP dùng các mảnh khóa của mình để khôi phục khóa bí mật. Ban KP dùng khóa bí mật này để tính kết quả cuộc bầu cử. Cuối cùng Ban KP công bố kết quả cuộc bầu cử lên Bảng niêm yết công khai.

4.3.1. Chuẩn bị

Cử tri chọn cho mình một ID bất kỳ, chọn một phần tử ngẫu nhiên r để làm mù ID trước khi gửi về Ban ĐK.

Ban đăng ký sử dụng hệ thống phân phối khóa tin cậy để có được các mảnh khóa bí mật phân phối cho các thành viên ký, đồng thời có khóa công khai để xác minh chữ ký đó. Khởi tạo danh sách các số chứng minh thư của các cử tri đã xin chữ ký, khởi tạo danh sách lưu các chữ ký đã cấp ra.

Ban kiểm tra cũng tham gia quá trình này để cũng có thể ký trên định danh của cử tri nhằm kiểm tra lại chữ ký của Ban ĐK. Khởi tạo bảng niêm yết công khai.

Ban kiểm phiếu sử dụng hệ thống phân phối khóa tin cậy để có được cặp khóa bí mật công khai/ bí mật dùng cho quá trình mã hóa và giải mã lá phiếu.

4.3.2. Cấp quyền bầu cử

Hình 4.2. Giai đoạn cấp quyền bầu cử

Cử tri chọn ngẫu nhiên một thông tin định danh của mình ký hiệu là i. Cử tri sử dụng khóa ký công khai của Ban ĐK và phần tử chọn ngẫu nhiên r để làm mù danh tính i của mình. bi = blind (i) = i.re mod n.

Cử tri mang theo các giấy tờ cần thiết (Chứng minh thư) đến Ban ĐK. Ban ĐK kiểm tra các thông tin này, nếu thấy hợp lệ và cử tri này chưa xin cấp chữ ký lần nào thì Ban ĐK tiến hành ký mù trên blind(i), tạo thành chữ ký s = sign(blind(i)). Việc ký của Ban ĐK thực chất là việc tất cả các thành viên cung cấp các mảnh khóa bí mật cho hệ thống ký. Nếu cử tri đăng ký 2 lần, Ban ĐK sẽ phát hiện ngay được vì số Chứng minh thư đã được lưu giữ trong danh sách cử tri đăng ký. Nếu 2 cử tri cùng chọn định danh i1 và i2 là các giá trị ngẫu nhiên và các r1, r2 ngẫu nhiên nhưng blind(i1)=blind(i2) thì Ban ĐK phải yêu cầu một trong hai cử tri chọn lại định danh i

của mình. Khóa ký của Ban ĐK lấy từ hệ thống phân phối khóa tin cậy và được chia sẻ cho các thành viên. Chữ ký của Ban ĐK với sơ đồ ký RSA, cặp khóa là (e, d) trên định danh đã làm mù blind(i) của cử tri là: s = sign(blind(i)) = (ire)d mod n = idr mod n = sign(i).r. Cử tri có thể xóa mù để thu được chữ ký trên định danh i của mình: sign(i)=sign(blind(i))/r.

Với phương pháp trên chúng ta phải xem xét một số vấn đề: Ban ĐK không được tùy tiện cấp chữ ký mà cần có liên hệ với Ban KT để kiểm soát quá trình bỏ phiếu của cử tri. Nếu cử tri giả mạo chữ ký của Ban ĐK, lá phiếu sẽ bị hủy. Khi gửi thông tin về Ban KT, cử tri phải gửi kèm theo lá phiếu định danh i chưa làm mù của mình. Lúc này Ban KT biết định danh i của cử tri và chữ ký trên định danh đó nhưng không thể biết danh tính thật của cử tri (Họ tên, số CMT,..). Ban ĐK thì biết các thông tin thật này nhưng lại không biết định danh i của cử tri do nó đã bị làm mù khi gửi về để xin chữ ký (Ban ĐK đã ký mù trên định danh thật). Việc cử tri phải gửi định danh thật cùng chữ ký của Ban ĐK cho Ban KT để giúp Ban KT ký lại trên định danh thật đó xem có thu được chữ ký như chữ ký mà cử tri đã gửi về cho mình không. Điều này nhằm đảm bảo việc nếu chữ ký của Ban ĐK bị lộ trên đường truyền thì kẻ đánh cắp

Trong trường hợp xấu nhất: Nếu Ban ĐK cấp quyền bỏ phiếu cho một đinh danh giả thì định danh giả này vẫn được tham gia bỏ phiếu như những người hợp lệ. Ngay cả bầu cử truyền thống cũng không ngăn chặn được việc này nếu như Ban ĐK cho những cử tri không hợp pháp (chưa đủ tuổi, có tiền án tiền sự,người ngoại quốc) vẫn được bầu cử.Chúng ta chỉ có thể tăng tính an toàn bằng việc tăng số thành viên và tăng việc giám sát họ.

Cử tri có thể kiểm tra việc chữ ký trên định danh của mình có hợp lệ hay không bằng việc dùng khóa ký công khai của Ban ĐK để xác minh.

sign(i) = id mod n

(sign(i))e = (id)e = i (mod n)

Khóa ký không chỉ được chia sẻ cho các thành viên trong Ban ĐK mà cả các thành viên trong Ban KT. Giả sử Ban ĐK có t thành viên, Ban KT có k thành viên thì

Một phần của tài liệu Hệ mật đường cong elliptic và ứng dụng trong bỏ phiếu điện tử (Trang 54)