Rate this post

Như ta đã biết, các thuật toán mã hoá với khoá bí mật/khoá đơn/truyền thống sử dụng chỉ một khóa duy nhất và là khóa chung cho cả người nhận lẫn người gửi. Quá trình mã hóa và giải mã của các thuật toán này là như nhau (đối xứng) cho người gửi và người nhận. Có thể so sánh thuật toán mã hóa khóa bí mật với một cái hộp kín chứa thông điệp với khóa rất chắc. Người gửi (An) sẽ dùng hộp đó chứa thông điệp và sau đó khoá hộp lại bằng một cái khoá chắc chắn. Cái hộp chứa thông điệp sẽ được chuyển đi và những ai muốn đọc thông điệp đều không thể thực hiện được vì không mở được hộp. Chỉ có người nhận hợp pháp (Bình) là có thể đọc được thông điệp vì anh ta có chìa khoá để mở hộp để lấy nó ra.

Xem thêm Xác thực thông điệp(message authentication) là gì?

Một số nhược điểm của mật mã đối xứng là cần phải có kênh an toàn để trao đổi khóa, không để khoá bị lộ. Hơn nữa, trong môi trường mạng, để an toàn, mỗi cặp người dùng cần sử dụng một khóa bí mật riêng biệt, do đó số khóa cần thiết cho n người dùng trao đổi thông tin là: n(n-1)/2 cặp khóa khác nhau – một số lượng khoá lớn, khó quản lý. Một trong những cách giải quyết hiệu quả vấn đề này là sử dụng mật mã khóa công khai.

Các bài viết liên quan:

Giới thiệu về mã hóa công khai(public key)

Hình trên là quy trình phổ biến của mật mã khoá công khai. Trong quy trình này sẽ có hai khoá khác nhau làm nhiệm vụ mã hoá và giải mã. Thông điệp được mã hoá bằng khoá này thì sẽ phải được giải mã bằng khoá còn lại.

Khác với quy trình mật mã đối xứng, hai khoá trong quy trình mật mã khoá công khai là có chủ. Một khóa sẽ được công bố công khai để mọi người được biết, gọi là khoá công khai – ku và một khoá được giữ bí mật, gọi là khoá cá nhân – kr, chỉ có chủ nhân của nó được biết. Từ khoá cá nhân có thể tính được khoá công khai nhưng từ khoá công khai không thể suy ra khoá cá nhân. Chính vì vậy mà người ta gọi quy trình này là quy trình mật mã bất đối xứng (bất đối xứng với người sử dụng và bất đối xứng với khoá).

Giả sử An muốn gửi thông điệp mật M cho Bình. An sẽ dùng khoá công khai của Bình (kuB) mã hoá thông điệp M và gửi cho Bình. Kết quả mã hoá là EkuB(M) 🡪 C. Bản mã C được An gửi cho Bình trên một kênh truyền thông công cộng bình thường. Nhận được bản mã C, Bình sẽ dùng khoá cá nhân của mình (krB) giải mã để khôi phục bản nguồn ban đầu: DkrB(C) 🡪 M.

Xem thêm Hàm băm (hash function) là gì?

Nếu kẻ thám mã có lấy được bản mã C thì cũng không có khoá cá nhân của Bình krB để giải mã, do đó không thể đọc được nội dung thông điệp nguồn M. Quy trình này gọi là quy trình mã hoá xuôi, trong đó, tính bí mật của thông điệp nguồn sẽ được bảo đảm.

Trong quy trình mã hoá ngược, Bình dùng khoá cá nhân của mình để mã hoá thông điệp gửi cho An trên kênh truyền thông công cộng. An dùng khoá công khai của Bình giải mã và đọc được nội dung thông điệp ban đầu. Kẻ gian cũng vậy, họ cũng có thể lấy được bản mã, dùng khoá công khai của Bình giải mã và đọc được nội dung thông điệp. Như vậy, trong trường hợp này, thông điệp sẽ không có tính bí mật vì ai cũng đọc được nội dung. Ngược lại, nhận được thông điệp nguồn sau khi giải mã thành công, mọi người sẽ biết được chủ nhân của thông điệp là ai. Ở đây thông điệp có tính xác thực.

Việc tạo cặp khoá (khoá công khai, khoá cá nhân) thường là do một người thứ ba tin tưởng thực hiện. Tuy nhiên, ở đây nảy sinh vấn đề phân phối khoá từ người thứ ba này đến cho những người sử dụng chúng.

