Mật mã ứng dụng

Hệ mã có xác thực

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

Nhắc lại

Bí mật: An toàn ngữ nghĩa chống lại tấn công CPA ・Mã hóa chỉ chống kẻ nghe trộm

Toàn vẹn: ・Không thể giả mạo dưới tấn công với thông điệp chọn sẵn ・CBC-MAC, HMAC, PMAC, CW-MAC

4

Tiếp theo: Mã hóa an toàn chống lại tấn công chủ động ・Đảm bảo cả bí mật và toàn vẹn

Ví dụ tấn công chủ động: TCP/IP

a

t

a

d

WWW
 port = 80

pack

dest = 80 data

source machine

TCP/IP stack

Bob port = 25

Máy đích

5

Ví dụ tấn công chủ động: TCP/IP

a

t

a

d

WWW
 port = 80

packet

TCP/IP stack

dest = 80 data

stuff

dest = 25

k

k

Bob port = 25

packets encrypted
 using key k

6

Đọc thông tin của người khác

IV,

WWW
 port = 80

dest = 80 data

Bob:

data

IV’,

k

dest = 25 data

k

Bob port = 25

Dễ làm với CBC với rand. IV

(chỉ thay đổi IV)

7

Sửa gói tin

IV

IV’

dest = 80 data

dest = 25 data

・Giả sử gói tin được mã hóa bằng CBC mode với IV ngẫu nhiên. ・Vậy ta nên sửa IV’ như thế nào để

m[0] = D(k, c[0]) ⨁ IV = “dest=80…”

1. IV’ = IV ⨁ (…25…)

2. IV’ = IV ⨁ (…80…)

3. IV’ = IV ⨁ (…80…) ⨁ (…25…)

8

4. Không thể làm được

Một cách tấn công chỉ cần truy cập mạng

TCP/IP packet

Ứng dụng đầu cuối từ xa: ・Mỗi lần gõ phím được mã hóa với CTR mode

k

D

T

IP hdr TCP hdr

16 bit TCP checksum

1 byte keystroke

k

⨁ t ⨁ s

for all t, s send:

IP hdr TCP hdr

ACK if valid checksum, nothing otherwise

{ checksum(hdr, D) = t ⨁ checksum(hdr, D⨁s) } (cid:15482) can find D

9

Bài học

CPA an toàn: ・không đảm bảo giữ bí mật khỏi phương pháp tấn công chủ động

Chỉ nên dùng 2 mode: ・Nếu thông điệp chỉ cần toàn vẹn không cần bí mật:

(cid:15482) sử dụng MAC

・Nếu thông điệp cần cả toàn vẹn và bí mật

10

(cid:15482) sử dụng mã có xác thực

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

Mục đích

Định nghĩa. Một hệ mã xác thực (E,D) là một hệ mã với

Như thông thường: E: K × M × N ⟶ C

Bản mã bị loại

nhưng: D: K × C × N ⟶ M ∪ {⊥}

Tính an toàn: Hệ thống phải đảm bảo ・an toàn ngữ nghĩa chống CPA attack, và ・toàn vẹn thông điệp:

12

kẻ tấn công không thể tạo ra được bản mã hợp lệ mới

Toàn vẹn thông điệp

M

m2,

, mq

m1

· · ·

Thử thách k ← K

Kẻ tấn công

c2,

, cq

c1

2 E(k, m1)

· · ·

c

b

và c /

c1,

, cq

=

?

2 {

· · ·

}

n∏u D(k, c) ng˜Òc l§i

b = 1 b = 0

®

6

Định nghĩa. (E, D) là toàn vẹn thông điệp nếu với mọi thuật toán

“hiệu quả” A

13

AdvCI[A,E] = Pr[Thử thách output =1] là “không đáng kể”

Hệ mã có xác thực (Authenticated Encryption)

Định nghĩa. Hệ mã (E, D) là có xác thực nếu

1. an toàn ngữ nghĩa dưới CPA, và

2. có toàn vẹn thông điệp

