Mật mã học là gì? Vì sao Cryptography lại đóng vai trò quan trọng trong cuộc sống hiện đại? Cùng tìm hiểu về Cryptography trong bài viết này nhé!
- Khi chúng ta nhắn tin với bạn bè trên các thiết bị điện tử, điều gì giúp tin nhắn của chúng ta đến được đúng người mà không bị một người thứ ba đọc được.
- Khi chúng ta thanh toán online, điều gì có thể đảm bảo rằng thông tin thẻ của chúng ta không bị đánh cắp bởi người khác.
- Khi chúng ta đăng nhập vào một hệ thống (google, facebook), liệu thông tin mật khẩu của chúng ta có bị người khác nhìn thấy ?
- Hay, bất cứ khi nào chúng ta sử dụng Internet, điều gì đảm bảo cho thông tin của chúng ta không bị thất lạc, sai lệch hay giả mạo ?
Cryptography (mật mã học) đóng vai trò cực kỳ quan trọng trong việc chuyển giao thông tin giữa các thiết bị điện tử. Bất cứ lúc nào chúng ta truy cập vào mạng máy tính, cryptography đều có mặt.
Hay nói cách khác cryptography is everywhere
.
1. Cryptography (Mật mã học) là gì?
Cryptography (Mật mã học) là việc thực hành và nghiên cứu cách thức trao đổi thông tin an toàn trong môi trường có sự hiện diện của hành vi đối nghịch.
Nói cách khác, cryptography là việc thực hành và nghiên cứu các giao thức trao đổi thông tin an toàn mà không bị bên thứ ba can thiệp và tổn hại.
Cryptography là một ngành có lịch sử rất lâu đời. Tuy nhiên, phần lớn trong lịch sử loài người, chúng ta chỉ che giấu thông tin một cách rất thô sơ và dễ đoán. Cryptography mới chỉ được phát triển mạnh trong vài chục năm trở lại đây.
Chữ "cryptography" bắt nguồn từ tiếng Hi Lạp, trong đó "kryptos" (ẩn giấu) và "graphein" (viết).
2. Mật mã học - Một số thuật ngữ cơ bản trong Cryptography
Một số thuật ngữ cơ bản của Cryptography bao gồm:
- Plaintext (Bản rõ): là thông tin ban đầu chưa được che giấu. Nó có thể ở dạng văn bản, hình ảnh, video hoặc bất kỳ định dạng khác. Plaintext có thể dễ dàng đọc và hiểu bởi bất kỳ ai có quyền truy cập vào nó nên nó cần được che dấu và bảo vệ.
- Ciphertext (Bản mã): Là kết quả của quá trình mã hoá plaintext, là dạng dữ liệu đã được che giấu. Ciphertext là vô nghĩa với các bên khác, ngoại trừ các bên trao đổi thông tin với nhau.
- Key (Khoá): Còn gọi là cryptographic key (khoá mật mã), là một mẩu thông tin dưới dạng chuỗi số hoặc chữ cái, được sử dụng trong quá trình mã hoá và giải mã. Key là thành phần tối quan trọng, cần được giữ kín. Nếu key bị lộ, bất kỳ ai có được key cũng có thể biết được nội dung của plaintext.
- Cipher: Là thuật toán dùng để má hoá và giải mã dữ liệu.
- Decipher (Phá mã): Là thuật toán dùng để tấn công vào ciphertext với mục tiêu tiếp cận đến plaintext mà không cần tới key.
- Encryption: Là quá trình mã hoá thông tin từ plaintext thành ciphertext sử dụng cipher và key phù hợp.
- Decryption: Là quá trình đưa ciphertext về plaintext sử dụng cipher và key phù hợp.
- Encrypt (Mã hoá): Là hành động biến plaintext thành dạng ciphertext.
- Decrypt (Giải mã): Là hành động đưa ciphertext về plaintext sử dụng cipher và key phù hợp.
3. Mục tiêu của Mật mã học là gì?
Về cơ bản, mục tiêu chính của cryptography bao gồm:
- Confidentiality (Tính bảo mật): Chỉ có các bên liên quan trong quá trình trao đổi, chủ sở hữu hoặc người có thẩm quyền mới có quyền truy cập vào các thông tin liên quan.
- Integrity (Tính toàn vẹn): Dữ liệu trong quá trình lưu trữ và trao đổi không được thay đổi hoặc bị mất.
- Authentication (Tính xác thực): Người nhận phải biết được thông điệp mà họ nhận được đến từ ai, và xác thực được danh tính người gửi.
- Non-repudiation (Tính chống chối bỏ): Người gửi không thể chối bỏ được thông điệp mà họ đã gửi. Người gửi sẽ phải chịu toàn bộ trách nhiệm với thông tin mà họ đã gửi.
Chúng ta có nhiều loại mã hoá, mỗi loại có mục tiêu khác nhau nên không phải bất cứ loại mã hoá nào cũng có thể đảm bảo được toàn bộ cả bốn tính chất trên. Cho nên, chúng ta thường sử dụng kết hợp các loại mã hoá khác nhau nhằm đưa hệ thống đạt ngưỡng an toàn tốt nhất. Ví dụ, mã hoá bất đối xứng được sử dụng trong quá trình trao đổi secret key của mã hoá đối xứng.
3. Các loại encryption (mã hoá)
3.1. Symmetric Encryption (mã hoá đối xứng)
Symmetric Encryption (mã hoá đối xứng), hay còn có tên khác là secret key encryption, là một loại kỹ thuật mã hoá sử dụng cùng một khoá cho cả quá trình mã hoá và giả mã. Do đó, người gửi và người nhận cần có một cách để chia sẻ và thống nhất khoá an toàn.
Một số ứng dụng của mã hoá đối xứng bao gồm:
- Che giấu dữ liệu: mã hoá đối xứng được dùng để che giấu các thông tin nhạy cảm, ví dụ như email, file.
- Chia sẻ tập tin: mã hoá đối xứng sử dụng như một cách che giấu thông tin an toàn khi chỉa sẻ trên mạng máy tính.
Ưu điểm lớn nhất của mã hoá đối xứng là tốc độ. Mã hoá đối xứng có tốc độ mã hoá và giải mã tốt hơn rất nhiều so với mã hoá bất đối xứng, nên nó thường được sử dụng để mã hoá file.
Nhược điểm lớn nhất của mã hoá đối xứng là cách chia sẻ key. Hai bên cần thống nhất sử dụng chung một key duy nhất một cách an toàn, điều này có thể gây ra một số rủi ro và có một số khó khăn nhất định.
Một số loại mã hoá đối xứng phổ biến hiện nay bao gồm:
- Data Encryption Standard (DES): DES là một mật mã khối sử dụng khóa 56 bit. Nó được phát hành lần đầu tiên vào năm 1977 và hiện không còn được coi là an toàn vì bị phá vỡ bởi thuật toán vét cạn (exhautive search), mà lý do khoá tương đối ngắn (56 bit). Hiện nay đã bị thay thế bằng AES.
- Triple DES (3DES): 3DES là một biến thể của DES sử dụng ba khóa. 3DES có độ dài khóa 112 bit hoặc 168 bit, do đó, nó an toàn hơn DES. Nó an toàn hơn DES nhưng cũng chậm hơn. Nhìn chung, 3DES là một thuật toán mã hóa an toàn và hiệu quả, nhưng nó không còn được coi là lựa chọn tốt nhất cho các ứng dụng bảo mật hiện đại.
- Advanced Encryption Standard (AES): AES là một mật mã khối sử dụng khóa 128 bit, 192 bit hoặc 256 bit, được coi là thuật toán mã hoá đối xứng an toàn nhất hiện có. Nó được phát triển bởi National Institute of Standards and Technology (NIST), và được sử dụng phổ biến trên toàn thế giới hiện nay.
3.2. Asymmetric Encryption (mã hoá bất đối xứng)
Asymmetric Encryption, hay có tên khác là public-key encryption (mã hoá công khai) là một loại kỹ thuật mã hoá sử dụng 2 key cho cả quá trình mã hoá và giải mã.
Hai key này đi thành cặp, bao gồm private key và public key. Private key sẽ được giữ bí mật, dùng để giải mã dữ liệu. Public key sẽ được chia sẻ với tất cả mọi người, dùng để dùng để mã hoá dữ liệu
Tuỳ thuộc vào cách sử dụng key, ta có hai chức năng chính như sau:
- Khi muốn trao đổi thông tin an toàn, sender sẽ sử dụng public key của receiver để encrypt thông tin và gửi đi. Sau đó, receiver sẽ lấy private key của mình để decrypt thông tin, khi đó, thông tin đã được trao đổi thành công và an toàn.
- Trường hợp ngược lại sử dụng secret key để encrypt và public key để decrypt, ta gọi nó là ký số (sign), và thông điệp sau khi bị sign gọi là chữ ký số (digital signature) được đính kèm vào văn bản công khai mà bên gửi đã gửi cho các bên liên quan.
Ý nghĩa chính của digital signature là chỉ có người sở hữu secret key mới có thể sign được signature trên văn bản công khai, do đó, danh tính của sender được đảm bảo.
Ưu điểm lớn nhất của mã hoá bất đối xứng là cách thức trao đổi khoá rất an toàn. Hai bên chỉ cần gửi public key cho nhau để trao đổi mà không cần lo ngại về cách thức trao đổi khoá. Public key dù có bị các bên khác lấy được cũng không thể sử dụng.
Nhược điểm chính của mã hoá bất đối xứng là tốc độ. Mã hoá bất đối xứng chạy chậm nên chỉ phù hợp mã hoá các thông tin có kích thước nhỏ và không phù hợp để sử dụng trên các văn bản lớn.
Một số mã hoá bất đối xứng phổ biến hiện nay:
- RSA: RSA là từ viết tắt của Rivest–Shamir–Adleman, tên của ba nhà khoa học máy tính đã phát triển nó vào năm 1978. RSA dựa trên độ khó của việc phân tích các số nguyên tố lớn. Mặc dù có tuổi đời rất lâu, RSA vẫn được coi là một trong những thuật toán mã hoá tốt nhất hiện nay.
- ElGamal: ElGamal là một thuật toán mã hóa bất đối xứng được phát triển bởi Taher Elgamal vào năm 1985. Nó dựa trên bài toán logarit rời rạc, một bài toán toán học phức tạp vẫn chưa có giải pháp hiệu quả. ElGamal được coi là an toàn như RSA, nhưng có hiệu suất tốt hơn.
- Diffie-Hellman: Diffie-Hellman là một thuật toán chia sẻ bí mật được phát triển bởi Whitfield Diffie và Martin Hellman vào năm 1976. Nó được sử dụng để tạo ra một khóa chung giữa hai bên mà không cần chia sẻ khóa đó trước đây. Giống với ElGamal, Diffie-Hellman là một thuật toán an toàn dựa trên bài toán logarit rời rạc.
3.3. Cryptographic hash function (Hàm băm mật mã học)
Hash function (hàm băm) là một hàm toán học cho phép chuyển một chuỗi ký tự có độ dài bất kỳ thành một chuỗi có độ dài cố định.
Cryptographic hash function (hàm băm băm mật mã học) là một hàm băm nhưng có thể một số tính chất phù hợp hơn với mật mã học.
Trong nhiều tài liệu, các tác giả cũng rút gọn crytographic hash function thành hash function. Bài viết này cũng sẽ rút gọn khái niệm trên thành hash function để tránh xung đột.
Chuỗi sau khi biến đổi gọi là hashed value (giá trị băm). Vì tính chất đặc thù này, chúng ta sẽ chỉ có một số lượng hữu hạn các hashed value và có thể xảy ra hiện tượng hai input trùng một hashed value.
Các đặc tính của hash function bao gồm :
- Uniformity (Tính đồng nhất): Một hashing function tốt cho phép mọi giá trị băm được tạo ra có xác suất giống nhau. Ngoài ra, uniformity còn có thể tính toán và đo lường được thông qua Chi-squared test.
- Efficiency (Tính hiệu quả): Hashing function nên dễ tính toán, tốc độ xử lý một chuỗi đầu vào cần có thời gian phù hợp.
- Determinism (Tính xác định): Luôn trả về một kết quả nếu input không đổi.
- Non-reversibility (Tính một chiều): Sẽ rất khó có thể đảo ngược từ hashed value sang input.
- Weak collision resistance (Tính kháng va chạm yếu): Giả sử có giá trị input x, khó có thể tìm ra một y != x với H(y) = H(x)
- Strong collision resistance (Tính kháng va chạm mạnh): Khó có thể tìm được một cặp x, y bất kỳ sao cho H(x) = H(y)
Một số ứng dụng của hash function bao gồm:
- Verifying the integrity (Đảm bảo tính toàn vẹn dữ liệu): Người ta thường sử dụng một mã hashed khi gửi kèm với dữ liệu gốc để đảm bảo rằng thông tin của sender toàn vẹn trong quá trình trao đổi.
- Signature generation and verification (Tạo, xác minh chữ ký): Khi sử dụng signature, người ta không sử dụng toàn bộ thông tin để ký mà chỉ sử dụng hashed value của thông tin đó.
- Password verification (Chứng thực mật khẩu): Mật khẩu trong cơ sở dữ liệu sẽ không bao giờ được lưu trữ ở plaintext, mà buộc phải thông qua các hashing function để lưu trữ.
Một số hash function phổ biến bao gồm:
- MD5: MD5 được Ronald Rivest thiết kế vào năm 1991 để thay thế hàm băm MD4 trước đó. Nó tạo ra hashed value có 128 bit. Hiện đã bị phá nên không còn được ưu tiên sử dụng.
- SHA0: Là phiên bản đầu tiên của nhóm thuật toán SHA, được công khai năm 1991. Tuy nhiên sau đó bị rút lại do một lỗi bảo mật nghiêm trọng không được công bố, và được thay thế bằng SHA1.
- SHA1: Được thiết kế bởi United States National Security Agency, SHA1 có thể tạo ra hashed value có 160 bit. Điểm yếu của SHA1 đã được công bố, vì thế, sau năm 2010 đã ít được sử dụng, các tiêu chuẩn cũng loại bỏ SHA1.
- SHA2: Là phiên bản nâng cấp của SHA1. SHA2 có thể tạo ra nhiều giá trị đầu ra, bao gồm: SHA2-224, SHA2-256, SHA2-384, SHA2-512, SHA2-512/224, SHA2-512/256. SHA2 vẫn còn sử dụng tốt cho đến ngày hôm nay.
- SHA3: Là phiên bản tốt nhất của nhóm thuật toán SHA. Mặc dù cùng nhóm với SHA, tuy nhiên cấu trúc bên trông SHA3 rất khác so với các thuật toán mã hoá trước đó, nó có phần giống với MD5.
Giống SHA2, SHA3 cũng cung cấp nhiều giá trị đầu vào, bao gồm: SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHA3-512/224, và SHA3-512/256 - SHAKE: Một biến thể của SHA-3, SHAKE cho phép tạo ra các hàm băm có độ dài đầu ra tùy ý. SHAKE có hai biến thể: SHAKE-128 và SHAKE-256, cho phép tạo ra các hàm băm có độ dài đầu ra là 128 bit và 256 bit tương ứng.
- cSHAKE: Một biến thể của SHAKE cho phép thêm một số tùy chọn tùy chỉnh, chẳng hạn như độ dài của đầu ra, giá trị nonce và số vòng lặp. cSHAKE cũng là một biến thể của SHA3
- TupleHash: Một hàm băm mật mã được thiết kế để băm các mảng của các chuỗi. TupleHash là một phiên bản khác của SHA3.
Các hash function SHAKE, cSHAKE và TupleHash đều được phát triển bởi NIST (National Institute of Standards and Technology) và đều được mô tả trong FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions.
4. Một số lưu ý khi ứng dụng Cryptography
4.1. Cryptography
Cryptography gần như không có điểm yếu nào nếu sử dụng đúng cách. Nhưng trong quá trình sử dụng, chúng ta có thể mắc một số lỗi cơ bản sau:
- Sử dụng key quá yếu: Việc sử dụng một key quá yếu sẽ tạo điều kiện cho attacker có thể đoán, thậm trí dịch ngược được thông tin đã được encrypt.
- Sử dụng cryptography đã lỗi thời: Tránh việc sử dụng các cryptography đã cũ vì chúng không còn đủ khả năng bảo vệ.
- Bảo quản secret key kém: Việc để lộ, làm mất secret key là việc tối kỵ. Cần có các chính sách bảo quản các secret key thật tốt.
- Không cập nhật key: Một secret key chỉ đủ để bảo vệ thông tin trong một khoảng thời gian nhất định, do đó chúng ta cần thay thế các key cũ trong quá trình trao đổi thông tin.
4.2. Hash function
Cũng giống như cryptography, hash function gần như không có điểm yếu nếu sử dụng đúng cách. Tuy nhiên, ta cần lưu ý một số trường hợp cụ thể sau:
- Sử dụng hashed value để lưu trữ mật khẩu: Dù không thể bị dịch ngược, nhưng attacker vẫn có thể tấn công bằng kỹ thuật dictionary attack, thậm trí brute-force attack nhằm tiếp cận password.
- Sử dụng hashed value làm ID: Việc định danh dữ liệu bằng hashed value tiềm ẩn rủi ro xung đột (collision) vì hai dữ liệu trùng một hashed value là hoàn toàn có thể xảy ra. Chúng ta có thể cải thiện hiệu suất tìm kiếm bằng hashed value, nhưng không nên sử dụng nó như một định danh.
5. Kết luận về Mật mã học
Các hàm mã hoá rất mạnh mẽ, dễ sử dụng và đáng tin cậy. Nếu sử dụng đúng cách, hệ thống của chúng ta sẽ có một lớp phòng thủ vững chắc, hoàn toàn có thể chống lại sự xâm phạm của kẻ tấn công.
Tuy nhiên, nếu sử dụng không đúng chuẩn, sai cách sử dụng sẽ để lại lỗ hổng bảo mật cực lớn đến hệ thống, dữ liệu, thậm trí máy chủ của chúng ta đều có thể bị đánh cắp, chiếm đoạt hoặc phá hoại.
Ngoài ra, chúng ta cần thường xuyên cập nhật các phần mềm, tránh trường hợp các giao thức, thậm trí các hàm mã hoá mà chúng ta sử dụng không còn hiệu quả.
Trong chiến tranh thế giới thứ hai, cỗ máy Enigma được coi là bất khả chiến bại thời bấy giờ, đã bị cỗ máy Bombe do Alan Turing phát minh giải mã thành công, giúp một phần không nhỏ cho quân Đồng Minh chiến thắng Phát xít Đức.
Theo khuyến nghị của 200lab, chúng ta nên sử dụng các hàm mã hoá theo các tiêu chuẩn khuyến nghị có sẵn, ví dụ như RFCs, để giảm thiểu tối đa nguy cơ và rủi ro bảo mật. Rất nhiều các tiêu chuẩn của RFCs, trong đó có JWT, HTTPs, bcrypt đã phổ biến và được tin dùng.
Bài viết này có sử dụng các tài liệu tham khảo từ:
- Cryptography - Wikipedia
- Symmetric key algorithm - Wikipedia
- Public key cryptography - Wikipedia
- Cryptography standards - Wikipedia
- RFCs Standard - Ietf.org
Mật mã học là cách chúng ta giữ cho thông tin an toàn khi truyền nó qua các kênh có thể bị bên thứ 3 can thiệp. Nó xoay quanh các khái niệm như bảo vệ thông tin, đảm bảo thông tin không bị thay đổi, xác định ai đang gửi hoặc nhận thông tin, và đảm bảo người gửi không thể phủ nhận việc họ đã gửi thông tin đó. Các ứng dụng cụ thể của mật mã học bao gồm việc bảo mật thông tin trong mua sắm trực tuyến, tiền điện tử, mật khẩu máy tính và truyền thông quân sự...
Giờ thì bạn đã hiểu rõ khái niệm "mật mã học là gì" cũng như các lý thuyết cơ bản về Cryptography. Hãy thường xuyên theo dõi trang Blog của 200Lab để thu thập thêm các kiến thức hữu ích về công nghệ, dữ liệu và lập trình nhé.
Một vài bài viết có thể bạn sẽ thích:
ChatGPT là gì? Cách sử dụng ChatGPT an toàn & hiệu quả
Tìm hiểu về Git Rebase vs Git Merge
Jira Software: Phần mềm quản lý công việc đa năng từ Atlassian
NextJS là gì? Mọi thứ bạn cần biết về NextJS
ACID là gì? Các tính chất của ACID
Bài viết liên quan
Apple lên tiếng về AI: Chúng ta có đang đánh giá quá cao Trí tuệ của nó?
Nov 21, 2024 • 8 min read
Whisper AI là gì? Công cụ chuyển giọng nói thành văn bản của Open AI
Oct 17, 2024 • 8 min read
Cursor AI là gì? Hướng dẫn Sử dụng Cursor AI cơ bản
Sep 16, 2024 • 13 min read
IDE là gì? Những công cụ IDE phổ biến nhất hiện nay
Aug 22, 2024 • 11 min read
Cookies là gì? Cookies được sử dụng như thế nào?
Aug 12, 2024 • 9 min read
SDLC là gì? Các mô hình Software Development Life Cycle phổ biến
Jul 13, 2024 • 27 min read