Mã hóa với chìa khóa công khai, CA và tấn công MITM

Thẻ: , , ,
Tác giả: Darel Rex Finley (2011)
Bài gốc: http://alienryderflex.com/man_in_the_middle/
Giấy phép: CC BY-NC-ND 3.0
Người dịch: Huỳnh Kỳ Anh
Bài mẹ: /doc/security

Chú ý: Đây là bản dịch nháp. Vui lòng đọc phần ghi chú của nguời dịch.

Chú ý: Trong bài này, MITM là viết tắt cho Man-In-The-Middle, còn CA là cho Certificate Authority. Nội dung bài viết không mô tả chính xác phương pháp được dùng trong kết nối HTTPS và của VeriSign. Mục đích của bài này là minh họa các ý tưởng cơ bản của cách mã hóa dùng chìa khóa công khai, cách tấn công MITM và cách vô hiệu tấn công đó nhờ sử dụng CA.

  1. Mã hóa đối xứng
  2. Mã hóa khóa công khai
  3. HTTPS
  4. MITM
  5. Certificate Authority
  6. MITM bó tay với CA
  7. Kết luận
  8. Ghi chú của người dịch

Mã hóa đối xứng

Trong Hình 1, bạn (you) và người quen (them) thực hiện kết nối an toàn thông qua mạng không an toàn (ví dụ mạng internet) bằng cách dùng cách mã hóa quen thuộc. Sử dụng chìa khóa (màu đỏ) mà chỉ hai người biết, bạn mã hóa dữ liệu trước gửi đi. Người nhận sẽ dùng chìa khóa đó để giải mã. Do dữ liệu đã mã hóa, không ai có thể biết trao đổi giữa hai người, cũng như không thể thay đổi dữ liệu đang chuyển giữa hai máy tính.

Vấn đề của phương pháp này là nó yêu cầu người gửi và nhận (YouThem trên hình vẽ) phải cùng biết (và cùng chịu trách nhiệm giữ kín) chìa khóa an toàn. Khi cần phải trao đổi thông tin bí mật với hàng trăm người thì bạn sẽ rất vất vả. Nếu không chọn cách chia sẻ cùng chia khóa cho nhiều người, bạn sẽ trao đổi chìa khóa cho từng người cần liên lạc. Ngoài ra, nếu người nhận sống thật xa bạn, và có thể chưa bao giờ gặp mặt bạn trực tiếp, thì bạn sẽ chia sẻ chìa khóa như thế nào với họ?

Mã hóa khóa công khai

Xem Hình 2.

Để khắc phục vấn đề chia sẻ khóa bí mật, bạn có thể dùng cách mã hóa với chìa khóa công khai, trong đó bạn sẽ dùng một cặp chìa khóa:

Khi ai đó cần gửi bạn tin bí mật, họ sẽ mã hóa thông điệp sử dụng chìa khóa công khai của bạn (A xanh). Sau khi được mã hóa, chỉ có bạn là người có thể giải mã được nội dung gửi đi bằng cách sử dụng chìa khóa riêng tư (A hồng) tương ứng với khóa công khai. Và đến lượt bạn, khi cần trả lời bí mật cho người kia, bạn sẽ sử dụng chìa khóa công khai của họ (B xanh) để mã hóa thư thành dạng mà chỉ có họ mới giải mã được bằng chìa khóa riêng tư (B hồng).

Bản chất của mã hóa này là không có cơ chế nào cho phép khôi phục chìa khóa riêng tư từ chìa khóa công khai (FIXME). Chìa khóa công khai chỉ có ích để mã hóa thông tin, để đảm bảo rằng sau khi mã hóa thì chỉ có một người giữ chìa khóa riêng tư mới đọc được.

HTTPS

Xêm Hình 3Hình 4.

Khi ghé thăm trang web an toàn (địa chỉ bắt đầu bằng https, không phải bắt đầu bằng http), thì trước khi bạn xem được nội dung của trang, giữa trình duyệt và máy phục vụ (trang web, HTTPS server) có mở một kênh an toàn (session key) để đảm bảo nội dung trang web bạn xem là bí mật, không bị ai chen ngang theo dõi, thay đổi.

Đầu tiên, trình duyệt tạo ra ngẫu nhiên cặp chìa khóa (A hồng là chìa khóa riêng tư, A xanh là chìa khóa công khai.) Chìa khóa công khai sẽ được gửi (không mã hóa) tới máy phục vụ.

Như trong Hình 4, máy phục vụ tạo ngẫu nhiên chìa khóa (màu đỏ), gửi chìa khóa này cho trình duyệt sau khi mã hóa nội dung của chìa khóa đỏ bằng chìa khóa công khai (A xanh) của trình duyệt. Khi nhận được, trình duyệt dùng chìa khóa riêng (A đỏ) để đọc ra chìa khóa đỏ. Như vậy, kể từ lúc này trình duyệt và máy phục vụ đều biết chìa khóa đỏ để mã hóa và giải mã thông tin trong quá trình truyền tin tiếp theo sau.

