Mật mã ● Mật mã cổ điển tập trung vào mã hóa (encrypt), và giải mã (decrypt) thông điệp (plaintext) ● Mã hóa thông điệp → thông tin mật (ciphertext) ● Giải mã thông tin mật → thông điệp ● Cặp thuật toán mã hóa, giải mã gọi là cipher ● Transposition (đổi chỗ, ví dụ Christian → Rich saint) ● Substitution (thay thế, ví dụ ABC → XYZ) ● Mã hóa và giải mã cần bộ-2 (thuật toán, khóa) ● Ví dụ: Ceasar, Vigenere Mật mã ● Mật mã cổ điển hay lộ thông tin về tần suất ● Ví dụ: Tần suất các chữ cái trong tiếng Anh Mật mã ● Để phá một thông điệp cần biết cipher lẫn khóa ● Tiên đề Kerckhoff: Sự an toàn của khóa là điều kiện đủ duy nhất để một thuật toán tốt không làm lộ thông tin → kẻ tấn công biết thuật toán ● Mật mã hiện đại ● Khóa đối xứng (symmetric key) ● Khóa công khai (public key, asymmetric key) ● Giao thức mật mã (cryptographic protocol) Khóa đối xứng ● Khóa đối xứng: Khóa giải mã quan hệ đơn giản với khóa mã hóa (thường là như nhau) ● Hai loại phổ biến: ● Stream cipher – Từng bit (hoặc byte) của plaintext được kết hợp với luồng bit giả ngẫu nhiên khác gọi là keystream – Từng bit được biến đổi khác nhau ● Block cipher – Hoạt động trên từng nhóm bit (hoặc byte) với kích thước cố định (gọi là từng khối, block) – Từng block được biến đổi như nhau Khóa đối xứng ● Stream cipher được dùng để mã hóa dữ liệu không rõ độ dài ● Stream cipher còn được dùng cho các thiết bị chuyên mã hóa → nhận, mã hóa/giải mã, trả ● Stream cipher an toàn phải có keystream với chu kỳ lớn và không phân biệt được với số ngẫu nhiên ● Một số thuật toán điển hình là XOR, RC4 (đã bị bẻ), A5/1 (GSM), Salsa, Chacha Khóa đối xứng ● Giả sử có hai plaintext A và B, một khóa K, và keystream C(K) ● Mã hóa A → EA = A xor C(K) Mã hóa B → EB = B xor C(K) ● Tính được A xor B bằng cách tính EA xor Eb (hay A xor C(K) xor B xor C(K) = A xor B) ● Nếu A và B là ngôn ngữ tự nhiên thì việc tìm lại A và B có thể được thực hiện khá dễ ● Chống bằng cách thay đổi key liên tục Khóa đối xứng ● EM = M xor C(K) ● Giả sử ta biết được cấu trúc của thông điệp (ví dụ như M bắt đầu bằng chuỗi 1000) ● Kẻ tấn công có thể đổi thông điệp thành 9999 mà không cần biết key ● E1000 xor 1000 xor 9999 = C(K) xor 1000 xor 1000 xor 9999 = C(K) xor 9999 = E9999 ● Chống bằng cách xài mã xác nhận thông điệp Khóa đối xứng ● Một số block cipher thường dùng là DES (đã bị bẻ), Triple-DES, AES, Blowfish, Twofish, GOST ● Block cipher hoạt động trên từng block → cần đệm (pad) vào thông điệp để tạo thành block trước khi mã hóa ● Ví dụ block 8-byte mà thông điệp chỉ có 1 byte thì cần đệm thêm 7 byte ● Ngoài ra, cách nối từ một block sang block kế cũng cần được xác định Khóa đối xứng ● Có nhiều cách đệm ● Đệm n byte với giá trị n (03 03 03) ● Đệm (n-1) byte 0 và byte cuối là n (00 00 03) ● Đệm (n-1) ngẫu nghiên và n (xx xx 03) ● Đệm n byte với giá trị 0 (00 00 00) ● Bit đầu là 1, các bit còn lại là 0 (80 00 00) ● Cách đệm + chế độ hoạt động (mode of operation) Khóa đối xứng ● Electronic Codebook (ECB) ● Từng block được mã hóa rời rạc ● Block có nội dung như nhau → mã hóa như nhau → làm lộ cấu trúc thông điệp ● Có thể bị replay Khóa đối xứng ● Cipher-block Chaining (CBC) ● Mã hóa tuần tự ● 1 bit ở plaintext ảnh hưởng tất cả ciphertext về sau Khóa đối xứng ● Cipher-block Chaining (CBC) ● Giải một block cần 2 block ciphertext → làm song song được ● 1 bit ciphertext làm block plaintext tương ứng thay đổi hoàn toàn, và lật 1 bit ở block kế Khóa đối xứng ● Cipher feedback (CFB) ● Giống CBC ● Chỉ cần dùng phần MÃ HÓA Khóa đối xứng ● Cipher feedback (CFB) ● Thông điệp không cần được đệm vì plaintext hay ciphertext không đi qua bộ giải/mã hóa Khóa đối xứng ● Output feedback (OFB) ● Y như CFB với Output thay cho Cipher Khóa đối xứng ● Output feedback (OFB) ● Thay đổi 1 bit chỉ làm ảnh hưởng block tương ứng Khóa đối xứng ● Counter (CTR) ● Như OFB ● Cần thêm counter, không xài feedback Khóa đối xứng ● Counter (CTR) ● Có thể được thực hiện song song vì các block được thực hiện độc lập Khóa đối xứng ● IV (Initialization Vector) hay Nonce là những dữ liệu ngẫu nhiên, không cần bí mật ● IV và Nonce có nhiệm vụ khơi ngòi chuỗi mã hóa/giải mã ● IV và Nonce không nên được sử dụng lại với cùng key ● Block cipher có thể dùng để làm stream cipher, hàm băm, bộ sinh số ngẫu nhiên giả, mã xác thực thông điệp Hàm băm ● Nhận thông điệp có độ dài không xác định (data) và trả về thông điệp có độ dài xác định (digest) ● Thỏa các tính chất: ● Khó tìm lại được data khi biết digest ● Khó tìm được data2 có cùng digest như data1 ● Khó tìm được data1 và data2 có cùng digest ● Vì vậy rất khó sửa data mà không làm thay đổi digest → dùng làm mã xác thực thông điệp