Những khái niệm cơ bản trong Mật mã học (Cryptography)

Đây là một vài viết khá hay dành cho những người muốn nắm bắt cơ bản về mật mã học mà tôi vô tình đọc được thuộc một tạp chí bảo mật khá nổi tiếng trước đây là Conmaz.com.

Trước khi bắt tay vào để viết bài viết này tôi đã rất phân vân vì nhận thấy rằng đã có quá nhiều các bài viết tập trung về chủ đề này và hầu như tất cả các tài liệu đó đã bao trùm hết các khía cạnh về Cryptography, điều này khiến tôi lo lắng không biết phải bắt đầu viết từ đầu.

Cuối cùng tôi cũng đi đến một quyết định tổng hợp chúng thành một bài viết bao gồm những thông tin cơ bản nhất về Cryptography, nhằm phục vụ cho những ai bắt đầu tìm hiểu về thế giới Cryptography. Tôi sẽ cố gắng hết khả năng của mình để trình bày những điều khô khan nhất trở nên đơn giản hơn và dễ hiểu hết mức có thể. Hy vọng bài viết này sẽ đáp ứng được phần nào nhu cầu tìm hiểu của các bạn.
1. Những điều cơ bản về mã hóa :
Khi bắt đầu tìm hiểu về mã hóa tôi đã tự đặt ra cho mình những câu hỏi chẳng hạn như : Tại sao cần phải sử dụng mã hóa? Tại sao lại có quá nhiều thuật toán mã hóa? v…v. Đó là những câu hỏi mà lúc đó chưa có câu trả lời. Sau một thời gian tìm hiểu, tôi dần dần tìm ra câu trả lời cho những câu hỏi đó, thông qua bài viết này tôi xin mạn phép được đưa ra ý kiến riêng của mình :


Tại sao cần phải sử dụng mã hóa ?

Như các bạn biết thuật ngữ Cryptography đề cập tới ngành khoa học nghiên cứu về che dấu và giải mã thông tin. Cụ thể hơn là nghiên cứu các cách thức chuyển đổi thông tin từ dạng “đọc hiểu được” sang dạng “đọc nhưng không hiểu được” và ngược lại.Đây là một phương pháp hỗ trợ rất tốt trong việc chống lại những truy cập bất hợp pháp tới các thông tin được truyền đi trên mạng, áp dụng mã hóa sẽ khiến cho nội dung thông tin được truyền đi dưới dạng không thể đọc được đối với bất kỳ ai cố tình muốn lấy thông tin đó.

Nhu cầu sử dụng kỹ thuật mã hoá ?

Tất nhiên không phải ai cũng phải dùng mã hóa. Nhu cầu về sử dụng mã hóa xuất hiện khi các bên giao tiếp muốn bảo vệ các tài liệu quan trọng hay truyền chúng một cách an toàn. Các tài liệu quan trọng có thể là: tài liệu quân sự, tài chính, kinh doanh hoặc đơn giản là một thông tin nào đó mà mang tính riêng tư.

Như các bạn cũng đã biết, Internet hình thành và ra đời từ yêu cầu của chính phủ Mĩ nhằm phục vụ cho mục đích quân sự. Khi chúng ta tham gia trao đổi thông tin, chat, gửi mail v..v.. Internet là một môi trường không an toàn, đầy rủi ro và nguy hiểm, không có gì đảm bảo rằng thông tin mà chúng ta truyền đi không bị đọc trộm trên đường truyền. Từ đó mã hóa được áp dụng như một biện pháp nhằm giúp chúng ta tự bảo vệ chính mình cũng như những thông tin mà chúng ta gửi đi. Bên cạnh đó mã hóa còn có những ứng dụng khác, chúng ta sẽ tìm hiểu về sau !
Tại sao lại có quá nhiều thuật toán ?

10159749.jpgTheo một số tài liệu mà tôi đã đọc trước đây thì tính an toàn, bí mật của một thuật toán phụ thuộc vào phương thức làm việc của thuật toán đó. Nếu như tính an toàn của một thuật toán chỉ dựa vào sự bí mật của thuật toán đó thì thuật toán đó là một thuật toán hạn chế (Restricted Algo). Restricted Algo có tầm quan trọng trong lịch sử nhưng không còn phù hợp trong thời đại ngày nay. Giờ đây nó không còn được mọi người sử dụng do mặt hạn chế của nó: mỗi khi một user rời khỏi Group thì toàn bộ Group phải chuyển sang sử dụng thuật toán khác hoặc nếu người trong nhóm đó tiết lộ thông tin về thuật toán hay

có kẻ phát hiện ra tính bí mật của thuật toán thì coi như thuật toán đó đã bị phá vỡ, tất cả những người còn lại trong nhóm buộc phải thay đổi lại thuật toán dẫn đến rất mất thời gian và công sức.

