Đồ án thực hiện nghiên cứu về thuật toán mã dòng có xác thực là CHACHA20 trên cơ chế xác thực là POLY1305 như về kiến trúc, thành phần, nguyên lý hoạt động. Đánh giá độ an toàn của thuật toán và thực thi cài đặt mô phỏng với ngôn ngữ C với giao diện đồ họa.
TỔNG QUAN MÃ DÒNG VÀ MÃ XÁC THỰC THÔNG BÁO
Tổng quan mã dòng
Thuật toán mã hóa dòng (stream ciphers) là một loại mã hóa đối xứng, trong đó dữ liệu được mã hóa từng bit một So với các thuật toán khối, thuật toán dòng có tốc độ nhanh hơn và thường được sử dụng khi khối lượng dữ liệu cần mã hóa chưa được xác định, chẳng hạn như trong các kết nối không dây Có thể xem thuật toán dòng như một phiên bản của thuật toán khối với kích thước mỗi khối là 1 bit Một số thuật toán dòng phổ biến bao gồm RC4, A5/1, A5/2 và Chameleon.
Mã dòng có các đặc tính sau:
Kích thước một đơn vị mã hóa: gồm k bít Bản rõ được chia thành các đơn vị mã hóa: P … (: k bit)
Một bộ sinh dãy số ngẫu nhiên: dùng một khóa K ban đầu để sinh ra các số ngẫu nhiên có kích thước bằng kích thước đơn vị mã hóa:
Mỗi số ngẫu nhiên được XOR với đơn vị mã hóa của bản rõ để được bản mã
Quá trình giải mã được thực hiện bằng cách XOR bản mã C với dãy số ngẫu nhiên S để khôi phục bản rõ ban đầu Đối với mã dòng, các số được sinh ra cần phải đảm bảo độ ngẫu nhiên cao với chu kỳ tuần hoàn dài.
Hình 1.1: Sơ đồ mã hóa mật mã dòng
Mã hóa dòng tương tự như mã hóa Vigenere và One-Time Pad, với điểm mấu chốt là bộ sinh số ngẫu nhiên Việc chọn khóa ngắn như mã hóa Vigenere không đảm bảo an toàn, trong khi khóa dài như One-Time Pad lại không thực tế Bộ sinh số của mã dòng tạo ra sự cân bằng giữa hai yếu tố này, cho phép sử dụng khóa ngắn nhưng vẫn đảm bảo độ ngẫu nhiên cần thiết như khóa của One-Time Pad, mặc dù không hoàn toàn ngẫu nhiên.
1.1.2 Đặc trưng mã dòng và ứng dụng trong bảo mật thông tin
Mật mã dòng là một loại mật mã khóa đối xứng, mang đầy đủ các đặc trưng của phương pháp này Điểm mạnh của mã hóa đối xứng là tốc độ mã hóa và giải mã nhanh chóng Hiện nay, nhiều phần mềm thương mại hỗ trợ thuật toán mã hóa đối xứng hiệu quả và phổ biến.
Hình 1.2: Mô hình mật mã khóa đối xứng
Nhược điểm lớn nhất của thuật toán mã hóa đối xứng là vấn đề chuyển giao khóa bí mật giữa các đối tác trong môi trường mở Khi Alice gửi thông điệp mã hóa cho Bob, Bob cần có chìa khóa mã của Alice để giải mã Tuy nhiên, nếu Alice gửi khóa cùng với thông điệp, tính bảo mật sẽ bị ảnh hưởng Do đó, Alice phải tìm cách chuyển giao khóa giải mã cho Bob trước khi gửi thông điệp, nhưng bất kể phương thức nào như gửi thư, email hay gọi điện thoại, vẫn tồn tại nguy cơ bị người thứ ba nắm bắt khóa mã.
Xét trường hợp giao dịch của 2 đối tác Alice và Bob Giả sử Alice và Bob
Trong một mối quan hệ an toàn, việc "hoàn toàn tin tưởng vào nhau" là điều cần thiết Hai bên cần trao đổi mã khóa đối xứng thông qua một phương pháp đáng tin cậy, như trao tay trực tiếp hoặc sử dụng một phương pháp thay thế có giá trị tương đương Sau khi nhận được mã khóa, cả hai có thể truyền tải các thông điệp mã hóa cho nhau một cách an toàn.
- Sử dụng mã đối xứng (trong các điều kiện nói trên) đảm bảo được nguyên lý bí mật/riêng tư vì thông tin không thể bị lộ
Để đảm bảo tính xác thực, không chối bỏ và tính nhận dạng trong giao tiếp mã hóa, việc chuyển giao khóa bí mật K giữa Alice và Bob là rất quan trọng Khi Alice và Bob trực tiếp trao đổi khóa này và tin tưởng lẫn nhau, họ có thể xác định rằng thông điệp mã hóa bằng K là do đối tác gửi Nếu Bob nhận được thông điệp mã hóa từ Alice, Alice không thể chối bỏ việc phát hành thông điệp đó, vì chỉ có họ mới biết khóa K Tuy nhiên, nếu Bob phủ nhận việc nhận thông điệp, điều này phụ thuộc vào "tính tin tưởng" giữa hai bên, không chỉ dựa vào khóa K.
Mã hóa đối xứng không đảm bảo tính toàn vẹn dữ liệu, dẫn đến việc thông điệp của Alice gửi cho Bob có thể bị can thiệp bởi Oscar Dù Oscar không hiểu nội dung thư, nhưng hắn có thể thay đổi hoặc thêm bớt dữ liệu, khiến thông điệp bị sai lệch Khi nhận được, Bob không thể phát hiện sự can thiệp này và vẫn tin rằng thông điệp là nguyên vẹn từ Alice, điều này có thể khiến Bob hiểu sai hoặc không thể giải mã thông điệp.
Hình 1 3: Thông tin Alice gửi Bob bị Oscar bắt được và phát lại
Các thuật toán mã hóa đối xứng là giải pháp lý tưởng cho người dùng cá nhân hoặc tổ chức đơn lẻ nhằm bảo vệ dữ liệu khỏi sự xâm nhập của kẻ xấu Không chỉ những bí mật an ninh quốc phòng mà cả thông tin trong công nghệ và thương mại cũng có thể bị tấn công bởi gián điệp công nghệ và kinh tế thông qua các phương pháp như cài đặt phần mềm độc hại Do đó, cá nhân và tổ chức nên mã hóa dữ liệu quan trọng bằng khóa tự tạo và giữ bí mật khóa Tuy nhiên, mã hóa đối xứng gặp khó khăn khi cần chia sẻ thông tin với bên thứ hai, vì việc chuyển giao chìa khóa trong môi trường mở có thể dẫn đến rủi ro lộ thông tin, làm cho việc mã hóa trở nên vô nghĩa.
Mã đối xứng chỉ có thể được sử dụng cho nhiều đối tác trong điều kiện có thể gặp mặt trực tiếp để chuyển giao khóa mã trong môi trường tin cậy Nếu không có biện pháp chuyển giao khóa an toàn, mã đối xứng sẽ không đảm bảo được các nguyên lý bảo mật thông tin cơ bản như bí mật, toàn vẹn, xác thực và chống chối bỏ.
1.1.3 Một số mã xác thực thông báo phổ biến hiện nay
A5/1 là thuật toán bảo mật dữ liệu trong mạng điện thoại GSM, đảm bảo an toàn cho thông tin liên lạc giữa điện thoại và trạm thu phát sóng Đơn vị mã hóa của A5/1 là một bít, với bộ sinh số tạo ra bít 0 hoặc bít 1 để thực hiện phép XOR Để dễ hiểu hơn, chúng ta sẽ xem xét mô hình thu nhỏ của A5/1, được gọi là TinyA5/1.
Bộ sinh số TinyA5/1 hoạt động dựa trên ba thanh ghi X, Y, Z, trong đó thanh ghi X có 6 bit (x0 đến x5), thanh ghi Y có 8 bit (y0 đến y7), và thanh ghi Z lưu 9 bit (z0 đến z8) Khóa K ban đầu dài 23 bit và được phân bố vào các thanh ghi theo thứ tự K XYZ Các thanh ghi X, Y, Z được biến đổi theo ba quy tắc khác nhau.
Quay X gồm các thao tác:
Ví dụ: giả sử X là 100101, dẫn đến t = 0 ⊕ 0 ⊕ 1 = 1, vậy sau khi quay giá trị của X là 110010.
Quay Y tương tự quay X, quay Y là như sau:
Hàm maj(x, y, z) được định nghĩa là hàm "chiếm đa số" cho ba bít x, y, z Nếu trong ba bít này có từ hai bít 0 trở lên, hàm sẽ trả về giá trị 0 Ngược lại, nếu không, hàm sẽ trả về giá trị 1.
Tại bước sinh số thứ i, các phép tính sau được thực hiện: m = maj(x1, y3, z3) if x1 = m then thực hiện quay X if y3 = m then thực hiện quay Y if z3 = m then thực hiện quay Z
Và bit được sinh ra là: si = x5 ⊕ y7 ⊕ z8
Thực hiện mã hóa bản rõ: ci = pi ⊕ si
Trong mã hóa bằng quy tắc mã dòng, bít thứ i trong bản rõ được XOR với bít thứ i trong khóa để tạo ra bít thứ i trong bản mã Ví dụ, khi mã hóa ký tự P1 (chữ h) với khóa K, quy trình này sẽ được áp dụng để đảm bảo tính bảo mật của dữ liệu.
Ban đầu giá trị của các thanh ghi X, Y, Z là:
Z = 001001100 Vậy bản mã là C = 111 ⊕ 100 = 011 (chữ D)
Về nguyên tắc bộ sinh số A5/1 hoạt động giống như TinyA5/1 Kích thước thanh ghi X, Y, Z lần lượt là 19, 22, 23 bit Các bước quay X, Y, Z cụ thể như sau:
Hàm maj được tính trên 3 bít x8, y10, z10 Sau khi quay xong bít sinh ra là: si = x18 ⊕ y21 ⊕ z22
Hình 1 4: Quá trình sinh dãy A5/1
Mã hóa A5/1 là một phương pháp dễ dàng thực hiện bằng thiết bị phần cứng với tốc độ nhanh, từng được áp dụng để mã hóa dữ liệu real-time như âm thanh Hiện nay, A5/1 chủ yếu được sử dụng để bảo mật dữ liệu cuộc gọi trong mạng điện thoại GSM.
Tổng quan mã xác thực thông báo
1.2.1 Khái niệm mã xác thực thông báo
Mã xác thực thông báo (Message Authentication Code - MAC) là một thông tin ngắn gọn, tương tự như chữ ký, được sử dụng trong mật mã học để cung cấp bằng chứng xác thực cho dữ liệu.
Mã chứng thực thông điệp (MAC) có thể coi là một dạng checksum của mã hóa, được tính theo công thức MAC = C(M, K), trong đó:
- M là thông điệp cần tính MAC.
- K là khóa bí mật được chia sẻ giữa người gửi và người nhận.
MAC sử dụng khóa K bí mật để đảm bảo rằng chỉ người gửi và người nhận có thể tính toán giá trị MAC tương ứng, từ đó xác thực thông điệp Mô hình ứng dụng MAC giúp bảo vệ tính toàn vẹn và xác thực của dữ liệu trong quá trình truyền tải.
Để hỗ trợ các nhà phát triển ứng dụng trong việc tích hợp mã xác thực bằng MAC vào sản phẩm, Viện Tiêu chuẩn và Công nghệ Quốc gia của Mỹ (NIST) đã đưa ra hai tiêu chuẩn về hàm MAC.
Tiêu chuẩn đầu tiên là Mã xác thực thông báo sử dụng hàm một chiều có khóa - HMAC (Keyed-Hash Message Authentication Code) Chuẩn này mô tả phương pháp an toàn để chuyển đổi hàm một chiều kháng va chạm mã băm thành mã MAC HMAC ban đầu được khuyến nghị sử dụng với SHA-1, nhưng cũng có thể áp dụng cho các thuật toán băm khác Các chứng minh hiện tại cho thấy rằng kháng va chạm không cần thiết cho sự an toàn của NMAC (Nested MAC), từ đó HMAC được phát triển.
M là thông điệp cần trao đổi
K là một khóa bí mật chỉ được biết bởi bên gửi và bên nhận
opad = 0x36, lặp lại nếu cần thiết
ipad = 0x5C, lặp lại nếu cần thiết
|| là phép toán nối chuỗi
Lược đồ băm có thể được nhìn thấy như bên dưới:
Hình 1 6: Lược đồ tạo mã xác thự băm HMAC
Chuẩn thứ hai của NIST là Mã xác thực thông báo mã hóa (CMAC), sử dụng mã khối để thực hiện chức năng MAC, phù hợp cho các ứng dụng bộ nhớ hạn chế CMAC dựa trên chế độ mã CBC ba khóa (three-key cipher block chaining MAC), trong đó người gửi chọn khóa độc lập với khóa mã và sử dụng mã theo chế độ CBC Người gửi chỉ quan tâm đến bản mã cuối cùng là thẻ MAC, bỏ qua các bản mã giữa Khi khóa dùng cho CBC-MAC không trùng với khóa mã của bản rõ, MAC sẽ đảm bảo an toàn.
Hình 1 7: Lược đồ tạo mã xác thực CMAC
Mã dòng xác thực và ứng dụng
Mã hóa xác thực (Authenticated Encryption - AE) là phương pháp mã hóa đồng thời đảm bảo cả tính bảo mật và tính xác thực cho dữ liệu Một giao diện lập trình điển hình để triển khai mã hóa xác thực thường cung cấp các chức năng cần thiết cho việc này.
Input: bản rõ, khóa, một header tùy chọn trong bản rõ sẽ không được mã hóa nhưng vẫn được bảo vệ bởi tính xác thực.
Output: bản mã và thẻ xác thực (MAC).
Input: bản mã, thẻ xác thực và header (nếu có dùng trong mã hóa).
Output: bản rõ hoặc lỗi nếu thẻ xác thực không khớp với bản mã hoặc header đã được cung cấp.
Một số mã hóa xác thực phổ biến:
Cấu trúc AES-GCM kết hợp mã khối AES với chế độ đếm Galois (GCM), mang lại hiệu suất cao cho mã hóa dữ liệu trên các thiết bị phần cứng hạn chế Thuật toán này không chỉ đảm bảo tính bảo mật mà còn cung cấp tính xác thực và tính toàn vẹn cho dữ liệu GCM được thiết kế cho các thuật toán mã khối với kích thước 128 bit, trong khi mã xác thực tin nhắn Galois (GMAC) là phiên bản chỉ dành cho xác thực Cả GCM và GMAC đều hỗ trợ vectơ khởi tạo có độ dài tùy ý AES-GCM yêu cầu bốn đầu vào: khóa AES, vectơ khởi tạo (IV), nội dung văn bản gốc và dữ liệu xác thực bổ sung (AAD), và tạo ra hai đầu ra: bản mã và mã xác thực.
Trong chế độ GCM, các khối được đánh số liên tục và kết hợp với một vectơ khởi tạo (IV) trước khi được mã hóa bằng AES Kết quả mã hóa này được XOR với bản rõ để tạo ra bản mã Đặc biệt, để đảm bảo tính bảo mật, mỗi dòng được mã hóa cần sử dụng một IV khác nhau.
Các khối bản mã đóng vai trò là hệ số của đa thức và được đánh giá tại điểm khóa H thông qua số học trường hữu hạn Kết quả này được mã hóa để tạo ra một thẻ xác thực, giúp xác minh tính toàn vẹn của dữ liệu Văn bản mã hóa bao gồm IV, bản mã và thẻ xác thực.
AES-CCM là chế độ mã hóa xác thực sử dụng mật mã AES với khối 128 bit, kết hợp giữa chế độ CBC-MAC và Counter Nó yêu cầu bốn đầu vào: khóa AES, nonce, nội dung văn bản gốc và dữ liệu xác thực bổ sung (AAD) AES-CCM tạo ra hai đầu ra: bản mã và mã xác thực, trong đó nonce cần phải duy nhất và không được tái sử dụng với cùng một khóa Khác với AES-GCM, CCM không phải là một AEAD "trực tuyến", do đó độ dài của tin nhắn phải được biết trước Chuỗi khối mật mã sử dụng vectơ khởi tạo (IV) với chiều dài cố định, và việc giải mã một khối bản mã phụ thuộc vào tất cả các khối trước đó Điều này có nghĩa là tính hợp lệ của các khối trước được chứa trong khối bản mã ngay trước đó, và một lỗi bit đơn trong khối bản mã sẽ ảnh hưởng đến việc giải mã tất cả các khối tiếp theo Trong chuỗi khối mật mã, mỗi khối bản rõ được XOR với khối bản mã trước đó trước khi được mã hóa.
Ngày nay, mã dòng xác thực đóng vai trò quan trọng trong các ứng dụng yêu cầu xử lý thời gian thực như hội nghị truyền hình, VoIP và live stream Các mã dòng phổ biến như A5, RC4 và RC5 chỉ đảm bảo hiệu năng mà không có yếu tố xác thực Mặc dù AES-GCM là mã dòng xác thực, nhưng nó không phù hợp với các thiết bị IoT có tài nguyên hạn chế Mã dòng xác thực ChaCha20-Poly1305 được giới thiệu như một giải pháp thay thế hiệu quả, đáp ứng yêu cầu về hiệu suất, bảo mật và tính xác thực Đồ án sẽ nghiên cứu chi tiết mã dòng xác thực này trong chương 2.
Tổng kết chương 1
Chương này trình bày tổng quan về khái niệm và nguyên lý hoạt động của mật mã dòng, đồng thời phân tích các đặc điểm và đặc trưng của mã dòng trong bảo mật thông tin Ngoài ra, chương cũng giới thiệu sơ đồ và phương thức hoạt động của một số mã dòng phổ biến như A5/1 và RC4.
Cuối chương, bài viết đề cập đến một số thuật toán mã hóa xác thực phổ biến như AES-GCM và AES-CCM Tuy nhiên, những thuật toán này không thích hợp cho các thiết bị IoT có tài nguyên phần cứng hạn chế, đặc biệt là trong việc sử dụng mã dòng xác thực.
ChaCha20-Poly1305 được giới thiệu và khuyến nghị như một lựa chọn thay thế hiệu quả Trong chương 2, bài viết sẽ tiến hành nghiên cứu chi tiết về thuật toán mã hóa này.
MÃ DÒNG XÁC THỰC CHACHA20-POLY1305
Mã dòng ChaCha20
ChaCha20 là mật mã dòng được Daniel Bernstein phát triển dựa trên mật mã dòng Salsa20 trước đó ChaCha hoạt động với các từ 32 bit đầu vào, 256 bit khóa
K =(k0, k1, k2, k3, k4, k5, k6, k7) và bộ đếm 32 bit C = (c0) và tạo ra một chuỗi các khối khóa 512 bit Ma trận đầu vào 16 từ của ChaCha được hình thành như sau:
4 word đầu tiên là hằng số: 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574.
8 word tiếp theo lấy 256 bit khóa, đọc byte theo thứ tự Little Endian (theo đoạn 4 byte)
1 word của bộ đếm khối 32 bit (được tăng lên sau mỗi 20 vòng)
3 word cuối là nonce (cần được quản lý bên ngoài ChaCha20)
Trạng thái của hàm khối được biểu diễn trên ma trận 4 × 4 sau:
Thực hiện 20 vòng luân phiên giữa dịch vòng cột và dịch vòng chéo, mỗi vòng bao gồm 4 phép quarter round Trong đó, có 2 vòng luân phiên giữa dịch vòng cột và dịch vòng chéo.
QUARTERROUND( x0, x4, x8,x12)QUARTERROUND( x1, x5, x9,x13)QUARTERROUND( x2, x6,x10,x14)QUARTERROUND( x3, x7,x11,x15)QUARTERROUND( x0, x5,x10,x15)QUARTERROUND( x1, x6,x11,x12)
4 phép đầu là dịch vòng cột và 4 phép cuối là dịch vòng chéo. Mỗi phép quarter round được mô tả như sau:
Hình 2.1: Lược đồ hoạt động hàm Quarter Round a = a + b; d = d ⊕ a; d = (d)setText(fct2); free(pt); free(ct); free(ad);
Thử nghiệm chương trình
To generate encryption parameters, input the length of Authenticated Data in the "Input Length of Authenticated Data" field and click "Generate Parameters." The program will randomly produce a secret key, nonce value, and Authenticated Data The rand() function in C (section 3.1) is utilized to create these pseudo-random parameters.
Hình 3 1: Thực hiện sinh tham số 3.2.2 Mã hóa và giải mã dữ liệu
Sử dụng Test Vector của mã hóa ChaCha20-Poly1305 trong tài liệu RFC
7539 Dùng phần mềm HxD lần lượt tạo các tệp txt bao gồm: Plain text, Key,Nonce và AD (hình 3.3 đến 3.6) với giá trị như trong mẫu (hình 3.2).
Hình 3 2: Test Vector của RFC 7539
Hình 3 3: Tạo tệp plain text
Hình 3 4: Tạo tệp secret key
To create an Authenticated Data file, open the four previously created files by clicking the "Open file" button Then, press the "Encrypt" button to begin the data encryption process The program will encrypt the plaintext and generate an encrypted file named file.txt.enc, along with a corresponding authentication tag.
Hình 3 7: Tiến hành mã hóa
Mở file mã hóa trên và so sánh khớp với bản mã trong tài liệu RFC 7539, ta thấy chương trình đã mã hóa chính xác:
Hình 3 8: Tệp bản mã sau khi mã hóa thành công
Hình 3 9: Bản mã trong RFC 7539
Tiếp theo, chúng ta sẽ giải mã tệp tin đã mã hóa Tương tự như các bước trước, sau khi mở các tệp và dán thẻ xác thực, hãy nhấn nút Decrypt/Verify để bắt đầu quá trình giải mã dữ liệu.
Hình 3 10: Tiến hành giải mã
Khi ô Result hiển thị chữ "Successfully", điều này có nghĩa là quá trình giải mã đã thành công Chương trình sẽ tạo ra một tệp txt chứa nội dung đã được giải mã, khớp với thông điệp gốc.
Hình 3 11: Kết quả giải mã
Đánh giá hiệu năng chương trình
Theo Adam Langley, trong các môi trường có tài nguyên phần cứng hạn chế, ChaCha20-Poly1305 hoạt động hiệu quả hơn AES-GCM Điều này đặc biệt đúng với các thiết bị di động, thiết bị IoT và chip ARM, nơi mà ChaCha20-Poly1305 có thể thực thi nhanh hơn nhờ khả năng xử lý tốt bằng phần mềm.
Trong thực tế, hiệu suất của hai thuật toán này trong môi trường di động được thể hiện theo bảng dưới đây:
Bảng 3 1: So sánh hiệu năng AES-GCM và ChaCha-Poly1305
Chip xử lý AES-128-GCM ChaCha20-Poly1305
Sandy Bridge Core i5 (AES-NI) 300 MB/s 190 MB/s
Tốc độ thực thi của ChaCha20-Poly1305 nhanh gấp 3 lần so với AES-GCM trong môi trường di động Ngược lại, AES-GCM lại có hiệu suất cao hơn trong môi trường phần cứng chuyên dụng với hỗ trợ AES-NI.