Nghiên cứu tính bảo mật của phƣơng pháp mã hóa số học

Một phần của tài liệu Nghiên cứu mở rộng phương pháp mã hóa số học ứng dụng trong bảo mật dữ liệu (Trang 45)

học

Theo nhƣ các tác giả Ranjan Bose [16], Hyungjin Kim [11] mặc dù mã hóa số học là một phƣơng pháp mã hóa có hiệu quả cao (optimal code) nhƣng tính bảo mật của phƣơng pháp là tƣơng đối thấp. Phƣơng pháp này dễ bị tấn công bằng cách lựa chọn bản rõ (chosen plaintext attack) [11]. Trong đó kẻ tấn công chủ động đƣa ra các bản rõ có lựa chọn và theo dõi kết quả đầu ra để tìm ra khóa.

Ví dụ, trong mô hình nhị phân với hai ký tự A và B (trong mô hình này xác suất xuất hiện của A là p, của B là q=1-p, và miền phân bố của 2 ký tự này là không thay đổi trong suốt quá trình mã hóa cũng nhƣ giải mã), với mô hình này dễ dàng lựa chọn chuỗi ký tự đầu vào làm bản rõ, sau đó quan sát kết quả bản mã ở đầu ra, kẻ tấn công có thể xác định đƣợc xác suất xuất hiện của các ký tự cũng nhƣ miền phân bố của các ký tự, đó chính là chìa khóa của mô hình.

Trƣớc đây vấn đề bảo mật của phƣơng pháp mã hóa số học ít đƣợc chú ý. Tuy nhiên hiện nay đã xuất hiện nhiều nghiên cứu nhƣ các tài liệu [10] [11] [15] [16] nhằm nâng cao khả năng bảo mật của phƣơng pháp. Trƣớc tiên phải nói đến mô hình mã hóa số học ngẫu nhiên RAC (randomized arithmetic coding) [15] dựa trên sự hoán đổi ngẫu nhiên miền phân bố của 2 ký tự A và B trong mô hình nhị phân ở trên. Việc hoán đổi này dựa vào một dãy nhị phân sinh ngẫu nhiên đƣợc gọi là khóa.

Ví dụ:

+ Miền phân bố đƣợc chia làm 2 khoảng: của ký tự A là [0,p) của B là [p,1) + Khóa: 01001

+ Bản rõ: BAABB

Dựa vào khóa ta có miền phân bố của các ký tự nhƣ sau:

B A A B B

[0,p) [p,1) [0,p) [0,p) [p,1)

Bảng 3.4 Miền phân bố của các ký tự với bản rõ BAABB

Nhƣ vậy miền phân bố của A và B đƣợc sinh ra dựa vào khóa ngẫu nhiên nên giảm khả năng tấn công để tìm ra p, q. Tuy nhiên độ an toàn của phƣơng pháp này vẫn chƣa cao.

Nhằm nâng cao tính bảo mật cho phƣơng pháp trên, Hyungjin Kim và Jiangtao Wen [11] đã đề xuất phƣơng pháp mã hóa số học phân tách khoảng (Interval Splitting AC) trong đó mỗi ký tự có một miền phân bố và có thể đƣợc chia (tách) ra tùy thuộc vào khóa dùng cho quá trình mã hóa và giải mã. Bỏ đi cách chia khoảng theo phƣơng pháp truyền thống thay vào đó là một cách chia tổng quát là: tổng độ dài của một hay nhiều khoảng ứng với mỗi ký tự phải bằng xác suất xuất hiện của ký tự đó. Cách chia tổng quát này đƣợc mô tả nhƣ ví dụ sau:

Trong mô hình nhị phân với 2 ký tự là A và B, với p(A) = 2/3, p(B) = 1/3 thì theo mã hóa số học truyền thống miền phân bố của ký tự A = [0, 2/3) và của B = [2/3, 1) còn trong mô hình này miền phân bố của A có thể tách thành 2 khoảng là [0, 1/3) và [2/3, 1) còn ký tự B sẽ có miền phân bố là [1/3, 2/3)

Trƣớc khi chia:

A B

Sau khi chia:

A B A