Hệ thống mã hóa hiện đại ngày nay đã giải quyết vấn đề trên thông qua khóa (Key) – một yếu tố có liên quan nhưng tách rời ra khỏi thuật toán mã hoá. Do các thuật toán hầu như được công khai cho nên tính an toàn của mã hóa giờ đây phụ thuộc vào khóa. Khóa này có thể là bất kì một giá trị chữ-số nào. Phạm vi không gian các giá trị có thể có của khóa được gọi là Keyspace. Hai quá trình mã hóa và giải mã đều dùng đến khóa. Hiện nay người ta phân loại thuật toán dựa trên số lượng và đặc tính của khóa được sử dụng.

Nói đến mã hóa tức là nói đến việc che dấu thông tin bằng cách sử dụng thuật toán. Che dấu ở đây không phải là làm cho thông tin biến mất mà là cách thức chuyển từ dạng “có thể đọc hiểu được” thành dạng “đọc nhưng không thể hiểu được”. Một thuật toán là một tập hợp của các câu lệnh mà theo đó chương trình sẽ biết phải làm thể nào để xáo trộn hay phục hồi lại dữ liệu. Chẳng hạn tôi có một thuật toán rất đơn giản mã hóa thông điệp cần gửi đi như sau :

Bước 1 : Thay thế toàn bộ chữ cái “e” thành chữ số “3”.

Bước 2 : Thay thế toàn bộ chữ cái “a” thành chữ số “4”.

Bước 3 : Đảo ngược thông điệp.

Trên đây chỉ là một ví dụ rất đơn giản mô phỏng cách thức làm việc của Cryptography. Trong thực tế đây là một quá trình cực kì phức tạp và rất khó để diễn tả.

Khi mới bắt đầu tìm hiểu về mã hóa chắc hẳn các bạn cũng như tôi, không khỏi bỡ ngỡ trước rất nhiều thuật ngữ được sử dụng trong Cryptography. Tôi xin tổng hợp các thuật ngữ cơ bản nhất nhằm giúp cho các bạn nắm được khái niệm:

_Sender/Receiver: Người gửi/Người nhận dữ liệu.

_Plaintext (Cleartext): Thông tin trước khi được mã hóa.Đây là dữ liệu ban đầu ở dạng có thể đọc hiểu được.

_Ciphertext: Thông tin, dữ liệu đã được mã hóa.Ở dạng đọc nhưng không thể hiểu được.

_Encryption: Quá trình mã hóa, che dấu nội dung của thông tin, dữ liệu (Plaintext -> Ciphertext).

_Decryption: Quá trình lấy lại thông tin ban đầu của dữ liệu (Ciphertext -> Plaintext).

_Key: Thành phần quan trọng trong việc mã hóa và giải mã.

_CryptoGraphic Algorithm: Là các thuật toán được sử dụng trong việc mã hóa hoặc giải mã thông tin.

_CryptoSystem: Hệ thống mã hóa bao gồm thuật toán mã hóa, khóa, Plaintext, Ciphertext.

Kí hiệu chung: P là thông ban đầu, trước khi mã hóa. E() là thuật toán mã hóa. D() là thuật toán giải mã. C là thông tin mã hóa. K là khóa. Chúng ta biểu diễn quá trình mã hóa và giải mã như sau :

_Quá trình mã hóa được mô tả bằng công thức: EK(P) = C

_ Quá trình giải mã được mô tả bằng công thức: DK(C) = P

hinh1.png

Minh họa quá trình mã hóa và giải mã thông tin

Bên cạnh việc làm thế nào để che dấu nôi dung thông tin thì mã hóa phải đảm được các mục tiêu sau :

a. Confidentiality (Tính bí mật) : Đảm bảo cho dữ liệu được truyền đi một cách an toàn và không thể bị lộ thông tin nếu như có ai đó cố tình muốn có được nội dung của dữ liệu gốc ban đầu. Chỉ những người được chỉ định mới có khả năng đọc được nội dung thông tin ban đầu.

b. Authentication (Tính xác thực) : Giúp cho người nhận dữ liệu xác định được chắn chắn dữ liệu mà họ nhận là dữ liệu gốc ban đầu.Kẻ giả mạo không thể có khả năng để giả dạng như là một người khác hay nói cách khác là không thể mạo danh để gửi dữ liệu. Người nhận có khả năng kiểm tra nguồn gốc thông tin mà họ nhận được.

c. Integrity (Tính toàn vẹn): Giúp cho người nhận dữ liệu kiểm tra được rằng dữ liệu không bị thay đổi trong quá trình truyền đi. Kẻ giả mạo không thể có khả năng thay thế dữ liệu ban đầu bằng dữ liệu giả mạo.

