Chương này đề cập đến yêu tố bảo mật của hệ thống bầu cử sử dụng công nghệ chuỗi khối. Do đặc tính công khai của chuỗi khối đối nghịch với tính bi mật về dữ liệu phiếu bau của một số cuộc bau chọn riêng tư mà cần có một giải pháp có thé hài hòa giữa hai yêu cầu này. Giải thuật mã hóa dữ liệu đường cong elip được sử dụng như là giải pháp để giải quyết vấn đề này. Sau khi khảo sát các giải thuật mã hóa đã được kiểm chứng, một giải thuật tốt nhất sẽ được chọn và ứng dụng vào hệ thống của bài khóa luận. Cuối cùng là so sánh ba lược đồ chữ ký mã hóa khác nhau: EdDSA, ECDSA và RSA, đồng thời đánh giá mức độ phù hợp của chúng đối với hệ thống bỏ phiếu chuỗi khối. Chữ ký mã hóa rat cần thiết dé đảm bảo tính toàn vẹn và tính xác thực của các phiếu bầu trên chuỗi khối, cũng như dé phòng trường hợp bầu một người hai lần.
Nhóm tác giả cũng sẽ so sánh phương án sử dụng thư viện 'elliptic' với phương án không sử dụng thư viện.
4.1. Khảo sát
4.1.1. RSA
RSA
Hinh 4.1 RSA
RSA là một trong những hệ thống mật mã khóa công khai được sử dung rộng rãi nhất trên thé giới. Nó được phát minh bởi Ron Rivest, Adi Shamir va Leonard Adleman
52
vào năm 1977, và dựa trên bài toán phân tích các số lớn. RSA cho phép hai bên giao tiếp an toàn qua một kênh không an toàn mà không cần chia sẻ trước khóa bí mật. RSA cũng cho phép chữ ký số, cho phép người gửi chứng minh tính xác thực và tính toàn vẹn của tin nhắn. [12]
4.1.2. Mã hóa đường cong elip
Mã hóa đường cong elip (Elliptic curve cryptography hay ECC) là một nhánh của
mật mã khóa công khai dựa trên các thuộc tính toán học của đường cong elip. ECC
cung cấp một số lợi thế so với các thuật toán khóa công khai truyền thống, chăng hạn
như RSA va Diffie-Hellman. Ví dụ: ECC có thé cung cấp cùng mức độ bảo mật với kích thước khóa nhỏ hơn, giúp giảm chi phí tính toán và băng thông cần thiết dé mã hoa và giải mã. ECC cũng có các ứng dụng trong chữ ký số, trao đổi khóa và bang chứng không kiến thức. [5]
4.1.2.1. ECDSA
Hình 4.2 ECDSA
Thuật toán chữ ký số đường cong elip (Elliptic Curve Digital Signature Algorithm hay ECDSA) là một sơ đồ mật mã cho phép tạo và xác minh chữ ký số bằng cách sử dụng mật mã đường cong elip. ECDSA có một số ưu điểm so với các sơ đồ chữ ký khác, chăng hạn như kích thước khóa nhỏ hơn, tính toán nhanh hơn và mức độ bảo mật cao hơn. ECDSA được sử dụng rộng rãi trong các ứng dụng khác nhau, chang hạn như chuỗi khối, hợp đồng thông minh và liên lạc an toàn.
ECDSA hoạt động bằng cách sử dụng một cặp khóa: khóa riêng và khóa chung. Khóa
riêng là một sô ngầu nhiên nên được giữ bí mật bởi người ký. Khóa chung được lây
53
từ khóa riêng bằng cách sử dụng hàm toán học liên quan đến đường cong elip. Khóa công khai có thê được chia sẻ với bất kỳ ai muốn xác minh chữ ký. Để ký một tin nhắn, người ký sử dụng khóa riêng và tin nhắn đề tạo chữ ký, bao gồm hai số. Đề xác minh chữ ký, người xác minh sử dụng khóa chung, thông báo và chữ ký dé thực hiện kiểm tra toán học xác nhận tính xác thực của người ký.
ECDSA dựa vào độ khó của hai bài toán: bài toán logarit rời rạc và bài toán logarit
rời rac trên đường cong elip. Bài toán logarit rời rac là tìm số mũ x sao cho g^x = y với các số g và y đã cho. Bài toán logarit rời rac của đường elip là tìm đại lượng k sao cho kP = Q đối với các điểm P và Q đã cho trên một đường cong elip. Cả hai vẫn
dé được cho là khó giải đối với các tham số đủ lớn, điều đó có nghĩa là không có thuật toán hiệu quả nao dé giải quyết chúng. Điều này dam bảo tính bao mật của ECDSA chống lại các cuộc tấn công brute-force. [4] [13]
4.1.2.2. EdDSA
EdDSA là một sơ đồ chữ ký số sử dụng mật mã đường cong elip dé cung cấp hiệu suất và bảo mật cao. EdDSA dựa trên sơ đồ chữ ký Schnorr và sử dụng một biến thể của đường cong Twisted Edwards. EdDSA có một số ưu điểm so với các sơ đồ chữ
ký khác, chăng hạn như khả năng chống lại các cuộc tan công kênh bên, xác minh nhanh và kích thước chữ ký nhỏ. EdDSA cũng hỗ trợ khôi phục khóa chung, cho
phép lấy khóa chung từ chữ ký và thông báo. [4]
4.1.2.3. ECDH
ECDH la viết tắt của Elliptic-curve Diffie-Hellman, là một giao thức thỏa thuận chính cho phép hai bên thiết lập một bí mật chung trên một kênh không an toàn. Mỗi bên
có một cặp khóa công khai-riêng tu theo đường cong elip và họ trao đổi khóa công
khai của mình thông qua kênh.
ECDH là một biến thé của giao thức Diffie-Hellman sử dụng mật mã đường cong elip, mang lại tính bảo mật và hiệu quả cao hơn so với các phương pháp truyền thống. ECDH có thé được sử dụng với các tham số miền và đường cong elip khác nhau, đồng thời nó có thể cung cấp các mức xác thực và bảo mật chuyền tiếp khác nhau tùy
thuộc vào việc khóa công khai là tinh hay tạm thời. [3]
54
ECDH KEY EXCHANGE
PARTY A EAVESDROPPERS
SHARED
Qu
SHARED
~~
Hình 4.3 Mô tả ECDH [3]
4.1.3. Kết quả
e ECDH
Một thách thức có thé xảy ra khi sử dụng ECDH (Elliptic Curve Diffie-Hellman) trong hệ thong bỏ phiếu chuỗi khối là nó yêu cầu một bên thứ ba đáng tin cậy tạo và phân phối khóa công khai cho mỗi cử tri. Điều này có thê ảnh hưởng đến tính bảo mật và tính minh bạch của quy trình bỏ phiếu, cũng như gây thêm chi phí và sự phức tạp. Hơn nữa, ECDH không cung cấp bat kỳ đảm bảo nào về tính ân danh của cử tri,
vì các khóa công khai có thể được liên kết với danh tính của cử tri. Lý tưởng nhất là một hệ thống bỏ phiếu sử dụng công nghệ chuỗi khối nên được phân cấp, có thé kiêm chứng và bảo vệ quyền riêng tư, đây không phải là thuộc tinh của ECDH.
e ECDSA và RSA
ECDSA va RSA là hai thuật toán mã hóa khóa công khai phô biến được sử dung cho chữ ký số và mã hóa. Cả ECDSA và RSA đều dựa trên các bai toán khó giải, chang hạn như logarit rời rạc và phân tích thành thừa số nguyên. Tuy nhiên, ECDSA có kích thước khóa nhỏ hơn RSA với cùng mức độ bảo mật, giúp nó có khả năng chống lại các cuộc tấn công lượng tử cao hơn. Ví dụ: khóa ECDSA 256 bit tương đương với khóa RSA 3072 bit về độ mạnh bảo mật.
55
ECDSA và RSA có các đặc tính hiệu suất khác nhau tùy thuộc vào hoạt động và kích thước khóa. Nói chung, ECDSA nhanh hơn RSA dé ký nhưng chậm hơn dé xác minh. ECDSA cũng có kích thước chữ ký nhỏ hơn RSA, giúp giảm yêu cầu lưu trữ và băng
thông. Ví dụ: chữ ký ECDSA 256 bịt dài 64 byte, trong khi chữ ký RSA 3072 bịt dài
384 byte.
ECDSA va RSA có mức độ tương thích khác nhau với các hệ thống và tiêu chuẩn hiện có. RSA được hỗ trợ và chấp nhận rộng rãi hơn ECDSA, vì nó đã tồn tại lâu hơn
và có nhiều triển khai hơn. ECDSA mới hơn và ít hỗ trợ hơn, đặc biệt là trong các hệ thống và thiết bị cũ hơn. Tuy nhiên, ECDSA dang trở nên phố biến và được áp dụng trong những năm gần đây, đặc biệt là trong các ứng dụng chuỗi khối và tiền điện tử.
e ECDSA và EdDSA
ECDSA và EdDSA là hai thuật toán chữ ký sử dụng các đường cong elip để tạo và xác minh chữ ký SỐ. Chúng có độ bảo mật tương tự đối với các đường cong có độ dài khóa tương tự, nhưng chúng cũng có một số diém khác biệt:
- ECDSA yêu cầu một giá trị nonce ngẫu nhiên cho mỗi chữ ký, đây có thê là nguồn
dé bị ton thương nêu không được tạo đúng cách. EdDSA không cần giá tri nonce ngẫu nhiên, điều này làm cho nó đơn giản và mạnh mẽ hơn.
- ECDSA sử dụng các đường cong ở dạng Weierstrass ngắn, có công thức phức tạp hơn và yêu cầu xác thực diém đề tránh các điểm không hợp lệ. EdDSA sử dụng các đường cong ở dạng Edwards, có công thức đơn giản và nhanh hơn và đầy đủ, nghĩa
là chúng hoạt động cho tất cả các điểm trên đường cong.
- ECDSA có các khóa công khai và chữ ký có kích thước thay đồi, tùy thuộc vào các tham số đường cong và lược đồ mã hóa. EdDSA có các khóa công khai có kích thước
có định (32 hoặc 57 byte) và chữ ký (64 hoặc 114 byte) cho các đường cong phố biến nhất (Ed25519 va Ed448) .
- ECDSA cho phép khôi phục khóa công khai từ chữ ky và tin nhắn, có thé tiết kiệm dung lượng trong một số ứng dụng. EdDSA không hỗ trợ khôi phục khóa công khai.
56
- ECDSA có khóa công khai lớn hơn EdDSA cho cùng mức độ bảo mật, vì nó sử
dụng cả tọa độ x và y của một điểm trên đường cong, trong khi EdDSA chỉ sử dụng
tọa độ y.
Dựa vào những ưu điểm trên giải thuật EdDSA được chọn dé mã hóa thông tin trong
ứng dụng.
4.2. Sử dụng EdDSA
4.2.1. Định danh BTC
của CBC
Tạo mã định danh
ngau nhiên
Tạo mã định danh ộ
ngau nhiên a
Ma CBC lam nỗi
dung tin nhan
EdDSA EdDSA
Chữ ký mã hóa
định danh BTC
Hình 4.4 Mã hóa định danh BTC
Một CBC sẽ có các BTC có chức năng đóng CBC khi không còn nhu cầu thu thập
° Tao ma dinh danh
a ngau nhién
EdDSA
Chữ ký mã hóa
định danh BTC
Chữ ky ma hoa
dinh danh BTC
phiéu bau. Dé có thé phân biệt BTC voi NTG thông thường, một mã định danh đặc biệt được tạo trong quá trình tạo CBC và được gửi về cho người tạo CBC. Các mã
57
định danh này được phân phát một cách bí mật. Bất kỳ ai có mã định danh này đều
có thé truy cập CBC dưới tư cách BTC.
Mã định danh của BTC cần được lưu vào số cái để mỗi khi tham gia CBC, các CQCCC có thể kiểm tra định danh của người đang tham gia. Điều này làm mất đi tính bảo mật của mã định danh BTC như bên trên đã đề ra. Do đó cần phải có phương
pháp mã hóa mã định danh này.
EdDSA được sử dụng với mã định danh của BTC làm khóa bí mật, nội dung tin nhắn
là mã CBC mà BTC quản lý. Khi đó chữ ký mã hóa sẽ được lưu vào sô cái công khai.
Định danh từ NTG
Khỏa bí mật
Y
Mã CBC đang tham gia làm nội dung tin
nhãn
EdDSA
¥
Trùng với danh sách chữ ký mã hóa
trên số cái công khai
di NTG khẳng phải la
NTG la BTC
Hinh 4.5 Kiém tra dinh danh BTC khi tham gia CBC Khi người dùng yêu cầu xác thực ở CQCCC, quá trình ký nay được lặp lại một lần nữa với thông tin định danh của người dùng đưa vào. Nếu người dùng đưa vào đúng
mã định danh BTC, nội dung tin nhắn là mã CBC đang tham gia thì một chữ ký mã
58
hóa y hệt trong số cái sẽ được tạo. Điều này giúp xác định danh tính của NTG có phải
là BTC hay không.
4.2.2. Mã hóa phiếu bầu Khi NTG bỏ phiếu bau cho một CBC. Các thông tin bao gồm mã CBC, định danh, phiếu bầu của NTG sẽ được gửi đến CQCCC dé xác thực. Tại đây CQCCC sẽ sử dụng khóa bi mật của tổ chức tham gia CBC dé ký các nội dung dé đảm bảo phiếu
bau thực sự đến từ định danh được xác thực ở tô chức, phiếu bầu là hợp lệ và không qua chỉnh sửa sau khi đã bầu chọn.
Đầu tiên khóa bí mật được sử dụng để ký nội dung bao gồm mã CBC và định danh, một chữ ký mã hóa được tạo ra và được kiểm tra với sô cái. Nếu một chữ ký tương
tự đã tồn tại tức là định danh này đã tham gia bỏ phiếu cho CBC này. Ngược lại chữ
ký mã hóa sẽ được lưu vào sô cái. Chữ ký này tượng trưng cho việc tham gia CBC của NTG này, bất kỳ ai trong mạng chuỗi khối cũng thấy được chữ ký nhưng sẽ không biết được cụ thể định danh của NTG, chỉ khi CBC đã đóng và khóa bí mật được công khai, người tham gia mạng mới có thê xác minh tinh đúng đắn của thông tin.
Khi chữ ký mã hóa tham gia đã được tạo, nội dung phiếu bầu sẽ được lưu vào dữ liệu
bí mật của tổ chức. Dữ liệu này sẽ không được công khai cho đến khi CBC được đóng. Đối với CBC “công khai” thì ngược lại, dữ liệu sẽ được công khai lên số cái kèm chữ
ký mã hóa để các thành viên trong mạng chuỗi khối có thê thâm định tính đúng đắn của phiếu bau.
Sau khi lưu vào đữ liệu bí mật của tổ chức, một chữ ký mã hóa được tạo, gán mác là
ID của phiếu bầu và gửi về NTG. ID của phiếu bầu sẽ giúp NTG kiểm tra lại thông
tin phiếu bầu của mình mà không phải đợi CBC đóng hoặc rủi ro lộ thông tin. ID của phiếu bau là bí mật và nên được bảo quản can thận và không nên dé lộ. Tuy nhiên đối với CBC “công khai” do thông tin bầu chọn được công khai việc tạo một ID phiếu bầu của riêng NTG là không cần thiết, do đó ở trường hợp này, mã giao dịch chuỗi khối sẽ được gửi về NTG. Tra cứu mã giao dich này người tham gia mạng chuỗi khối
có thé thay được những thay déi của CBC một cách công khai trong đó có nội dung phiếu bầu được tạo.
59
Mã CBC, định danh
NTG
Khóa bi mat của tô
chức
EdDSA
Chữ ký mã hóa tượng trưng cho việc tham gia
của NTG
Trùng với danh sách chữ ký tham gia
trên số cái công khai trong CBC nảy
Lưu chữ ký mã hoa
lên số cải
CEC
loại "công khai”
Thông tin phiêu bau
bao gom lựa chọn,
định danh, CBC
Gà
Khóa bí mật của tỗ
Sử dụng mã giao dịch chức
làm ID phiêu bau
Sử dụng chữ ký mới
làm ID phiếu bau Trả về ID phiéu bau
Với CBC loại “bí mật”, một danh sách định danh định trước sẽ được cung cấp trong
quá trình tạo CBC. Chỉ những NTG với định danh thuộc danh sách này thì khi đóng
CBC, thông tin phiếu bầu của họ mới được công khai lên số cái. Để đảm bảo những
60
định danh này bị lộ khi thông tin CBC được đưa vào số cái công khai, chúng ta cần
mã hóa chúng.
Số lượng n NTG định
trước của CBC
Định danh định Định danh định
trước trước
` EdDSA EdDSA
Chữ ky mã hoa
định danh
Hình 4.7 Mã hóa định danh định trước Với khóa bí mật của CBC, nội dung là định danh, chúng ta sẽ có được một danh sách
Chữ ky mã hoa Chữ ky mã héa
định danh định danh
chữ ký mã hóa công khai. Khi CBC chuyền sang giai đoạn tổng kết. Từng định danh trong phiêu bầu của NTG sẽ được đưa vào quá trình ký tương tự và so sánh với danh sách chữ ký lưu trước đó. Nếu hai chữ ký giống nhau thì định danh của NTG là hợp
lệ và thông tin phiếu bầu của họ sẽ được công khai.
61
Tông kết CBC
Khoa bí mật của tô
chức
Định danh của phiêu bau lảm nội dung tin nhắn
danh
Trùng với chữ ky mã héa định danh định trước: phiêu bau lên sỗ cải
Cũ
bau lên số cái
Hình 4.8 Kiểm tra định danh của phiếu bau có phải định danh định trước
4.3. So sánh giữa các phương pháp bảo mật
4.3.1. Thư viện ‘elliptic’
Đường cong elip là các đối tượng toán học với nhiều ứng dụng mật mã, bao gồm mã hóa khóa công khai và chữ ký số. Một trong những lợi ích của việc sử dụng các đường cong elip là chúng cung cấp mức độ bảo mật cao trong khi yêu cầu kích thước khóa
62
tương đối khiêm tốn. Tuy nhiên, việc triển khai mã hóa đường cong elip (ECC) có thé khó khăn va dé xảy ra lỗi, đặc biệt đối với các nhà phát triển không quen với toán
học cơ ban. Day là lúc thư viện npm 'elliptic' trở nên hữu ich. Thư viện 'elliptic' là
một mô-đun JavaScript cung cấp giao diện hoàn chỉnh và thân thiện với người dùng
dé làm việc với các đường cong elliptic. Nó hỗ trợ nhiều loại đường cong, bao gồm secp256k1, ed25519 và curve25519, đồng thời cung cấp các kỹ thuật tạo khóa, mã
hóa, giải mã, chữ ký và xác minh. [9]
4.3.2. Công cụ nội bộ của NodeJS
Thư viện 'crypto' nội bộ của Node.js là một mô-đun cung cấp các chức năng mã hóa
để giúp bảo mật ứng dụng Node.js. Bao gồm một tập hợp các trình bao bọc cho hàm
băm, HMAC, mật mã, giải mã, ký và xác minh của OpenSSL.
Một trong những chức năng mã hóa mà thư viện ‘crypto' của Node.js hỗ trợ là mã
hóa mật mã đường cong. Mật mã trên đường cong có thê được sử dung dé mã hóa, chữ ký số, trao đôi khóa, v.v.
63