Cryptography (Mật mã học) đóng vai trò là nền tảng cốt lõi của Information Security (An toàn thông tin), cho phép chúng ta bảo vệ data (dữ liệu) trong cả quá trình storage (lưu trữ) và transmission (truyền tải). Chương này khám phá các kỹ thuật, thuật toán và giao thức giúp hiện thực hóa việc truyền thông kỹ thuật số an toàn.
Tính bảo mật
Tính toàn vẹn
Xác thực
Chống chối bỏ
1. Tổng quan về Mã hóa Thông tin và các Ứng dụng
4. Chữ ký số, Chứng chỉ số và PKI
2. Các phương pháp mã hóa
5. Quản lý khóa và Phân phối khóa
3. Các thuật toán mật mã
6. Một số giao thức an toàn thông tin dựa trên mật mã học
7. Câu hỏi ôn tập
Đến cuối chương này, bạn sẽ có thể tự tin định hướng trong bối cảnh các khái niệm cryptographic và áp dụng chúng vào các tình huống bảo mật thực tế.
Định nghĩa các khái niệm cốt lõi
Hiểu các khái niệm và terminology cơ bản về cryptography
So sánh các phương pháp
Phân biệt các phương pháp symmetric, asymmetric và hash
Giải thích các thuật toán chính
Mô tả DES, 3DES, AES, RSA, MD5 và SHA1
Hiểu về cơ sở hạ tầng tin cậy
Giải thích về digital signatures, certificates và PKI
Quản lý khóa
Tóm tắt vòng đời key management và các phương pháp thực hành tốt nhất
Giao thức bảo mật
Mô tả các giao thức như SSL/TLS, SET và PGP
Mật mã học cung cấp các đặc tính bảo mật thiết yếu giúp bảo vệ hệ thống thông tin trước những mối đe dọa cụ thể.
Cryptography (mật mã học) và cryptanalysis (thám mã) là hai mặt của cùng một đồng xu — chúng cùng tiến hóa trong cuộc chiến không hồi kết giữa tấn công và phòng thủ. Hiểu rõ cả hai là điều cần thiết để xây dựng các hệ thống bảo mật mạnh mẽ.
Trước khi đi sâu vào các thuật toán, hãy nắm vững bốn thuật ngữ nền tảng tạo nên từ vựng cho mọi cuộc thảo luận về cryptography.
Plaintext
Thông tin có thể đọc được / chưa được mã hóa — thông điệp gốc trước khi thực hiện bất kỳ phép biến đổi nào
Ciphertext
Thông tin đã xáo trộn / đã mã hóa — kết quả sau khi biến đổi, trông có vẻ không thể hiểu được
Encryption
Xáo trộn plaintext thành ciphertext bằng cách sử dụng một khóa và thuật toán
Decryption
Giải mã ciphertext trở lại thành plaintext bằng cách sử dụng một khóa và thuật toán
Tính bảo mật phụ thuộc vào việc giữ bí mật các key — ngay cả khi algorithm được công khai.
Bốn thuật ngữ này tạo thành những khối xây dựng của mọi hệ thống mật mã. Hiểu cách chúng liên quan với nhau là rất quan trọng để đánh giá độ mạnh và tính thực tiễn của bất kỳ phương pháp mã hóa nào.
Thuật toán
Quy trình toán học cho việc mã hóa hoặc giải mã — một tập hợp các bước tính toán được định nghĩa rõ ràng
Mật mã
Một cặp thuật toán mã hóa/giải mã hoạt động cùng nhau như một hệ thống hoàn chỉnh
Khóa
Một chuỗi bí mật được mật mã sử dụng để kiểm soát quá trình biến đổi
Không gian khóa
Tổng số các khóa có thể có — ví dụ: một khóa 64-bit tạo ra 2^64 khả năng. Không gian khóa càng lớn = tấn công brute force càng khó
Toàn bộ mật mã học hiện đại được chia thành ba nhóm chính. Mỗi nhóm phục vụ một mục đích riêng biệt, và các hệ thống thực tế thường kết hợp cả ba để đạt được bảo mật toàn diện.
Hãy xem mật mã symmetric như công cụ đắc lực về tốc độ, asymmetric là công cụ tạo dựng niềm tin, và hash là công cụ xác thực tính toàn vẹn.
Trong mật mã khóa đối xứng (còn được gọi là mật mã khóa bí mật), cả người gửi và người nhận đều sử dụng chung một khóa bí mật cho cả quá trình mã hóa và giải mã. Đây là họ mật mã nhanh nhất, khiến nó trở nên lý tưởng cho việc mã hóa dữ liệu số lượng lớn.
Quy trình mã khóa đối xứng
Trong mật mã khóa bất đối xứng (asymmetric-key cryptography), mỗi người dùng sở hữu một public key (chia sẻ công khai) và một private key (giữ bí mật). Chỉ có private key là phải giữ kín, nhưng tính xác thực của public key phải được đảm bảo.
Một hàm băm (hash function) ánh xạ đầu vào có độ dài biến đổi thành đầu ra có độ dài cố định được gọi là digest. Về mặt cốt lõi, đây là một quá trình một chiều (one-way): dễ dàng tính toán giá trị băm, nhưng không thể đảo ngược về mặt tính toán.
Từ đầu vào có độ dài biến đổi sang Digest có độ dài cố định
Hàm băm là nền tảng cho việc kiểm tra tính toàn vẹn (integrity), định danh (identification), và là khối xây dựng cho chữ ký số (digital signatures). Ngay cả một thay đổi nhỏ trong đầu vào cũng tạo ra một digest hoàn toàn khác biệt — hiện tượng này được gọi là hiệu ứng thác đổ (avalanche effect).
Một hệ mật mã (cryptosystem) triển khai các kỹ thuật mật mã để cung cấp các dịch vụ bảo mật. Nó bao gồm nhiều thành phần tương tác làm việc cùng nhau để bảo vệ thông tin truyền qua một kênh không an toàn.
Thông điệp gốc
Biến đổi đầu vào
Đầu ra đã được xáo trộn
Khôi phục lại Plaintext
Các tham số điều khiển
Một keyspace lớn hơn đồng nghĩa với bảo mật cao hơn, vì kẻ tấn công phải tìm kiếm qua nhiều khả năng hơn trong một cuộc tấn công brute-force.
Mật mã học có lịch sử phong phú kéo dài hàng ngàn năm — từ các nền văn minh cổ đại đến thời đại kỹ thuật số. Mỗi cột mốc đại diện cho một bước nhảy vọt trong cách chúng ta bảo vệ thông tin.
Ai Cập cổ đại — việc sử dụng sớm nhất được biết đến của các kỹ thuật mật mã (cách đây hơn 4000 năm); cũng được sử dụng ở Hy Lạp và Ấn Độ
Các công cụ toán học đã chính thức hóa các phương pháp và phân tích mật mã
DES được chuẩn hóa; trao đổi khóa Diffie-Hellman được công bố; RSA được phát minh
PGP được phát hành — mang mật mã khóa công khai đến với người dùng phổ thông
AES được chọn và chuẩn hóa — chuẩn mã hóa hiện đại được sử dụng rộng rãi
Trong mật mã học đối xứng, có hai phương pháp kiến trúc cơ bản: stream cipher (cipher luồng) xử lý dữ liệu liên tục và block cipher (cipher khối) xử lý dữ liệu theo các khối có kích thước cố định.
Stream: Pi + Ki → Ci (từng bit một) | Block: P1,P2,P3 → C1,C2,C3 (từng khối một)
Mật mã học là nền tảng cho hầu hết mọi hệ thống kỹ thuật số an toàn đang được sử dụng hiện nay. Từ ngân hàng đến blockchain, các công cụ này chuyển đổi các tính chất bảo mật thành các biện pháp bảo vệ thực tế.
Các phương pháp mã hóa cổ điển minh họa những ý tưởng cốt lõi vẫn đang vận hành các thuật toán mật mã hiện đại. Hiểu được các khối xây dựng này giúp việc nắm bắt các hệ thống phức tạp trở nên dễ dàng hơn nhiều.
Mật mã thay thế (substitution cipher) thay thế từng ký hiệu hoặc bit bằng một ký hiệu khác theo quy tắc ánh xạ. Mật mã Caesar là dạng đơn giản nhất — một phép dịch chuyển cố định 3 vị trí trong bảng chữ cái.
Một bảng mã thay thế đơn lẻ rất dễ bị tổn thương trước frequency analysis. Để khắc phục điều này, chúng ta có thể sử dụng nhiều bảng mã thay thế — cùng một chữ cái văn bản gốc sẽ được ánh xạ thành các chữ cái văn bản mã hóa khác nhau tùy thuộc vào vị trí của nó.
Hãy tưởng tượng 4 bảng mã thay thế được sử dụng theo chu kỳ dựa trên vị trí:
Điều này có nghĩa là chữ cái 'A' có thể trở thành 'D', 'G', 'L', hoặc 'R' tùy thuộc vào vị trí xuất hiện của nó — hoàn toàn gây khó khăn cho việc frequency analysis.
Không giống như thay thế, hoán vị (hay transposition) không thay thế các giá trị — nó sắp xếp lại chúng trong một khối có kích thước cố định. Các ký hiệu thực tế vẫn giữ nguyên; chỉ có vị trí của chúng thay đổi theo một khóa.
Sắp xếp lại các vị trí bit trong một khối 8-bit. Ví dụ: vị trí 1→5, 2→3, 3→1, v.v. Bản thân các bit không thay đổi — chỉ có sự sắp xếp của chúng thay đổi.
Sắp xếp lại các ký tự trong một khối văn bản. Ví dụ: "SACKGAULSPARENOONE" được chia thành các khối 8 ký tự. Khối cuối cùng "NE" được đệm bằng dấu cách để đạt được kích thước khối đầy đủ là 8.
Hoán vị cung cấp khuếch tán (diffusion) — lan truyền ảnh hưởng của văn bản gốc (plaintext) khắp văn bản mã hóa (ciphertext). Trong các thuật toán mã hóa hiện đại như DES và AES, các lớp hoán vị hoạt động song song với thay thế để đạt được mức độ bảo mật tối đa.
Mã hóa XOR có nguyên lý vô cùng đơn giản: mỗi bit văn bản mã hóa bằng bit văn bản thuần XOR bit khóa. Vì XOR là phép toán có thể đảo ngược, việc giải mã sử dụng chính xác cùng một thao tác: văn bản mã hóa XOR khóa = văn bản thuần.
Bảng chân trị XOR
Ví dụ minh họa: Văn bản thuần "CAT", Khóa "VVV"
Mật mã Vernam sử dụng một one-time pad, trong đó mỗi ký hiệu trên pad chỉ được sử dụng duy nhất một lần. Khi pad thực sự ngẫu nhiên và không bao giờ bị tái sử dụng, phương pháp này đạt được perfect secrecy — về mặt toán học là không thể phá giải.
Ánh xạ các chữ cái sang số 1–26 (A=1, B=2, …Z=26)
Cộng số của plaintext + số của pad
Nếu tổng > 26, trừ đi 26 (mod 26)
Ánh xạ kết quả trở lại thành chữ cái
Plaintext: "SACKGAULSPARENOONE" | Pad: "FPQRNSBIEHTZLACDGJ"
Book cipher (hay phương pháp running key) thực hiện mã hóa và giải mã bằng cách sử dụng các khóa có trong sách. Ngày nay, phương pháp này thường được sử dụng trong các bộ phim về thám tử/gián điệp do tính chất bí ẩn của nó.
Kết quả văn bản gốc (plaintext): "sack island sharp path"
Hash tạo ra một digest có độ dài cố định để đảm bảo tính toàn vẹn và định danh:
Mật mã khóa đối xứng (hoặc mật mã khóa bí mật) sử dụng một khóa bí mật duy nhất cho cả quá trình mã hóa và giải mã. Khóa này — còn được gọi là khóa chia sẻ — phải được trao đổi một cách an toàn giữa các bên trước khi quá trình giao tiếp có thể diễn ra.
Dưới đây là bảng so sánh các thuật toán đối xứng quan trọng nhất. Lưu ý rằng các khóa ngắn hơn 128-bit thường được coi là không an toàn trong bối cảnh hiện đại do các cuộc tấn công vét cạn (brute-force) là hoàn toàn khả thi.
DES có nguồn gốc từ dự án Lucifer của IBM vào đầu những năm 1970 và trở thành tiêu chuẩn của Hoa Kỳ vào cuối những năm 1970. Mặc dù có ý nghĩa lịch sử quan trọng, nhưng keyspace (không gian khóa) nhỏ khiến nó dễ bị tổn thương ở thời điểm hiện tại.
Hoạt động trên các block 64-bit của bản rõ tại một thời điểm
Khóa 64-bit với chỉ 56 bit hiệu dụng + 8 bit chẵn lẻ (parity bits)
Keyspace 56-bit = 2^56 khả năng — khả thi để thực hiện brute force với phần cứng hiện đại

