- vừa được xem lúc

Khái niệm cơ bản về hệ mật mã hóa khóa đối xứng và bất đối xứng

0 0 9

Người đăng: Hero Gustin

Theo Viblo Asia

Hôm nay mình xin giới thiệu khái niệm cơ bản về hệ mật mã khóa đối xứng và bất đối xứng. Cái này mình cũng đã được học qua ở trường rồi nhưng học xong cũng không còn nhớ là bao😅. Thế nên hôm nay mình viết bài này để xem kiến thức còn nhớ được bao nhiêu😁 (tất nhiên mình cũng phải đọc lại giáo trình đã được học).

Trước tiên để đi đến 2 khái niệm về mã hóa đối xứng và bất đối xứng thì mình xin giới thiệu qua về khái niệm về mật mã học.

Mật mã học (cryptography)

Là ngành khoa học nghiên cứu các phương pháp toán học để mã hóa giữ mật thông tin. Bao gồm mã hóa và giải mã.

  • Mã hóa là biến đổi cách thức biểu diễn thông tin từ dạng bản rõ (chúng ta có thể đọc được) sang dạng bản mã (chỉ người giải mã mới hiểu được), nó giúp chúng ta che giấu, giữ mật thông tin trong khi lưu trữ cũng như truyền thông tin đi.
  • Giải mã là quá trình ngược lại đó là biến bản mã thành bản rõ. (Dễ hiểu phải không ạ🙂)

Chức năng cơ bản của mật mã đó là:

  • Tính bí mật: nó đảm bảo tính bí mật của dữ liệu mà mình gửi đi và chỉ những người liên quan mới biết được nội dung.
  • Tính toàn vẹn : đảm bảo dữ liệu không thể bị mất mát hoặc chỉnh sửa trong qua trình gửi và nhận mà không bị phát hiện.
  • Tính xác thực: đảm bảo danh tính của thực thể được xác minh.
  • Tính không thể chối từ: đảm bảo người gửi không thể chối cãi với thông tin mình gửi đi (Tránh kiểu ăn ốc đổ vỏ đó ạ😅)

Hệ mật mã khóa đối xứng

Là những hệ mật được sử dụng chung 1 khóa trong quá trình mã hóa và mã hóa. Do đó khóa phải được giữ bí mật tuyện đối.

Một số hệ mật mã khóa đối xứng hiện đại mà mình thấy hay được sử dụng là DES, AES, RC4, RC5,...

Hệ mật sẽ bao gồm:

  • Bản rõ (plaintext-M): bản tin được sinh ra bởi bên gửi
  • Bản mật (ciphertext-C): bản tin che giấu thông tin của bản rõ, được gửi tới bên nhận qua một kênh không bí mật
  • Khóa (Ks): nó là giá trị ngẫu nhiên và bí mật được chia sẻ giữa các bên trao đổi thông tin và được tạo ra từ:
    • Bên thứ 3 được tin cậy tạo và phân phối tới bên gửi và bên nhận
    • Hoặc, bên gửi tạo ra và chuyển cho bên nhận
  • Mã hóa (encrypt-E): C = E(KS, M)
  • Giải mã (decrypt): M = D(KS, C) = D(KS, E(KS, M))

Cơ chế hoạt động (dễ hiểu lắm🙃)

  • Người gửi sử dụng khóa chung (Ks) để mã hóa thông tin rồi gửi cho nguời nhận.
  • Người nhận nhận được thông tin đó sẽ dùng chính khóa chung (Ks) để giải mã.

Tuy nhiên cái gì cũng có mặt hạn chế của nó, và thằng này cũng vậy🙂

Mặt hạn chế

  • Do dùng chung khóa để mã hóa và giải mã => nếu bị mất hoặc bị đánh cắp bởi hacker sẽ bị lộ thông tin, bảo mật không cao.
  • Cần kênh mật để chia sẻ khóa bí mật giữa các bên => Làm sao để chia sẻ một cách an toàn ở lần đầu tiên.
  • Để đảm bảo liên lạc an toàn cho tất cả mọi người trong một nhóm gồm n người => cần tổng số lượng lớn khóa là n(n-1)/2 (tốn nhiều quá ha🤔)
  • Khó ứng dụng trong các hệ thống mở.
  • Không thể dùng cho mục đích xác thực hay mục đích chống thoái thác được.

