Mã hóa mật mã: các khái niệm cơ bản

Mã hóa mật mã: các khái niệm cơ bản

5/5 - (1 bình chọn)

Theo yêu cầu của người đọc blog, hôm nay chúng tôi websitehcm.com bắt đầu viết các blog về Mã hóa mật mã, hi vọng những kiến thức nhỏ nhoi của chúng tôi có thể góp phần vào việc nâng cao kiến thức của người dùng. Từ xưa đến nay, mã hóa luôn là một lĩnh vực quan trọng trong cả chiến tranh kéo dài đến hiện đại. Những người dùng hiện nay, thường bỏ qua các vấn đề này trong thực tế mà không biết rằng mã hóa đang được sử dụng hằng ngày, và đang góp phần vào cuộc sống mà mấy ai biết. Hôm nay chúng ta hãy cùng tìm hiểu về chuyên mục Mã hóa mật mã và ứng dụng.

Bài viết đầu tiên chúng tôi cung cấp tổng quan về các kiến thức cơ bản trong Mã hóa mật mã. Hi vong qua bài viết này các bạn hiểu rõ hơn về kiến thức này.

Các bài viết liên quan:

Mã hóa là gì? Giải mã là gì?

Mã hóa là gì?

Mã hóa là một phương pháp biến thông tin, dữ liệu(video, ảnh, text,…) từ định dạng có thể đọc được thành dữ liệu, thông tin không thể hiểu được nếu không có phương tiện giải mã.

Giải mã là gì?

Giải mã là phương pháp ngược lại của mã hóa, là phương pháp biến thông tin, dữ liệu(video, ảnh, text,..) từ định dạng không thể hiểu được thành dữ liệu ban đầu trước khi mã hóa.

Một hệ thống mã hóa bao gồm cái gì?

  • Thông tin trước mã hóa được gọi là thông tin (video, ảnh, text,…) có kí hiệu là P( plaintext)
  • Thông tin sau quá trình mã hóa thành dữ liệu không đọc được có kí hiệu C (ciphertext)
  • Chìa khóa mã hóa kí hiệu là KE, chìa khóa giải mã ký hiệu KD
  • Thuật toán mã hóa và giải mã ký hiệu là E và D
  • Quá trình mã hóa là quá trình áp dụng thuật toán E lên dữ liệu ban đầu P và tạo thành dữ liệu đã mã hóa C
  • Quá trình giải mã là quá trình áp dụng thuật toán giải mã D lên dữ liệu đã mã hóa C và tạo thành dữ liệu có thể đọc được là P

Các khái niệm khác

Mật mã học là chuyên ngành khoa học máy tính chuyên nghiên cứu về nghiên lý phương pháp mã hóa. Hiện nay người ta còn đưa ra các chuẩn an toàn thông tin cho các lĩnh vực khác nhau.

Thám mã là ngành nghiên cứu về giải mã các hệ thống mã hóa mà thường là không biết khóa bí mật K. Thông thường khi một chuẩn mã hóa được đưa ra, thì người thám mã cùng với người phát triển mã hóa đều sử dụng các phương pháp thám mã để kiểm nghiệm sự an toàn của hệ mã.

Lý thuyết mã là bao gồm cả mật mã học và thám mã để đánh giá một hệ mã có mạnh hay không

Mã hóa đối xứng là gì?

Mã hóa đối xứng là loại mã hóa sử dụng một key duy nhất để mã hóa và giải mã

Hệ thống mã hóa đối xứng bao gồm:

  1. Văn bản cần mã hóa P
  2. Khóa để mã hóa và giải mã K
  3. Thuật toán Mã hóa E
  4. Thuật toán giải mã D
  5. Với C là văn bản sau khi mã hóa
  6. EK(P) =C và DK(C) = P
Mã hóa mật mã: các khái niệm cơ bản

Mã hóa đối xứng có các đặc điểm sau:

Một mã đối xứng có các đặc trưng là cách xử lý thông tin của thuật toán mã hóa, giải mã, tác động của khóa vào bản mã, độ dài của khóa.

Mối liên hệ giữa bản rõ, khóa và bản mã thông qua thuật toán càng phức tạp càng tốt.

Thuật toán mã hoá mạnh: Có cơ sở toán học vững chắc đảm bảo rằng dù công khai thuật toán, nhưng việc thám mã là rất khó khăn và phức tạp nếu không biết khóa.

