You are on page 1of 21

Nhập môn

An toàn thông tin


An toàn ngữ nghĩa cho khoá dùng nhiều lần

Ứng dụng

Mã hóa hệ thống file


・Mã hóa nhiều file dùng AES với cùng khóa

IPSec
・Nhiều gói tin cùng được mã hóa bằng AES với cùng một khóa

An toàn ngữ nghĩa cho khóa dùng nhiều lần

Khóa được dùng nhiều lần


・Kẻ tấn công thấy nhiều bản rõ được mã hóa bởi cùng một khóa
Khả năng của kẻ tấn công
・Tấn công chọn bản rõ = chosen-plaintext attack (CPA)
– Có thể lấy được mã hóa của một số thông điệp mà anh ta muốn
・Đây là mô hình thực tế
Mục đích của kẻ tấn công
・Phá được an toàn ngữ nghĩa

An toàn ngữ nghĩa cho khóa dùng nhiều lần

Xét E = (E,D) là một hệ mà trên (K,M,C). Với b =0,1 ta định nghĩa EXP(b)
như sau:

b
Thử thác m1,0 , m1,1 ∈ M : |m1,0|=|m1,1| Kẻ
k←K tấn côn

c ← E(k,m1,b)

An toàn ngữ nghĩa cho khóa dùng nhiều lần

Xét E = (E,D) là một hệ mà trên (K,M,C). Với b =0,1 ta định nghĩa EXP(b)
như sau:

b
Thử thác m2,0 , m2,1 ∈ M : |m2,0|=|m2,1| Kẻ
k←K tấn côn

c ← E(k,m2,b)

An toàn ngữ nghĩa cho khóa dùng nhiều lần

Xét E = (E,D) là một hệ mã trên (K,M,C). Với b =0,1 ta định nghĩa EXP(b)
như sau:
for i=1,2,…,q:
b
Thử thác Kẻ
k←K mi,0 , mi,1 ∈ M : |mi,0|=|mi,1|
tấn côn

c ← E(k,mi,b)

b’ ∈ {0,1}

Nếu kẻ tấn công muốn c ← E(k,m) anh ta có thể gửi mj,0 = mj,1 = m

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

AdvCPA[A,E] = |Pr[EXP(0)=1] - Pr[EXP(1)=1]| là “không đáng kể”

Mã hóa không an toàn dưới CPA

Giả sử E(k,m) luôn cho cùng một bản mã cho thông điệp m. Vậy thì

m0 , m0 ∈ M
b
Thử thác Kẻ
k←K c0 ← E(k,m0) tấn côn

m0 , m1 ∈ M
if c=c0
c ← E(k,mb) output 0

Kẻ tấn công có thể kiểm tra được hai bản mã có phải là của cùng một
bản rõ.

Có thể tấn công hệ mã khi không gian thông điệp M nhỏ.

Mã hóa không an toàn dưới CPA

Giả sử E(k,m) luôn cho cùng một bản mã cho thông điệp m. Vậy thì

m0 , m0 ∈ M
b
Thử thác Kẻ
k←K c0 ← E(k,m0) tấn côn

m0 , m1 ∈ M
if c=c0
c ← E(k,mb) output 0

Nếu một khóa được dùng lại nhiều lần, vậy thì để an toàn, mã hóa cùng
một bản mã hai lần khác nhau sẽ phải cho ra hai kết quả khác nhau.

Giải pháp 1: Mã hóa xác suất

E(k,m) là thuật toán ngẫu nhiên

mã hóa giải mã

m0 m0

・Mã hóa hai lần của cùng một thông điệp sẽ cho hai bản mã khác nhau
・Bản mã phải dài hơn bản rõ
・Nói một cách nôm na:
– Kích thước bản mã = Kích thước bản rõ + “số bit ngẫu nhiên”

Giải pháp 2: Mã hóa dựa trên nonce

nonce
Alice Bob
m, n E(k,m,n)=c c, n D(k,c,n)=m
E D

k k

Nonce n: một giá trị thay đổi theo các thông điệp
・Cặp (k,n) sẽ được dùng tối đa một lần
Phương pháp 1: nonce là một bộ đếm (ví dụ: đếm số gói tin)
・được dùng khi bộ mã hóa giữ trạng thái thay đổi theo thông điệp
・nếu bộ giải mã có cùng trạng thái, không cần gửi nonce cùng với bản

Phương pháp 2: bộ mã hóa chọn nonce ngẫu nhiên

10

An toàn ngữ nghĩa cho các hệ mã dựa trên nonce

Hệ mã vẫn phải an toàn khi nonce được chọn bởi kẻ tấn công

for i=1,2,…,q:
b
Thử thác Kẻ
k←K ni và mi,0 , mi,1 ∈ M : |mi,0|=|mi,1|
tấn côn

c ← E(k, mi,b, ni)

b’ ∈ {0,1}

Các nonce {n1,…,nq} phải phân biệt

