Như đã đề cập ở trên, thuật toán mã hoá theo khối tiến hành thực hiện các hàm toán học trên các khối dữ liệu. Thuật toán mã hoá theo luồng thông tin (stream cipher) không chia thông tin thành từng khối như vậy mà coi thông tin là một luồng các bit hoặc byte và tiến hành thực hiện các phép toán trên các bit hoặc byte đó.
Trong thuật toán mã hoá theo luồng, tại mỗi lần mã hoá khác nhau, các bit hoặc byte có thể được biến đổi thành giá trị khác nhau. Một số thuật toán sử dụng bộ tạo chuỗi khoá (keystream generator) để tạo ra các chuỗi bit và so sánh tuyệt đối (XOR) với các bit dữ liệu plaintext để tạo ra thông tin mã hoá. Hình 2.6 bên dưới minh hoạ quá trình này [4].
Hình 2.6: Giá đầu ra của bộ tạo chuỗi khoá được so sánh tuyệt đối với các bit của dữ liệu plaintext
Nếu hệ thống mã hoá chỉ đơn thuần phụ thuộc vào bộ tạo chuỗi khoá thì kẻ tấn công có thể copy thông tin dưới dạng plaintext đem so sánh tuyệt đối với thông tin mã hóa thu được để tìm ra chuỗi khoá và từ đó giải mã các thông tin khác. Do đó cần phải bổ sung thêm khoá mã cho thuật toán.
Trong thuật toán mã hoá thông tin theo khối, nhiêm vụ của khoá mã là xác định hàm nào sẽ được sử dụng và sử dụng theo tuần tự nào. Có nghĩa khoá mã làm nhiệm vụ cung cấp tính ngẫu nhiên cho tiến trình mã hoá. Như đã đề cập ở trên, phần lớn các thuật toán đều được công khai do đó mọi người đều có thể nắm được nguyên lý làm việc của thuật toán. Điều bí mật ở đây chính là khoá mã. Trong hệ
thống mã hoá thông tin theo luồng, khoá mã cũng làm nhiệm vụ cung cấp tính ngẫu nhiên, nhưng áp dụng cho chuỗi khoá làm việc với luồng thông tin. Khoá mã là một giá ngẫu nhiên được đưa vào thuật toán để tạo ra một chuỗi mã, đảm bảo tính ngẫu nhiên của chuỗi mã được tạo ra. Hình 2.7 bên dưới minh hoạ quá trình này.
Hình 2.7: Khoá mã dùng để tạo ra các chuỗi khoá ngẫu nhiên trong quá trình mã hoá và giải mã
Độ an toàn và tính hiệu quả của thuật toán mã hoá thông tin theo luồng gồm các đặc tính:
- Chu kỳ dài, không có sự lặp lại về kiểu trong giá trị chuỗi khoá - Chuỗi khoá không quan hệ tuyến tính với khoá mã
- Không thể dự đoán thống kê (do số lượng bit 0 luôn tương đương bit 1) Do thuật toán mã hoá theo luồng thực hiện việc mã hoá và giải mã lần lượt từng bit theo thời gian nên thuật toán này rất phù hợp để phát triển các phần cứng [6]. Thuật toán mã hoá thông tin theo khối thường phù hợp với việc triển khai ứng dụng cho phần mềm hơn bởi vì thuật toán này làm việc với các khối dữ liệu - cách mà các phần mềm thường làm (thông thường các khối có độ lớn bằng độ rộng của bus dữ liệu - 64 bit) [4].
2.4 Một số thuật toán mã hoá đối xứng đƣợc công khai phổ biến
Hiện nay có rất nhiều thuật toán mã hoá đối xứng được sử dụng công khai, các thuật toán này có những cơ chế khác nhau để cung cấp khả năng mã hoá và giải mã.
2.4.1 Data Encryption Standard (DES)
Data Encryption Standard (DES) là một thuật toán có bề dày lịch sử rất phong phú trong lĩnh vực máy tính. Trong những năm 1960, Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (NIST) nghiên cứu nhu cầu bảo vệ hệ thống máy tính và khởi xướng một chương trình mã hoá vào đầu những năm 1970. NIST mời các đối tác đề xuất các kỹ thuật mã hoá dữ liệu nhằm xây dựng một tiêu chuẩn mã hoá phổ biến. Thời điểm đó, IBM đã phát triển một thuật toán mã hoá dùng để bảo vệ các giao dịch tài chính. Năm 1974, thuật toán mã hoá sử dụng khoá mã 128 bit của IBM có tên Lucifer được đệ trình và được chấp thuận. Có rất nhiều tranh cãi xung quanh vấn đề đưa thuật toán Lucifer vào sử dụng, nhưng cuối cùng, năm 1977 Lucifer cũng trở thành một chuẩn mã hoá quốc gia Hoa kỳ và trở thành một chuẩn ANSI vào năm 1978 [6].
DES là thuật toán mã hoá hiện đại đầu tiên dùng trong thương mại đã công khai toàn bộ mọi chi tiết thực hiện bên trong. DES được phát triển phần lớn trong các sản phẩm thương mại và trong phần lớn các cơ quan chính phủ. Thuật toán DES đã được kiểm tra và được công nhận là một trong những thuật toán mạnh nhất và hiệu quả nhất. Việc không tiếp tục hỗ trợ thuật toán DES cũng là nguyên nhân gây ra nhiều tranh cãi nhất khi vào năm 1986, NSA thông báo kể từ tháng 1 năm 1988 tất cả các cơ quan chính phủ không được sử dụng thuật toán nữa, và các sản phẩm dựa trên DES sẽ không còn đáp ứng tiêu chuẩn 1027 trong bộ tiêu chuẩn của Liên bang Hoa kỳ. NSA cho rằng thuật toán DES đã quá phổ biến trong một thời gian dài nên nó chắc chắn là mục tiêu tấn công và trở nên vô ích nếu sử dụng như một tiêu chuẩn chính thức. Rất nhiều nhà nghiên cứu không tán thành nhưng NSA muốn có một tiêu chuẩn mới hơn, an toàn hơn và ít phổ biến hơn.
Quyết định của NSA gây ra rất nhiều tranh cãi và phản ứng tiêu cực bởi vì tại thời điểm đó, DES vẫn cung cấp các tính năng bảo mật cần thiết, các máy tính tại thời điểm đó cần hàng nghìn năm mới phá mã được; ngoài ra DES đã được tích hợp vào trong hàng nghìn sản phẩm và chưa có thuật toán nào thay thế cho DES. NSA cân nhắc lại quyết định của mình và NIST quyết định tiếp tục chấp nhận DES thêm năm năm nữa.
Năm 1998, hãng Electronic Frontier Foundation chế tạo một hệ thống máy tính trị giá 250,000 đô la và phá mã DES trong vòng ba ngày [6]. Chiếc máy tính đó gồm 1,536 bộ vi xử lý chạy ở tốc độ 40MHz, mỗi bộ vi xử lý có thể thực hiện 60 triệu phép giải mã trong vòng 1 giây. Mặc dù hầu hết mọi người không thể có những hệ thống máy tính như vậy để phá mã DES, nhưng khi định luật Moore thành sự thật, sức mạnh của bộ vi xử lý tăng lên thì các kẻ tấn công có khả năng tài chính ở mức trung bình cũng có thể phá mã DES. Điều này làm cho thuật toán 3DES ra đời. Thuật toán 3DES mạnh hơn bằng cách thực hiện mã hoá, giải mã rồi lại mã hoá thông tin với các khoá mã khác nhau.
Sau này tiêu chuẩn mã hoá DES đã được NIST thay thế bằng tiêu chuẩn Advanced Encryption Standard (AES) với thuật toán Rijndael. Điều này có nghĩa là Rijndael là một thuật toán mới được phê chuẩn để mã hoá các thông tin nhạy cảm (chưa phải là bí mật) của Chính phủ Mỹ và thuật toán này sẽ dần được chấp thuận sử dụng công khai, rộng rãi.
Cơ chế hoạt động của DES [4]
Thiết kế của DES liên quan tới hai khái niệm đó là: Product cipher và Feistel cipher. Cả hai bao gồm việc lặp đi lặp lại một dãy các thao tác.
Ý tưởng cơ bản của một product cipher là xây dựng một hàm mã hoá phức tạp bằng cách kết hợp vài giải thuật đơn giản bổ sung các thiếu sót lẫn nhau. Các giải thuật cơ bản bao gồm: các phương pháp hoán vị, tịnh tiến (ví dụ như XOR) các phép ánh xạ tuyến tính, các biến đổi số học, nhân modun, các phép thay thế đơn giản.
Một Product cipher là sự kết hợp hai hay nhiều hơn các phép biến đổi nhằm mục đích có được một phép mã hoá an toàn hơn.
Một mạng thay thế-hoán vị (substitutation-permutation network hay SP network) là một product cipher bao gồm một số các tầng, mỗi tầng bao gồm các thay thế và hoán vị
Nhiều mạng thay thế-hoán vị là các phép mã hoá lặp theo định nghĩa: Một mã hoá theo khối lặp là một mã hoá theo khối bao hàm việc lặp lại có thứ tự một hàm nội tại gọi là hàm vòng. Các tham số bao gồm số vòng lặp, kích thước khối n được tính
bằng bit, kích thước k từ đó rút ra r khoá con Ki….
Hình 2.8: Một mạng thay thế
Một Feistel cipher là một mã hoá lặp, ánh xạ một tài liệu gốc 2t bit (L0,R0) với các khối t bit L0, R0 thành một văn bản được mã hoá (Rr,Lr) qua 1 quá trình r vòng trong đó r1. Với 1ir, vòng thứ i ánh xạ (Li1,Ri1)Ki (Li,Ri) như sau:
1
i
i R
L , Ri Li1 f(Ri1,Ki) trong đó mỗi khoá con Ki được rút ra từ khoá mã K. Theo chuẩn của Feistel cipher, r3 và thường là số chẵn [4]. Cấu trúc của Feistel bắt buộc mã hoá đầu ra là (Rr,Lr) chứ không phải là (Lr,Rr); các khối được đổi chỗ ban đầu của chúng sau vòng cuối cùng. Việc giải mã vì vậy cũng sử dụng 1 quá trình r vòng nhưng với các khoá con Ki theo thứ tự ngược lại, từ Kr đến K1. Hàm f
trong Feistel cipher có thể là một product cipher, mặc dù f không nhất thiết phải là khả đảo để cho phép đảo nghịch trong mã hoá Feistel.
DES là một giải thuật mã hoá đối xứng sử dụng phương pháp mã hoá thông tin theo khối. Một khối thông tin plaintext 64 bit đi vào sẽ tạo ra một khối thông tin ciphertext 64 bit. Giải thuật DES sử dụng một khoá mã 64 bit trong đó 56 bit là các khoá mã thật còn 8 bit (các bit 8, 16, …, 64) là bit kiểm tra chẵn lẻ.
Khi tiến hành mã hoá dữ liệu, DES chia dữ liệu thành các khối 64 bit và tiến hành thao tác lần lượt từng khối. Mỗi khối được chia làm 32 bit thấp và 32 bit cao, rồi được đưa qua 16 vòng thực hiện các hàm hoán vị, thay thế. Thứ tự thực hiện các hàm hoán vị, thay thế phụ thuộc vào giá trị khoá mã đưa vào thuật toán.
Hình 2.9: Sơ đồ khối thực hiện giải thuật DES
Các thuật toán mã hoá theo khối có các chế độ điều khiển mã hoá khác nhau. Các chế độ này sẽ xác định cách thức làm việc của thuật toán. Mỗi chế độ có các đặc tính khác nhau và làm việc tốt trong một môi trường với các chức năng nhất định. Điều này rất quan trọng khi triển khai hệ thống mã hoá DES.
DES có bốn chế độ hoạt động cơ bản được sử dụng trong các hoàn cảnh khác nhau và cho những kết quả khác nhau.
Chế độ Electronic Code Book (ECB)
cuốn sổ chứa các ký hiệu điện tín (code book). Khi một khối dữ liệu 64 bit và khoá mã được đưa vào thuật toán sẽ tạo ra một khối ciphertext. Với cùng một khối dữ liệu đưa vào và với cùng một giá trị khoá mã, giải thuật DES làm việc trong chế độ ECB luôn cho ra các ciphertext giống nhau. Không phải khối dữ liệu nào cũng có đầy đủ 64 bit, do đó ECB phải kết hợp với bộ đệm (padding) chèn thêm các bit vô nghĩa để tạo ra các khối thông tin 64 bit. Chế độ hoạt động này thường làm việc với dữ liệu có kích thước nhỏ như để mã hoá và bảo vệ các khoá mã.
Mỗi một khoá mã có một code book riêng. Code book cung cấp quy tắc tiến hành các phép thay thế và hoán vị thực hiện trên khối dữ liệu plaintext. Do chế độ ECB làm việc độc lập với các khối dữ liệu khác nhau nên dữ liệu trong một file không cần phải mã hoá theo một trật tự xác định. Điều này rất hữu ích khi mã hoá các cơ sở dữ liệu. Một cơ sở dữ liệu chứa rất nhiều các phân mảnh dữ liệu do đó nếu được mã hoá theo chế độ ECB, tất cả các bản ghi, bảng biểu có thể được thêm vào, mã hoá, giải mã và xoá bỏ mà không hề ảnh hưởng đến các bản ghi và bảng biểu khác. Các chế độ hoạt động khác của DES phụ thuộc vào thông tin được mã hoá trước đó nên rất khó có thể mã hoá và giải mã các khối thông tin nhỏ bởi vì trước tiên cần phải giải mã các khối thông tin kế trước. Chế độ mã hoá ECB này cũng được dùng trong một số ứng dụng kiểu challenge-response và trong một số ứng dụng quản ký khoá mã. Chế độ mã hoá ECB cũng được dùng để mã hoá mã số cá nhân (PIN) trong các hệ thống rút tiền tự động (ATM) của các ngân hàng.
Chế độ Cipher Block Chaining (CBC)
Trong chế độ ECB, mỗi khối dữ liệu plaintext và khóa mã luôn trả về một giá trị ciphertext duy nhất. Điều đó có nghĩa nếu từ “balloon” được mã hoá thành “hwicssn” thì mã hoá tại thời điểm bất kỳ thời điểm nào với cùng khoá mã ấy kết quả không bao giờ thay đổi. Điều này có nghĩa là chế độ ECB mã hoá theo một khuôn mẫu định sẵn và nếu kẻ tấn công cố gắng thì có thể sẽ tìm hiểu được tiến trình mã hoá. Chế độ mã hoá CBC không tuân theo một khuôn mẫu định sẵn do các khối thông tin, khoá mã và giá trị đầu ra luôn phụ thuộc vào các đầu ra của khối kề trước trong thuật toán; và giá trị thu được cũng được dùng để mã hoá khối tiếp theo. Cơ chế này cho phép kết quả thu được bởi quá trình mã hoá ngẫu nhiên hơn.
Hình 2.10: Trong chế độ CBC, ciphertext thu được dùng để mã hoá khối thông tin tiếp theo
Giá trị ciphertext được tách ra và so sánh tuyệt đối với plaintext của khối tiếp theo làm cho các khối trong thuật toán phụ thuộc vào nhau hay nói cách khác các khối dữ liệu được móc nối với nhau tạo thành một chuỗi mắt xích. Đấy cũng là lý do chế độ này có tên là mã hoá theo khối liên kết (CBC), sự liên kết này giúp cho thuật toán giấu được khuôn mẫu của mình. Cơ chế này có thể biểu diễn dưới dạng biểu thức toán học như sau:
1 K i i i E P C C i K i i C D C P 1
Việc các khối dữ liệu plaintext phụ thuộc vào khối mã hoá ciphertext trước đó cũng có nghĩa là khối dữ liệu plaintext phụ thuộc vào tất cả các khối dữ liệu trước đó.
Chế độ mã hoá Cipher Feedback (CFB)
Chế độ mã hoá CBC chỉ có thể tiến hành được khi thuật toán nhận đầy đủ các khối thông tin. Đây là một diều trở ngại cho một số ứng dụng ví dụ như các ứng dụng dạng terminal cần phải truyền đi các ký tự ngay khi ký tự đó được nhập vào. Cơ chế mã hoá CFB cho phép khắc phục được điều này. Trong chế độ này, giá trị ciphertext tạo ra từ khối thông tin được mã hoá trước đó được đưa ngược vào thuật toán để tạo ra các giá trị ngẫu nhiên. Các giá trị ngẫu nhiên này được kết hợp với các khối thông tin hiện thời để tạo ra thông tin mã hoá ciphertext. Đây là một hình thức khác của cơ chế mã hoá theo khối liên kết, tuy nhiên khác với cơ chế CBC sử dụng trực tiếp giá trị ciphertext của khối trước đó, cơ chế CFB biến đổi giá trị
ciphertext trước đó rồi mới so sánh tuyệt đối với giá trị plaintext trong khối hiện tại. Quá trình này có thể biểu diễn dưới dạng biểu thức toán học như sau:
1 i K i i P E C C 1 i K i i C E C P Ek + + Ek + Pi-1 Pi Pi+1 Ci-1 Ci Ci+1 Hình 2.11: Chế độ mã hoá CFB
Chế độ mã hoá Output Feedback (OFB)
Chế độ mã hoá này rất giống với chế độ mã hoá CFB, nhưng nếu DES làm việc trong chế độ OFB, thuật toán sẽ có chức năng như một thuật toán mã hoá theo luồng bởi vì OFB tạo ra một chuỗi bit ngẫu nhiên kết hợp với plaintext để tạo ra ciphertext. Ciphertext này được đưa ngược trở lại thuật toán tạo ra một đầu vào cho khối tiếp theo để mã hoá luồng bit kế tiếp.
Như đã đề cập trong các phần trước, phương pháp mã hoá theo khối làm việc trên các khối dữ liệu còn phương pháp mã hoá theo luồng làm việc trên các luồng dữ