Các khâu mã hóa và giải mã của DES
Trước khi DES có thể mã hóa, nó phải tạo ra 16 subkeys — một cho mỗi vòng trong hàm Feistel — từ khóa 56-bit ban đầu. Quá trình này được gọi là lịch trình khóa (key schedule).
Chọn 56 bit từ khóa 64-bit (loại bỏ 8 bit chẵn lẻ)
Chia thành hai nửa 28-bit (C₀ và D₀)
Thực hiện dịch trái (1 hoặc 2 vị trí tùy thuộc vào số vòng)
Chọn 48 bit từ các nửa đã dịch để tạo ra mỗi subkey
Tạo tất cả 16 subkeys (Subkey1 đến Subkey16) cho 16 vòng

Thủ tục sinh các khóa phụ từ khóa chính của DES
Với mỗi khối đầu vào 64-bit, DES thực hiện 3 bước xử lý để biến đổi nó thành khối bản mã 64-bit tương ứng.
Sắp xếp lại 64 bit của khối bản rõ theo bảng hoán vị cố định trước khi bắt đầu mã hóa.
Giai đoạn xáo trộn chính. Mỗi vòng sử dụng hàm Feistel (F) với khóa phụ 48-bit. Sau mỗi vòng, các kết quả trung gian được kết hợp bằng cách sử dụng XOR (⊕), và hai nửa 32-bit trái/phải được tráo đổi.
Phép nghịch đảo của IP. Sắp xếp lại các bit của đầu ra đã kết hợp để tạo ra khối bản mã 64-bit cuối cùng.
Hàm Feistel là cốt lõi mật mã của mỗi vòng DES, xử lý nửa khối 32-bit thông qua 4 giai đoạn chính.
Mở rộng đầu vào 32-bit thành 48-bit để trộn lẫn với subkey.
Kết quả 48-bit được XOR với subkey 48-bit (Ki) của vòng đó.
Sử dụng 8 S-box để biến đổi phi tuyến tính, chuyển 48-bit thành 32-bit.
Sắp xếp lại các bit bằng P-box để tạo đầu ra 32-bit cuối cùng.

