Cơ bản về mật mã học (1)


Xem thêm:
Cơ bản về mật mã học – Phần 1
Cơ bản về mật mã học – Phần 2

————-

Bài này sẽ giới thiệu những kiến thức cơ bản trong lĩnh vực mật mã học như sơ nét các loại mã hóa và quá trình ký số xảy ra như thế nào. Đi sâu vào các hàm, thuật toán để tạo mật mã sẽ không được mình đề cập ở đây.

Các loại mã hóa

Trong mật mã học hiện đại (modern cryptography) thì có 2 loại chính gồm:

  • Mã hóa đối xứng: sử dụng cùng một khóa cho việc mã hóa và giải mã. Khóa này phải được người gửi và người nhận thỏa thuận, trao đổi từ trước.
  • Mã hóa bất đối xứng: có một cặp khóa có quan hệ về mặt toán học gọi là khóa công khai và khóa bí mật được dùng trong quá trình mã hóa và giải mã.
    • Nếu khóa công khai được dùng để mã hóa thì khóa bí mật liên kết với nó sẽ được dùng để giải mã.
    • Nếu khóa bí mật được dùng để mã hóa thì khóa công khai liên kết với nó sẽ được dùng để giải mã.
    • Khóa công khai sẽ được phân phát rộng rãi cho nhiều người biết nhưng khóa bí mật thường chỉ có chủ nhân của cặp khóa mới biết được.

Các thuật toán và khóa

Hai đầu vào cần thiết cho việc mã hóa dữ liệu là:

  • Thuật toán: định nghĩa cách thức dữ liệu được chuyển đổi từ bản thô (plaintext) sang bản mã (ciphertext) như thế nào và ngược lại. Cả hai quá trình mã hóa và giải mã đều phải sử dụng cùng một thuật toán.
  • Khóa: là đầu vào cho thuật toán để thực hiện mã hóa bản rõ thành bản mã hoặc giải mã bản mã ra bản rõ.

Tất cả các ứng dụng cần quyết định xem những đầu vào này được phân phối tới hoặc thống nhất như thế nào giữa bên mã hóa và bên giải mã. Chi tiết về thuật toán không cần thiết phải được giữ bí mật mà còn được khuyến khích công bố để giới nghiên cứu và chuyên gia cùng phân tích và cải tiến nó. Nhưng rõ ràng khóa cần được xem là một rủi ro an ninh và phải được giữ kín và có độ khó đủ lớn.

Một ứng dụng có chức năng mã hóa cần làm những việc sau:

  • Nhận diện các thuật toán mà nó hỗ trợ: trong trường hợp có nhiều thuật toán được hỗ trợ thì ứng dụng phải có cơ chế thỏa thuận với bên còn lại để sử dụng thuật toán mạnh nhất mà cả hai cùng hỗ trợ.
  • Tạo một khóa làm đầu vào cho thuật toán: trong hoàn cảnh tốt nhất thì khóa chỉ được dùng một lần cho một quá trình mã hóa và giải mã hoặc một phiên truyền thông. Việc sử dụng lại khóa sẽ giúp kẻ tấn công dễ dàng hơn để xác định khóa thông qua một phương pháp là differential cryptanalysis. Phương pháp này cho phép kẻ tấn công tìm ra khóa mã hóa bằng cách cung cấp thuật toán và một vài mẫu bản mã được tạo ra bởi khóa này.
  • Xác định cách thức phân phối khóa: khóa phải được thỏa thuận giữa bên mã hóa và bên giải mã thông qua một môi trường, cách thức đảm bảo an toàn. Nó phải được bảo vệ trước nguy cơ bị chụp lại và đọc trộm trong quá trình truyền nhận qua mạng hoặc chống lại nguy cơ bị giải mã nếu nó ở trong trạng thái được mã hóa.

Mã hóa dữ liệu

Mã hóa giúp bảo vệ dữ liệu trước việc bị đọc được bởi những người không được phép. Phần này sẽ mô tả quá trình kỹ hơn cách thức mã hóa đối xứng và mã hóa bất đối xứng và một số ứng dụng kết hợp cả hai quá trình này như thế nào

Mã hóa đối xứng

Như đã được nói ở trên, mã hóa đối xứng sử dụng một cùng khóa cho việc mã hóa và giải mã như được thể hiện trong hình dưới đây:

