Quá trình mã hóa diễn ra như thế nào?

Khi sử dụng Internet, không phải lúc nào chúng ta cũng chỉ bấm chuột và tìm thông tin một cách thụ động như đọc tin hay đăng bài lên blog, bởi ngoài ra ta còn dành một thời gian đáng kể để gửi cho người khác thông tin của chính mình.

ỗi khi đặt hàng một thứ gì đó qua mạng như một cuốn sách, một chiếc đĩa CD hay bất kỳ thứ gì từ người bán hàng qua mạng, hoặc khi đăng ký một tài khoản trực tuyến, bạn đều phải cung cấp một số thông tin cá nhân nhạy cảm. Thường thì bạn sẽ phải khai tên, địa chỉ email và số điện thoại, ngoài ra còn có password và số PIN. 

 \"/\"

Thương mại điện tử phụ thuộc vào khả năng gửi thông tin an toàn – mã hóa cho phép bạn thực hiện điều này.  

Tốc độ phát triển chóng mặt của mạng Internet đã khiến cả khách hàng lẫn các doanh nghiệp phấn khích với lời hứa sẽ thay đổi cách chúng ta sống và làm việc. GIờ đây bạn có thể dễ dàng ngồi trước laptop để mua bán đủ thứ hàng hóa ra khắp thế giới. Nhưng an ninh vẫn là một mối lo ngại lớn trên Internet, nhất là khi bạn phải dùng nó để gửi thông tin nhạy cảm giữa các bên. 

Hãy đối mặt với điều này, có rất nhiều thông tin mà chúng ta không muốn người khác biết, như: 

  • Thông tin thẻ tín dụng 
  • Số CMT 
  • Địa chỉ nhà   
  • Thông tin cá nhân   
  • Thông tin nhạy cảm về công ty
  • Thông tin tài khoản ngân hàng 

­Có rất nhiều cách để đảm bảo an ninh thông tin trên máy tính và mạng Internet, trong đó có việc lưu các thông tin nhạy cảm lên ổ lưu trữ ngoài như ổ USB hoặc ổ cứng ngoài. Nhưng cách phổ biến nhất vẫn là mã hóa thông tin để chỉ có người nắm giữ chìa khóa mới mở được.

Trong bài báo này chúng tôi sẽ giới thiệu cho bạn về quy trình mã hóa và chứng thực. Bạn cũng sẽ được làm quen với hệ thống chìa khóa công cộng và chìa khóa hệ thống và các thuật toán khác.  

Các hệ thống mã hóa

Việc mã hóa máy tính dựa trên khoa học mật mã, vốn được con người sử dụng từ lâu. Nhưng trước kỷ nguyên số, người dùng chủ yếu của công nghệ này vẫn là các chính phủ, chủ yếu vì mục đích quân sự. 

\"/\"

Một văn bản mã hóa được bao quanh bởi một loạt công cụ mã hóa bán sẵn tại văn phòng FBI ở Washington, D.C.

Nhà viết sử Hy Lạp là Plutarch có ghi một ví dụ về mã hoá :

Những vị tuớng người Xpactơ gửi những thông điệp nhạy cảm dùng Scytale

 \"/\"

là con lăn hình trụ làm từ gỗ . Vị tướng sẽ cuốn mẩu giấy bằng da xung quanh Scytale và ghi những thông điệp của mình dọc theo chiều dài . Khi ai đó gỡ giấy này ra khỏi hình trụ này thì văn bản xuất hiện là một mớ hỗn độn vô nghĩa . Nếu vị tướng khác nhận được tấm giấy da này và có Scytale cùng kích thước thì sẽ cuốn nó quanh Scytale và khi ấy dễ dàng đọc được thông điệp trên đó .

Người Hy Lạp đầu tiên sử dụng mật mã , những mã đặc biệt để có thể chuyển sang thành dạng chữ cái hoặc số . Dưới đây là một ví dụ điển hình về mật mã với một lưới chữ cái và những con số tương ứng :

1

2

3

4

5

1

A

B

C

D

E

2

F

G

H

I/J

K

3

L

M

N

O

P

4

Q

R

S

T

U

5

V

W

X

Y

Z

Nếu một vị tướng Xpactơ gửi một tin nhắn I AM SPARTA cho một vị tướng khác thì ông ấy sẽ viết dòng số như sau