Các bước xử lý của hàm Feistel (F)
Thuật toán DES có thể được sử dụng cho cả mã hóa và giải mã. Quy trình giải mã tuân theo các bước tương tự như mã hóa. Tuy nhiên, các subkey được áp dụng theo thứ tự ngược lại: subkey 16, 15, …, 2, 1 được sử dụng cho các vòng 1, 2, …, 15, 16 tương ứng.
IP → 16 vòng Feistel → FP, giống hệt với quá trình mã hóa.
Các subkey K16, K15, …, K2, K1 được áp dụng cho các vòng 1, 2, …, 15, 16 tương ứng (ngược lại với thứ tự mã hóa).
Khối ciphertext 64-bit được chuyển đổi ngược lại thành khối plaintext 64-bit ban đầu.
3DES áp dụng thuật toán DES 3 lần cho mỗi khối 64-bit sử dụng tối đa ba khóa độc lập. Nó được thiết kế như một bản nâng cấp thay thế trực tiếp khi khóa 56-bit của DES trở nên quá yếu.
Mã hóa: E(K1) → D(K2) → E(K3)
Giải mã: D(K3) → E(K2) → D(K1)
Đánh đổi: Mạnh hơn DES nhưng chậm hơn khoảng 3 lần — đó là lý do tại sao AES cuối cùng đã thay thế nó.