MITM

Xem Hình 5Hình 6.

Nếu một kẻ tò mò chỉ ngồi quan sát quá trình trên sẽ không thể đọc được nội dung của chìa khóa đỏ, và vì thế không thể giải mã thông tin nào được mã hóa bởi chìa khóa đó.

Tuy nhiên, nếu kẻ tò mò không chỉ dừng lại việc quan sát, mà còn tham gia vào quá trình chuyển tin, thực hiện các thay đổi và đánh tráo chìa khóa đỏ thì sao? Kẻ tò mò bây giờ trở thành kẻ tấn công MITM, mà ý tưởng xấu xa của hắn được thực hiện như ở Hình 5.

Ngay trong bước đầu tiên khi trình duyệt mở kênh riêng và gửi chìa khóa công khai (A xanh) tới máy phục vụ (như trong Hình 3Hình 4), kẻ tấn công MITM đã bắt kết nối mạng, sao chép nội dung khóa công khai A-xanh, và hắn cũng sinh ra một cặp chìa khóa B-xanh (công khai)B-hồng (riêng tư), sau đó gửi khóa B xanh tới máy phục vụ, làm cho máy phục vụ nghĩ rằng chìa khóa đó được gửi từ trình duyệt.

Tiếp theo, khi máy phục vụ tạo ra chìa khóa đỏ, mã hóa nội dung chìa khóa này bằng khóa công khai B-xanh để gửi cho trình duyệt, thì kẻ tấn công lại chặn kết nối, đọc và giải mã để lấy chìa khóa đỏ. Kẻ này lại dùng chìa khóa công khai A-xanh để mã hóa chìa khóa đỏ rồi gửi cho trình duyệt, khiến cho trình duyệt nghĩ rằng đang nhận nội dung mã hóa từ máy phục vụ.

Kể từ lúc này, khi trình duyệt và máy phục vụ trao đổi thông tin dựa trên mã hóa với chìa khóa đỏ, thì kẻ tò mò luôn biết được hai bên trao đổi gì, vì hắn đã có chìa khóa đỏ, trong khi cả trình duyệt và máy phục vụ vẫn đinh ninh rằng ngoài 2 bên ra không còn ai biết được nội dung chìa khóa đỏ đấy.

Certificate Authority

Xêm Hình 7.

Có cách nào để qua mặt kẻ tấn công MITM? Có thể nghĩ tới việc là ngay sau khi kênh an toàn được thiết lập, trình duyệt và máy phục vụ có thể so sánh chìa khóa công khai (A xanh) mà trình duyệt sinh ra và bản mà máy phục vụ nhận được, và phải chắc rằng hai phiên bản đó giống nhau. Tuy nhiên, kẻ tấn công sẽ biết được ý định này, và vì hắn có cả chìa khóa đỏ để mã hóa – giải mã thông tin, hắn có thể tiếp tục làm cho cả trình duyệt và máy phục vụ vẫn nghĩ kết nối đang an toàn, tức là hai phiên bản của chìa khóa công khai là khớp nhau.

Để đảm bảo sự so khớp chìa khóa không bị can thiệp, cần hỗ trợ bởi bên thứ ba, là CA như trong Hình 7.

Khi CA đầu tiên lên mạng (nhiều năm trước đây), họ tạo ra chìa khóa riêng tư ngẫu nhiên CA-hồng, rồi chia sẻ chìa khóa công khai CA-xanh tương ứng với toàn thế giới. Các trình duyệt đã nạp chìa khóa công khai này từ trước phần mềm được biên dịch, nên chúng không mất công tìm lại mỗi khi mở kết nối an toàn tới các máy phục vụ.

Khi máy phục vụ muốn nhờ tới CA để hỗ trợ cho kết nối an toàn, người điều hành sẽ tạo tài khoản ở CA (tài khoản này cần phải trả tiền hằng năm để duy trì), sau đó họ được cấp một khóa H-đỏ duy nhất, dành riêng cho trang web hay máy phục vụ. Chìa khóa này được chuyển tới người điều hành nhờ dịch vụ FedEx chẳng hạn, để họ cài trên máy phục vụ.

Bởi vì CA và máy phục vụ đã chia sẻ với nhau chìa khóa H-đỏ, giữa CA và máy phục vụ có thể trao đổi thông tin một cách an toàn mà không sợ kẻ tấn công MITM biết được nội dung gốc. Điều tồi tệ nhất mà hắn có thể làm ngăn không cho CA và máy phục vụ trao đổi với nhau.

MITM bó tay với CA

Xem Hình 8Hình 9.

Vì trình duyệt đã có chìa khóa công khai CA-xanh, nó có thể gửi thông tin tới CA mà không sợ kẻ tấn công MITM biết được nội dung gốc. Tuy nhiên, kẻ tấn công có thể giả mạo thông tin, do hắn cũng có được chìa khóa công khai CA-xanh giống như trình duyệt. Thực tế thì hắn làm thế sẽ bị phát hiện ngay, như mô tả sau đây.

