Thứ Bảy, 22 tháng 2, 2020

Tìm hiểu về symmetric và asymmetric encryption

 Nếu là một lập trình viên, chắc hẳn bạn cũng từng nghe qua về mã hóa (encryption). Mã hóa là quá trình bạn chuyển 1 loại dữ liệu dễ đọc nào đó thành 1 loại dữ liệu đọc vào chả hiểu cái mẹ gì cả.

 Tại sao cần phải mã hóa dữ liệu? Lí do đơn giản là bạn không muốn người khác đọc được. Giống như tình huống bạn thích 1 đứa nào đó trong lớp và muốn gửi thư tình cho người đó. Nhưng để thư tình tới được tay người thương, thì phải được chuyển qua tay những đứa khác. Và để không ai ngoài người thương đọc được thư, thì bạn sẽ mã hóa đó bằng 1 cách nào đó. Và người thương của bạn cũng biết cách để giải mã, do đó sẽ chỉ có người đó đọc được nội dung thư mà thôi.

Symmetric Encryption ( mã hóa đối xứng )


Nếu như quá trình mã hóa và giải mã cùng sử dụng chung một key(chìa khóa), thì đây là symmetric encryption


Ví dụ: nội dung bạn muốn mã hóa là số 2. Bạn sẽ mã hóa bằng cách: lấy 2 công với 3, sau đó lấy kết quả nhân với 5.
Ta sẽ có (2+3)*5 = 25. Vậy số 2 đã được mã hóa thành số 25. Và key để mã hóa ở đây là (3,5).

Để giải mã, ta chỉ cần sử dụng lại key (3,5) để giải mã bằng cách: lấy 25 chia cho 5 và trừ đi 3: 25/5 -3 =2.

 Nhưng, với cách mã hóa như thế này nảy sinh ra 1 vấn đề. Hãy nghĩ tới trường hợp, bạn muốn nhận thông điệp từ 100 người khác nhau. Vậy để 100 người này mã hóa được nội dung trước khi gửi đi thì bạn phải gửi 100 cái key cho 100 người đó.

 Và việc có quá nhiều người giữ key sẽ dẫn đến việc thiếu bảo mật, vì có thể 1 người nào đó bị lộ key, thì người khác cũng có thể giải mã và đọc được nội dung từ 100 người này.

Vậy nên người ta mới nghĩ tới 1 loại mã hóa khác, đó là Asymmetric Encryption

Asymmetric Encryption (mã hóa bất đối xứng)

Asymmetric là khi quá trình mã hóa và giải mã dùng các key khác nhau


Giả sử ta có 1 key để mã hóa là : (5,14) . Nội dung để mã hóa là số 2. Để mã hóa, ta làm theo trình tự sau: lấy 2 mũ 5, và chia lấy dư cho 14.

Với cách mã hóa trên, ta đã có được nội dung sau khi mã hóa là : 4 . Nhưng nếu bạn cũng sử dụng key (5,14) để giải mã, thì sẽ không được. Vì với phép tính chia lấy dư thì không có cách nào để truy ngược lại được cả.

Để giải mã được theo cách này, ta phải dùng 1 chìa khóa khác. Chìa giải mã của chúng ta là (11,14). Và chúng ta sẽ giải mã theo trình tự sau: lấy 4 mũ 11 và chia lấy dư cho 14.

Kết quả giải mã của chúng ta là 2. Chính xác!!!
Và quay lại với bài toán trên, nếu bạn muốn nhận tin nhắn từ 100 người khác nhau, bạn chỉ cần gửi 100 chìa khóa mã hóa cho 100 người đó. Nếu như có ai ăn cắp được key mã hóa, họ cũng không thể giải mã. Vì chỉ có bạn mới là người cầm key giải mã.
Do đó, phương pháp asymmetric bảo mật hơn rất nhiều so với symmetric.

Vậy làm thế nào để tạo ra được 2 chìa khóa mã hóa và giải mã như trên. Rất may, chúng ta đã được thừa hướng những thuật toán vĩ đại được phát minh từ trước. Ví dụ những thuật toán như RSA (mình đã viết ở đây), DSA, ECC, Diffie Hellman... Để tạo ra được 2 chìa khóa kì diệu trên, chỉ cần áp dụng theo những thành tựu này là chúng ta sẽ thành công.

Share:

0 nhận xét:

Đăng nhận xét

Được tạo bởi Blogger.