Mã hóa và giải mã với giải thuật 3-DES
AES là một tiêu chuẩn mã hóa khối được NIST công nhận vào năm 2001, dựa trên thuật toán Rijndael do các nhà mật mã học người Bỉ Joan Daemen & Vincent Rijmen phát triển năm 1998. Nó sử dụng Mạng thay thế-hoán vị (Substitution-Permutation Network - SPN) và mang lại hiệu suất cao trên cả phần mềm lẫn phần cứng.
Dựa trên thuật toán Rijndael (1998) bởi Joan Daemen & Vincent Rijmen (Bỉ). Được NIST chuẩn hóa năm 2001 thành FIPS PUB 197.
Kích thước khối cố định: 128 bit. Kích thước khóa: 128, 192, hoặc 256 bit. Số vòng lặp tăng dần theo kích thước khóa: lần lượt là 10 / 12 / 14 vòng.
Được xây dựng trên Mạng thay thế-hoán vị (SPN). Hoạt động trên một ma trận trạng thái 4×4 byte thông qua nhiều vòng biến đổi.
Hiệu quả cao trên cả phần mềm và phần cứng. Các bộ xử lý Intel bao gồm tập lệnh AES-NI để tăng tốc phần cứng cho quá trình mã hóa và giải mã AES.
AES biến đổi dữ liệu thành văn bản mã hóa thông qua một chuỗi các vòng lặp cấu trúc chặt chẽ trên ma trận trạng thái 4x4.
Key Expansion
Initial Round
Main Rounds
Final Round

Các bước xử lý mã hóa dữ liệu của AES
Quy trình này sử dụng khóa gốc để tạo ra các khóa vòng (khóa con) cần thiết cho mỗi vòng xử lý AES.
Xoay vòng trái 8-bit trên mỗi từ 32-bit của khóa để thay đổi vị trí các byte.
Thay thế byte phi tuyến tính bằng cách sử dụng bảng tra cứu S-box.
Áp dụng hằng số vòng duy nhất cho mỗi vòng để đảm bảo tính khác biệt của khóa.
Thực hiện dịch hàng các byte tương tự như trong quá trình mã hóa chính.

Thủ tục sinh khóa Rijndael
Mỗi vòng AES áp dụng bốn hàm biến đổi cho ma trận trạng thái 4×4 byte, cung cấp cả tính hỗn loạn (confusion) và tính khuếch tán (diffusion).
Mỗi byte trong ma trận trạng thái được thay thế bằng một byte tương ứng từ S-box của Rijndael: bij = S(aij). S-box là một bảng tra cứu phi tuyến tính được tạo bằng cách sử dụng nghịch đảo nhân trong trường hữu hạn GF(2⁸). Trong quá trình mã hóa, S-box được sử dụng; trong quá trình giải mã, S-box nghịch đảo được áp dụng.
Các hàng của ma trận trạng thái được dịch vòng sang trái:
Mỗi cột của ma trận trạng thái được nhân với một đa thức cố định c(x) = 3x³ + x² + x + 2. Điều này trộn 4 byte trong mỗi cột, tạo ra sự khuếch tán trên toàn bộ trạng thái.
Mỗi byte của ma trận trạng thái được kết hợp với byte tương ứng của khóa vòng hiện tại bằng phép XOR (⊕). Điều này kết hợp vật liệu khóa bí mật vào trạng thái ở mỗi vòng.
Hai phép biến đổi còn lại hoàn tất mỗi vòng bằng cách trộn dữ liệu trong các cột và kết hợp với round key.
Trộn các byte trong mỗi cột bằng cách sử dụng phép nhân đa thức trên trường GF(2^8) với đa thức c(x) = 3x³ + x² + x + 2. Mỗi byte đầu ra phụ thuộc vào tất cả bốn byte đầu vào trong cột — mang lại khả năng diffusion mạnh mẽ. Giải mã sử dụng InvMixColumns.
XOR toàn bộ trạng thái với round key hiện tại. Đây là bước mà vật liệu khóa bí mật thực sự tham gia vào quá trình tính toán. Đây là phép biến đổi đơn giản nhất nhưng đóng vai trò quan trọng đối với bảo mật — nếu không có nó, AES sẽ là một hoán vị cố định, không phụ thuộc vào khóa.
Hai phép biến đổi đầu tiên trong mỗi vòng AES giới thiệu confusion (SubBytes) và diffusion (ShiftRows) vào ma trận trạng thái.
Một phép thay thế S-box phi tuyến tính được áp dụng cho mọi byte trong trạng thái một cách độc lập. Mỗi byte được ánh xạ tới một giá trị mới sử dụng một bảng tra cứu cố định.
Đây là nguồn chính của confusion trong AES — làm mờ mối quan hệ giữa khóa và văn bản mã hóa.
Quá trình giải mã sử dụng InvSubBytes.
Các phép dịch trái vòng được áp dụng theo hàng:
Phép toán này phân tán các byte của mỗi hàng qua các cột khác nhau, cung cấp diffusion. Quá trình giải mã sử dụng InvShiftRows.

Hàm SubBytes sử dụng Rijndael S-box