Và để khắc phục những nhược điểm đó thì hệ mật mã khóa bất đối xứng (hay còn gọi là hệ mật mã khóa công khai) đã ra đời🙃

Hệ mật mã khóa bất đối xứng

Ở hệ mật này thay vì nguời dùng dùng chung 1 khóa như ở hệ mật mã khóa đối xứng thì ở đây sẽ dùng 1 cặp khóa có tên là public key và private key.

Hệ mật mã khóa bất đối xứng mình thấy được dùng nhiều nhất là RSA Hệ mật sẽ bao gồm:

  • Bản rõ (plaintext-M): bản tin được sinh ra bởi bên gửi
  • Bản mật (ciphertext-C): bản tin che giấu thông tin của bản rõ, được gửi tới bên nhận qua một kênh không bí mật
  • Khóa: Bên nhận có 1 cặp khóa:
    • Khóa công khai (Kub) : công bố cho tất cả mọi người biết (kể cả hacker)
    • Khóa riêng (Krb) : bên nhận giữ bí mật, không chia sẻ cho bất kỳ ai
  • Mã hóa (encrypt-E): C = E(Kub, M)
  • Giải mã (decrypt): M = D(Krb, C) = D(Krb, E(Kub, M))

Yêu cầu đối với cặp khóa (Kub, Krb) là:

  • Hoàn toàn ngẫu nhiên
  • Có quan hệ về mặt toán học 1-1.
  • Nếu chỉ có giá trị của Kub không thể tính được Krb.
  • Krb phải được giữ mật hoàn toàn.

Cơ chế hoạt động (cũng dễ hiểu không kém đối xứng😁)

  • Người gửi(A) gửi thông tin đã được mã hóa bằng khóa công khai (Kub) của người nhận(B) thông qua kênh truyền tin không bí mật
  • Người nhận(B) nhận được thông tin đó sẽ giải mã bằng khóa riêng (Krb) của mình.
  • Hacker cũng sẽ biết khóa công khai (Kub) của B tuy nhiên do không có khóa riêng (Krb) nên Hacker không thể xem được thông tin gửi

Ưu điểm của hệ mật này đó là

  • Không cần chia sẻ khóa mã hóa(khóa công khai) một cách bí mật => Dễ dàng ứng dụng trong các hệ thống mở.
  • Khóa giải mã(khóa riêng) chỉ có B biết => An toàn hơn, có thể xác thực nguồn gốc thông tin
  • n phần tử chỉ cần n cặp khóa.(tốt hơn hẳn thằng đối xứng r🙂)

Nhược điểm:

  • Chưa có kênh an toàn để chia sẻ khóa => Khả năng bị tấn công dạng tấn công người đứng giữa(man in the middle attack ).

Tấn công người đứng giữa: kẻ tấn công lợi dụng việc phân phối khóa công khai để thay đổi khóa công khai. Sau khi đã giả mạo được khóa công khai, kẻ tấn công đứng ở giữa 2 bên để nhận các gói tin, giải mã rồi lại mã hóa với khóa đúng và gửi đến nơi nhận để tránh bị phát hiện.

Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp Trao đổi khóa Diffie-Hellman nhằm đảm bảo nhận thực người gửi và toàn vẹn thông tin.

Trên đây là những khái niệm cơ bản mà mình nghĩ bất kỳ ai cũng có thể nắm qua được nó. Để hiểu sâu hơn thì mọi người cần bỏ nhiều thời gian nghiên cứu nó vì đây là lĩnh vực về an ninh mạng mà mình thấy không dễ ăn gì cả😨.

Thanks for reading💖

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 502

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 376

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414