So sánh mã hóa khóa cá nhân và mã hóa khóa công khai

Trước khi bắt đầu bài đọc này, bạn nên đọc bài viết trước của series để có những kiến thức cơ bảnvề cách chúng ta có những chuỗi hash sử dụng trong blockchain

//viblo.asia/p/de-bat-dau-tim-hieu-ve-blockchain-hay-hoc-ve-hasing-functionham-bam-GrLZDR825k0

Một số khái niệm cơ bản

  • Mã hóa [Encryption]: Là quá trình chuyển đổi thông tin từ dạng thông thường [có thể đọc được] ví dụ như 1 đoạn text, 1 con số nào đó sang dạng không đọc được [một đoạn mã hóa], nhằm bảo mật thông tin.
  • Giải mã [Decryption]: Là quá trình ngược của mã hóa - chuyển đổi từ thông tin đã mã hóa về thông tin ban đầu.
  • Khóa [Key]: Là một đoạn thông tin được sử dụng để mã hóa và/hoặc giải mã.

Mã hóa khóa đối xứng [Symmetric-key cryptography]

Là một phương pháp mã hóa trong đó một khóa giống nhau sẽ vừa được dùng để mã hóa, vừa được dùng để giải mã các tệp tin.

Cách thức hoạt động

Một sơ đồ mã hóa đối xứng thường sử dụng một khóa đơn được chia sẻ giữa 2 hoặc nhiều người dùng với nhau. Khóa duy nhất này sẽ được dùng cho cả 2 tác vụ mã hóa và giải mã các văn bản thô [các tin nhắn hoặc mảnh dữ liệu cần được mã hóa]. Quá trình mã hóa bao gồm việc chạy văn bản thô [đầu vào] thông qua một thuật toán mã hóa còn gọi là mật mã [cipher] sẽ lần luợt tạo ra các bản mã - ciphertext [đầu ra].

Khi sơ đồ mã hóa đủ mạnh thì cách duy nhất để đọc và truy cập được các thông tin chứa trong các bản mã là sử dụng khóa tương ứng để giải mã. Quá trình giải mã về cơ bản sẽ chuyển đổi các bản mã trở về dạng văn bản thô ban đầu.

Mức độ bảo mật của các hệ thống mã hóa đối xứng sẽ phụ thuộc vào độ khó trong việc suy đoán ngẫu nhiên ra khóa đối xứng theo hình thức tấn công brute force. Lấy ví dụ, để dò ra mã hóa của 1 khóa 128-bit thì sẽ mất tới vài tỷ năm nếu sử dụng các phần cứng máy tính thông thường. Thông thường, các khóa có độ dài tới 256-bit có thể được xem là có độ bảo mật cao tuyệt đối, có khả năng chống lại được hình thức tấn công brute force từ các máy tính lượng tử.

Ưu điểm

Ưu điểm của các phương pháp này là đơn giản, tốc độ cao, mang lại hiệu quả tốt nếu bạn không chia sẻ khóa của mình cho người khác.

Nhược điểm

Để có thể trao đổi thông tin bí mật với nhau, hai bên phải thống nhất với nhau trước về khóa bí mật.

=> Bài toán đặt ra là làm sao có thể đảm bảo việc gửi khóa cho nhau là bí mật.

  • Nếu các khóa này được chia sẻ lên các kết nối không an toàn thì nguy cơ bị can thiệp bởi một bên thứ 3 là rất lớn. Khi một người dùng không được ủy quyền chiếm được quyền truy cập một khóa đối xứng thì mọi dữ liệu được mã hóa bằng khóa đó sẽ bị xâm phạm.
  • Do bên gửi và nhận sử dụng chung khóa, chúng ta không thể xác định được nguồn gốc của một thông điệp [message] là do ai gửi.

Mã hóa khóa công khai [Public-key cryptography]

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 bí mật [theo Wikipedia]. Do đó, Mã hóa khóa công khai sinh ra để xử lý nhược điểm về truyền tải khóa chung của Mã hóa đối xứng

Cách thức hoạt động

Cặp khóa công khai và khóa bí mật

Chọn một số ngẫu nhiên lớn để sinh cặp khóa.

