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 -