Hàm ShiftRows

Hàm MixColumns

Hàm AddRoundKey
Mở rộng khóa tạo ra tất cả các round key từ khóa mật mã gốc bằng cách sử dụng Rijndael key schedule. Giải mã đơn giản là áp dụng các biến đổi nghịch đảo theo thứ tự ngược lại.
Xoay các byte trong một từ
Áp dụng S-box cho từng byte
XOR với round constant
Bước dịch chuyển cụ thể trong lịch trình khóa
Đầu ra: RoundKey0 … RoundKeyN (trong đó N = 10, 12, hoặc 14)

Quá trình mã hóa và giải mã trong AES
Việc tạo một cặp khóa RSA bao gồm việc chọn các số nguyên tố và tính toán các giá trị liên quan. Mỗi bước đều được xây dựng dựa trên bước trước đó theo một trình tự toán học chính xác.
Chọn hai số nguyên tố p và q lớn
Tính n = p × q — đây là modulus
Tính Φ(n) = (p−1)(q−1) — hàm phi Euler
Chọn e sao cho gcd(e, Φ(n)) = 1 — số mũ công khai
Tìm d ≡ e⁻¹ (mod Φ(n)) — số mũ bí mật
Khóa công khai: (n, e) | Khóa bí mật: (n, d)
Sau khi các khóa được tạo, quá trình mã hóa và giải mã RSA tuân theo các công thức toán học thanh lịch. Đối với các thông điệp dài, văn bản gốc (plaintext) phải được chia thành các khối mi < n.
Chuyển đổi văn bản gốc thành số m < n
c = m^e mod n
Gửi bản mã c
Nhận bản mã c
m = c^d mod n
Khôi phục văn bản gốc m
Mối quan hệ toán học giữa e và d đảm bảo rằng việc giải mã hoàn toàn đảo ngược quá trình mã hóa: m = (m^e)^d mod n.
Một bước đi chi tiết về RSA sử dụng các số nguyên tố nhỏ để minh họa từng bước — từ tạo khóa đến mã hóa và giải mã.
Việc lựa chọn các tham số RSA một cách bất cẩn có thể phá hủy hoàn toàn tính bảo mật của thuật toán. Dưới đây là các ràng buộc thực tế bạn phải tuân theo để giữ cho RSA có khả năng chống lại các cuộc tấn công đã biết.
Hàm băm là một hàm toán học h với ít nhất 2 thuộc tính cơ bản:
h ánh xạ một chuỗi đầu vào x với độ dài bất kỳ sang một chuỗi đầu ra h(x) với độ dài cố định n bit.
Với hàm h và đầu vào x, việc tính h(x) là đơn giản.
Hình 3.26 minh họa mô hình nén thông tin của một hàm băm, trong đó một Thông điệp đầu vào với độ dài bất kỳ đi qua nhiều vòng xử lý của hàm băm để tạo ra một đầu ra có kích thước cố định gọi là Digest.
Mô hình Digest của hàm băm

Mô hình nén thông tin của hàm băm
Các hàm băm được chia thành hai loại dựa trên việc có sử dụng khóa bí mật hay không. Sự phân biệt này quyết định các đảm bảo bảo mật mà chúng cung cấp.

Phân loại các hàm băm theo khóa sử dụng
Các hàm băm có thể được chia thành 2 danh mục chính dựa trên chức năng của chúng:
MDC được sử dụng để tạo ra một bản tóm lược đại diện cho thông điệp và được kết hợp với các kỹ thuật khác (chẳng hạn như chữ ký số) để đảm bảo tính toàn vẹn của thông điệp. MDC là một hàm băm không sử dụng khóa. Nó có hai loại phụ:
MAC cũng được sử dụng để đảm bảo tính toàn vẹn của thông điệp mà không yêu cầu bất kỳ kỹ thuật bổ sung nào. MAC là một hàm băm có khóa, nhận cả thông điệp và một khóa bí mật làm đầu vào.
Một hàm băm xử lý thông báo đầu vào có độ dài tùy ý thông qua một quá trình nén lặp lại để tạo ra đầu ra có độ dài cố định. Đầu ra kết quả có thể tùy chọn trải qua giai đoạn chuyển đổi định dạng để tạo ra giá trị băm cuối cùng.
Thông báo đầu vào x trước tiên được đệm bằng cách thêm các bit bổ sung và mã hóa độ dài thông báo. Thông báo đã đệm sau đó được chia thành các khối kích thước cố định, tạo ra một chuỗi: x = x₁ x₂ … xₜ. t khối này đóng vai trò là đầu vào cho giai đoạn xử lý lặp lại.
Mỗi khối xᵢ được xử lý tuần tự bằng cách sử dụng hàm nén f. Hàm này cập nhật trạng thái nội bộ tại mỗi bước, tạo ra các đầu ra trung gian H₁, H₂, …, Hₜ. Sau khi tất cả t khối được xử lý, trạng thái nội bộ cuối cùng Hₜ sẽ thu được.
Trạng thái cuối cùng Hₜ được chuyển đổi tùy chọn bởi hàm g để tạo ra giá trị băm cuối cùng h(x). Nếu không cần chuyển đổi, Hₜ được sử dụng trực tiếp làm đầu ra.

Mô hình tổng quát xử lý dữ liệu của hàm băm

