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

  • 37 trang
  • file: .pdf

đang tải dữ liệu....

Tài liệu bị giới hạn, để xem hết nội dung vui lòng tải về máy tính.

Tải xuống - 37 trang

Nội dung text: Mật mã học - an toàn thông tin

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