Hệ thống bầu cử áp dụng mã hóa đồng hình - Homomorphic Encryption

TLDR: Phần trên mình chỉ giới thiệu sơ lược về phương pháp mã hóa đồng hình và việc bầu cử, nếu các bạn muốn đến tới phần kỹ thuật thì có thể bỏ qua phần này.

Homomorphic encryption hay mã hóa đồng hình là một dạng mã hóa được sinh ra để giải quyết các vẫn đề nan giải của các phương pháp mã hóa hiện tại. Hầu hết các hệ thống mã hóa được áp dụng rất rộng rãi trong lĩnh vực như ngân hàng, tài chính hay bảo mật dữ liệu. Tuy nhiên những lĩnh vực này có một nhu cầu rất lớn trong việc tính toán các dữ liệu đầu vào nhưng vẫn phải đảm bảo được tính bảo mật của người dùng. Theo cách đó, nếu tiến hành theo một quy chuẩn của việc mã hóa thì để tính toán, phân tích được các dữ liệu này, chúng ta phải giải mã (decrypt) chúng.  

Nhưng có một vấn đề nan giải là rất khó để có thể giải mã những loại mã hóa hiện đại và có thể làm tăng nguy cơ bị tin tặc tấn công trong quá trình mã hóa vì quá trình này tiêu hao rất nhiêu thời gian và có thể sinh ra các lỗ hỏng.

Vì vậy nên có một phương thức mã hóa được sinh ra để tính toán ngay trên dữ liệu bị mã hóa (encrypted data) mà không cần giải mã.

Tóm tắt và giải thích sơ lược qua mã hóa đồng hình như vậy là đủ vòng vo rồi, giờ mình sẽ vào vấn đề chính của bài này luôn nha. Nếu mà các bạn có hứng thú thêm về phương thức mã hóa này thì hay xem thêm ở phần tham khảo mình để bên dưới nha.


Đối với Việt Nam - một quốc gia theo chế độ cộng hòa chủ nghĩa - thì hình thức bầu cứ đối với người dân vẫn còn khá là mới mẻ. Hầu hết người dân Việt Nam biết tới việc bầu cứ thông qua phim ảnh, sách bào và tin tức từ các nước phương Tây. Với những quốc gia dân chủ như Mỹ thì truyền thống bầu cử cứ sau mỗi nhiệm kỳ đã là một việc gì đó rất là phổ biến và luôn dành được sự chú ý của người dân để chọn ra vị lãnh đạo tiếp theo của đất nước họ.

Hình ảnh chỉ mang tính chất minh họa :))

Tuy nhiên, hầu hết chúng ta không hề biết đằng sau những lá phiếu bầu là cả một quá trình mã hóa phức tạp để có thể bảo toàn được thông tin của là phiếu và của người bầu cứ.

Vậy nên hôm nay mình sẽ "vén màn" cách mà hệ thống bầu cử hoạt động.

HỆ THỐNG BẦU CỬ ĐỒNG HÌNH

Hệ thống bầu cử (E-voting)

Như các bạn thấy ở trên thì đó chính là một cây quá trình của một hệ thống bầu cử. Khi một người bầu cử (voter) tham gia bỏ phiếu, họ cần phải thông qua quá trình kiểm duyệt  - Authentication Stage bằng cách đăng nhập (nếu là e-voting) hoặc kiểm duyệt danh tính bằng các phương pháp khác nhau.

Sau khi đã thông qua vòng đầu, voter sẽ tới vòng bỏ phiếu - Voting Stage. Ở vòng này các voter sẽ được cho một lá phiếu trắng để ghi vào tên của cử tri (candidate).

Tiếp đến, các "trạm" sẽ thu phiếu (hình bên dưới) để tiến hành quá trình mã hóa (encrypt).

Polling station's machine

Các phiếu bầu bị mã hóa sau đó sẽ được bộ phận kiểm duyệt tính toán (compute) bằng phương thức mã hóa đồng hình, sau đó giải mã (decrypt) để tìm ra được số phiếu của từng cử tri để dẫn đến vòng cuối cùng là vòng công bố kết quả để tìm ra được người thằng cuộc.

QUÁ TRÌNH MÃ HÓA, TÍNH TOÁN VÀ GIẢI MÃ PHIẾU BẦU

BƯỚC 1: THU NHẬP PHIẾU BẦU