Mô hình chi tiết xử lý dữ liệu của hàm băm
Hầu hết các hàm băm được giới thiệu trong phần này là các hàm băm không khóa. Các họ hàm băm chính bao gồm:
MD5 (Message Digest 5) là một hàm băm mật mã không khóa được Ronald Rivest thiết kế vào năm 1991 để thay thế cho MD4. Nó tạo ra giá trị băm 128-bit (16-byte), thường được biểu diễn dưới dạng 32 ký tự thập lục phân.
MD5 không còn được coi là an toàn do các điểm yếu mật mã đã biết. Một số cuộc tấn công đã khai thác các điểm yếu này, bao gồm cuộc tấn công phần mềm độc hại Flame vào năm 2012.
MD5 xử lý thông điệp qua hai giai đoạn: tiền xử lý và xử lý lặp.

Lưu đồ xử lý một thao tác của MD5
SHA-1 (Secure Hash Algorithm 1) được thiết kế bởi Cơ quan An ninh Quốc gia Hoa Kỳ (NSA) vào năm 1995 như là phiên bản kế nhiệm của SHA-0. Nó tạo ra một giá trị băm 160-bit, thường được biểu diễn dưới dạng 40 ký tự thập lục phân.
SHA-1 không còn được khuyến nghị cho các ứng dụng bảo mật do những điểm yếu về mật mã đã được phát hiện và các cuộc tấn công va chạm thực tế được các nhà nghiên cứu chứng minh.
SHA-1 xử lý thông điệp qua hai giai đoạn chính: tiền xử lý và xử lý lặp.


Lưu đồ một vòng xử lý của SHA-1
Chữ ký số là dữ liệu liên kết toán học giữa thông điệp và người gửi, đảm bảo tính toàn vẹn và chống chối bỏ.
Quy trình ký liên quan đến hai bên — người gửi thực hiện ký và người nhận thực hiện xác thực. Kiểm tra quan trọng nhất là liệu MD1 = MD2 hay không.

Quá trình tạo chữ ký số và kiểm tra chữ ký số
Một nguồn gây nhầm lẫn phổ biến: RSA sử dụng cùng một công thức toán học cho cả mã hóa và ký số, nhưng vai trò của khóa bị hoán đổi. Việc hiểu rõ khóa nào thực hiện nhiệm vụ gì là vô cùng thiết yếu.
DSA (Digital Signature Algorithm) là một thuật toán chữ ký số khóa công khai bắt nguồn từ Thuật toán Chữ ký ElGamal.
Được chuẩn hóa bởi Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST), Hoa Kỳ, vào năm 1991 để sử dụng trong các ứng dụng chính phủ.
Được sử dụng để cung cấp xác thực, tính toàn vẹn và chống chối bỏ cho các thông điệp kỹ thuật số.
Quy trình DSA bao gồm ba giai đoạn chính: Tạo khóa, Ký thông điệp, Xác minh chữ ký.
Chọn một khóa bí mật ngẫu nhiên x sao cho 0 < x < q
Tính: y = gˣ mod p
Các tham số công khai toàn cục (p, q, g) được chia sẻ giữa tất cả người dùng. Khóa bí mật x phải được giữ bí mật; khóa công khai y được phân phối công khai.
Tính giá trị băm H(m) sử dụng hàm băm H.
Chọn k ngẫu nhiên sao cho 0 < k < q.
r = (gᵏ mod p) mod q. Nếu r = 0, hãy chọn k mới.
s = k⁻¹(H(m) + xr) mod q. Nếu s = 0, hãy chọn k mới.
Từ chối nếu r hoặc s không thỏa mãn 0 < r, s < q.
Tính H(m).
w = s⁻¹ mod q.
u₁ = H(m)·w mod q và u₂ = r·w mod q.
Chữ ký số là cặp (r, s).
v = ((g^u₁ · y^u₂) mod p) mod q.
Chữ ký hợp lệ nếu v = r.
Một chứng chỉ số (digital certificate) liên kết một khóa công khai (public key) với một định danh (identity) bằng cách sử dụng chữ ký số của một Cơ quan cấp chứng chỉ (Certificate Authority - CA) tin cậy. Đây là nền tảng của sự tin cậy trên internet.
Chứng chỉ số = Chứng chỉ khóa công khai = Chứng chỉ định danh
Cơ quan cấp chứng chỉ (CA) ký vào chứng chỉ, bảo đảm tính xác thực của nó
Khóa công khai của đối tượng được nhúng trong chứng chỉ để người khác sử dụng
Thông tin định danh như tên miền, tổ chức và vị trí
Ví dụ thực tế từ giáo trình: một chứng chỉ được cấp cho tên miền www.vietcombank.com.vn bởi một CA, liên kết khóa công khai của ngân hàng với danh tính đã được xác minh của nó.