Khoá được giữ bí mật: Chỉ có người gửi và người nhận biết. Có kênh an toàn để phân phối khoá giữa các người sử dụng chia sẻ khóa. Mối liên hệ giữa khóa và bản mã là không nhận biết được.

Mã hóa đối xứng thuật toán được chia làm 2 loại: Stream cipher, và block cipher

Nhược điểm của loại mã này là khó khăn trong việc trao đổi khóa bí mật.

Mã hóa bất đối xứng là gì?

Mật mã hóa khóa công khai là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó.

Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai và khóa cá nhân.

Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương đương. Có những thuật toán mật mã khóa bất đối xứng không có tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều cần phải giữ bí mật

Hệ thống mã hóa đối xứng bao gồm cái gì:

  1. Mã hóa đối xứng là loại mã hóa sử dụng một khóa K public cho việc mã hóa và khóa K private để giải mã
  2. Với P là văn bản cần được mã hóa (plaintext)
  3. Với Kp là khóa share và Ks là khóa bí mật
  4. Với E là thuật toán mã hóa
  5. Với D là thuật toán giải mã
  6. Với C là bản mã hóa của P thì
  7. C=EKp (P)  và P=DKs ©
Mã hóa mật mã: các khái niệm cơ bản

Hệ thống mật mã hóa khóa công khai dùng làm gì:

Mã hóa: giữ bí mật dữ liệu và đảm bảo chỉ có người có khóa bí mật mới giải mã và đọc được dữ liệu.

Tạo chữ ký số: cho phép kiểm tra văn bản định danh.

Thỏa thuận khóa: cho phép thiết lập khóa, dùng để trao đổi thông tin khóa bí mật của hệ thống mã hóa đối xứng.

Hashing function

Hash function là giải thuật nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ liệu (có thể là một chuỗi ký tự, một đối tượng trong lập trình hướng đối tượng, v.v…).

Giá trị băm đóng vai gần như một khóa để phân biệt các khối dữ liệu, tuy nhiên, người ta chấp hiện tượng trùng khóa hay còn gọi là đụng độ và cố gắng cải thiện giải thuật để giảm thiểu sự đụng độ đó.

Hash function thường được dùng để nhằm giảm chi phí tính toán khi tìm một khối dữ liệu trong một tập hợp dữ liệu(nhờ việc so sánh các giá trị băm, giá trị nhỏ hơn, nhanh hơn việc so sánh dữ liệu nguyên bản có kích thước lớn).

Hàm băm mật mã hiện nay được sử dụng rộng rãi(https, blockchain).

Một số tính chất của Hash function

  1. Tính toán nhanh.
  2. Các khoá được phân bố đều.
  3. Ít xảy ra đụng độ.
  4. Xử lý được các loại kiểu dữ liệu khác nhau.
  5. Hash function là một hàm một chiều
  6. Một số hàm băm được sử dụng hiện nay như: MD5, SHA-224, SHA-256, SHA-384, SHA-512, …

Cách tấn công vào hệ thống mã hóa

Tấn công dùng thuật toán: dựa trên thuật toán và một số đặc trưng của ciphertext và plaintext. Kiểu tấn công này tấn công vào đặc trưng của thuật toán để tìm plaintext cụ thể hoặc tìm khóa.

Tấn công brute force: kẻ tấn công tìm cách thử tất cả mọi khóa có thể trên ciphertext cho đến khi thành công nhận được plaintext.

Tấn công side channel:

Độ an toàn của mã hóa chia làm 2 loại: an toàn không điều kiện, và độ an toàn thời gian tính toán

Độ an toàn của hệ thống mật mã

Một hệ thống mật mã được coi là an toàn khi nó có thể chịu đựng được nhiều cuộc tấn công thám mã.

Dưới đây chúng ta sẽ khảo sát một số kiểu tấn công thám mã phổ biến. Các kiểu tấn công này được phân loại dựa trên lượng thông tin mà kẻ thám mã có thể có được để tấn công.

Để minh hoạ, ta gọi kẻ tấn công là T:

  1. T chỉ biết văn bản mã: (Ciphertext-only attack)
  2. T biết một vài giá trị c1, c2,… với: c1 = ek(p1), c2 = ek(p2), …
  3. T cần phục hồi p1, p2, … hoặc khóa k
  4. T biết vài cặp bản gốc-mã: (Known plaintext attack)
  5. T biết một vài cặp (p1, c1 = ek(p1)), (p2, c2 = ek(p2)), …
  6. T cần phục hồi khóa k
  7. T được phép chọn bản gốc (hoặc mã): (Chosen plaintext (or ciphertext) attack)
  8. T biết một vài cặp (p1, c1 = ek(p1)), (p2, c2 = ek(p2)), … và có thể chọn p1, p2, … (hoặc c1, c2, …) để thử chạy qua thuật toán
  9. T cần phục hồi khóa k
  10. T được chọn cả bản gốc và mã (Chosen plaintext – ciphertext attack)
  11. T biết một vài cặp (p1, c1 = ek(p1)), (p2, c2 = ek(p2)), … và có thể chọn p1, p2, … cũng như c1, c2, … để thử chạy qua thuật toán
  12. T cần phục hồi khóa k