Các thuật toán dùng cho mã hóa đối xứng có thể mã hóa một lượng lớn dữ liệu trong khoảng thời gian ngắn do chỉ dùng một khóa và thực tế thì các thuật toán mã hóa đối xứng đơn giản hơn so với các thuật toán mã hóa bất đối xứng.

Khi dữ liệu được mã hóa bằng thuật toán đối xứng, hệ thống sẽ tạo khóa có giá trị ngẫu nhiên. Chiều dài của khóa thường được biểu diễn bằng số lượng các bit và được quy định bởi thuật toán và ứng dụng sử dụng thuật toán đó.

Sau khi khóa đối xứng được khởi tạo, nó sẽ được dùng để mã hóa bản rõ thành bản mã. Bản mã này sau đó được gửi tới hoặc được truy cập bởi người nhận dữ liệu.

Lưu ý là khóa đối xứng này phải được bảo vệ kỹ càng trong quá trình khởi tạo, lưu trữ hay truyền đi vì nếu nó bị lộ thì kẻ tấn công có thể dễ dàng giải mã tất cả các dữ liệu được mã hóa bằng khóa này.

Khi người nhận nhận được bản mã thì nó sẽ dùng khóa đối xứng đã biết cùng với thuật toán được thỏa thuận từ trước để tiến hành giải mã dữ liệu về lại định dạng bản rõ ban đầu.

Các thuật toán phổ biến được dùng trong mã hóa đối xứng là:

  • Data Encryption Standard (DES): là thuật toán mã khối (block cipher) nhận vào một khối bản rõ có kích thước 64 bit và một khóa có chiều dài 56 bit, rồi xuất ra một khối bản mã có kích thước 64 bit.
  • Data Encryption Standard XORed (DESX): là một biến thể của DES và mạnh hơn DES. Thay vì trực tiếp mã hóa bản rõ, thì đầu tiên bản rõ được xử lý thông qua một hàm XOR (Exclusive Or) sử dụng một khóa phụ thêm có chiều dài 64 bit. Dữ liệu nhận được sau đó được mã hóa bằng thuật toán DES. Tiếp tục, đầu ra của thuật toán DES lại được biến đối thông qua một hàm XOR với một khóa có chiều dài 64 bit khác. Điều này giúp bảo vệ dữ liệu chống lại kiểu tấn công dò tìm khóa dựa trên chiều dài tương đối ngắn của khóa DES (56 bit).
  • Rivest’s Cipher version 2 (RC2) (40 bit): là thuật toán mã khối có chiều dài khóa thay đổi. Khối đầu tiên có kích thước 64 bit sử dụng thêm một chuỗi 40 bit được gọi là salt. Giá trị salt này được gắn vào khóa mã hóa, khóa mã hóa mới này sau đó được dùng để mã hóa bản rõ.
  • RC2 (128 bit): là một biến thể của RC2 (40 bit) với chiều dài của salt được tăng thêm 88 bit.
  • RC4: là thuật toán mã dòng (stream cipher) có chiều dài khóa thay đổi. Khác với các thuật toán mã khối, hoạt động của mã dòng tác động lên từng byte. Thuật toán RC4 dựa trên cơ chế hoán vị ngẫu nhiên và thường được dùng để mã hóa các lưu lượng đến và đi từ các website có áp dụng giao thức SSL.
  • Triple DES (3DES): là một biến thể của thuật toán DES trong đó DES được áp dụng ba lần đối trên cùng một bản rõ. Đầu tiên bản rõ được mã hóa bằng khóa A, được giải mã bằng khóa B, và được mã hóa tiếp bằng khóa C. Một hình thức phổ biến của 3DES là chỉ dùng hai khóa: bản rõ được mã hóa bằng khóa A, được giải mã bằng khóa B và được mã hóa lại bằng khóa A.
  • Advanced Encryption Standard (AES): được phát triển để thay thế cho DES. Thay vì dùng khóa chỉ dài 56 bit như DES, AES có thể dùng khóa có chiều dài 128 bit, 192 bit hoặc 256 bit. AES sử dụng thuật toán Rijndael và có thể mã hóa dữ liệu chỉ với một lần thay vì ba lần như 3DES.

Mã hóa bất đối xứng