42 11 23 34 53 11 24 44 11

Tất nhiên cả hai vị tướng này đều có chung một mật mã và họ có thể giải mã bất kì những thông điệp nào từ người kia gửi tới . Để làm cho những thông điệp càng khó khi giải mã họ có thể sắp xếp những kí tự bên trong lưới với bất kì sự kết hợp nào .

Hầu hết các dạng mật mã sử dụng ngày nay đều dựa vào máy tính, đơn giản bởi mã do con người lập quá dễ phá. Các mật mã ngày nay vẫn được biết dưới dạng các thuật toán, tức chỉ dẫn cách mã hóa – chúng cho ta biết cách tạo một tin nhắn và đưa ra những cách kết hợp khả thi. Mặt khác, một chìa khóa sẽ giúp người hoặc máy tính hiểu được nội dung bản mật mã. 

Hệ thống mã hóa máy tính thường thuộc một trong hai danh mục sau: 

  • Mã hóa khoá đối xứng
  • Mã hóa khoá dùng chung ( public)

Tiếp theo chúng ta sẽ tìm hiểu về hai hệ thống này. 

Khoá đối xứng 

Cũng tương tự như hai vị tướng Xpactơ gửi tin nhắn cho nhau , máy tính sử dụng một hệ thống mã hóa Khoá đối xứng để gửi thông tin, và cả 2 bên đều phải có cùng một Khoá như nhau . 

Trong mã hóa Khoá đối xứng, mỗi máy tính sẽ có một Khoá bí mật (code) dùng để mã hóa một gói thông tin trước khi chuyển nó qua mạng tới một máy tính khác. Khoá đối xứng yêu cầu bạn phải biết được hai chiếc máy tính nào sắp nói chuyện với nhau để cài Khoá lên từng máy. Nó cũng giống như một mã bí mật mà cả hai bên cần phải biết để giải mã được thông tin. Mã sẽ cung cấp Khoá để giải mã tin nhắn. 

Hãy nghĩ như thế này: Bạn cần mã hóa một tin nhắn gửi cho bạn bè, trong đó mỗi chữ cái được thay bằng một chữ cái khác nằm sau nó 2 chữ cái trong bảng alphabet. Vì thế A trở thành C, còn B trở thành D. Thế là bạn kể cho người bạn thân rằng mã là “dịch đi 2.” Người bạn nhận tin nhắn rồi giải mã nó. Những ai không biết mã “dịch đi 2” sẽ chỉ nhìn thấy những ký tự vô nghĩa. 

Với máy tính cũng vậy, nhưng tất nhiên là những Khoá dài hơn nhiều. Thuật toán đối xứng đầu tiên được phát triển ở Mỹ là Tiêu chuẩn Mã hóa Dữ liệu (DES – Data Encryption Standard ) hồi những năm 70. DES sử dụng Khoá 56-bit. 

Do máy tính ngày càng trở nên nhanh hơn kể từ thập niên 70 nên DES không được coi là an toàn nữa – mặc dù Khoá 56-bit cung cấp hơn 70 nghìn triệu triệu cách kết hợp khác nhau (70,000,000,000,000,000), nhưng chỉ cần tấn công kiểu đơn giản (thử từng cách cho đến khi tìm đúng Khoá ) là sẽ giải được trong một thời gian ngắn. Sau đó DES được thay thế bằng Tiêu Chuẩn mã hóa cao cấp (AES – Advanced Encryption Standard ), sử dụng 128-, 192- hoặc 256-bit. Hầu hết mọi người đều tin rằng AES là một chuẩn mã hóa thích hợp trong thời gian dài. Ví dụ như Khoá 128-bit có thể có hơn 300,000,000,000,000,000,000,000,000,000,000,000 cách kết hợp.

Mã hoá Khoá công khai ( public )

Một trong những điểm yếu của mã hóa Khoá đối xứng là hai người muốn liên lạc với nhau sẽ phải tìm một cách thật an toàn, nếu không kẻ tấn công có thể dễ dàng trộm dữ liệu trên đường vận chuyển. Tháng 11 năm 1976, một bài báo trên tờ IEEE Transactions on Information Theory có nhan đề “Hướng đi mới trong công nghệ mật mã” đã đưa ra một giải pháp cho vấn đề này: mã hóa Khoá công khai (public key).