Khoá cá nhân của Bình được phân phối cho một người duy nhất là Bình nên  không có vấn đề gì. Nhưng việc phân phối khoá công khai của Bình cho tất cả mọi người lại không đơn giản và cần phải có một quy trình xác thực, làm sao đảm bảo là mọi người biết chính xác chủ nhân khoá.

Thật vậy, trong trường hợp ngược lại, một kẻ gian X có thể thực hiện tấn công “Man in the middle” bằng cách chiếm lấy khoá công khai của Bình (kuB) trên kênh truyền thông công cộng, thay bằng khoá công khai của mình (kuX) rồi tuyên bố với An rằng đó là khoá của Bình.

Nếu An không kiểm tra được điều đó thì An vẫn dùng khoá này (kuX) mã hoá thông điệp M gửi cho  Bình EkuX(M) 🡪 C1. Lấy được thông điệp C1, X dùng khoá cá nhân của mình (krX) giải mã, khôi phục được thông điệp nguồn DkrX(C1) 🡪 M. Sau đó X tiếp tục mã hoá M bằng khoá công khai của Bình (kuB) để gửi tiếp cho Bình EkuB(M) 🡪 C2. Bình dùng khoá cá nhân của mình (krB) để giải mã thông điệp C2 một cách bình thường DkrB(C2) 🡪 M, mà không hề biết rằng thông điệp M đã bị X xem trộm.

Do vậy, cần phải có một quy trình phân phối  khoá công khai an toàn, cho phép người sử dụng có thể kiểm tra được chính xác chủ nhân thực sự của khoá công khai đó là ai.

Ba quy trình mã hóa công khai sau:

  • Quy trình mã hóa (mã hóa xuôi): Người dùng sử dụng khoá công khai của người nhận mã hóa thông điệp gửi cho chủ nhân khóa. Mọi người đều có thể dùng khóa công khai của ai đó để mã hóa. Chủ nhân khoá công khai sử dụng khóa cá nhân của mình để giải mã. Trong trường hợp này, bảo đảm được tính bí mật của thông điệp.
  • Quy trình chữ ký (Mã hóa ngược): Quy trình sử dụng để tạo chữ ký số cho thông điệp: chủ nhân dùng khóa cá nhân của mình mã hoá thông điệp, tạo ra chữ ký số cho thông điệp. Mọi người khác dùng khóa công khai của người ký để kiểm tra chữ ký. Trong trường hợp này, thông điệp bảo đảm được tính xác thực.
  • Quy trình phân phối khóa công khai: Quy trình này bảo đảm khoá công khai được phân phối an toàn, xác thực, và cho phép tất cả mọi người có thể kiểm tra chủ nhân thực sự của khoá công khai là ai thông qua các chứng chỉ khoá công khai được cấp bởi một bên thứ ba có uy tín. Ngoài ra, các thuật toán mật mã khóa công khai còn được dùng để trao đổi khóa bí mật (khoá phiên).

An toàn của các thuật toán mật mã khoá công khai dựa vào sự khác nhau giữa mức độ khó của bài toán mã hoá/giải mã (dễ) và bài toán thám mã (khó).

Cơ sở toán học của các thuật toán này là các hàm một chiều (One- way functions). Hàm y = f(x) được gọi là hàm một chiều nếu giá trị y = f(x) tính được dễ dàng, nhưng ngược lại, giá trị x = f-1(y) tính rất khó. Đối với bài toán mật mã thì x = f-1(y) sẽ trở nên tính được dễ dàng nếu người tính có thêm thông tin bổ sung (khóa).

Do không gian khoá là hữu hạn nên việc thám mã bằng phương pháp vét cạn khóa về mặt lý thuyết là luôn luôn có thể thực hiện được. Tuy nhiên,trên thực tế các khóa mật mã sử dụng thường lớn (> 512 bit) nên phương pháp vét cạn khoá hầu như không thể thực hiện được trong thời gian hợp lý.