Hình 3.1-a minh họa cho cách chia khoảng theo phƣơng pháp truyền thống, trong đó p(A) = 2/3 và p(B) = 1/3.

Hình 3.1-b minh họa cách chia khoảng theo phƣơng pháp mới, một khóa k0 đƣợc

sử dụng để xác định vị trí mà ở đó miền phân bố của ký tự A đƣợc tách ra, khoảng tách ra này bắt đầu từ bên phải k0 đến hết miền phân bố của A, sau đó đƣợc di chuyển sang bên phải miền phân bố của B.

Minh họa ở trên ứng với chuỗi đƣợc mã hóa là một ký tự, khi đầu mã hóa là một chuỗi N ký tự thì khóa k là một vector :

k = (k0, k1,….kN-1) – N độ dài của chuỗi ký tự đầu vào.

Các ki đƣợc xác định bởi các chuỗi nhị phân. Ví dụ: nếu dùng 3 bit để xác định ki nào đó thì sẽ có 8 vị trí có thể dùng để tách khoảng. Để mã hóa ký tự đầu tiên thì k0 có thể nằm ở vị trí bất kỳ trong [0,1), đối với các ký tự tiếp theo việc phân tách sẽ bị hạn chế do việc tách của ký tự trƣớc đó làm giảm bớt các vị trí thích hợp để tách.

Với mô hình nhƣ trên thì chỉ làm giảm khả năng bị tấn công bằng phƣơng pháp lựa chọn bản rõ, nên vẫn chƣa thực sự an toàn. Tác giả Hyungjin Kim và Jiangtao Wen [11] đã đƣa ra một phƣơng pháp cải tiến kết hợp hoán vị và mã hóa số học phân tách khoảng.

Hình 3.2 Sơ đồ khối hệ thống kết hợp hoán vị và mã hóa số học phân tách khoảng Hình 3.1 Minh họa cách phân tách miền phân bố

(a)

Trong sơ đồ này bƣớc hoán vị đầu tiên áp dụng cho các chuỗi đầu vào, sau đó sử dụng mã hóa số học phân tách khoảng và hoán vị lần thứ hai đƣợc áp dụng cho các bit đƣợc sinh ra bởi quá trình mã hóa. Một dãy khóa là đầu vào cho một key scheduler lần lƣợt cung cấp thông tin khóa cho cả hai bƣớc hoán vị và mã hóa số học phân tách khoảng.

Có nhiều cách hoán vị nhƣng theo các tác giả trên việc hoán vị dựa theo ma trận và khóa. Đầu tiên sắp xếp dãy đầu vào theo một ma trận sau đó hoán vị theo hàng, cột, từ ma trận đã đƣợc hoán vị ta xây dựng chuỗi đầu vào cho việc mã hóa. Khi giải mã ta hoán vị ngƣợc lại để đƣợc chuỗi ban đầu. Theo cách này độ bảo mật của phƣơng pháp đã đƣợc cải thiện rõ rệt nhƣng vẫn chƣa thực sự an toàn.

Tóm lại, những mô hình trên có miền phân bố (xác suất của các ký tự) là cố định (miền phân bố chỉ là một hàm của ký tự), gần đây có nhiều nghiên cứu đề xuất mô hình động nghĩa là xác suất của các ký tự không phải là cố định trong cả quá trình mã hóa [10] [16], dựa vào ý tƣởng của RAC chúng tôi đề xuất một mô hình mới. Trong mô hình này miền phân bố của các ký tự đƣợc xác định bởi một hàm phụ thuộc vào 3 yếu tố: ký tự hiện tại, khóa K và khóa H. Cụ thể thuật toán nhƣ sau:

Input: (adsbygoogle = window.adsbygoogle || []).push({});

- Bản rõ kt[i] (i = 1, 2…., n)

- Khóa K = {k1, k2, …ku} với ki = 0,1,…255 - Khóa H = {h1, h2, …hv} với hi = 0,1

Output: code (mã số của bàn rõ)

Bƣớc chuẩn bị: Lập bảng miền phân bố của các ký tự trong bản rõ

Thuật toán mã hóa:

T0 = [0, D)