Còn có tên khác là mã hóa Khoá không đối xứng, công nghệ này sử dụng hai Khoá khác nhau cùng lúc – sự kết hợp giữa Khoá cá nhânKhoá công khai. Khoá cá nhân chỉ có máy tính bạn mới biết, còn Khoá công khai thì bất kỳ máy tính nào muốn liên lạc một cách an toàn với máy tính bạn đều có thể biết được. Để giải mã một tin nhắn đã mã hóa, máy tính phải sử dụng Khoá công khai do máy tính đầu tiên cung cấp cùng với Khoá cá nhân của nó. Tuy tin nhắn gửi từ máy này sang máy khác không thể an toàn được do ai cũng có thể biết Khoá công khai nhưng chỉ người nào có Khoá cá nhân mới đọc được. Hai Khoá này dựa trên các số nguyên tố, giúp hệ thống cực kỳ an toàn bởi một dãy vô tận các số nguyên tố đồng nghĩa với một số lượng gần như vô tận các Khoá. Một chương trình mã hóa Key public rất phổ biến có tên Pretty Good Privacy (PGP), cho phép bạn mã hóa gần như mọi thứ.  

 

 
 

Máy tính gửi mã hoá tài liệu bằng Khoá đối xứng sau đó mã hoá Khoá đối xứng với Khoá chung của máy tính nhận . Máy tính nhận dùng Khoá cá nhân của nó để giải mã Khoá đối xứng . Sau đó nó dùng Khoá đối xứng để giải mã tài liệu . Bấm nút Play để xem cách thức hoạt động .

Để tiến hành mã hóa Khoá chung khối lượng lớn, cần một máy chủ Web, cũng có thể có cách làm khác. Đây là lúc cần đến các chứng nhận số . Chứng nhận số ( Digital Certificate ) là một đoạn mã hoặc là một con số để nói rằng máy chủ Web đáng tin cậy nhờ vào một nguồn độc lập khác mang tên Cấp quyền chứng nhận  ( Certificate Authority ) . Certificate Authority hoạt động như là một người trung gian được cả hai máy tính tin tưởng. Nó xác nhận rằng cả hai máy tính đều đáng tin cậy , rồi cung cấp Khoá công khai của máy này tới máy khác. 

SSL và TLS

Một cách áp dụng mã hóa Khoá chung thường gặp là Secure Sockets Layer (SSL). Do Netscape khai phá, SSL là một giao thức an ninh mạng được các trình duyệt web và những máy chủ Web sử dụng để truyền thông tin nhạy cảm. SSL đã trở thành một phần của giao thức an ninh tổng thể mang tên Transport Layer Security (TLS).

\"/\"
Hãy để ý chữ "s" đứng sau "http" trong phần địa chỉ mỗi khi bạn định cung cấp một thông tin nhạy cảm nào đó như số thẻ tín dụng dưới dạng form  trên website. 

Trong trình duyệt, bạn có thể nhận ra giao thức an ninh, giả dụ như TLS, bằng hai cách khác nhau . Hãy để ý chữ “http” trong dòng địa chỉ được thay bằng “https” và một ổ khóa nhỏ nằm ở cuối trình duyệt , và bạn có thể thấy ổ khoá nhỏ trong thành trạng thái nằm phía dưới cùng của cửa sổ trình duyệt . Khi bạn đang truy cập các thông tin nhạy cảm như tài khoản ngân hàng hay dịch vụ chuyển tiền như Paypal hoặc Google Checkout, có thể bạn sẽ thấy kiểu thay đổi định dạng và biết rằng thông tin của bạn sẽ được chuyển đi một cách an toàn. 

TLS và người tiền nhiệm của nó là SSL đã tận dụng rất tốt các Cấp quyền chứng nhận  ( Certificate Authority ) này. Ngay khi trình duyệt yêu cầu một trang web bảo đảm có chữ “s” đằng sau “http,” trình duyệt sẽ gửi Khoá chung kèm theo chứng nhận để kiểm tra 3 điều:

1)     Chứng nhận đến từ nơi đáng tin cậy;

2)     Chứng nhận hiện tại vẫn còn hiệu lực,