Khác với mã đối xứng, mã hóa khóa bất đối xứng sử dụng một cặp khóa: khóa công khai [public key] và khóa bí mật [private key]. Hai khóa này được xây dựng sao cho từ một khóa, rất khó có cách sinh ra được khóa còn lại. Một khóa sẽ dành để mã hóa, khóa còn lại dùng để giải mã. Chỉ có người sở hữu nắm được khóa bí mật trong khi khóa công khai được phổ biến rộng rãi.

Cách hoạt động

  • Người nhận sẽ tạo ra một gặp khóa [public key và private key], họ sẽ giữ lại private key và truyền cho bên gửi public key. Vì public key này là công khai nên có thể truyền tự do mà không cần bảo mật.
  • Trước khi gửi tin nhắn, người gửi sẽ mã hóa dữ liệu bằng mã hóa bất đối xứng với những key nhận được từ người nhận [khóa công khai]
  • Người nhận sẽ giải mã dữ liệu nhận được bằng thuật toán được sử dụng ở bên người gửi, với key giải mã là private key. ==> Ta có thể đảm bảo rằng, với dữ liệu đã được mã hóa gửi qua internet, thì chỉ có người nhận với private key mới có thể giải mã và đọc nội dung

Bổ sung thêm cho mô hình

  • Ở mô hình bổ sung này, Chúng ta có thêm 1 phần đó là sử dụng cặp khóa công khai và private của người gửi, chi tiết như sau:
  • Người gửi sẽ sử dụng private key của mình để mã hóa dữ liệu lần 1 sau đó mới dùng public key của người nhận để mã hóa lần 2 rồi mới gửi chuỗi mã hóa tới người nhận
  • Ở bên người nhận, họ cũng sẽ cần giải mã 2 lần, lần 1 là private key của chính họ và lần cuối là dùng public key của người gửi => Với cách làm này, ta có thể xử lý được thêm 1 vấn đề trong mã hóa đối xứng đó là có thể xác định được, chính Bob mới là người gửi gói tin chứ không phải ai khác vì ta dùng public key của Bob mới có thể giải mã được tập tin

Ưu điểm

  • Mã hóa bất đối xứng an toàn hơn vì nó sử dụng các key khác nhau cho quá trình mã hóa và giải mã. Nó đảm bảo việc xác minh ai là người gửi gói tin đồng thời cũng đảm bảo việc người đọc được gói tin sẽ là người nhận chứ không phải bên thứ 3

Nhược điểm

  • Mã hóa bất đối xứng mất nhiều thời gian hơn để thực hiện do logic phức tạp liên quan. Vì lý do này, mã hóa đối xứng vẫn được ưu tiên sử dụng khi truyền dữ liệu hàng loạt.
  • Tồn tại khả năng một người nào đó có thể tìm ra được khóa bí mật. Không giống với hệ thống mật mã sử dụng một lần [one-time pad] hoặc tương đương, chưa có thuật toán mã hóa khóa bất đối xứng nào được chứng minh là an toàn trước các tấn công dựa trên bản chất toán học của thuật toán.
  • Một điểm yếu tiềm tàng trong việc sử dụng khóa bất đối xứng là khả năng bị tấn công dạng kẻ tấn công đứng giữa [man in the middle attack]: kẻ tấn công lợi dụng việc phân phối khóa công khai để thay đổi khóa công khai. Sau khi đã giả mạo được khóa công khai, kẻ tấn công đứng ở giữa 2 bên để nhận các gói tin, giải mã rồi lại mã hóa với khóa đúng và gửi đến nơi nhận để tránh bị phát hiện. Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp trao đổi khóa an toàn nhằm đảm bảo nhận thực người gửi và toàn vẹn thông tin. Một điều cần lưu ý là khi các chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục [hay bắt buộc] nhà cung cấp chứng thực số xác nhận một khóa giả mạo và có thể đọc các thông tin mã hóa.

Kết luận

Xin cảm ơn bạn đã quan tâm đến bài viết này, chúc bạn sẽ có được những kiến thức cơ bản về mã hóa công khai được sử dụng trong blockchain. Phần tiếp theo, tôi nghĩ chúng ta nên tìm hiểu thêm về 1 thuật toán trong mã hóa công khai đó là RSA và một khái niệm là Digital signatures, mời các bạn đón đọc!

//academy.binance.com/vi/articles/what-is-symmetric-key-cryptography //vi.wikipedia.org/wiki/Mật_mã_hóa_khóa_công_khai

