Mật mã học - an toàn thông tin

  • Số trang: 37 |
  • Loại file: PDF |
  • Lượt xem: 266 |
  • Lượt tải: 0
Khotailieu

Đã đăng 199 tài liệu

Mô tả:

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 Hàm băm ● ● ● ● Các hàm băm phổ thông MD5, SHA1, RIPEMD160 Các hàm băm này đều không thỏa điều kiện 3 → sử dụng các hàm mạnh hơn như SHA256, SHA512 Các hàm băm hay dùng phương pháp MerkleDamgard để tạo digest → tấn công làm dài (length extension) Biết H(M) và len(M) (không biết M) có thể tính H(M + M') Hàm băm ● Biết H(M) suy ra trạng thái cuối ● Sau đó tiếp tục với các block của M' ● Chống bằng cách dùng HMAC Hàm băm ● ● ● ● MAC (Message Authentication Code) là mã xác thực thông điệp hay còn gọi là hàm băm có khóa (keyed hash function) Ví dụ SHA1(key + M) HMAC là MAC với công thức H(K1 + H(K2 + M)) HMAC không mắc phải length extension attack và khó tìm được data1, data2 có cùng HMAC Khóa công khai ● ● Khóa công khai sử dụng các thuật toán khóa bất đối xứng Các thuật toán này tạo ra một cặp khóa: một khóa riêng (private key), và một khóa công khai (public key) Khóa công khai ● Mã hóa: người gửi dùng public key của người nhận để mã hóa. Người nhận dùng private key để giải mã Khóa công khai ● Chữ ký điện tử: Người gửi tính digest của thông điệp gửi, mã hóa digest này với private key. Người nhận dùng public key của người gửi để giải mã, so sánh với digest thông điệp nhận được. Khóa công khai ● Thuật toán khóa công khai cung cấp các tính: ● Bảo mật – ● Xác thực – ● Thông điệp chỉ đọc được bởi người nhận Người nhận biết là nhận từ người gửi Không thể chối bỏ – Người gửi không thể phủ định việc gửi thông điệp ● Một số thuật toán thường gặp là RSA, ECC ● Vấn đề còn lại là làm sao để phân phối khóa Khóa công khai ● ● ● Hạ tầng khóa công khai (public key infrastructure) hoạt động dựa vào các nhà cung cấp chứng chỉ (certificate authority) Một chứng chỉ bao gồm định danh, ngày tạo, ngày hết hạn, khóa công khai của chủ nhân, và chữ ký điện tử của CA tạo ra chứng chỉ này Các bên sử dụng PKI phải tin tưởng vào CA. Một số CA lớn (root CA) có thể ủy quyền cho các CA nhỏ (intermediate CA) cấp chứng chỉ. Khóa công khai ● ● ● ● Mạng tin tưởng (web of trust) hoạt động dựa vào cách mỗi người xét duyệt chứng chỉ của người khác Việt là bạn của Nam. Hai người tin nhau và gặp nhau hàng ngày. Việt đưa Nam chứng chỉ của Việt, và Nam chấp nhận nó. Việt giới thiệu Nam cho XXX. Vì Nam tin Việt, và Việt tin XXX nên Nam có thể tin XXX. Cả PKI lẫn WoT đều có vấn đề với việc hủy bỏ (revoke) chứng chỉ Khóa công khai ● ● ● ● Các thuật toán khóa công khai hoạt động dựa vào sự bất khả thi của việc tìm ra private key từ public key Bài toán tìm thừa số nguyên tố của một số rất lớn: Cho N, tìm P và Q sao cho P * Q = N Bài toán tìm log nguyên: Cho g, và h, tìm x sao x cho g = h a b Bài toán Diffie-Hellman: Cho g , và g , tính g ab Các lỗi thường gặp ● Không dùng mã hóa, hoặc dùng nhưng lộ key ● Dùng mã hóa quá dễ bẻ (XOR), cổ điển (DES) ● Dùng thuật toán tự chế ● ● Dùng code tự viết ● ● SHA1(K + M) Dễ mắc phải side-channel attack Dùng mã hóa không đúng mục đích: ● Encrypt rồi sign (giống như ký lên phong bì) ● Giải mã được là thông điệp không bị sửa Các lỗi thường gặp ● Dùng mã hóa không đúng cách ● Bộ sinh số ngẫu nhiên thiếu tính ngẫu nhiên ● Khóa hay IV ít thay đổi ● ● ● Chế độ hoạt động không phù hợp (ECB để mã hóa thông điệp dài hơn 1 block) Mã hóa thông tin quan trọng, nhưng để hở thông tin liên quan (mã hóa PIN, nhưng để hở số tài khoản) Không nghĩ đến các vấn đề phụ (side channel) ● Thời gian, hiệu điện thế, nhiệt độ Các lỗi thường gặp ● Sam: được tin tưởng ● Alice có key KAS với Sam, và Bob có key KBS ● Alice muốn liên lạc với Bob qua key KAB ● ● A → S: {TA, B, KAB}KAS ● S → B: {TS, A, KAB}KBS TA là timestamp do Alice cung cấp, TS là timestamp do Sam. Mục tiêu là KAB chỉ có thể dùng trong một khoảng thời gian nào đó. Các lỗi thường gặp ● ● ● Lỗi nằm ở TA được cập nhật thành TS Charlie là người ở giữa, có thể nghe và thay thế tất cả thông tin Charlie có thể keep-alive KAB bằng cách: ● Giả Bob muốn liên lạc với Alice – ● Giả Alice muốn liên lạc với Bob – ● Gửi cho S: {TS, A, KAB}KBS và nhận {TS', B, KAB}KAS … Gửi cho S: {TS', B, KAB}KAS và nhận {TS'', A, KAB}KBS Các lỗi thường gặp ● ● Alice muốn chuyển đến Bob một session key, Sam giữ certificate của cả hai ● A → S: A, B ● S → A: CA, CB ● A → B: CA, CB, {{TA, KAB}KA−1}KB Bob có thể dễ dàng giả danh Alice để nói chuyện với Charlie ● ● B → C: CA, CC, {{TA, KAB}KA-1}KC Vì Charlie giải mã được (dùng KC-1) nên Charlie nghĩ là thông điệp đúng Một số lưu ý 1) Be clear of security goals and assumptions 2) When using encryption, know why you are using it (secrecy? Authenticity? Binding? PRNG?) . Encryption is not security! 3) Be careful about temporal associations 4) Don’t assume the identity of a participant can be excluded from a message. Generally, it should be explicitly included in a message! 5) Have redundancy in your message! 6) Know the properties and weaknesses of the cryptographic protocols you are using. 7) Signatures do not imply that the signer knows what the message is that he is signing! 8) Don’t trust others to keep their secrets secret! 9) When responding to queries, be careful about encrypting, decrypting, or signing. You might be used as an oracle by an adversary! 10) Decryption is not the same as digital signatures- they have different purposes! 11) Distinguish between different runs of the protocol! Hết Chương Trình
- Xem thêm -