3)     Chứng nhận có liên quan với trang web xuất xứ. 

\"/\"
Ký hiệu ổ khóa cho bạn biết mình đang dùng hệ thống mã hóa. 

Sau đó trình duyệt sẽ dùng Khoá chung để mã hóa một Khoá đối xứng với sự lựa chọn ngẫu nhiên . Việc mã hóa Khoá chung tốn rất nhiều tài nguyên, vì thế hầu hết các hệ thống đều kết hợp Khoá chung với Khoá đối xứng. Khi 2 máy tính đến giai đoạn an toàn, một máy sẽ tạo Khoá đối xứng và gửi nó đến máy kia bằng mã hóa Khoá chung. Sau đó hai máy tính sẽ liên lạc bằng mã hóa Khoá đối xứng. Sau khi hoàn thành, mỗi máy sẽ xóa Khoá đối xứng vừa dùng. Bất kỳ giải đoạn nào cần đến Khoá đối xứng sẽ phải tạo lại, và quy trình này lại được tiến hành từ đầu. 

Thuật toán băm ( Hash )

Khóa của mã hóa Khoá chung dựa trên giá trị Hash, . Đó là một giá trị được tính toán dựa trên một số đầu vào bằng cách sử dụng thuật toán Hash. Về cơ bản thì giá trị Hash là tóm tắt của giá trị ban đầu. Điều quan trọng cần nhớ về giá trị Hash là gần như không thể có được số đầu vào ban đầu mà không biết các dữ liệu dùng để tạo ra giá trị Hash. Dưới đây là một ví dụ đơn giản: 

Giá trị đầu vào

Thuật toán Hash

Giá trị Hash

10,667

Đầu vào # x 143

1,525,381


Bạn có thể thấy sẽ rất khó để tính giá trị của 1,525,381 = 10,667 X 143. Nhưng nếu bạn biết được số nhân là 143 thì việc tìm ra giá trị 10,667 là rất dễ dàng. Mã hóa Khoá chung thực ra khó hơn ví dụ trên, nhưng đó là ý tưởng cơ bản ban đầu. .  

Mã hóa Khoá chung thường sử dụng các thuật toán phức tạp và giá trị Hash rất lớn để mã hóa, bao gồm cả các số 40-bit hay thậm chí 128-bit. Một số 128 bit có thể có 2128, hay 3,402,823,669,209,384,634,633,746,074,300,000,000,000,000,000,000,000,000,000,000,000,000 cách kết hợp khác nhau. 

Chứng thực

Như đã nói, mã hóa là quá trình lấy toàn bộ dữ liệu mà một máy tính đang gửi tới một máy tính khác và biến chúng thành một dạng mà chỉ có máy tính nhận mới có thể giải mã được. Một quá trình khác mang tên Chứng thực ( Authentication ) sẽ được sử dụng để chứng nhận rằng thông tin đó đến từ một nguồn đáng tin cậy. Về cơ bản thì nếu thông tin là “thực” thì bạn sẽ biết được ai đã tạo ra nó và rằng nó chưa bị thay đổi kể từ khi được tạo ra. Hai quá trình Mã hóa và Chứng thực luôn song hành để tạo ra một môi trường làm việc an toàn. 

Có nhiều cách để chứng thực một người hoặc một thông tin trên máy tính: 

\"*\"       Password – Việc dùng user name và password là dạng chứng thực phổ biến nhất. Bạn chỉ cần gõ tên và password, sau đó máy tính sẽ kiểm tra và đối chứng chúng với một file bí mật để xác minh. Nếu tên hay password không khớp thì bạn không được quyền truy cập tiếp.   

\"*\"       Thẻ Pass – Các thẻ này có nhiều dạng, từ một tấm thẻ đơn giản với thẻ từ -- tương tự như thẻ tín dụng – tới các thẻ thông minh phức tạp hơn có chứa chip máy tính tích hợp. 