Đầu tiên, trình duyệt và máy phục vụ tạo ra kết nối an toàn như trong Hình 3Hình 4. Sau đó, cả hai sẽ nhờ tới CA để so khớp chìa khóa công khai A-xanh mỗi bên đang giữ xem chúng có giống nhau không.

Như trong Hình 8, máy phục mã hóa chìa khóa công khai A-xanh mà máy đang nắm giữ với chìa khóa H-đỏ, sau đó gửi thông tin tới CA theo cách an toàn _(thật sự an toàn, vì kẻ tấn công MITM không biết khóa H-đỏ). Trình duyệt làm động tác tương tự, nhưng việc mã hóa được thực hiện với chìa khóa công khai CA-xanh, và cũng gửi thông tin tới CA. Trình duyệt cũng đồng thời gửi tới CA một chìa khóa R-đỏ được tạo ra ngẫu nhiên trong cùng kết nối này.

Sau khi nhận cùng lúc hai thông tin từ trình duyệt và máy phục vụ, CA sẽ thực hiện so sánh hai chìa khóa công khai nhận được. Nếu chúng khớp nhau, CA gửi thông điệp all-clear tới trình duyệt theo chìa khóa R-đỏ, và cũng gửi thông điệp đó tới máy phục vụ theo chìa khóa H-đỏ. Từ thời điểm này, trao đổi giữa máy phục vụ và trình duyệt thật sự an toàn. Bạn có thể thực hiện các giao dịch ngân hàng, điền các thông tin về tài khoản, chìa khóa riêng trong kết nối an toàn đã thiết lập, không sự bị kẻ tấn công MITM nào nhòm ngó.

Thế chuyện gì xảy ra nếu kẻ tấn công MITM đánh tráo chìa khóa công khai A-xanh bởi B-xanh để thay mặt trình duyệt gửi tới máy phục vụ, như ở Hình 8? Khi điều này xảy ra, CA vẫn gửi trạng thái all-clear tới máy phục vụ, tuy nhiên khi CA gửi thông tin all-clear tới trình duyệt, thì thông tin điệp CA gửi đi được mã hóa bởi khóa R-phẩy nào đó tạo bởi kẻ tấn công. Nhắc lại rằng, do trình duyệt dùng chìa khóa công khai CA-xanh để mã hóa chìa khóa R-đỏ, nên kẻ tấn công chịu không giải mã để biết được R-đỏ là gì; rốt cuộc là trình duyệt không thể đọc được thông điệp từ CA, và nó không thực hiện kết nối hoặc ngắt kết nối hiện tại tới máy phục vụ, khiến cho không có nội dung nào của trang web hiện ra.

Kết luận

Như vậy đấy. Nhờ có CA mà kết nối trên mạng an toàn hơn, các kẻ tấn công MITM bị vô hiệu. Cái giá phải trả cũng không nhỏ tí nào. Lần cuối cùng mà tác giả kiểm tra thì VeriSign đòi khoảng 400 đô một năm để làm bên trung gian kiểm tra và vô hiệu MITM. Ouch!

Ghi chú của người dịch

Bản dịch này được thực hiện với sự cho phép của tác giả Darel Rex Finley. Bản dịch đầu tiên được công bố với giấy phép CC BY-NC-ND 3.0. Các thay đổi về giấy phép sẽ trao đổi với tác giả gốc và cập nhật sau.

28/3/2015: Trong bản dịch đầu tiên, symmetricpublic-key encryption được dịch tương ứng thành mã hóa hai chiềumã hóa một chiều. Lý do là người dịch thấy dùng thuật ngữ mã hóa khóa công khai là … quá dài, và trong phương pháp này, tính một chiều là đúng với người chỉ biết khóa công cộng.

Do một số bạn có thắc mắc, nên người dịch đã sử dụng lại từ của trang wikipeda tiếng Việt. Bỏ qua vấn đề này thì nhìn chung, bài dịch rất tối nghĩa và khó theo dõi, cần điều chỉnh lại. Do đó, bài dịch này được đánh dấu như là bản nháp.

20/2/2015: Tác giả Darel có gửi email có nói thêm phần bổ sung về trường hợp hãng Lenovo cài cắm Superfish trên máy người dùng. Phần này chưa được chuyển ngữ.

TODO

----
6 commit(s) 1 author(s);
last updated by Ky-Anh Huynh @ Sat Mar 28 20:17:56 2015 +0700

Trang này là một phần của TheSLinux,
  và được phân phối với giấy phép CC BY-NC-ND 3.0.

Bạn được Sao chép, Chia sẻ, Phân phối trang này dưới điều kiện sau:

(1) Bạn phải ghi tên tác giả TheSLinux và giấy phép; tuy nhiên không
    được hàm ý tác giả  trao trang này hay quyền sử dụng trang này cho bạn;
(2) Bạn không dùng trang này vào mục đích thương mại;
(3) Bạn không thay đổi, điều chỉnh hay tạo ra sản phẩm từ trang này.