Việc giữ bí mật khóa mật đồng nghĩa với việc giữ mật thông tin. Nên việc trao đổi khóa chỉ diễn ra trên kênh mật thì mới đảm bảo được, thế nhưng việc trao đổi này cung không phải dễ để đảm bảo độ an toàn cao. Từ đây hình thành nên ý tưởng của mật mã công khai. Tức là không cần phải trao đổi khóa mật qua kênh nữa.

Ý tưởng của hệ mật công khai được Diffie và Hellman đưa ra năm 1976. Còn việc thực hiện hệ mật công khai thì do Rivest, Shamir và Adleman đưa ra đầu tiên năm 1977, họ đề xuất một hệ mật RSA nổi tiếng. Và kể từ đó có một số hệ mật khác được công bố, độ mật của chúng dựa trên bài tính toán khác nhau, như dựa trên độ khó của bài toán phân tích thành nhân tử như hệ mật RSA, dựa vào độ khó logarithm rời rạc như hệ mật ElGamal, hay dựa trên đường cong Elliptíc. Chúng ta đi tìm hiểu cụ thể các hệ mật này trong các phần sau. Nhưng trước tiên chúng ta đi tìm hiểu sơ đồ và nguyên tắc mã và giải mã của hệ mật công khai.

Sơ đồ của hệ mã công khai được cho ở hình sau:

Hệ mã công khai sử dụng hai khóa có quan hệ toán học với nhau, tức là một khóa này được hình thành từ khóa kia: Người muốn nhận bản mã [Alice] tạo ra một khóa mật [private key] và từ khóa mật tính ra khóa công khai [public key] với một thủ tục không phức tạp, còn việc tìm khóa mật khi biết khóa công khai là bài toán khó giải được. Khóa công khai sẽ đưa đến cho người gởi bản tin [Bob] qua kênh công cộng. Và bản tin được Bob mã hóa bằng khóa công cộng. Bản mã truyền đến Alice, và nó được giải mã bằng khóa mật.

2. Hệ mật RSA

Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện Công nghệ Massachusetts [MIT]. Tên của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn.

Thuật toán RSA được MIT đăng ký bằng sáng chế tại Hoa Kỳ vào năm 1983 [Số đăng ký 4,405,829]. Bằng sáng chế này hết hạn vào ngày 21 tháng 9 năm 2000. Tuy nhiên, do thuật toán đã được công bố trước khi có đăng ký bảo hộ nên sự bảo hộ hầu như không có giá trị bên ngoài Hoa Kỳ. Ngoài ra, nếu như công trình của Clifford Cocks đã được công bố trước đó thì bằng sáng chế RSA đã không thể được đăng ký.

Thuật toán dựa trên độ khó của bài toán phân tích một số thành nhân tử.

b. Quá trình tạo khóa cho hệ mật RSA.

Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không an toàn [ví dụ như Internet]. Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo 6 bước sau:

Quá trình mã hóa:

Quá trình giải mã:

c. Một số chú ý quan trọng về RSA

An ninh: Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA. Nếu 2 bài toán trên là khó [không tìm được thuật toán hiệu quả để giải chúng] thì không thể thực hiện được việc phá mã toàn bộ đối với RSA. Phá mã một phần phải được ngăn chặn bằng các phương pháp chuyển đổi bản rõ an toàn. Bài toán RSA là bài toán tính căn bậc e môđun n [với n là hợp số]: tìm số m sao cho me=c mod n, trong đó [e, n] chính là khóa công khai và c là bản mã. Hiện nay phương pháp triển vọng nhất giải bài toán này là phân tích n ra thừa số nguyên tố. Khi thực hiện được điều này, kẻ tấn công sẽ tìm ra số mũ bí mật d từ khóa công khai và có thể giải mã theo đúng quy trình của thuật toán. Nếu kẻ tấn công tìm được 2 số nguyên tố p và q sao cho: n = pq thì có thể dễ dàng tìm được giá trị [p-1][q-1] và qua đó xác định d từ e. Trong chương số học chúng ta đã biết chưa có một phương pháp nào được tìm ra trên máy tính để giải bài toán này trong thời gian đa thức [polynomial-time]. Tuy nhiên người ta cũng chưa chứng minh được điều ngược lại [sự không tồn tại của thuật toán].