d. Non-repudation (Tính không thể chối bỏ): Người gửi hay người nhận không thể chối bỏ sau khi đã gửi hoặc nhận thông tin.

2. Độ an toàn của thuật toán :

Nguyên tắc số 1 trong giải mã là: “Thuật toán nào cũng có thể bị phá vỡ!”. Các thuật toán khác nhau cung cấp mức độ an toàn khác nhau, nó phụ thuộc vào độ khó để phá vỡ chúng. Tại một thời điểm, độ an toàn của một thuật toán phụ thuộc :

        – Nếu chi phí, phí tổn cần thiết để phá vỡ một thuật toán lớn hơn giá trị của thông tin đã mã hóa thì thuật toán đó tạm thời được coi là an toàn.

        – Nếu thời gian cần thiết dùng để phá vỡ một thuật toán là quá lâu thì thuật toán đó tạm thời được coi là an toàn.

        – Nếu lượng dữ liệu cần thiết để phá vỡ một thuật toán quá lớn so với lượng dữ liệu đã được mã hóa thì thuật toán đó tạm thời được coi là an toàn.

Từ tạm thời ở đây có nghĩa là độ an toàn của thuật toán đó chỉ đúng trong một thời điểm nhất định nào đó, luôn luôn có những khả năng cho phép những người phá mã tìm ra cách để phá vỡ thuật toán. Điều này chỉ phụ thuộc vào thời gian, công sức, lòng đam mê cũng như tính kiên trì bền bỉ. Như các bạn thấy, càng ngày tốc độ CPU càng cao, máy tính ngày càng mạnh do đó tốc độ tính toán càng nhanh, cho nên không ai dám khẳng định chắc chắn một điều rằng thuật toán mà mình xây dựng nên sẽ an toàn mãi mãi. Trong thế giới Networking luôn luôn tồn tại hai phe đối lập nhau những người chuyên đi tấn công, khai thác hệ thống và những người chuyên phòng thủ, xây dựng các qui trình bảo vệ hệ thống. Cuộc chiến giữa hai bên chẳng khác gì một cuộc chơi trên bàn cờ, từng đường đi, nước bước sẽ quyết định số phận của mỗi bên. Trong cuộc chiến này ai gan lỳ hơn, ai giỏi hơn sẽ giành được phần thắng.Trong thế giới mã hóa cũng vậy, tất cả phụ thuộc vào trình độ và thời gian … sẽ không ai có thể nói trước được điều gì ! Đó là điểm thú vị của trò chơi.

3. Phân loại các thuật toán mã hóa :

Loài người đã sản sinh ra rất nhiều các thuật toán mã hóa khác nhau. Từ những thuật toán được công khai cho toàn thế giới biết, để mọi người cùng sử dụng và áp dụng như một chuẩn chung cho việc mã hóa dữ liệu thì bên cạnh đó có những thuật toán mã hóa không được công bố.

Có thể các bạn sẽ nghi ngờ điều này, đây là một trường hợp: tôi và bạn cùng xây dựng nên một thuật toán mã hóa, không công bố cho ai biết chỉ mình tôi với bạn biết sử dụng nó trong việc mã hóa và giải mã mà thôi (cái này còn gọi là tool nội bộ). Khi đó hệ thống mã hóa mà tôi với bạn sử dụng sẽ là cực kì an toàn ! Theo như những kiến thức mà tôi có được thì có thể phân loại các thuật toán mã hóa như sau:

Phân loại theo các phương pháp:

        – Mã hóa cổ điển (Classical cryptography)

        – Mã hóa đối xứng (Symmetric cryptography).

        – Mã hóa bất đổi xứng (Asymmetric cryptography).

        – Hàm băm một chiều (Hash function)