Ví dụ: ・CBC với IV ngẫu nhiên không có xác thực vì ・D (k, .) không bao giờ output ra ⊥, vậy kẻ tấn công dễ dàng thắng

14

trong trò chơi toàn vẹn thông điệp

Hệ quả 1: tính xác thực

m1 , …, mq

c

Bob

Alice

ci = E(k, mi)

Kẻ tấn công không thể lừa Bob nghĩ rằng Alice đã gửi thông điệp cho mình

k

k

không thể tạo ra c ∉ { c1, …, cq }

15

(cid:15482) nếu D(k,c) ≠⊥ Bob biết thông điệp được gửi từ người biết khóa k (nhưng thông điệp có thể bị gửi lại nhiều lần)

Hệ quả 2

16

Hệ mã có xác thực (cid:15482) An toàn chống lại tấn công chọn bản mã (Security against chosen ciphertext attacks)

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

Ví dụ tấn công chọn bản mã (CCA)

Kẻ tấn công có bản mã c và anh ta muốn giải mã

・Thông thường, anh ta có thể lừa server giải mã một số bản mã

dest = 25 data

data

(không phải c)

・Thông thường, anh ta có thể học được một số thông tin về bản

TCP/IP packet

ACK

if valid checksum

18

rõ từ bản mã.

An toàn trước tấn công chọn bản mã

Khả năng của kẻ tấn công: Cả CPA và CCA

・Có thể lấy được mã hóa của mọi thông điệp anh ta chọn ・Có thể giải mã mọi bản mã anh ta chọn, khác với thử thách

(Mô hình chặt của thế giới thực)

19

Mục đích của kẻ tấn công: Phá an toàn ngữ nghĩa

An toàn trước tấn công chọn bản mã

for i = 1,…,q:

b

(1) truy vấn CPA

mi,0 , mi,1 ∈ M: |mi,0| = |mi,1|

Kẻ tấn công

Thử thách k ← K

ci ← E(k, mi,b)

(2) truy vấn CCA

ci ∈ C: ci ∉ {c1 , …, ci-1}

mi ← D(k, ci)

b’ ∈ {0,1}

・E=(E, D) là hệ mã trên (K, M, C)

20

An toàn trước tấn công chọn bản mã: Định nghĩa

Định nghĩa. E là CCA an toàn nếu với mọi thuật toán “hiệu quả” A:

AdvCCA[A,E] = | Pr[EXP(0) = 1] - Pr[EXP(1) = 1] |

là “không đáng kể”.

m0 , m1: |m0| = |m1| = 1

Kẻ tấn công

Thử thách k ← K

b

c ← E(k, mb) = (IV, c[0])

c’ = (IV ⨁ 1, c[0])

b

D(k, c’) = mb ⨁ 1

21

Ví dụ: CBC với IV ngẫu nhiên là không CCA an toàn

Mã xác thực (cid:15482) CCA an toàn

Định lý. Xét (E,D) là hệ mã có xác thực. Vậy thì (E,D) là CCA an toàn.

Đặc biệt, với mọi thuật toán hiệu quả tấn công E dùng q-truy vấn, có

tồn tại B1, B2 thỏa mãn:

22

AdvCCA[A,E] ≤ 2q⋅AdvCI[B1,E] + AdvCPA[B2,E]

Chứng minh

Chal.

Adv.

Chal.

Adv.

CPA query: mi,0 , mi,1

CPA query: mi,0 , mi,1

ci=E(k,mi,0)

ci=E(k,mi,0)

k←K

k←K

CCA query: ci

≈p

CCA query: ci

D(k,ci) ≈p

≈p

Chal.

Adv.

Chal.

Adv.

CPA query: mi,0 , mi,1

CPA query: mi,0 , mi,1

ci=E(k,mi,1)

ci=E(k,mi,1)

≈p

k←K

k←K

CCA query: ci

CCA query: ci

D(k,ci)

23

Kết luận

Mã có xác thực: ・Đảm bảo bí mật chống lại kẻ tấn công chủ động, kẻ có thể giải

mã một vài bản mã.

24