Tốc độ: RSA có tốc độ thực hiện chậm hơn đáng kể so với các thuật toán mã hóa đối xứng. Trên thực tế, Bob sử dụng một thuật toán mã hóa đối xứng nào đó để mã hóa văn bản cần gửi và chỉ sử dụng RSA để mã hóa khóa để giải mã [thông thường khóa ngắn hơn nhiều so với văn bản]. Phương thức này cũng tạo ra những vấn đề an ninh mới. Một ví dụ là cần phải tạo ra khóa đối xứng thật sự ngẫu nhiên. Nếu không, kẻ tấn công [thường ký hiệu là Eve] sẽ bỏ qua RSA và tập trung vào việc đoán khóa đối xứng.

Chiều dài khóa: Số n cần phải có kích thước không nhỏ hơn 512 bít. Năm 2006 hệ mật RSA được cho là hiệu quả với kích thước n phải từ 1024. Và họ khuyến cáo là tương lai thì chiều dài n phải từ 2024 bít.

Chọn tham số công khai:

Để nâng cao tốc độ mã hóa, thì chúng ta nên chọn e với giá trị không lớn, thường là 3, 7 hay 65537. Các số này khi biểu diễn ở dạng nhị phân chỉ có 2 chữ số 1, nên khi thực hiện lệnh lũy thừa sẽ giảm đi lệnh nhân.

Chọn tham số mật.

3. Hệ mật Elgama

Hệ mật Elgama hình thành trên cơ sở bài toán logarith rời rạc. Được đề xuất năm 1984. Sau đó chuẩn chữ ký điện tử của Mỹ và Nga hình thành trên cơ sở hệ mật này.

a. Hình thành khóa:

b. Quá trình mã hóa bản tin T:

c. Quá trình giải mã:

4. Hệ mật Rabin

Đây là hệ mật dựa trên độ phức tạp của việc tính căn bậc hai theo hợp số. Đây là hệ mật có độ an toàn về mặc tính toán chống lại được tấn công bản rõ lựa chọn và không có khả năng phân tích được n=pq. Thuật toán được ứng dụng rất nhiều trong thực tế.

a. Thuật toán hệ mật Rabin

Quá trình tạo khóa:

Quá trình mã hóa:

Qúa trình giải mã:

Chúng ta chứng minh thuật toán xxx này là một hệ mật, có nghĩa là quá trình giải mã được thực hiện bởi Alice sẽ khôi phục lại bản rõ được mã hóa bới Bob.

Giải phương trình bậc 2, chúng ta có nghiệm chung dạng:

5. Hệ mật Merkle-hellman

Hệ mật xếp ba lô Merkle-hellman được Merkle-hellman miêu tả năm 1978. Hệ mật này bị phá vở năm 1980, sau đó có một số biến thể của nó ra đời. Mặc dầu nó bị phá nhưng nó cho chúng ta thấy một sự tinh tế trong thiết kế hệ mật. Bài toán này dựa trên bài toán tổng các tập con. Bài toán được phát biểu như sau

a. Bài toán về tổng các tập con.

Dựa trên thực giải này Merle-Hellman đi xây dựng thuật toán của mình. Ý tưởng thuật toán là, dùng dãy siêu tăng để giải mã, và giải mã bằng một dãy không phải siêu tăng, tức là dãy siêu tăng đóng vai trò là khóa mật, còn dãy không siêu tăng đóng vai trò là khóa công cộng. Từ đây họ đưa ra cách để biến dãy siêu tăng thành dãy không có tính đó, và việc tìm dãy siêu tăng theo khóa công cộng là bài toán khó. Một cách biến đổi mà Merle-Hellman nêu ra là biến đổi dãy siêu tăng theo modulo nguyên tố p, sao cho:

b. Hệ mật Herkle-Hellman

Quá trình mã hóa:

Quá trình giải mã.

6. Hệ mật McEliece

Hệ mật McEliece được đề xuất năm 1978, tác giả của nó là Robert McEliece. Ý tưởng của bài toán này giống với ý tưởng của hệ mật Merkle-Hellman: Phép giải mã là trường hợp đặc biệt của bài toán NP đầy đủ.

Để hiểu được hệ mật này các bạn phải nắm được kiến thức cơ bản về lý thuyết cơ bản về truyền tin, thông tin.

a. Quá trình hình thành khóa:

b. Quá trình mã hóa:

c. Quá trình giải mã:

7. Hệ mật bất đối xứng trên cơ sỡ đường cong Elliptic

a. Quá trình mã hóa:

b. Quá trình giải mã:

Video liên quan

Chủ Đề