Đầu tiên, sẽ có một bảng thông số phiếu được khởi tạo là một ma trận với dạng R*C, trong đó R là phiếu bầu  và C là cử tri. Ví dụ, mình có 3 cử tri tên là Alice, BobCharlie và 6 phiếu bầu với mã là R01, Ro2, Ro3, R04, R05 và R06 thì sẽ có bảng được khởi tạo là:

Giả sử, mình là voter với phiếu bầu mang mã số R01 và mình vote cho cử tri Charlie thì ô thứ 1*C sẽ có giá trị là 1 và những ô lân cận là 0. Và tương tự theo nguyên tắc đó chúng ta có một bảng được hình thành

Tới đây thì các bạn vẫn chưa hình dùng được mình sẽ mã hóa như thế nào đúng không. Sau khi đã có số liệu của các phiếu bầu trong ma trận, tụi mình sẽ viết dưới dạng số nhị phân và chuyển đổi sang số thập phân.

Bước tiếp theo là mã hóa số thập phân đã được chuyển đổi. Có rất nhiều nhiều nhiều thuật toán để mã hóa và mỗi thuật toán có một độ phức tạp và lợi ích nhất định, các bạn có thể tham khảo tại đây. Ở bài viết nà, mình sẽ sử dụng RSA Algorithm để mã hóa.

Chú ý nè :

Vì mục đích của bài này là giới thiệu về hệ thống nên mình sẽ không đi sâu và thuật toán nha. 😋

BƯỚC 2: MÃ HÓA DỮ LIỆU

Theo thuật toán RSA, tụi mình sẽ cần một mã khóa công cộng (public key) và mã khóa cá nhân (private key). Trong ứng dụng này mình sẽ chọn public key là n = 33 (p=3, q=11) và e = 7 còn private key là d = 3.

class RSAHomomorphic:
    def __init__(self):
        self.key = {
            # Public
            "n" : 187, # p = 11, q = 17
            "e" : 7,
            # Private
            "d" : 3
        }
    def encrypt(self, message):
        return pow(message, self.key["e"], self.key["n"])
    def decrypt_homo(self, cipherText):
        return pow(cipherText, self.key["d"], self.key["n"])
    def compute_homo(self, cipherTexts):
        return math.prod(cipherTexts)
Class RSA được code bằng Python

Sau đó mình mã hóa những dữ liệu lấy được từ bảng phiếu bầu bằng công thức các công thức cho encrypt, decrypt và compute là

Công thức của thuật toán RSA

Trong đó M1 là dữ liệu thuần của tin nhắn số 1 và C1 là dữ liệu mã hóa của tin nhắn số 1. Từ đó ta có dữ liệu mã hóa lần lượt là

print(rsa.encrypt(4)) #16
print(rsa.encrypt(2)) #29
print(rsa.encrypt(4)) #16
print(rsa.encrypt(1)) #01
print(rsa.encrypt(1)) #01

Khi các bước mã hóa đã hoàn thành, tiếp đến tụi mình compute những dữ liệu được mã hóa lại thành một "cipher text" tổng

BƯỚC 3: TÍNH TOÁN VÀ GIẢI MÃ

C = rsa.compute_homo([16,29,16,1,1])
print(C) #7424

Từ đó chúng ta sẽ giải mã cipher text đó để lấy dữ liệu phiếu bầu cuối cùng.


Vậy đó là cả một qúa trình mã hóa đồng hình đằng sau hệ thống phiếu bầu. Tới đây thì bài viết cũng hơi quá là dàiiii rồi á nên là hẹn gặp mấy bạn trong các bài viết sắp tới nha.

À mà nếu các bạn muốn đọc kĩ hơn thì có thể tham khảo research paper của mình về topic này nha.

Homomorphic Polling System Research.pdf | PDF Host
PDF Host read free online - Homomorphic Polling System Research.pdf
Research của mình về topic này

Tham khảo:

Luecheng Li. (2020). An Electronic Voting Scheme Based on ElGamal HomomorphicEncryption for Privacy Protection. Retrieved from https://iopscience.iop.org/article/10.1088/1742-6596/1544/1/012036/pdf

Homomorphic Encryption | Brilliant Math & Science Wiki
Homomorphic encryption is a cryptographic method that allows mathematical operations on data to be carried out on cipher text, instead of on the actual data itself. The cipher text is an encrypted version of the input data (also called plain text). It is operated on and then decrypted to obtain the …

Góc Của Chung

Góc Của Chung