Phân lọai theo số lượng khóa:

        – Mã hóa khóa bí mật (Private-key Cryptography)

        – Mã hóa khóa công khai (Public-key Cryptography

3.1_Mã hóa cổ điền :

Xuất hiện trong lịch sử, các phương pháp này không dùng khóa. Thuật toán đơn giản và dễ hiểu. Nhưng từ chính các phương pháp mã hóa này đã giúp chúng ta tiếp cận cơ bản với mã hóa đối xứng được sử dụng ngày nay. Trong mã hóa cổ điển có hai phương pháp rất nổi tiếng đó là:

    _ Substitution Cipher (Mã hóa thay thế)

    _ Transposition Cipher (Mã hóa hoán vị)

3.1.a_Substitution Cipher (Mã hóa thay thế) :

Là phương pháp mà từng kí tự (hay từng nhóm kí tự) trong Plaintext được thay thế bằng một kí tự (hay một nhóm kí tự) khác tạo ra Ciphertext.Bên nhận chỉ việc đảo ngược lại trình tự thay thế trên Ciphertext để có được Plaintext ban đầu.

hinh2.png

Bảng thay thế kí tự

Giả sử tôi xây dựng một bảng thay thế các kí tự như trên  và bạn cũng có bảng thay thế này. Khi tôi muốn truyền thông tin cho bạn, chẳng hạn tôi gửi cho bạn một dòng văn bản như sau : CABBAC, thì dựa vào bảng thay thế kí tự mà tôi và bạn đã xây dựng tôi chuyển thành như sau : FEDDEF. Sau đó tôi gửi tới cho bạn, khi bạn nhận được thông tin như trên, vì bạn đã có bảng thay thế bạn chỉ việc thay thế ngược lại và bạn sẽ có được thông tin ban đầu mà tôi muốn gửi cho bạn.

hinh3.jpgTrong phương pháp má hóa thay thế có một phương pháp cực kì nổi tiếng mà tôi không thể không nhắc tới ở đây, đó chính là phương pháp mã hóa thay thế CEASAR CIPHER.

Cái tên Ceasar có gợi cho các bạn hình dung ra ai không, đó chính là Julius Ceasar vị hoàng đế vĩ đại của đế chế La Mã, người có câu nói đi vào lịch sử: “Hãy trả lại Ceasar những gì thuộc về Ceasar”. Phương pháp này được Ceasar xậy dựng trong cuộc chiến Gallic Wars (những người Gô-loa cổ đại , những người được xem là tổ tiên của người Pháp ngày nay), thay thế từng kí tự trong Plaintext bằng kí tự đứng thứ 3 sau nó.Điều này tương được với phép dịch 3 vị trí. Xem hình minh họa dưới đây :

hinh4.png

Vòng tròn Ceasar

Như các bạn thấy trên, chữ A sẽ được thay thế bằng chữ D, B thay bằng E v…v. Ceasar quả thật là một vị hoàng đế cực kì thông minh, vào thời điểm đó trong lịch sử mà ông ta đã nghĩ ra được phương pháp này thì có thể nói rằng ông ta xứng đáng là một vị hoàng đế đáng kính phục của đế chế La Mã. Khi mà việc truyền tin thời đó rất thô sơ ví dụ như: bằng chim bồ câu, bằng ngựa v..v.. Chim có thể bị bắn hạ và quân lính có thể bị giết trên đường đi do đó thông tin sẽ lọt vào tay kẻ thù,nếu như ông ta không nghĩ ra phương pháp này thì mọi mệnh lệnh của ông ta cho các tướng lĩnh sẽ bị lộ. Bên cạnh đó, các cận thần bên cạnh ông ta phải tuyệt đối trung thành, nếu như có một kẻ phản bội thì điều gì xảy ra chắc các bạn cũng đoán được.

Với Ceasar, ông ta chỉ áp dụng phép dịch 3 vị trí như trên hình minh họa. Nhưng sau này khi áp dụng nó người ta sử dụng các phép dịch khác lớn hơn. Nhưng như các bạn thấy đối với bảng chữ cái tiếng Anh thì từ A -> Z có 26 chữ cái, do đó điểm yếu của phương pháp này nằm ở chỗ phạm vi của phép dịch chỉ được phép nằm trong khoảng từ 0 – 25. Ví dụ nếu ta sử dụng phép dịch 26 thì sẽ tương đương với phép dịch 0. Dựa vào phương pháp này người ta đã xậy dựng nên công thức cho Ceasar Cipher như sau:

1. Đánh số thứ tự cho từng kí tự trong bảng chữ cái :

0

1

2

3

4

5

6

7

8

9

10

11

12

A

B

C

D

E

F

G

H

I

J

K

L

M

13

14

15

16

17

18

19

20

21

22

23

24

25

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

2. Công thức cho Ceasar Cipher :

C = E(P) = (P + K) mod (26)

P = D(C) = (C – K) mod (26)

trong đó P, C : số thứ tự của PlaintextCiphertext trong bảng trên. K là phép dịch.

Ví dụ : Tôi có Plaintext là : HOW. Tôi mã hóa nó sử dụng phép dịch K = 5. Vậy tôi áp dụng công thức trên và có được như sau: P = HOW (7,14,22) à C = MTB (12,19,1).

Về mã hóa thay thế còn rất nhiều phương pháp nữa như Monoalphabetic substitution cipher,Polyalphabetic Ciphers v..v.. các bạn có thể tự mình tìm hiểu thêm.

3.1.b_Transposition Cipher (Mã hóa hoán vị) :

Bên cạnh phương pháp mã hóa thay thế thì trong mã hóa cổ điển có một phương pháp khác nữa cũng nổi tiếng không kém, đó chính là mã hóa hoán vị. Phương pháp này có gì khác biệt so với mã hóa thay thế ? Như những gì tôi đã trình bày cho các bạn về mã hóa thay thế, thì có thể thấy ngay một điều rằng trong phương pháp đó các kí tự trong Plaintext được thay thế hoàn toàn bằng các kí tự trong Ciphertext nhưng mã hóa hoán vị thì ngược lại, các kí tự trong Plaintext vẫn được giữ nguyên chúng chỉ được sắp xếp lại vị trí để tạo ra Ciphertext. Tức là các kí tự trong Plaintext hoàn toàn không bị thay đổi bằng kí tự khác như phương pháp mã hóa thay thế ở trên.

Ý tưởng ban đầu của mã hóa hoán vị như sau: Hoán đổi vị trí của các kí tự theo từng nhóm theo một qui tắc nhất định.

Một ví dụ minh họa để các bạn hiểu về mã hóa hoán vị. Giả sử tôi có một Plaintext: TheMummyReturn. Tôi xây dựng một bảng qui tắc cho việc hoán đổi vị trí các kí tự như sau :

1

2

3

4

5

6

7

3

5

1

6

4

2

7

Dựa vào bảng trên tôi sẽ cắt Plaintext của tôi ra làm 2, mỗi phần sẽ chiếm 7 kí tự :

TheMumm | yReturn

Thực hiện phép hoán đổi trên từng phần dựa theo bảng mà tôi đã xây dựng

euTmMhm | euyrtRn

Cuối cùng ghép lại tôi có được Ciphertext :

euTmMhmeuyrtRn

Rất hay và rất đơn giản phải không các bạn. Khi bên nhận nhận được dữ liệu, họ cũng có cái bảng giống như trên, thực hiện qui trình thay thế ngược lại họ sẽ có được Plaintext ban đầu.

Trong thực thế phương pháp mã hóa hoán vị này có nhiều dạng khác nhau. Các bạn có thể tìm hiểu thêm, ở đây tôi xin giới thiệu một số phương pháp phổ biến mà tôi biết được.

1. Reverse Cipher (Đảo ngược Plaintext) :

Ví dụ tôi có chuỗi Plaintext: mama i am coming home. Khi đảo ngược kí tự tôi có được Ciphertext như sau : emohgnimocmaiamam

2. Rail Fence Cipher :

Phương pháp này được sử dụng bởi người Spartans khi gửi thông điệp cho các chiến binh Hy Lạp.Cụ thể như sau : từ Plaintext có được, viết lại theo đường chéo thông qua số hàng mà chúng ta qui định. Sau đó đưa ra Ciphertext theo từng hàng. Điểm mấu chốt trong phương pháp này là số hàng được sử dụng cho việc mã hóa. Một ví dụ minh họa để các bạn hiểu phương pháp này : tôi có Plaintext là Hello World. Số hàng tôi sử dụng là 2. Quá trình mã hóa tiến hành theo 2 bước:

a. Viết Plaintext theo đường chéo thông qua số hàng qui định

H l o o l

e l W r d

b. Đưa ra Ciphertext : HloolelWrd

3. Row Transposition Cipher :

Đây là một cơ chế mã hóa khá phức tạp và có nhiều phương pháp khác nhau. Ý tưởng mã hóa đơn giản nhất của phương pháp này như sau: từ Plaintext ban đầu, viết lại Plaintext đó theo hàng dựa trên số lượng cột mà chúng ta qui định. Sau đó chúng ta đánh số thứ tự cho các cột và đưa ra Ciphertext dựa trên các cột đó. Ví dụ : tôi có Plaintext là Good bye my friend . Số cột mà tôi qui định là 3.Quá trình mã hóa như sau :

a. Viết lại Plaintext theo số cột đã qui định :

G o o

d b y

e m y

f r i

e n d

b. Đánh số thứ tự cho các cột :

2

1

3

G

o

o

d

b

y

e

m

y

f

r

i

e

n

d

c. Đưa ra plaintext dựa trên số thứ tự của cột

obmrnGdefeoyyid

3.2 Mã hóa đối xứng (Symmetric cryptography) :

Ở phần trên các bạn đã được tìm hiểu về mã hóa cổ điển, trong đó tôi có nói rằng mã hóa cổ điển không dùng khóa và nó là ý tưởng cho mã hóa đối xứng ngày nay.

Nhưng trên thực tế nếu chúng ta phân tích một cách tổng quát chúng ta sẽ thấy được như sau :

– Mã hóa cổ điển có sử dụng khóa. Bằng chứng là trong phương pháp Ceasar Cipher thì khóa chính là phép dịch kí tự, mà cụ thể là phép dịch 3 kí tự. Trong phương pháp mã hóa hoán vị thì khóa nằm ở số hàng hay số cột mà chúng ta qui định. Khóa này có thể được thay đổi tùy theo mục đích mã hóa của chúng ta,nhưng nó phải nằm trong một phạm vi cho phép nào đó.

– Để dùng được mã hóa cổ điển thì bên mã hóa và bên giải mã phải thống nhất với nhau về cơ chế mã hóa cũng như giải mã. Nếu như không có công việc này thì hai bên sẽ không thể làm việc được với nhau.

Hai điều trên chính là ý tưởng cho mã hóa đối xứng. Mã hóa đối xứng còn có một số tên gọi khác như Secret Key Cryptography (hay Private Key Cryptography), sử dụng cùng một khóa cho cả hai quá trình mã hóa và giải mã. Quá trình thực hiện như sau :

hinh5.png

Mã hóa khóa riêng

Trong hệ thống mã hóa đối xứng, trước khi truyền dữ liệu 2 bên gửi và nhận phải thỏa thuận về khóa dùng chung cho qúa trình mã hóa và giải mã. Sau đó, bên gửi sẽ mã hóa Plaintext bằng cách sử dụng khóa bí mật này và gửi thông điệp đã mã hóa cho bên nhận. Bên nhận sau khi nhận được thông điệp đã mã hóa sẽ sử dụng chính khóa bí mật mà hai bên thỏa thuận để giải mã và lấy ra Plaintext.

Những gì bạn nhìn thấy hình trên chính là quá trình tiến hành trao đổi thông tin giữa bên gửi và bên nhận thông qua việc sử dụng phương pháp mã hóa đối xứng.Trong quá trình này thì thành phần quan trọng nhất cần phải được giữ kín chính là khóa. Việc trao đổi, thỏa thuận về thuật toán được sử dụng trong việc mã hóa có thể tiến hành một cách công khai, nhưng bước thỏa thuận về khóa trong việc mã hóa và giải mã phải tiến hành bí mật. Phải có bước thỏa thuận về khóa, vì hai lý do cơ bản sau đây :

    _Nếu như hai bên đã thống nhất thuật toán mã hóa, nhưng sau đó Sender gửi thông điệp đã mã hóa tới cho Receiver mà không cho biết khóa đã sử dụng trong quá trình mã hóa. Receiver không có khóa để giải mã cho nên sẽ chẳng hiểu được nội dung trong tài liệu muốn nói gì. Vì thế bắt buộc ngoài việc trao đổi về thuật toán tôi và anh cần phải trao đổi về khóa

    _Khóa phải được trao đổi theo một kênh bí mật nào đó.Ví dụ trực tiếp trao đổi (mặt đối mặt) hay gián tiếp trao đổi (thông qua điện thoại, email, tin nhắn). Phải thực hiện qua kênh truyền bí mật vì rất có thể sẽ có một bên thứ ba nghe lén cuộc trao đổi giữa hai bên và có được khóa, như vậy thông tin trao đổi sẽ bị kẻ khác biết được. Thêm vào đó hai bên buộc phải tin cậy lẫn nhau, không thể nhờ một người khác gửi hộ khóa được vì rất có thể người này sẽ dùng khóa đó để ăn cắp thông tin.

Qua đây các bạn có thể thấy được rằng thuật toán mã hóa đối xứng sẽ rất có lợi khi được áp dụng trong các cơ quan hay các tổ chức đơn lẻ. Nhưng nếu cần phải trao đổi thông tin với một bên thứ hai thì việc đảm bảo tính bí mật của khóa phải được đặt lên hàng đầu.

Mã hóa đối xứng có thể được phân thành hai loại:

    _Loại thứ nhất tác động trên Plaintext theo từng nhóm bits. Từng nhóm bits này được gọi với một cái tên khác là khối (Block) và thuật toán được áp dụng gọi là Block Algo hay Block Cipher. Theo đó, từng khối dữ liệu trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Đối với các thuật toán ngày nay thì kích thước chung của một Block là 64 bits.

    _Loại thứ hai tác động trên Plaintext theo từng bit một. Các thuật toán áp dụng được gọi là Stream Algo hay Stream Cipher. Theo đó, dữ liệu của văn bản được mã hóa từng bit một. Các thuật toán mà hóa dòng có tốc độ nhanh hơn các thuật toán mã hóa khối và nó thường được áp dụng cho khi lượng dữ liệu cần mã hóa chưa được biết trước.Một số thuật toán nổi tiếng trong mã hóa đối xứng: DES, Triple DES(3DES), RC4, AES…

    _DES : viết tắt của Data Encryption Standard. Với DES, Plaintext được mã hóa theo từng khối 64 bits và sử dụng một khóa là 64 bits, nhưng thực tế thì chỉ có 56 bits là thực sự được sự dụng để tạo khóa. Là một thuật toán được sử dụng rộng rãi nhất trên thế giới với bề dày lịch sử hơn 20 năm, được phát triển bởi IBM Team vào những năm 1970, sau đó được phát triển bởi NIST (National Institute of Standard and Technology) cho các ứng dụng thương mại. Hiện tại DES không còn được đánh giá cao do kích thước của khóa là quá nhỏ 56 bit và nó dễ dàng bị phá vỡ chỉ trong vòng 24 tiếng đồng hồ.

    _Triple DES (3DES) : 3DES cải thiện độ mạnh của DES bằng việc sử dụng một quá trình mã hóa-giải mã-mã hóa mà sử dụng 3 khóa.Khối 64-bit Plaintext đầu tiên được mã hóa sử dụng khóa thứ nhất. Sau đó, dữ liệu bị mã hóa được giải mã bằng việc sử dụng một khóa thứ hai. Cuối cùng, sử dụng khóa thứ ba và kết quả của quá trình giải mã trên để mã hóa.

C = EK3(DK2(EK1(P)))

P = DK1(EK2(DK3(C)))

_AES : viết tắt của Advanced Encryption Standard. Xuất hiện theo lời kêu gọi của NIST, cần phải phát triển một thuật toán mới thay thế cho DES. AES chính thức thay thế cho DES vào tháng 11 năm 2001. Nó hỗ trợ độ lớn nhỏ nhất của khóa là 128, 192 và 256 bits.

3.3 Mã hóa bất đối xứng (Asymmetric cryptography) :

Hay còn được gọi với một cái tên khác là mã hóa khóa công khai (Public Key Cryptography), nó được thiết kế sao cho khóa sử dụng trong quá trình mã hóa khác biệt với khóa được sử dụng trong quá trình giải mã. Hơn thế nữa, khóa dùng trong quá trình giải mã không thể được tính toán hay suy luận từ khóa dùng để mã hóa và ngược lại, tức là hai khóa này có quan hệ với nhau về mặt toán học nhưng không thể suy diễn được ra nhau. Thuật toán này được gọi là Public-Key bởi vì khóa dùng cho việc mã hóa được công khai cho tất cả mọi người. Một người hòan toàn xa lạ có thể dùng khóa này để mã hóa dữ liệu nhưng chỉ duy nhất người mà có khóa giải mã tương ứng mới có thể đọc được dữ liệu mà thôi. Do đó trong thuật mã hóa này Encryption key được gọi là Public key còn Decryption Key được gọi là Private key.

hinh6.png

Mã hóa công khai

Tại sao lại có sự xuất hiện của Mã hóa khóa công khai? Như đã trình bày với các bạn ở trên, thuật toán mã hóa khóa riêng tuy có tốc độ thực hiện rất nhanh nhưng nó có một số nhược điểm như sau:

  • Khóa phải được trao đổi theo một kênh bí mật.
  • Nếu mất khóa thì thông tin hoàn toàn có thể bị lấy cắp hoặc giả mạo.
  • Khóa cần phải thay đổi một cách định kì
  • Khi số lượng người dùng tăng lên thí số lượng khóa được sử dụng cũng tăng lên.

Vậy là điểm yếu của thuật toán mã hóa khóa riêng nằm ở khâu quản lý khóa thế nào cho hợp lý. Mã hóa khóa công khai ra đời đã giải quyết được vấn đề này. Hình minh họa ở trên cho chúng ta thấy được quá trình truyền tin an toàn dựa vào hệ thống mã hóa khóa công khai. Như các bạn thấy, trong hệ thống mã hóa này thì mỗi một người sử dụng khi tham gia vào đều được cấp 2 khóa : Một khóa dùng cho việc mã hóa dữ liệu (Public key) và một khóa dùng cho việc giải mã dữ liệu (Private key), trong đó Public key được đưa ra cho tất cả mọi người cùng biết, còn Private key phải được giữ kín một cách tuyệt đối.Giả sử hai phía muốn truyền tin cho nhau thì quá trình truyền sử dụng mã hóa khóa công khai được thực hiện như sau :

    – Sender yêu cầu cung cấp hoặc tự tìm khoá công khai của Receiver trên một Server chịu trách nhiệm quản lý khoá công khai.
    – Sau đó hai phía thống nhất thuật toán dùng để mã hóa dữ liệu, Sender sử dụng khóa công khai của Receiver cùng với thuật toán đã thống nhất để mã hóa thông tin bí mật.
    – Thông tin sau khi mã hóa được gửi tới Receiver, lúc này chính Sender cũng không thể nào giải mã được thông tin mà anh ta đã mã hóa (khác với mã hóa khóa riêng).
    – Khi nhận được thông tin đã mã hóa, Receiver sẽ sử dụng khóa bí mật của mình để giải mã và lấy ra thông tin ban đầu.

Vậy là với sự ra đời của Mã hóa khóa công khai thì khóa được quản lý một cách linh hoạt và hiệu quả hơn.Người sử dụng chỉ cần bảo vệ khóa Private key. Hệ thống này an toàn hơn nhiều so với mã hóa khóa riêng, người mã hóa không thể giải mã được dữ liệu đã mã hóa bằng khóa công khai của người khác.Tuy nhiên nhược điểm của Mã hóa khóa công khai nằm ở tốc độ thực hiện, nó chậm hơn mã hóa khóa riêng cỡ ~1000 lần. Do đó người ta thường kết hợp hai hệ thống mã hóa khóa riêng và công khai lại với nhau và được gọi là Hybrid Cryptosystems (Hệ thống mã hóa lai).

Một số thuật toán mã hóa công khai nổi tiếng : Diffie-Hellman, RSA v…v…

_RSA : Cái tên RSA là ba chữ cái bắt đầu từ ba cái tên của ba tác giả: Ron Rivest, Adi Shamir ,Len Adleman. Sử dụng đồng thời cho mã hóa khóa công khai và chữ kí điện tử. Độ an toàn của thuật toán mã hóa RSA dựa trên việc phân tích một số nguyên tố rất lớn thành hai số nguyên tố.

3.4 Hệ thống mã hóa lai (Hybrid Cryptosystems) :

Trên thực tế hệ thống mã hóa khóa công khai chưa thể thay thể hệ thống mã hóa khóa bí mật được, nó ít được sử dụng để mã hóa dữ liệu mà thường dùng để mã hóa khóa. Hệ thống mã hóa khóa lai ra đời là sự kết hợp giữa tốc độ và tính an toàn của hai hệ thống mã hóa ở trên. Dưới đây là mô hình của hệ thống mã hóa lai :

hinh7.png

Hệ thống mã hóa khóa lai

Nhìn vào hình mô tả ở trên các bạn có thể hình dung ra được quá trình thực hiện :

        – Bên gửi tạo ra một khóa bí mật dùng để mã hóa dữ liệu. Khóa này còn được gọi là Session Key.

     

      – Sau đó Session Key này lại được mã hóa bằng khóa công khai của người nhận dữ liệu.

        – Tiếp theo dữ liệu đã mã hóa cùng với Session Key đã mã hóa được gửi tới cho bên nhận.

        – Lúc này bên nhận dùng khóa riêng để giải mã Session Key và có được Session Key ban đầu.

        – Dùng Session Key sau khi giải mã để giải mã dữ liệu.

Như vậy các bạn thấy rằng hệ thống mã hóa khóa lai đã tận dụng rất tốt các điểm mạnh của hai hệ thống mã hóa ở trên đó là : tốc độ và tính an toàn. Điều này sẽ làm hạn chế bớt khả năng giải mã của Attacker.

4. Một số ứng của mã hóa trong Security :

Các bạn đã cùng tôi tìm hiểu một loạt các phương pháp mã hóa và đã thấy được mỗi phương pháp có những điểm mạnh và điểm yếu riêng.Trong phần này tôi liệt kê một số ứng dụng của mã hóa trong đời sống hàng ngày nói chung và trong lĩnh vực Security nói riêng. Đó là:

        – Securing E-mail (email an toàn).

      – Authentication System (hệ thống xác thực).

      – Secure E-commerce (biện pháp an toàn cho thương mại điện tử).

      – Virtual Private Network (VPN) Encryption.

      – Wireless Encrytion.

5. Lời kết :

Trên đây tôi đã giới thiệu tới các bạn những kiến thức cơ bản nhất về mã hoá. Do trình độ có hạn cho nên không thể không tránh khỏi những sai sót.

Posted on 25/10/2010, in Tổng quan công nghệ and tagged , , , , , , , . Bookmark the permalink. 3 phản hồi.

  1. timhieuthongtin

    Cảm ơn tác giả Lê Tôn Phát về bài viết trên. nếu có thể giúp tôi định nghĩa về “Mã hoá vi sai” và “mã hoá trực tiếp” . tôi trân trọng cảm ơn.

  2. bài viết này thực sự là một quyển từ điển nhỏ những keyword chính cho một người mới bắt đầu bước vào thế giới mật mã thú vị
    xin cảm ơn tác giả

  3. cảm ơn a Phát về bài viết công phu và hữu ích này.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: