C = + ) vμ thu đ−ợc C1+B2. Từ C1 đã nhận đ−ợc tr−ớc kia, bên thu sẽ tính (C1⊕B2)⊕C1. Ta có:
(C1 ⊕B2)⊕C1 =(C1⊕C1)⊕B2 =0⊕B2 =B2
Đây lμ giá trị rõ của khối thứ hai. Các khối tiếp sau cũng đ−ợc xử lý t−ơng tự.
Nh− đã nêu ra trên hình 5.23, ta thấy rằng các khối bản rõ nh− nhau đ−ợc phát tách biệt hoặc đ−ợc phát trong cùng một lần truyền không nhất thiết tạo ra cùng một bản mã. Có sự khác nhau nh− vậy vì mỗi khối sẽ phụ thuộc vμo tất cả các khối ở phần tr−ớc. Vì vậy, thám mã không thể lặp lại các khối nhất định từ một đ−ờng truyền nμy sang một lần truyền khác hoặc thậm chí lμ chỉ tìm các khối xuất phát từ cùng một bản rõ. B = Bi j E DES Khóa K E(B C )i i-1 = C Ci-1 B = Bj i E DES Khóa K E(B C )j-1 = Cj C j i j-1 B = Bi j C i=Cj trừ phi Ci-1=Cj-1
Hình 5.23: Mã hóa các khối bản rõ nh− nhau
Đối với DES, một khối không lμm lộ khối khác vì:
(C1 B2) E( )C1 E( )B2
Thậm chí nếu thám mã biết rằng C2 =E(C1 ⊕B2) vμ đã nhận đ−ợc C1 thì thông tin nμy cũng không bị để lộ B2 hoặc thậm chí chỉ lμ E( )B2 .
5.4.1.3. Giá trị ban đầu
Chế độ xích khối sẽ che giấu các khối nh− nhau. Tuy nhiên, đối với một số thông báo một số khối đầu tiên có thể lại tuân theo một khuôn dạng định tr−ớc. Với cùng một khóa mã hóa, tất cả các thông báo dạng nμy sẽ lại tạo ra cùng một bản mã ở đầu ra.
Nếu điều nμy không thể chấp nhận đ−ợc thì ta có thể dùng một giá trị ban đầu để nâng cao độ an toμn. Giá trị nμy lμ một xâu ngẫu nhiên nμo đó đ−ợc dùng nh− khối khởi đầu. Chẳng hạn, xâu nμy có thể lμ thời gian, ngμy tháng hiện thời hoặc lμ một khối ngẫu nhiên. Xâu nμy phải khác nhau đối với mỗi thông báo đ−ợc mã hóa. Cả bên gửi vμ bên nhận đều phải giải mã khối nμy nh−ng chỉ dùng nó để giải mã cho các khối tiếp theo (khối nμy không chứa dữ liệu).
Bằng cách sử dụng một véctơ khởi tạo, thông báo B1B2B3K sẽ trở thμnh thông báo IB1B2B3K, khối đầu tiên đ−ợc gửi lμ E( )I , trong đó I lμ giá trị ban đầu. Khối tiếp theo đ−ợc gửi lμ
( ) (EI B1)
E ⊕ . Thậm chí, nếu hai khối giống nhau nằm trong các
thông báo khác nhau (ví dụ B1) thì chúng cũng không tạo ra các bản mã giống nhau (bởi vì I lμ khác nhau đối với mỗi thông báo nên E(E( )I ⊕B1) sẽ luôn khác nhau).
5.4.2. Mã hóa một chiều
Một số phép mã hóa phụ thuộc vμo một hμm khó tính toán. Ví dụ, xét hμm lập ph−ơng y = x3. Có thể dễ dμng tính x3 bằng tay. Hμm ng−ợc 3 y khó tính toán hơn nhiều. Hμm y= x2 không có hμm ng−ợc vì có hai khả năng đối với 2 y lμ +x vμ −x. Các
hμm nh− vậy (dễ tính hơn nhiều so với các hμm ng−ợc của chúng) đ−ợc gọi lμ các hμm một chiều.
5.4.2.1. Sử dụng mã hóa một chiều
Các hμm một chiều đặc biệt hữu ích trong xác thực. Các mật khẩu th−ờng đ−ợc dùng để kiểm tra xem một ng−ời sử dụng đang cố gắng đăng nhập có phải lμ một ng−ời dùng hợp lệ hay không? Việc đ−a ra công khai bảng mật khẩu của các ng−ời dùng lμ nguy hiểm đối với hệ thống máy tính, bởi vậy nhiều hệ thống đã sử dụng hμm một chiều để mã hóa bảng mật khẩu. Hệ thống sẽ l−u
( )pw
f khi ng−ời sử dụng nhận đ−ợc mật khẩu mới pw trong đó f , lμ hμm một chiều. Khi có một ng−ời sử dụng đăng nhập thì hệ thống sẽ hỏi mật khẩu. Ng−ời sử dụng đ−a vμo vμ hệ thống sẽ l−u mật khẩu đ−ợc mã bằng khóa lμ chính mật khẩu đó.
Hệ thống mật khẩu lμ an toμn vì không thể không có khả năng tính đ−ợc f−1. Thám mã phải tìm bảng mật khẩu của ng−ời dùng lμ f( )pw . Tuy nhiên, thông tin nμy không cho phép thám mã suy ra pw. Hơn nữa, thám mã có thể thử các mật khẩu khác nhau cho đến khi tìm thấy một từ w sao cho f( ) ( )w =f pw . Với các mật khẩu có độ dμi lớn đ−ợc chọn từ một bộ ký tự lớn thì kiểu tấn công nμy đ−ợc xem lμ không khả thi.
5.4.2.2. Niêm phong mật mã
Một tính chất hữu dụng khác của mật mã lμ có khả năng bảo vệ dữ liệu khỏi những can thiệp bất hợp pháp. Ví dụ, trong một tệp (file) dữ liệu thông th−ờng, một dữ liệu nμo đó, một bản ghi nμo đó hoặc toμn bộ tệp có thể bị sửa đổi mμ không bị phát hiện. ở đây, ta chỉ xem xét tới các tệp mặc dù những tình huống t−ơng tự cũng có thể áp dụng đối với một bản ghi, một tr−ờng hoặc một byte riêng lẻ.
Mã hóa th−ờng dùng để bảo mật. Tuy nhiên, trong một số tr−ờng hợp, tính toμn vẹn lại lμ một yếu tố quan trọng hơn. Ví dụ, trong một hệ thống trích xuất dữ liệu, điều quan trọng lμ phải biết rằng bản sao đ−ợc trích xuất lμ đúng với t− liệu đã l−u trữ. T−ơng tự, trong một hệ thống liên lạc an toμn, nhu cầu truyền dẫn các thông báo đúng có thể còn v−ợt trên các nhu cầu về bí mật. Mã hóa có thể đảm bảo đ−ợc tính toμn vẹn cũng nh− tính bí mật.
Trong hầu hết các tệp th−ờng không có sự rμng buộc nμo giữa các yếu tố, tức lμ mỗi byte, mỗi bit hay mỗi ký tự lμ độc lập với nhau trong tệp. Việc thay đổi một một giá trị sẽ ảnh h−ởng tới tính toμn vẹn của tệp, tuy nhiên điều nμy rất khó phát hiện đ−ợc.
Mật mã có thể đ−ợc dùng để niêm phong một tệp (giống nh− bao nó bằng một vỏ chất dẻo) sao cho bất kỳ một sự thay đổi nμo đều bị phát hiện. Một trong những kỹ thuật nμy lμ tính một hμm mật mã của tệp (th−ờng đ−ợc gọi lμ hμm băm (hask) hay tổng kiểm tra). Trong ch−ơng 4, ta đã nghiên cứu một số thuật toán băm. Hμm nμy phải phụ thuộc vμo tất cả các bit của tệp cần niêm phong sao cho bất kỳ một sự thay đổi nμo thậm chí chỉ lμ một bit riêng lẻ cũng lμm thay đổi kết quả tổng kiểm tra.
Giá trị tổng kiểm tra đ−ợc l−u cùng với tệp. Sau đó, mỗi khi tệp đ−ợc sử dụng thì tổng kiểm tra sẽ đ−ợc tính lại. Nếu tổng kiểm tra tính đ−ợc phù hợp với giá trị đã l−u thì điều đó có nghĩa lμ tệp đã không bị sửa đổi.
Một hμm mật mã (chẳng hạn DES) lμ đặc biệt thích hợp cho việc niêm phong cho các giá trị vì các thám mã không thể biết phải thay đổi giá trị đ−ợc l−u nh− thế nμo để phù hợp với dữ liệu cần sửa đổi. Nh− đã mô tả ở trên, chế độ xích khối của DES sẽ tạo ra một đầu ra mμ mỗi khối sẽ phụ thuộc vμo giá trị của các khối tr−ớc. Tổng kiểm tra mật mã của tệp có thể lμ khối cuối cùng trong phép mã hóa DES ở chế độ xích khối vì rằng khối nμy sẽ phụ thuộc vμo tất cả các khối khác.
5.4.2.3. Xác thực
Ta nhớ lại một câu chuyện cổ kể về hai ng−ời cắt một đồng tiền lμm đôi, mỗi ng−ời giữ một nửa vμ rồi ra đi. Anh ta nói rằng: "Nếu có một ng−ời đ−a tin mang đến cho bạn một cái gì đó kèm theo nửa đồng tiền nμy thì bạn sẽ biết rằng đó lμ của tôi". Với mã hóa, ta có thể lμm t−ơng tự. Trong giao tiếp cá nhân, khi nói về một ng−ời mμ chúng ta biết, ta có nhiều cách để đảm bảo rằng ng−ời mμ chúng ta nói chính lμ ng−ời mμ ta đã biết. Ta ghi nhận giọng nói, phong cách, các mẫu ngữ điệu. Trong giao tiếp máy tính, ta không có nhiều chứng cứ để đảm bảo cho ta việc nhận dạng.
Ph−ơng thức xác thực chủ yếu lμ một mật khẩu: đó lμ một từ hoặc một xâu mμ chỉ có một ng−ời biết. Hệ thống máy tính sẽ coi rằng một ng−ời nμo đó biết mật khẩu sẽ chính lμ ng−ời có mật khẩu đó. Nh− ta sẽ thấy sau nμy, các mật khẩu có thể coi lμ an toμn, mặc dù nếu đ−ợc sử dụng không đúng thì chúng chỉ bảo vệ đ−ợc chút ít.
Mã hóa lμ một dạng khác của xác thực. Nếu bạn nhận đ−ợc một thông báo đã mã hóa mμ bạn có thể giải mã bằng khóa chỉ có bạn vμ ng−ời khác biết thì thông báo lμ xác thực. Trừ phi sơ đồ mã hóa đã bị khóa hoặc mã đã bị lộ, còn không thì thông báo chỉ có thể đ−ợc tạo bởi ng−ời có khóa.
Khẳng định nμy có thể mở rộng cho toμn bộ thông báo. Với một thuật toán mã hóa mạnh thì không ai có thể thay thế một câu nμo đó trong thông báo vμ cũng không thể dán các mẩu thông báo cũ với nhau. Chẳng hạn, chế độ xích khối mật mã đã xét ở trên không cho phép thay bất kỳ một khối nμo trong thông báo. Thông báo đã nhận lμ đ−ợc gửi bởi một ng−ời đã biết vμ không thể bị sửa đổi tr−ớc khi thu nó.
5.4.2.4. Các nhãn thời gian
Một vấn đề an toμn khác cần đặt ra lμ có thể có một thông báo đã bị thu chặn vμ bây giờ đang đ−ợc phát lại. (Tình huống nμy
t−ơng tự nh− việc đổi tiền bằng một bản sao của séc mμ ng−ời gửi không biết đó lμ một bản sao). Trong tình huống nμy, ng−ời gửi vμ ng−ời nhận có thể gắn với mỗi thông báo một nhãn thời gian hoặc một số thông báo.
Số thông báo lμ một con số đ−ợc gắn vμo một thông báo. Thám mã không có cách nμo để biết đ−ợc các bit của số nμy nằm ở vị trí nμo trong thông báo hoặc không thể biết cách thay đổi các bit để tạo ra dạng mã hóa của số tiếp sau hoặc không thể biết cách thay đổi các bit nμy mμ không lμm gián đoạn việc giải mã phần còn lại của thông báo. Các số thông báo nμy không thể bị thay thế, thay đổi hoặc giả mạo. Ng−ời nhận phải duy trì việc đếm các số thông báo đã nhận đ−ợc. Nếu hai ng−ời sử dụng một tập các số thì ng−ời nhận có thể ngay lập tức biết đ−ợc liệu có thông báo nμo tr−ớc thông báo hiện thời đã bị mất hoặc bị chậm trễ vì số đ−ợc mã hóa của thông báo hiện thời phải lớn hơn số đ−ợc mã hóa của thông báo tr−ớc.
Nếu ng−ời gửi có nhiều thông báo thì có thể gặp phải vấn đề số thông báo quá dμi. Vì lý do nμy, ng−ời ta th−ờng đặt lại bộ đếm số thông báo khi nó đạt tới giá trị quá lớn (th−ờng lμ sau khi độ dμi của số thông báo v−ợt quá 30 bit). Trong tr−ờng hợp nμy, tất cả các bên thu phải đ−ợc thông báo rằng số thông báo đ−ợc gửi tiếp theo sẽ đ−ợc đặt lại về một số nhỏ (chẳng hạn lμ 0).
Còn một vấn đề khác lμ với mỗi cặp ng−ời gửi - ng−ời nhận phải có một bộ đếm riêng. Thông th−ờng, ng−ời gửi hoặc ng−ời nhận phải duy trì nhiều bộ đếm khác nhau cho nhiều đối t−ợng khác nhau.
Có một vấn đề nữa lμ một ng−ời gửi sẽ có một bộ tạo số thông báo duy nhất cho các thông báo tới mọi đối t−ợng. Nếu ng−ời gửi gửi thông báo cho hai ng−ời A vμ B thì thông báo 1 có thể đi tới A, thông báo 2 tới B, các thông báo 3 vμ 4 tới A, thông báo 5 tới B...
Không một bên thu nμo có thể biết đ−ợc thông báo nμo đã bị mất vì các số thông báo chỉ lμ một dãy tăng chứ không nhất thiết phải lμ tất cả các số trong một dải nμo đó. Tuy nhiên, bất cứ lúc nμo, bên thu cũng có thể yêu cầu phát lại thông báo tr−ớc. Số thông báo cần phải đ−ợc mã hóa hoặc phải đ−ợc bảo vệ bằng một cách nμo đó để ngăn chặn việc sửa đổi.
Các nhãn thời gian vμ ngμy tháng có thể xem lμ một cách mềm dẻo hơn đôi chút. Chúng lμ các dấu hiệu về thời gian vμ ngμy tháng mμ thông báo đ−ợc gửi với mức chính xác đủ để cho không có hai thông báo nμo có cùng một dấu hiệu. Các nhãn nμy không phải đặt lại.
Bên thu phải đồng bộ về thời gian rất chặt chẽ với bên gửi. Khi truyền nhanh, nếu các đồng bộ của bên thu vμ bên phát không đồng bộ thì nhãn thời gian của ng−ời gửi có thể chậm hơn thời gian hiện thời của bên nhận. Có thể cho phép có một sai lệch nhỏ đối với thời gian đồng bộ hoặc phải ghi nhận rằng các nhãn thời gian của bên gửi luôn nhanh hơn một chút.
Bây giờ, chúng ta sẽ nghiên cứu các khía cạnh khác nhau của DES trong các ứng dụng riêng trong việc đảm bảo tính toμn vẹn, tránh sử dụng lại vμ đảm bảo bí mật. Các ứng dụng nμy có thể thu đ−ợc từ nhiều hệ thống mã khóa khác bởi vì chúng chỉ phụ thuộc vμo những tính chất chung của phép mã hóa.
5.5. Các chế độ mã hóa
Bây giờ chúng ta nghiên cứu một số ph−ơng pháp khác nhau mμ phép mã hóa có thể sử dụng. Các nguyên tắc chung ở đây có thể áp dụng cho hầu hết các thuật toán mã hóa thông th−ờng (kể cả đối xứng vμ không đối xứng). Một dạng sử dụng DES đã đ−ợc trình bμy trong ch−ơng 3, đ−ợc gọi lμ chế độ quyển mã điện tử (ECB). Trong những phần sau ta sẽ trình bμy các chế độ sử dụng DES khác.
5.5.1. Chế độ xích khối mật mã (CBC)
Nh− đã nêu ở trên, chế độ CBC bắt đầu bằng một vector khởi tạo ngẫu nhiên (IV), vector nμy đ−ợc mã hóa vμ đ−ợc gửi nh− khối 1. Sau đó, vector nμy sẽ đ−ợc cộng mod 2 với khối bản rõ đầu tiên
( )
(E p1⊕IV, k ). Kết quả nμy sẽ đ−ợc mã lμm khối 2. Sau đó, khối bản mã thứ hai nμy sẽ đ−ợc cộng mod 2 với khối bản rõ tiếp theo trong thông báo nhằm không thể thay thế khối bản mã bằng một khối khác mμ không bị phát hiện. Chế độ CBC đã đ−ợc chỉ ra trên hình 5.24.
Chế độ CBC cũng có tính chất tự sửa sao cho một sự thay đổi trong khối ci chỉ ảnh h−ởng tới việc giảm mã cho các khối pi vμ
1 i
p+ . Tuy nhiên, các khối pi+2 vμ tiếp theo sẽ không bị tác động. Sau hai khối hμm cộng mod 2 sẽ huỷ bất kỳ một sai nμo. (Cần nhớ rằng, đối với một khâu bất kỳ x, x⊕x=0). Tính chất tự sửa lμ thuận tiện vì một sai số trong truyền dẫn hoặc mã hóa sẽ không phá huỷ một l−ợng lớn bản mã.
5.5.2. Chế độ hồi tiếp mật mã (CFB)
Bản chất định h−ớng theo khối của DES lμ không thuận tiện với 2 lý do sau.
- Thứ nhất lμ khối cuối cùng phải đ−ợc độn thêm. Bởi vậy, kích th−ớc của bản mã kết quả có thể lớn hơn một chút so với bản rõ t−ơng ứng.
- Thứ hai lμ không thể thực hiện việc mã hóa nếu ch−a nhận đủ 64 bit của một khối. Bởi vậy, tốc độ mã hóa cho một ký tự có thể phụ thuộc vμo tốc độ nhận của một vμi ký tự tiếp sau. Có một số ứng dụng đòi hỏi phải mã hóa ngay từng ký tự. Ví dụ, trong một môi tr−ờng mạng an toμn, ng−ời dùng phải phát mỗi ký tự nh− nó đ−ợc đ−a vμo từ đầu cuối.
E(B C )j j-1
Bi E
DES Mã hóa Khóa K
Hồi tiếp về khối tiếp sau
a) Mã hóa
Ci E
DES Giải mã Khóa K
Hồi tiếp từ khối tr−ớc Cj-1
Bj
b) Giải mã
Hình 5.24: Chế độ CBC
Chế độ CFB hoạt động trên một hμng đợi 64 bit. Ban đầu, hμng đợi đ−ợc lμm đầy bằng vector khởi tạo (giống nh− vector IV trong chế độ CBC). Hμng đợi nμy sẽ đ−ợc mã hóa vμ 8 bit tận cùng bên trái của kết quả sẽ đ−ợc cộng mod 2 với ký tự đầu tiên cần mã hóa. 8 bit đ−ợc mã hóa nμy sẽ đ−ợc phát đi. 8 bit nμy cũng đ−ợc chuyển vμo vị trí 8 bit tận cùng bên phải của hμng đợi. Tất cả các