\"*\"       Chữ ký số - Một chữ ký số là cách để đảm bảo rằng văn bản điện tử (email, bảng tính, file dạng văn bản ) là thực. Chuẩn chữ ký điện tử (DSS – Digital Signature Standard ) được dựa trên một dạng mã hóa Khoá chung có sử dụng Thuật toán chữ ký điện tử (DSA – Digital Signature Algorithm ). DSS là định dạng chữ ký điện tử đã được chính phủ Mỹ thông qua. Thuật toán DSA có chứa một Khoá cá nhân mà chỉ người tạo văn bản (người ký) mới biết, và một Khoá chung . Khoá chung có 4 phần. Nếu có thay đổi nào xảy ra với văn bản sau khi đã gắn chữ ký điện tử thì nó cũng thay đổi giá trị mà chữ ký điện tử được đối chiếu, và từ đó làm vô hiệu chữ ký này.   

Gần đây đã xuất hiện những dạng chứng thực mới phức tạp hơn cho cả máy tính công sở và máy tính gia đình. Hầu hết các máy tính mới đều dùng một dạng sinh trắc học nào đó để chứng thực. Sinh trắc học dùng các thông tin sinh học để kiểm tra thân thế người dùng. Các phương pháp chứng thực bằng sinh trắc học gồm có: 

  • Quét vân tay
  • Quét võng mạch
  • Quét mặt 
  • Nhận diện giọng nói

Checksum và CRC 

Để đảm bảo an ninh, cần phải chắc chắn rằng dữ liệu không bị hỏng trong quá trình di chuyển hoặc mã hóa. Dưới đây là một số cách phổ biến để thực hiện việc này: 

·         Checksum – Một trong những cách lâu đời nhất để đảm bảo rằng dữ liệu là đúng, ngoài ra còn cung cấp một dạng chứng thực bởi một Checksum không hợp lệ sẽ bảo rằng dữ liệu đã bị thay đổi. Checksum được tạo bởi một trong hai cách. Giả dụ Checksum của một gói dữ liệu có độ dài 1 byte. Một byte gồm 8 bit, mỗi bit có thể có một trong hai dạng, vì thế tổng số các cách kết hợp là 256 (28 ) . Do cách kết hợp đầu tiên bằng 0 nên một byte có thể có giá trị tối đa 255 .

  • Nếu tổng của các byte trong gói là 255 hoặc ít hơn thì checksum sẽ chứa chính xác giá trị đó. 
  • Còn nếu tổng các byte còn lại lớn hơn 255 thì checksum sẽ bằng số dư của giá trị tổng chia cho 256. 

Hãy xem một ví dụ về checksum:

Byte 1

Byte 2

Byte 3

Byte 4

Byte 5

Byte 6

Byte 7

Byte 8

Tổng

Checksum

212

232

54

135

244

15

179

80

1151

127

\"*\"       1151 / 256 = 4,496 (làm tròn tới hàng thứ 4 đơn vị thập phân)

\"*\"       4 x 256 = 1,024

\"*\"       1,151 - 1,024 = 127

\"*\"    

CRC  ( Cyclic Redundancy Check )  –  CRC cũng tương tự như khái niệm Checksum, nhưng sử dụng phép chia đa thức để tính giá trị CRC, thường dài từ 16 đến 32 bit. Ưu điểm của CRC là nó rất chính xác. Nếu một bit không chính xác thì giá trị CRC sẽ không khớp. Cả Checksum và CRC đều có tác dụng tốt trong việc chặn lỗi ngẫu nhiên trong quá trình chuyển thông tin, nhưng lại không có mấy tác dụng bảo vệ trước một cuộc tấn công nội bộ. Do đó mã hóa Khoá chung và Khoá đối xứng sẽ an toàn hơn nhiều.   

Tất cả các quy trình trên kết hợp lại sẽ đem đến cho bạn công cụ cần thiết để đảm bảo thông tin bạn gửi hoặc nhận ra Internet là an toàn. Trên thực tế, việc gửi thông tin qua mạng máy tính thường an toàn hơn là gửi theo các cách khác. Điện thoại, đặc biệt là điện thoại không dây đều có khả năng bị nghe lén bởi máy quét radio. Còn các phương thức như gửi thư truyền thống thường phải qua tay nhiều người mới đến được địa điểm cần, làm tăng khả năng bị hỏng dữ liệu. Bạn cần hiểu rằng việc mã hóa, đảm bảo mọi dữ liệu nhạy cảm bạn gửi qua mạng đều an toàn hơn rất nhiều (hãy nhớ “https” và biểu tượng ổ khóa).

\"\"\"\"