for(i=1; i ≤ n; i++) {

1. Xác định P(kt[i]) dựa vào kt[i] và bảng miền phân bố 2. Xác định P(kt*

[i]) bằng cách dịch chuyển P(kt[i]) nhƣ sau:

a. Nếu hi = 0 thì dịch trái P(kt[i]) với bƣớc dịch bằng ki b. Nếu hi =1 thì dịch phải P(kt[i]) với bƣớc dịch bằng ki 3. Ti = Ti-1 ← P(kt*[i])

Kết thúc thuật toán, mã của văn bản là một giá trị thuộc Tn

Thuật toán giải mã:

code[1] = code; Xác định P(kt*

[1]) bằng cách tra xem code[1] thuộc miền phân bố của ký tự nào Tìm P(kt[1]) bằng cách dịch chuyển P(kt*[1]) nhƣ sau:

a. Nếu h1 = 0 thì dịch phải P(kt*[1]) với bƣớc dịch k1 b. Nếu h1 =1 thì dịch trái P(kt*[1]) với bƣớc dịch k1

Xác định kt[1] dựa vào P(kt*

[1]) for (i=2 ; i ≤ n; i++)

{

1. code[i] = P(kt*[i]) → code[i-1] 2. Xác định P(kt*

[i+1]) dựa vào code[i]

3. Xác định P(kt[i+1]) bằng cách dịch P(kt*[i+1]) nhƣ sau:

a. Nếu hi = 0 thì dịch phải P(kt*[i+1]) với bƣớc dịch ki b. Nếu hi =1 thì dịch trái P(kt*[i+1]) với bƣớc dịch ki

4. Xác định kt[i] dựa vào P(kt[i+1]) }

Ví dụ:

Bản rõ: CABAB (n=5)

Bƣớc chuẩn bị: Lập bảng miền phân bố của bản rõ với D = 1000

STT Ký tự Tần suất xh Miền phân bố low_range hi_range

1 A 2 [0 – 400) 0 400

2 B 2 [400 – 800) 400 800

3 C 1 [800 – 1000) 800 1000 (adsbygoogle = window.adsbygoogle || []).push({});

Giả sử 2 khóa K và H đƣợc sinh ngẫu nhiên và có giá trị nhƣ sau:

K = {2,0,1,1} H={0,1,1,0}

Thuật toán mã hóa thực hiện nhƣ sau:

T0 = [0, 1000) i=1:

kt[1]= C, P(kt[1]) = P(C) = [800, 1000) ;

h1=0 => miền phân bố dịch trái với bƣớc dịch k1 = 2 thành miền phân bố của A hay P(kt[1]) dịch chuyển thành P(kt*[1]) = [0,400)

T1 = T0P(kt[1])* = [0,1000)  [0,400) = [0, 400) (theo công thức 3.4 và 3.5) i=2:

kt[2]= A, P(kt[2]) = P(A) = [0, 400) ;

do k2 = 0 (không dịch chuyển) nên P(kt*[2]) = P(kt[2]) = [0,400) T2 = T1P(kt[1])* = [0,400)  [0,400) = [0, 160)

i = 3

kt[3]= B, P(kt[3]) = P(B) = [400, 800) ;

h3=1 => miền phân bố dịch phải với bƣớc dịch k3 = 1 thành miền phân bố của C hay P(kt[3]) dịch chuyển thành P(kt*[3]) = [800, 1000)

T3 = T2P(kt[3])* = [0, 160)  [0,400) = [128, 160) i = 4

kt[4]= A, P(kt[4]) = P(A) = [0, 400) ;

h4=0 => miền phân bố dịch trái với bƣớc dịch k4 = 1 thành miền phân bố của C hay P(kt[4]) dịch chuyển thành P(kt*[4]) = [800, 1000)

T4 = T3P(kt[4])* = [128, 160)  [800,1000) = [153.6 , 160) i =5

kt[5]= B, P(kt[5]) = P(B) = [400, 800);

h5=0 => miền phân bố dịch trái với bƣớc dịch k5 = 2 thành miền phân bố của C hay P(kt[5]) dịch chuyển thành P(kt*[5]) = [800, 1000)

T5 = T4P(kt[5])* = [153.6 , 160)  [800,1000) = [158.72 , 160)

Thuật toán giải mã thực hiện nhƣ sau:

i=1

Code[1] = code = 159 thuộc miền phân bố của ký tự A P(kt*[1]) = [0, 400)

h1 = 0 => dịch phải P(kt*[1]), bƣớc dịch là k1 = 2 thành P(kt[1]) = [800, 100) kt[1] là ký tự C (xác định kt[1] dựa vào P(kt[1]))

i=2

code[2] = P(kt*[1]) → code[1] = [0, 400) → 159 = 397.5 (dựa theo công thức 3.11) P(kt*[2]) = [0, 400) h2 = 1, dịch trái P(kt*[2]), bƣớc dịch là k2 = 0 thành P(kt[2]) = [0, 400) k[2] = A i=3 code[3] = P(kt*[2]) → code[2] = [0, 400) → 397.5 = 993.75 P(kt*[3]) = [800, 1000) h3 = 1, dịch trái P(kt*[3]), bƣớc dịch là k3 = 1 thành P(kt[3]) = [400, 800) k[3] = B i=4 code[4] = P(kt*[3]) → code[3] = [800, 1000) → 993.75 = 968.75 P(kt*[4]) = [800, 1000) h4 = 0, dịch phải P(kt*[4]), bƣớc dịch là k4 = 1 thành P(kt[4]) = [0,400) k[3] = A i=5 code[5] = P(kt*[4]) → code[4] = [800, 1000) → 968.75 = 843.75 P(kt*[5]) = [800, 1000) h5 = 0, dịch phải P(kt*[5]), bƣớc dịch là k5 = 2 thành P(kt[5]) = [400,800) k[5] = B

Kết hợp kết quả của từng bƣớc giải mã ta thu đƣợc bản rõ ban đầu là: CABAB

Đánh giá độ phức tạp của thuật toán trên:

1. Số các phƣơng án xây dựng miền phân bố của m ký tự với miền cơ sở [0, D) là:

2. Gọi độ dài của khóa K là u, số các phƣơng án xây dựng K là: mu 3. Gọi độ dài của H là v, số các phƣơng án xây dựng H là: 2v

Số các phƣơng án tạo khóa: (adsbygoogle = window.adsbygoogle || []).push({});

Nhận xét về độ bảo mật của phƣơng pháp đề xuất:

- Số các phƣơng án tạo khóa là rất lớn khó có thể dò tìm trong thời gian ngắn

- Vì bản rõ là một chuỗi các ký tự trong khi đó bản mã lại là một số thực, hình ảnh của bản rõ (các mẫu của bản rõ) không đƣợc thể hiện (lặp lại) trong bản mã nên việc tấn công theo phƣơng pháp thống kê đối với phƣơng pháp này sẽ gặp nhiều khó khăn.

- Phƣơng pháp này cũng rất nhạy cảm với bản rõ, trong mô hình nhị phân miền phân bố của các ký tự là cố định và việc tìm ra miền phân bố này cũng khá đơn giản do chỉ cần tìm ra giá trị p, hơn nữa trong mô hình này chỉ dùng một khóa nhị phân nên độ an toàn chƣa thật sự cao. Trong mô hình luận văn đề xuất miền phân bố của các ký tự là thay đổi theo từng bƣớc và phụ thuộc vào 3 yếu tố: ký tự hiện tại, khóa k và khóa h. Vì vậy độ bảo mật cũng đƣợc tăng cƣờng đáng kể.

Chƣơng 4. CÀI ĐẶT VÀ THỬ NGHIỆM

Tóm tắt chương: Để cài đặt được phương pháp mã hóa số học phải thao tác trên các số nguyên lớn. Trong chương này sẽ giới thiệu thư viện xử lý số nguyên lớn đã được đưa ra bởi các tác giả trong tài liệu [1]. Thư viện này được dùng để xây dựng phần mềm mã hoá dữ liệu theo phương pháp mã hóa số học truyền thống và phương pháp mã hóa số học cải tiến.Phần cuối chương là một số kết quả thử nghiệm của chương trình.

Một phần của tài liệu Nghiên cứu mở rộng phương pháp mã hóa số học ứng dụng trong bảo mật dữ liệu (Trang 45)