Giao diện kiểm tra thông tin một chứng chỉ số
Chuẩn X.509 xác định các trường cụ thể mà mọi chứng chỉ phải có. Hiểu rõ các trường này là điều cần thiết để đánh giá và quản lý chứng chỉ trong thực tế.
Các trường chính trong X.509
Ứng dụng thực tế
HTTPS
Bảo mật thông qua mã hóa đối xứng + tính toàn vẹn/xác thực thông qua MAC
Email an toàn
S/MIME cho các email được mã hóa và ký
Truyền tải tệp
Xác thực chứng chỉ cho SFTP/FTPS
Chống MITM
Giảm thiểu tấn công man-in-the-middle thông qua xác thực danh tính
Cấp và xác minh các chứng chỉ số.
Tiếp nhận và xác minh thông tin định danh người dùng thay mặt cho CA.
Xác nhận tính hợp lệ của các chứng chỉ và thông tin định danh cho người dùng.
Lưu trữ và lập chỉ mục các khóa công khai và chứng chỉ.
Quản lý vòng đời của các chứng chỉ.
Xác định các quy tắc và tiêu chuẩn cho việc cấp phát và sử dụng chứng chỉ.
Người dùng tạo một khóa công khai và một khóa bí mật.
Người dùng tạo một yêu cầu chứa khóa công khai và thông tin định danh (định dạng X.509).
Người dùng gửi yêu cầu tới Cơ quan Đăng ký (RA).
RA xác minh yêu cầu và chuyển tiếp nó tới Cơ quan Chứng thực (CA).
Người dùng ký một giao dịch hoặc tài liệu bằng khóa bí mật của họ.
Tài liệu đã ký và chứng chỉ số được gửi tới nhà cung cấp dịch vụ.
Nhà cung cấp gửi chứng chỉ tới Cơ quan Xác thực (VA) để kiểm tra.
Nếu hợp lệ, nhà cung cấp sẽ xác minh chữ ký số bằng cách sử dụng khóa công khai từ chứng chỉ.
CA xác minh danh tính và cấp một chứng thư số được ký bằng khóa bí mật của CA.
Thông tin chứng thư được gửi đến Cơ quan Xác thực (Validation Authority - VA).
Người dùng cài đặt chứng thư và bắt đầu sử dụng nó trong các ứng dụng.
Nếu xác minh thành công, giao dịch sẽ được chấp nhận và xử lý.
Một mối quan hệ tạo khóa tồn tại khi hai hoặc nhiều bên chia sẻ dữ liệu liên quan đến mật mã cần thiết để giao tiếp an toàn. Dữ liệu chia sẻ này không chỉ bao gồm các khóa.
Khi key management (quản lý khóa) thất bại, ngay cả những thuật toán mạnh nhất cũng trở nên vô giá trị. Hiểu rõ các rủi ro — và các chính sách để giảm thiểu chúng — là yếu tố thiết yếu đối với an ninh vận hành.
Chính sách phải xác định: các procedures (quy trình) kỹ thuật và hành chính, responsibilities (trách nhiệm) rõ ràng, và các logs (nhật ký) cùng báo cáo kiểm toán được yêu cầu.
Không phải tất cả các loại khóa đều có vai trò như nhau. Việc phân loại khóa theo mục đích sử dụng và vòng đời giúp các tổ chức áp dụng mức độ bảo vệ phù hợp cho từng loại.
Khóa chủ (Master Key)
Cấp độ cao nhất; được bảo vệ về mặt vật lý (HSM, két sắt)
Khóa mã hóa khóa (Key-Encrypting Key)
Bảo vệ các khóa khác trong quá trình truyền tải và lưu trữ
Khóa dữ liệu (Data Keys)
Mã hóa dữ liệu người dùng; thường có vòng đời ngắn và chỉ dùng một lần
Khóa nằm ở vị trí càng cao trong phân cấp thì mức độ bảo vệ càng phải chặt chẽ, vì nếu khóa này bị xâm phạm sẽ làm lộ tất cả các khóa bên dưới.
Các hệ thống đối xứng yêu cầu các khóa chia sẻ cho mỗi cặp truyền tin.
Phân phối tăng trưởng khóa
Ví dụ
n = 10 → 45 khóa
n = 100 → 4.950 khóa
n = 1.000 → 499.500 khóa
Bốn cách tiếp cận để phân phối khóa đối xứng một cách an toàn:
Luồng KDC (Key Distribution Center)
Luồng KTC (Key Translation Center)
Các khóa công khai có thể được chia sẻ công khai nhưng phải đảm bảo tính xác thực
Các phương thức:
Point-to-Point (Điểm-đến-điểm)
Khóa được trao đổi trực tiếp giữa hai bên thông qua một kênh tin cậy.
Key Distribution Center (KDC)
Một máy chủ trung tâm tin cậy tạo và phân phối các session key.
Key Translation Center (KTC)
Người gửi tạo khóa; một trung tâm tin cậy thực hiện mã hóa lại khóa đó cho người nhận.
Public-Key Cryptography (Mật mã khóa công khai)
Sử dụng các khóa bất đối xứng để trao đổi các session key đối xứng một cách bảo mật.
Phân phối khóa diễn ra trực tiếp giữa hai thực thể giao tiếp. Khóa được truyền đi thông qua một kênh truyền thông tin cậy — không cần sự tham gia của máy chủ trung gian.
Dedicated Line
Một đường truyền thông tin bảo mật chuyên dụng giữa các bên.
Secure Courier
Chuyển phát vật lý qua thư bảo đảm hoặc chuyển phát nhanh tin cậy.
Physical Handoff
Trao đổi khóa trực tiếp giữa các nhân sự được ủy quyền.
Dễ dàng triển khai
Phù hợp cho các hệ thống nhỏ hoặc khép kín
Hoạt động tốt cho việc giao tiếp không thường xuyên
Độ trễ cao, đặc biệt là với chuyển phát vật lý
Các kênh bảo mật có thể tốn kém để duy trì
Không khả năng mở rộng cho các mạng lớn
Giả sử người dùng A và B muốn trao đổi dữ liệu được mã hóa bằng AES-128. Trước khi giao tiếp, cả hai bên phải chia sẻ cùng một khóa bí mật K, được phân phối thông qua một kênh tin cậy.
K = 6F2A9C3E7B14D8A1C5E67F2341ABCD90A mã hóa thông điệp: C = AES_K("Chuyển 10.000 USD")
A gửi bản mã C đến B qua mạng.
B giải mã: M = AES_K⁻¹(C) → "Chuyển 10.000 USD"
Phương thức điểm-điểm hoạt động tốt trong các hệ thống nhỏ, nhưng sẽ bị phá vỡ khi mở rộng quy mô:
45 lần trao đổi khóa
4.950 lần trao đổi khóa
499.500 lần trao đổi khóa
Ý nghĩa của từng Key
Triển khai thực tế phổ biến nhất của mô hình KDC là Kerberos — được sử dụng trong mạng doanh nghiệp, Active Directory và các hệ thống đại học trên toàn thế giới.
Máy chủ xác thực (AS)
Đóng vai trò là thành phần KDC đầu tiên. Xác minh danh tính người dùng và cấp Ticket Granting Ticket (TGT).
Máy chủ cấp vé (TGS)
Đóng vai trò là thành phần KDC thứ hai. Cấp vé dịch vụ bằng cách sử dụng TGT.
Client
Người dùng hoặc máy trạm yêu cầu quyền truy cập vào một dịch vụ.
Máy chủ dịch vụ (SS)
Tài nguyên đích (máy chủ tệp, cơ sở dữ liệu, ứng dụng).
Client → AS: Yêu cầu đăng nhập kèm tên người dùng.
AS → Client: TGT được mã hóa bằng khóa của client (tạo ra từ mật khẩu).
Client → TGS: TGT + yêu cầu dịch vụ.
TGS → Client: Vé dịch vụ được mã hóa bằng khóa của máy chủ dịch vụ.
Client → SS: Vé dịch vụ → quyền truy cập được cấp.
Mật khẩu không bao giờ được truyền tải — chỉ sử dụng các khóa băm (hashed keys).
Cả máy khách (client) và máy chủ (server) đều xác minh danh tính của nhau.
Các vé (tickets) có thời hạn sử dụng giới hạn — giúp giảm rủi ro tấn công phát lại (replay attack).
Nếu không có KDC, mỗi cặp người dùng cần một khóa chia sẻ duy nhất. Với KDC, mỗi người dùng chỉ cần duy trì một khóa dài hạn với trung tâm tin cậy.
Không có KDC: số khóa cần thiết
Với KDC: số khóa cần thiết
số khóa cần quản lý
Nếu KDC bị xâm phạm hoặc ngoại tuyến, toàn bộ hệ thống sẽ gặp rủi ro. Tất cả các khóa phiên đều bị lộ nếu khóa chủ của KDC bị đánh cắp.
Mỗi lần khởi tạo phiên yêu cầu một vòng gửi nhận tới KDC. Trong các mạng lớn, điều này có thể gây ra vấn đề về độ trễ và lưu lượng.
KDC phải luôn trực tuyến và có thể truy cập được. Thời gian chết đồng nghĩa với việc không thể thiết lập phiên mới.
Tất cả người dùng phải hoàn toàn tin tưởng người vận hành KDC. Một KDC độc hại hoặc bị xâm phạm có thể mạo danh bất kỳ người dùng nào.
Phương pháp này được sử dụng rộng rãi trong các giao thức truyền thông bảo mật hiện đại:
SSL do Netscape tạo ra (1993); SSL 1.0/2.0/3.0 → sau đó đã ngừng hoạt động
TLS được IETF chuẩn hóa (1999); các phiên bản 1.0/1.1/1.2/1.3 (2017)
Hoạt động giữa lớp ứng dụng và truyền tải; hỗ trợ nhiều ứng dụng (ví dụ: HTTPS = HTTP + SSL/TLS)
Yêu cầu ít nhất một bên (thường là máy chủ) phải có chứng chỉ khóa công khai
SSL/TLS định vị chiến lược giữa lớp Ứng dụng và lớp Truyền tải, cung cấp các dịch vụ bảo mật cho nhiều giao thức khác nhau.
Các giao thức con này phối hợp với nhau để thiết lập, quản lý và chấm dứt các kết nối bảo mật.

Các giao thức con của SSL/TLS
Quá trình bắt tay thiết lập một phiên an toàn giữa máy khách (client) và máy chủ (server):

Khởi tạo phiên làm việc trong SSL/TLS
Giao thức TLS Record cung cấp tính bảo mật cho kết nối với hai dịch vụ cơ bản: tính bảo mật và tính toàn vẹn của thông báo. Nó lấy các thông điệp từ các lớp cao hơn, phân mảnh chúng thành các khối có thể quản lý, nén và mã hóa chúng, đồng thời thêm một MAC.
Quy trình gửi:
Quy trình gửi:
Bên nhận (quy trình ngược):
SET hỗ trợ thanh toán thẻ tín dụng an toàn; được phát triển bởi Visa và MasterCard
Đảm bảo: tính bảo mật, tính toàn vẹn, xác thực chủ thẻ, xác thực người bán
Các tác nhân: Chủ thẻ, Người bán, Cổng thanh toán, Đơn vị chấp nhận thanh toán, Tổ chức phát hành, CA
Tất cả các bên tham gia giao dịch đều đăng ký với CA và nhận chứng chỉ khóa công khai
Chương 3: Đảm bảo An toàn Thông tin thông qua Mật mã học