Sử dụng hai khóa khác nhau nhưng có quan hệ về mặt toán học được biết đến như là khóa công khai và khóa bí mật, mã hóa bất đối xứng giúp tăng cường an toàn cho quá trình mã hóa vì khóa bí mật chỉ được nắm giữ bởi người dùng hoặc máy tính đã tạo ra cặp khóa. Khóa công khai được phân phát tới bất kỳ ai muốn gửi dữ liệu được mã hóa cho người nắm giữ khóa bí mật. Nếu dùng một khóa để mã hoá thì chỉ có thể dùng khóa còn lại để giải mã và độ phức tạp của thuật toán mã hóa bất đối xứng làm cho quá trình mã hóa chậm hơn. Các nghiên cứu đã chỉ ra rằng mã hóa đối xứng nhanh hơn ít nhất 100 lần so với mã hóa bất đối xứng khi sử dụng phần mềm làm phương tiện mã hóa và có thể nhanh gấp 10 nghìn lần khi sử dụng phần cứng.

Khi mã hóa dữ diệu bằng mã hóa bất đối xứng, cặp khóa được dùng được sở hữu bởi người nhận dữ liệu. Điều này đảm bào rằng chỉ có người nhận mới là người có khóa bí mật để giải mã dữ liệu. Hình dưới đây thể hiện hoạt động của mật mã bất đối xứng:

  1. Bên gửi dữ liệu nhận được khóa công khai của bên nhận. Khóa này có thể được lấy từ dịch vụ như Active Directory Domain Services.
  2. Bản rõ của dữ liệu được truyền vào cho thuật toán mã hóa bất đối xứng và sử dụng khóa công khai của bên nhận làm khóa mã hóa để tạo ra bản mã của dữ liệu.
  3. Bản mã sau đó được chuyển tới cho bên nhận. Sẽ không cần gửi khóa nào vì bên nhận đã có sẵn khóa bí mật cần thiết để giải mã bản mã.
  4. Bên nhận giải mã bản mã sử dụng khóa bí mật của họ để được bản rõ gốc được tạo bởi bên gửi dữ liệu.

Hiếm khi người ta chỉ dùng một thuật toán mã hóa bất đối xứng mà thường thì dữ liệu được mã hóa bằng một thuật toán đối xứng và sau đó khóa mã hóa đối xứng được mã hóa, bảo vệ bởi thuật toán mã hóa bất đối xứng. Sự kết hợp giữa hai kiểu mã hóa này sẽ được đề cập chi tiết ở phần sau.

Ba thuật toán phổ biến được dùng trong mã hóa bất đối xứng là:

  • Diffie-Hellman: thuật toán này không dựa trên việc mã hóa và giải mã mà dựa vào các hàm toán học để tạo ra một khóa bí mật mà bên gửi và nhận sẽ dùng chung để trao đổi thông tin bí mật cho nhau. Về cơ bản, khi áp dụng thuật toán này thì hai bên sẽ thỏa thuận cùng một giá trị công khai (v) và một số nguyên tố lớn (p). Ngoài ra, mỗi bên còn chọn một giá trị bí mật cho riêng mình. Ba giá trị này sẽ được mỗi bên dùng để tạo một giá trị công khai khác mà được gửi qua cho đối phương. Hai giá trị công khai này được dùng để tính toán ra một khóa bí mật dùng chung được cả hai bên dùng để mã hóa dữ liệu gửi cho nhau.
  • Rivest Shamir Adleman (RSA): thuật toán này được dùng để mã hóa và ký lên dữ liệu. Các quá trình mã hóa và ký số được thực hiện thông qua một loạt các bước chia lấy dư. Độ an toàn của RSA có thể được tăng cường khi sử dụng khóa có độ dài lớn từ 1024 bit trở lên. Tất nhiên, điều này sẽ làm quá trình ký và mã hóa bị chậm đi.
  • Digital Signature Algorithm (DSA): thuật toán này chỉ có thể được dùng để ký số dữ liệu, nó không thể được dùng để mã hóa. Quá trình ký bằng DSA được thực hiện thông qua một loạt các bước tính toán dựa trên một số nguyên tố được chọn. Mặc dù dụng ý ban đầu chiều dài tối đa của khóa là 1024 bit nhưng giờ đây DSA đã hỗ trợ chiều dài khóa dài hơn.

–manthang

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s