Nếu việc thám mã thành công trong các trường hợp 1 hoặc 2 với chi phí hợp lý thì thuật toán mật mã được coi là yếu và không nên sử dụng.

Nếu thuật toán mật mã bị bẻ khoá với các trường hợp 3 và 4 thì thuật toán vẫn có thể coi là an toàn. Lý do là điều kiện cho chạy thuật toán với các dữ liệu đầu vào và đầu ra của mình chọn không phải lúc nào cũng dễ dàng thực hiện được.

Tấn công vét cạn(brutal force) trong mã hóa

Một kiểu tấn công khá phổ biến nữa là tấn công vét cạn khoá. Không gian khoá, mặc dù có thể rất lớn, nhưng là hữu hạn (nếu khoá có độ dài n bit thì số lượng khoá khác nhau có thể có sẽ là 2n).

Do vậy, người ta có thể sử dụng một hệ thống máy tính mạnh để thử lần lượt từng khoá cho đến khi tìm được khoá phù hợp. Đó là về mặt lý thuyết, còn trên thực tế, không gian khoá tăng theo cấp số nhân theo độ dài của khoá, do đó, chỉ cần khoá có độ dài lớn hơn một chút thì số lượng khoá sẽ tăng lên gấp nhiều lần.

Bảng sau đây cho thấy việc vét cạn khoá không thực sự dễ dàng.

Độ dài của khoá (bit)Thời gian test của máy A (1s/khoá)Thời gian test của máy B (1s/106 khoá)
3235,8 phút2,15 mili giây
406,4 ngày550 mili giây
561.140 năm10 giờ
64 ~500.000 năm107 ngày
128 5 * 1024 năm5*1018 năm

Giả sử chúng ta có hai máy để kiểm tra khoá.

Máy A có thể kiểm tra được 1 khoá trong 1 phần triệu giây.

Máy B có năng suất gấp 1 triệu lần máy A.

Nếu khoá mật mã có độ dài 32 bit thì không gian khoá sẽ có độ lớn là 2^32. Từ đó tính ra máy A sẽ kiểm tra hết số khoá trong vòng 35,8 phút.

Máy B sẽ kiểm tra hết khoá trong hơn 2 phần ngàn giây. Khi độ dài của khoá tăng lên thì số lượng khoá sẽ tăng theo cấp số nhân.

Ví dụ, khi khoá có độ dài 56 bit thì máy A sẽ cần 1.140 năm để kiểm tra hết các khoá. Ở đây chúng ta nhận thấy: về lý thuyết thì có thể dùng máy A để kiểm tra tất cả các khoá 56 bit nhưng trên thực tế thì không ai có khả năng bỏ ra 1.000 năm để kiểm tra cả.

Tuy nhiên, nếu dùng máy B thì việc kiểm tra đó chỉ trong vòng 10 giờ và hoàn toàn khả thi. Tuy vậy, khi độ dài khoá tăng lên đến 128 bit thì việc vét cạn như trên sẽ không còn ý nghĩa nữa đối với cả hai máy A và B.

Như vậy, có thể kết luận: thám mã bằng vét cạn trên lý thuyết luôn luôn có thể thực hiện được nhưng trên thực tế thì có thể không khả thi. Trường hợp này, thuật toán được coi là an toàn.

Kiểu an toàn như vậy, người ta gọi là an toàn tính toán.

Tóm lại, an toàn tính toán xảy ra khi với tài nguyên  tính toán hạn chế hiện tại (thời gian, tiền bạc,…), thuật mã hóa không thể bị bẻ khóa.

Tất cả các thuật toán mật mã tốt đều phải đáp ứng yêu cầu an toàn tính toán. Tuy nhiên, với sự tăng trưởng rất nhanh của các hệ thống tính toán, một thuật toán có thể là an toàn tính toán tại thời điểm này nhưng sẽ không còn an toàn sau một vài năm nữa.

Leave a Reply