Định nghĩa. Hệ mã dựa trên nonce E là an toàn ngữ nghĩa dưới CPA nếu
với mọi thuật toán “hiệu quả” A:

AdvnCPA[A,E] = |Pr[EXP(0)=1] – Pr[EXP(1)=1]|


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

11

Câu hỏi

Xét PRF an toàn F : K ⇥ R ! M . Ban đầu ta đặt r = 0.

Với m 2 M ta định nghĩa

E(k, m) = [r + +, output (r, F (k, r) m)]

Hệ mã E dựa trên nonce có phải an toàn ngữ nghĩa dưới CPA không?

• Có, bất cứ khi nào F là PRF an toàn.

• Không, luôn có một cách tấn công CPA dựa trên nonce trên hệ này.

• Có, nhưng chỉ khi R đủ lớn sao cho r không bao giờ lặp lại.

• Phụ thuộc vào hàm F nào được dùng.

12


Xây dựng 1: CBC với IV ngẫu nhiên

Xét (E,D) là một PRP. Chọn ngẫu nhiên IV ∈ X và tính toán theo sơ đồ sau:

IV m[0] m[1] m[2] m[3]

⊕ ⊕ ⊕ ⊕

E(k,⋅) E(k,⋅) E(k,⋅) E(k,⋅)

IV c[0] c[1] c[2] c[3]

Bản mã

Bài tập. Hãy xây dựng mạch giải mã.

13

Mạch giải mã

IV c[0] c[1] c[2] c[3]

D(k,⋅) D(k,⋅) D(k,⋅) D(k,⋅)

⊕ ⊕ ⊕ ⊕

m[0] m[1] m[2] m[3]

14
Chú ý: Tấn công CBC với IV ngẫu nhiên

Khi kẻ tấn công có thể dự đoán IV, vậy CBC không là CPA-an toàn !

Giả sử rằng biết c ← E(k,m) ta có thể dự đoán IV cho thông điệp tiếp theo.

b 0∈ X
Thử thác Kẻ
k←K c1 ← [IV1, E(k,0 ⊕ IV1)] tấn côn

m0=IV⊕IV1, m1 ≠m0
if c[1]=c1[1]
output 0

c ← [IV, E(k, )]
c ← [IV, E(k, m1 ⊕ IV )]

Lỗi trong SSL/TLS 1.0:


• IV cho bản ghi thứ i là block cuối của bản mã của bản ghi thứ i-1.
15

Xây dựng 1’: CBC dựa trên nonce

CBC với nonce duy nhất : key = (k,k1)


・Nonce duy nhất: cặp (key,n) dùng cho chỉ một thông điệp

nonce m[0] m[1] m[2] m[3]


IV
⊕ ⊕ ⊕ ⊕

E(k1,⋅) E(k,⋅) E(k,⋅) E(k,⋅) E(k,⋅)

nonce c[0] c[1] c[2] c[3]

bản mã
chỉ cần khi bên giải mã không biết

16

Ví dụ về Crypto API

void AES_cbc_encrypt (
const unsigned char * in,
unsigned char *out,
size_t length,
const AES_KEY *key,
unsigned char *ivec,
AES_ENCRYPT or AES_DECRYPT);

Chú ý. Nếu ivec không lấy ngẫu nhiên thì ta phải mã hóa nó trước khi dùng.

17






Một kỹ thuật padding cho CBC

IV m[0] m[1] m[2] m[3] ll pad


IVʹ
⊕ ⊕ ⊕ ⊕

E(k1,⋅) E(k,⋅) E(k,⋅) E(k,⋅) E(k,⋅)

IV c[0] c[1] c[2] c[3]

xóa sau
khi giải mã

TLS: với n>0, n byte pad là n n n ⋯n


nếu không cần pad, ta thêm một block giả

18

SỬ DỤNG MÃ KHỐI

‣ PRP và PRF an toàn


‣ Định nghĩa an toàn cho khóa dùng
nhiều lần
‣ CBC mode
‣ Rand CTR mode
https://class.coursera.org/
crypto-preview/class/index

Xây dựng 2: Rand CTR-mode

Xét một hệ mã khối an toàn F : K ⇥ {0, 1}n ! {0, 1}.n


E(k,m) được định nghĩa như sau: Chọn IV ngẫu nhiên và tính:

thông điệp

IV m[0] m[1] … m[L]



F(k,IV) F(k,IV+1) … F(k,IV+L)

IV c[0] c[1] … c[L]

bản mã

Chú ý. Khác với CBC-mode, CTR-mode cho phép song song hóa hiệu quả.

Bài tập. Xây dựng mạch giải mã.

20


Xây dựng 2’: nonce CTR-mode

thông điệp

IV m[0] m[1] … m[L]



F(k,IV) F(k,IV+1) … F(k,IV+L)

IV c[0] c[1] … c[L]

bản mã

Để đảm bảo rằng F(k,x) không dùng khóa quá một lần, chọn IV như sau:

128 bits
IV: nonce counter
bắt đầu bằng 0
64 bits 64 bits cho mọi msg

21

You might also like