Giới hạn: ・không chống được tấn công replay ・không chống được side channel (timing)

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

Một chút về lịch sử

Mã có xác thực (AE): được giới thiệu vào năm 2000 [KY’00, BN’00]

API mật mã trước đó: (ví dụ MS-CAPI) ・Cung cấp API mã hóa CPA-an toàn (Ví dụ CBC với IV ngẫu nhiên) ・Cung cấp API cho MAC (ví dụ HMAC)

Các dự án cố gắng kết hợp hai cơ chế này với nhau mà không định

26

nghĩa rõ ràng mục đích. ・Không phải mọi cách kết hợp đều cho phép AE…

Kết hợp MAC và ENC (CCA)

E(kE , mlltag)

Khóa mã hóa kE, khóa cho MAC = kI

・Option 1: (SSL)

S(kI, m)

msg m

msg m

tag

・Option 2: (IPsec)

E(kE, m)

S(kI, c) tag

msg m

always correct

E(kE , m)

S(kI, m)

・Option 3: (SSH)

msg m

tag

27

Định lý A.E

Xét (E,D) là CPA an toàn và (S,V) là một MAC an toàn. Vậy thì:

1. Encrypt-then-MAC: luôn cho A.E

2. MAC-then-encrypt: có thể không an toàn chống tấn công CCA

tuy nhiên, khi (E,D) là rand-CTR mode hoặc rand-CBC vậy thì

M-then-E cho phép A.E

28

với rand-CTR mode, chỉ cần one-time MAC là đủ.

Các chuẩn (ở mức cao)

・GCM: CTR mode encryption then CW-MAC

(được tăng tốc qua lệnh PCLMULQDQ của Intel)

・CCM: CBC-MAC then CTR mode encryption (802.11i) ・EAX : CTR mode encryption then CMAC

Tất cả đều có AEAD: (auth. enc. with associated data).

encrypted

associated data

encrypted data

authenticated

29

Tất cả đều dựa trên nonce.

Ví dụ API (OpenSSL)

int AES_GCM_Init(AES_GCM_CTX *ain, unsigned char *nonce, unsigned long noncelen, unsigned char *key, unsigned int klen )

30

int AES_GCM_EncryptUpdate(AES_GCM_CTX *a, unsigned char *aad, unsigned long aadlen, unsigned char *data, unsigned long datalen, unsigned char *out, unsigned long *outlen)

MAC an toàn — giải thích

Nhắc lại: ・MAC an toàn chỉ ra (m , t) ⇏ (m , t’ ) ・Tại sao? Giả sử ngược lại: (m , t) ⟶ (m , t’)

m0, m1

Chal.

Adv.

b

c ← E(k, mb) = (c0, t)

(c0, t)

k←K

c’ = (c0 , t’ ) ≠ c

b

(c0, t’)

D(k, c’) = mb

31

Vậy thì Encrypt-then-MAC có thể không toàn vẹn thông điệp!!

OCB: xây dựng trực tiếp từ PRG

checksum

m[1]

m[2]

m[3]

m[0]

P(N,k,1)

P(N,k,2)

P(N,k,0)

P(N,k,3)

P(N,k,0)

E(k,⋅)

E(k,⋅)

E(k,⋅)

E(k,⋅)

E(k,⋅)

auth

P(N,k,2)

P(N,k,3)

P(N,k,0)

P(N,k,1)

c[1]

c[2]

c[3]

c[4]

c[0]

32

Mã xác thực hiệu quả hơn: một phép toán E(.) cho mỗi block

Hiệu năng Crypto++5.6.0 [Wei Dai]

AMD Opteron, 2.2 GHz (Linux)

Hệ mã

Kích thước mã tốc độ (MB/giây)

AES/GCM lớn ** 108 AES/CTR 139

nhỏ hơn 61 AES/CBC 109 AES/CCM

nhỏ hơn 61 AES/CMAC 109 AES/EAX

129* HMAC/SHA1 147 AES/OCB

33

* theo kết quả của Ted Kravitz ** máy không phải Intel

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

HỆ MÃ CÓ XÁC THỰC

‣ Tấn công chủ động hệ mã CPA-an toàn

‣ Định nghĩa

‣ Tấn công chọn bản mã

‣ Xây dựng từ hệ mã và MAC

‣ Case study: TLS

h t t p s : / / c l a s s . c o u r s e r a . o r g /

c r y p t o - p r e v i e w / c l a s s / i n d e x

‣ CBC pading attack

‣ Attacking non-atomic decryption

Nhắc lại

Mã có xác thực: ・CPA an toàn + toàn vẹn thông điệp ・chống lại tấn công chọn bản mã

Giới hạn: ・không an toàn khi cài đặt sai

Các mode mã hóa có xác thực: ・Chuẩn: GCM, CCM, EAX

36

Sơ đồ xây dựng tổng quát: ・encrypt-then-MAC

Giao thức TLS (mã hóa với CBC)

Giải mã: dec(kb⇾s , record, ctrb⇾s ) :

bước 1: giải mã CBC bản ghi dùng kenc

bước 2: kiểm tra định dạng pad: bỏ qua nếu sai

bước 3: kiểm tra tag trên [ ++ctrb⇾s ll header ll data]

type ll ver ll len

Hai kiểu lỗi:

data

• padding error • MAC error

tag

pad

37

bỏ qua nếu sai

Padding oracle

Giả sử kẻ tấn công có thể phân biệt được hai lỗi

(pad error, MAC error):

(cid:15482) Padding oracle:

type ll ver ll len

data

kẻ tấn công gửi các bản mã và lấy được thông tin về bản mã nếu byte cuối là valid pad

Đây là ví dụ đẹp cho tấn công chọn bản mã

tag

pad

38

Padding oracle qua timing OpenSSL

Credit: Brice Canvel

(fixed in OpenSSL 0.9.7a)

In older TLS 1.0: padding oracle due to different alert messages.

39

Dùng padding oracle (mã hóa với CBC )

IV

c[0]

c[1]

c[2]

D(k,⋅)

D(k,⋅)

D(k,⋅)

m[2] ll pad

m[0]

m[1]

40

Kẻ tấn công có bản mã c = (c[0], c[1], c[2]) và anh ta muốn m[1]

Dùng padding oracle (mã hóa với CBC )

IV

c[0]

c[1]

⨁ g ⨁ 0x01

D(k,⋅)

D(k,⋅)

= last-byte ⨁ g ⨁ 0x01

m[0]

m[1]

if last-byte = g: valid pad otherwise: invalid pad

41

Bước 1: xét g là gợi ý cho byte cuối của m[1]

Dùng padding oracle (mã hóa với CBC )

Cách tấn công: ・Gửi ( IV, c’[0], c[1] ) tới padding oracle (cid:15482) kẻ tấn công biết liệu last-byte = g

・Lặp lại với g = 0,1, …, 255 để lấy được thông tin về byte cuối

của m[1]

・Dùng pad (02,02) để lấy thông tin về byte tiếp theo.

42

IMAP trên TLS

Vấn đề: ・TLS thương lượng lại khóa khi nhận được một bản ghi sai.

43

Chi tiết IMAP trên TLS: (giao thức để đọc mail) ・Mỗi năm phút client gửi thông báo login tới server: LOGIN “username” “password” ・Cùng một kiểu tấn công như vậy, bất kể khóa mới (cid:15482) lấy được password chỉ trong vài giờ.

Bài học

1. Encrypt-then-MAC hoàn toàn tránh được vấn đề này:

MAC được kiểm tra trước và bản mã bị loại bỏ nếu sai.

2. MAC-then-CBC cho phép A.E., nhưng padding oracle làm hỏng

44

tính an toàn

Câu hỏi

Kiểu attack này vẫn hoạt đột tốt trên TLS nếu dùng CTR mode thay

CBC? (cụ thể, dùng MAC-then-CTR)

・Có, padding oracle ảnh hưởng mọi sơ đồ mã hóa ・Nó phụ thuộc vào hệ mã khối nào được dùng ・Không, CTR không cần padding

45