Để chống lại một số phương pháp thám mã tiên tiến khác, người ta có thể sử dụng các khóa rất lớn (>> 512 bits). Do khoá mật mã lớn như vậy nên thuật toán khóa công khai chậm hơn nhiều so với thuật toán khóa bí mật. Trên thực tế, người ta thường sử dụng mật mã khoá công khai để mã hoá những dữ liệu không lớn (ví dụ như khoá mã hoá/giải mã), hoặc mã hoá giá trị băm của thông điệp để tạo chữ ký số cho thông điệp. Mật mã khoá công khai ít khi được dùng để mã hoá dữ liệu lớn.

Xem thêm Mã hóa mật mã: các khái niệm cơ bản

So sánh mã hóa công khai và mã hóa đối xứng

Chúng tôi đã xem xét các khía cạnh và kiểu khác nhau của cả đối xứng và bất đối xứng các thuật toán chính. Rõ ràng, mục tiêu thiết kế và ý nghĩa của chúng là

khác nhau. Hãy để chúng tôi có một phân tích so sánh để chúng tôi sử dụng một phân tích phù hợp tại đúng địa chỉ.

• Mật mã khóa đối xứng còn được gọi là mật mã khóa riêng. Tương tự, khóa bất đối xứng mật mã còn được gọi là mật mã khóa công khai.

• Trao đổi hoặc phân phối khóa trong khóa đối xứng mật mã là một vấn đề lớn, không giống như khóa bất đối xứng mật mã.

• Mã hóa không đối xứng khá tốn nhiều máy tính vì chiều dài của các phím thường lớn. Kể từ đây, quá trình mã hóa và giải mã chậm hơn. Trên ngược lại, mã hóa đối xứng nhanh hơn.

• Mật mã khóa đối xứng thích hợp trong thời gian dài tin nhắn vì tốc độ mã hóa / giải mã là nhanh chóng. Mật mã khóa không đối xứng là thích hợp cho các tin nhắn ngắn và tốc độ mã hóa / giải mã chậm.

• Trong mật mã khóa đối xứng, các ký hiệu ở dạng bản rõvà bản mã được hoán vị hoặc thay thế. Trong mật mã khóa không đối xứng, bản rõ và bản mã được coi là số nguyên.

• Trong nhiều trường hợp, khi phím đối xứng được sử dụng để mã hóa và giải mã, kỹ thuật khóa bất đối xứng được sử dụng để chia sẻ và đồng ý về khóa được sử dụng trong mã hóa

• Mật mã khóa bất đối xứng mạnh nhất ứng dụng trong môi trường không đáng tin cậy, khi các bên liên quan không có mối quan hệ trước. Kể từ khi chưa biết các bên không có bất kỳ cơ hội trước để thiết lập chia sẻ khóa bí mật với nhau, chia sẻ thông tin nhạy cảm dữ liệu được bảo mật thông qua mật mã khóa công khai.

• Các kỹ thuật mật mã đối xứng không cung cấp một cách cho chữ ký điện tử, mà chỉ có thể thông qua mật mã không đối xứng.

• Một trường hợp tốt khác là số lượng khóa cần thiết giữa một nhóm các nút để giao tiếp với từng khác. Bạn nghĩ sẽ cần bao nhiêu chìa khóa trong số 100 người tham gia khi khóa đối xứngmật mã là cần thiết? Vấn đề tìm kiếm các phím cần thiết có thể được tiếp cận dưới dạng một biểu đồ hoàn chỉnh vấn đề với thứ tự 100. Giống như mỗi đỉnh yêu cầu 99 cạnh được kết nối để kết nối với mọi người, mọi người tham gia sẽ cần 99 khóa để thiết lập kết nối với tất cả các nút khác.

Vì vậy, tổng thể, các chìa khóa cần thiết sẽ là 100 * (100 – 1) / 2 = 4,950. Nó có thể được khái quát cho ” n ” tổng số người tham gia là n * ( n – 1) / 2 khóa. Với số lượng người tham gia tăng lên, nó sẽ trở thành một cơn ác mộng! Tuy nhiên, trong trường hợp khóa không đối xứng mật mã, mỗi người tham gia sẽ chỉ cần hai khóa (một khóa riêng tư và một khóa công khai). Đối với một mạng lưới 100 người tham gia, tổng số chìa khóa cần thiết chỉ là 200. Bàn 2-5 hiển thị một số dữ liệu mẫu để cung cấp cho bạn tương tự về số lượng khóa tăng lên cần thiết khi số lượng người tham gia tăng lên.

Xem thêm 20 năm làm SEO: Lược sử SEO

Leave a Reply

Call now
%d bloggers like this: