Mô hình mã dòng (Cipher Feedback mode)

Một phần của tài liệu NGHIÊN CỨU VÀ ỨNG DỤNG CHỮ KÝ SỐ TRONG BẢO MẬT TRUYỀN THÔNG (Trang 27 - 74)

Mã dòng (Cipher Feedback - CFB) xử lý bản tin theo từng bit hoặc byte, lần lượt mỗi bit hoặc byte sẽ được đưa vào mã hóa hoặc giải mã.

Hình 2.4: Mô hình mã hóa dòng (CFB mode encryption)

Quá trình mã hóa thực hiện như sau: Ban đầu khởi tạo C0 đóng vai trò là vecto khởi tạo (IV). IV được qua hàm mã hóa, kết quả được XOR với bản rõ. Đầu ra của phép toán XOR này lại là đầu vào của bit/ byte thứ 2 đưa vào mã hóa. Kết quả sau khi mã hóa lại đem XOR với bản rõ... và cứ tiếp tục như vậy cho tới khi kết thúc bản tin.

Hình 2.5: Quá trình giải mã sử dụng mã dòng (CFB mode decryption)

Quá trình giải mã được thực hiện ngược lại, mỗi bit/ byte sau khi giải mã được đem XOR với bản mã (ciphertext). Bản mã vừa là đầu vào cho các bit/ byte mã hóa tiếp theo vừa được thực hiện XOR với kết quả vừa giải mã. Quá trình mã hóa và giải mã của mỗi bit/ byte phụ thuộc vào tất cả các bit/ byte trước đó.

Công thức toán học cho quá trình mã hóa dùng mã dòng là :

1 0

( ) ,

i k i i

C =E C − ⊕P C =IV

Công thức cho quá trình giải mã:

1 0

( ) ,

i k i i

P =E C− ⊕C C =IV 2.5 MÃ HÓA ĐỐI XỨNG VÀ MÃ HÓA CÔNG KHAI

2.5.1 Mã hóa đối xứng

Mã hóa đối xứng hay còn gọi là mã hóa khóa bí mật. Hai bên tham gia truyền thông sử dụng chung một khóa, gọi là khóa bí mật để thực hiện mã hóa và giải mã bản tin truyền cho nhau. Gọi là đối xứng vì ở đây sử dụng chung một khóa cho cả việc mã hóa và giải mã.

Mô hình hệ mã hóa đối xứng

Hình 2.6 : Hệ mã hóa đối xứng

Mức độ bảo mật của phương pháp mã hóa đối xứng phụ thuộc vào mức độ bảo mật của khóa. Việc trao đổi khóa bí mật K giữa hai bên tham gia truyền thông phải đảm bảo là hoàn toàn bí mật. Với hệ mã hóa đối xứng, các phương pháp tấn công thường được sử dụng là phân tích mã hóa và tìm kiếm vét cạn. Phân tích mã hóa là quá trình nỗ lực để phát hiện ra khóa hoặc khôi phục bản tin gốc. Tìm kiếm vét cạn là cách thử tấn công toàn bộ khóa có thể dựa trên khả năng tính toán.

Ngày nay, khi tốc độ tính toán và xử lý ngày càng phát triển mạnh, việc mã hóa sử dụng thuật toán mã hóa khóa công khai có thể không an toàn.

2.5.2 Mã hóa sử dụng chuẩn DES

Năm 1977, viện nghiên cứu chuẩn quốc gia Hoa Kỳ đã đưa ra chuẩn DES để sử dụng cho các ứng dụng ở Mỹ. DES mã hóa các khối dữ liệu 64 bit với khóa có độ dài 56 bit (thực ra DES sử dụng khóa 64 bit nhưng dành 8 bit để kiểm tra chẵn lẻ (parity) tại các vị trí 8, 16,...64 nên độ dài khóa chỉ còn lại 56 bit). DES thuộc loại mã hóa đối xứng và sử dụng mô hình mã khối CBC. Sơ đồ phương pháp mã hóa này được thể hiện trong hình 2.8

Hình 2.7: Giải thuật DES

Bản rõ (Plaintext) được mã hóa từng khối 64 bit thành khối bản mã (Ciphertext)

64 bit. Thuật toán được tham số hóa bằng một key 56 bit. Phép mã hóa gồm 19 tầng :

- Tầng 1: là tầng hoán vị các bit của Plaintext

- Tầng 2 -17 (tương ứng với vòng 1 -16) là các tầng lặp, hoạt động giống nhau nhưng có khóa khác nhau

- Tầng 18: đổi chỗ 32 bit trái và 32 bit phải

Tại mỗi tầng lặp i (2≤i≤17) , bản tin được xử lý theo cấu trúc Feistel: mỗi khối 64 bit đầu vào được chia làm 2 nửa Li-1 và Ri-1, 64 bit đầu ra cũng có 2 nửa là Li và Ri

với Li=Ri-1 và Ri =Li−1⊕ f R( i−1,Ki) với Ki là khóa dùng ở bước vòng i.

Hình 2.8 Cấu trúc Feistel

Nguyên nhân DES được coi là không an toàn: Hiện nay DES được xem là không đủ an toàn cho nhiều ứng dụng. Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong vòng chưa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi trong thực tiễn

Nguyên bản DES đề ra giải pháp cho một khóa có chiều dài lên đến 128 bit. Tuy nhiên, kích thước của khóa đã giảm xuống còn 56 bit bởi chính phủ Hoa Kỳ trong việc nổ lực tìm ra thuật giải nhanh hơn. Việc giảm chiều dài khóa xuống, phụ thuộc vào tốc độ xử lý của bộ vi xử lý. Trong phương pháp tấn công Brute Force, các khóa sẽ phát sinh ngẩu nhiên và được gửi đến đoạn văn bản nguyên mẩu cho tới khi

xác định được từ khóa chính xác. Với những khóa có kích thước nhỏ, sẽ dễ dàng để phát sinh ra chính xác từ khóa và phá vở hệ thống mật mã.

Khắc phục hạn chế của DES, thuật toán 3DES (Triple DES) ra đời. 3DES dùng 3 vòng mã hóa DES với 3 khóa khác nhau nên kích thước khóa lúc này là 56 x 3=168 bit

Hình 2.9: Thuật toán Triple DES

Bộ xử lý thực hiện các bước sau : khóa đầu tiên dùng để mã hóa dữ liệu. Sau đó, khóa thứ hai sẽ dùng để giải mã dữ liệu vừa được mã hóa. Cuối cùng, khóa thứ ba sẽ mã hóa lần thứ hai. Toàn bộ quá trình xử lý của 3DES tạo thành một thuật giải có độ an toàn cao. Nhưng bởi vì đây là một thuật giải phức tạp nên thời gian thực hiện sẽ lâu hơn, gấp 3 lần so với phương pháp DES.

2.5.3 Mã hóa khai công khai và các giải thuật mã hóa công khai

2.5.3.1 Mã hóa khóa công khai

Mã hóa bất đối xứng hay còn gọi là mã hóa khóa công khai, được đưa ra vào năm 1976 bởi Diffie và Hellman. Việc ra đời của hệ mã hóa khóa công khai mở đầu cho hàng loạt những thành tựu trong việc ứng dụng hệ mã này, tạo nên bước tiến quan trọng trong lịch sử mã hóa.

Thuật toán mã hóa khóa công khai dựa trên các hàm toán học hơn là những phép tính bit thông thường. Và hơn nữa, hệ mã hóa khóa công khai là bất đối xứng tức là hệ mã hóa này sử dụng hai khóa, một khóa để mã hóa và một để giải mã, đối nghịch với mã hóa đối xứng truyền thống là chỉ dùng 1 khóa để mã hóa và giải mã.

Việc sử dụng 2 khóa được ứng dụng nhiều trong các lĩnh vực như về độ tin cậy, phân phối khóa hay chứng thực.

Hình 2.10 : Mô hình hệ mã hóa bất đối xứng

Mã hóa khóa công khai được ứng dụng nhiều trong các lĩnh vực như để đảm bảo độ tin cậy, phân phối khóa, chứng thực văn bản. Mức độ an toàn của mã hóa bất đối xứng hơn hẳn so với hệ mã hóa đối xứng, bên tấn công không thể sử dụng phân tích mã hóa hay tấn công vét cạn để tấn công hệ mã hóa công khai vì rất phức tạp về mặt tính toán khi biết khóa công khai và bản tin ciphertext để tìm được plaintext.

Đặc trưng của hệ mã hóa khóa công khai là sử dụng hai khóa, trong đó một khóa để mã hóa, khóa còn lại được giữ bí mật và dùng để giải mã. Bên gửi sử dụng khóa công khai của bên nhận để mã hóa, như vậy ai cũng có thể thực hiện mã hóa được vì khóa đó là khóa công khai, mọi người đều có thể biết. Nhưng khi tới bên nhận thì chỉ có người chủ đích thực mới có thể giải được mã vì chỉ riêng người đó có khóa riêng để giải mã, những người thuộc bên thứ 3 không có khóa riêng nên không thể giả mạo tin nhắn được.

Các bước thực hiện mã hóa theo hệ mã hóa khóa công khai :

1) Mỗi người dùng sinh một cặp khóa sử dụng để mã hóa và giải mã bản tin

2) Người dùng đăng ký 1 trong 2 khóa là công khai hoặc chứa trong tệp để người khác có thể truy nhập được. Đó là khóa công khai.

3) Nếu người dùng A muốn gửi bản tin tới người dùng B, thì A mã hóa bản tin sử dụng khóa công khai của B

4) Khi B nhận được bản tin, B sẽ thực hiện giải mã nó sử dụng khóa riêng. Không ai có thể giải mã được bản tin đó vì chỉ có B biết, đó là khóa riêng của B.

Với cách tiếp cận này, các bên tham gia truyền thông đều có thể truy nhập tới khóa công khai, còn khóa riêng được sinh cục bộ bởi mỗi bên và do đó không bao

giờ bị phân tán để kẻ thứ 3 có thể biết. Miễn là người dùng bảo vệ tốt khóa riêng của mình thì bảo mật truyền thông được đảm bảo

Các yêu cầu của hệ mã hóa khóa công khai : Giả sử ở đây có hai bên tham gia truyền thông là A và B, A muốn gửi tin cho B. Các yêu cầu đặt ra với hệ mã hóa khóa công khai ở đây là :

1) Dễ dàng về mặt tính toán để bên B có thể sinh ra cặp khóa public/private. Khóa công khai là KPU và khóa riêng là KPR

2) Dễ dàng cho bên gửi A biết được khóa công khai và bản tin cần mã hóa M để sinh ra ciphertext tương ứng

C = EKpu(M)

3) Dễ dàng cho bên nhận B thực hiện giải mã ciphertext sử dụng khóa riêng KPR để phục hồi lại bản tin gốc

M = DKpr(C) = DKpr[ EKpu(M)]

4) Việc tính toán của bên thứ 3, từ khóa công khai KPU để tìm được KPR là điều không thể

5) Việc tính toán của bên thứ 3, từ khóa công khai KPU và ciphertext C để tìm được bản tin gốc M là điều không thể

6) Một trong hai khóa được dùng để mã hóa thì khóa còn lại được dùng để giải mã

M = DKpr[EKpu(M)] = DKpu[EKpr(M)]

Ứng dụng của hệ mã hóa khóa công khai

Hệ mã hóa khóa công khai đặc trưng bởi việc sử dụng 2 khóa để mã hóa, 1 khóa được giữ bí mật và 1 khóa được công khai. Phụ thuộc vào ứng dụng, ngưoif gửi sẽ sử dụng hoặc là khóa riêng của nguời gửi hoặc khóa công khai của người nhận hoặc cả hai để thực hiện các thao tác mã hóa. Ứng dụng của hệ mã hóa khóa công khai được phân thành 3 loại sau :

• Mã hóa/ giải mã : Người gửi mã hóa bản tin sử dụng khóa công khai của người nhận

• Chữ ký số : Người gửi ký vào bản tin với khóa riêng của mình. Việc ký được thực hiện nhờ thuật toán mã hóa áp dụng cho toàn bộ bản tin hoặc một khối dữ liệu của bản tin đó

• Trao đổi khóa : hai bên tham gia truyền thông thực hiện trao đổi khóa với nhau

Cũng có một vài giải thuật áp dụng được cho cả 3 ứng dụng nhưng cũng có giải thuật chỉ áp dụng cho một trong 3 ứng dụng trên

2.5.3.2 Giải thuật RSA (Rivest – Shamir - Aldeman)

Thuật toán RSA là một trong những thuật toán khóa công khai được phát triển sớm nhất, được đưa ra vào năm 1977 bởi Ron Rivest, Adi Shamir và Len Adleman. RSA hỗ trợ cả mã hóa và giải mã dữ liệu với độ dài khóa thay đổi. Sử dụng khóa dài giúp tăng độ an toàn của hệ thống nhưng phải trả giá về thời gian tính toán

RSA là một khối mã hóa (block cipher) trong đó plaintext và ciphertext là những số nguyên từ 0 đến (n-1) với n xác định

Khối plaintext M và khối ciphertext C C = Me mod n

M = Cd mod n = (Me)d mod n = Med mod n

Cả người gửi và người nhận đều phải biết giá trị của n và e, và chỉ có người nhận mới biết giá trị của d. Đây là thuật toán mã hóa khóa công khai với khóa công kha KPU = {e, n} và khóa riêng KPR = {d, n},

Để thuật toán này thỏa mãn những điều kiện của mã hóa khóa công khai thì những yêu cầu sau phải được thỏa mãn :

1) Có thể tìm ra giá trị của e, d, n mà thỏa mãn Med = M mod n với mọi M < n 2) Dễ dàng tính toán Me và Cd với mọi giá trị M < n.

3) Với e và n đã cho, việc tìm ra d là điều không thể.

Hai yêu cầu đầu tiên có thể dễ dàng đáp ứng, yêu cầu thứ 3 có thể đáp ứng với giá trị lớn của e và n.

Thuật toán RSA được tổng quát trong 3 quá trình như sau :

1) Tạo cặp khóa

Để tạo được cặp khóa, đầu tiên cần lựa chọn 2 số nguyên tố p và q. Tiếp đó tính tích của chúng được giá trị n tức là tính n = p x q.

Tính φ(n) = (p -1)(q -1). Hai số nguyên tố p, q lựa chọn là đủ lớn để khó có thể tính ngược lại từ n và φ(n).

Sau đó lựa chọn số nguyên e (1 < e < φ(n) ) là số nguyên tố cùng nhau với φ(n), tức là thỏa mãn ƯSCLN (φ(n),e) = 1.

Tính d thỏa mãn d = e-1 mod φ(n)

Khi đó cặp khóa sinh ra với khóa công khai là KPU = {n, e} và khóa riêng KPR={n, d}.

2) Mã hóa

Giả sử người dùng A công khai khóa của họ và người dùng B muốn gửi tin cho A thì B sẽ mã hóa bản tin sử dụng khóa KPU của A : C = Me mod n

Sau đó truyền C đi.

3) Giải mã

Khi A nhận được bản ciphertext, A sẽ thực hiện giải mã bằng cách tính : M = Cd mod n

Ví dụ thuật toán RSA

Ta xét một ví dụ thuật toán RSA được thực hiện qua những bước như sau : 1. Lựa chọn 2 số nguyên tố p =7 và q =17

2. Tính n = 7 x 17 = 119 ; φ(n) = (7 -1)(17 - 1) =96

3. Chọn e < 96 và là nguyên tố cùng nhau với 96, chọn e = 5 (có thể chọn e = 3, 7 ..)

4. Xác định d : thỏa mãn d = e-1 mod φ(n) = 5-1 mod 96, ta xác định được d = 77 vì 77 x 5 = 385 = 4 x 96 + 1

5. Khóa sinh ra là KPU = {96, 5} và KPR = {96, 77}

6. Giả sử đầu vào plaintext M = 83. Sử dụng khóa công khai để mã hóa ta cần tính C = 835 mod 96

835 mod 96 = [(831 mod 96) x (832 mod 96)2 mod 96] mod 96 83 mod 96 = 83

832 mod 96 = 73

C = 835 mod 96 = (83 x 732) mod 96 = 35

7. Khi tới nơi nhận, bên nhận thực hiện giải mã sử dụng khóa riêng, cần tính M = 3577 mod 96

3577 mod 96 = [352 mod 96 x (355 mod 96)15 mod 96] mod 96 352 mod 96 = 73

355 mod 96 = 35, (355 mod 96)15 mod 96 = 353 mod 96 = 59 M = 3577 mod 96 = (73 x 59) mod 96 = 83

Tấn công giải thuật RSA :

Có hai hướng tiếp cận để đánh bại giải thuật RSA. Cách thứ nhất đó là hướng tiếp cận brute-force : cố gắng thử tất cả các khóa riêng có thể. Do đó để đảm bảo an toàn cho thuật toán, người ta thường lựa chọn lựa chọn số lượng lớn các bít trong e và d.

Tuy nhiên vì có thể lại ảnh hưởng đến quá trình sinh khóa và mã hóa, giải mã nên với cỡ khóa lớn, chương trình thường chạy chậm. Cách tiếp cận thứ hai để tấn công giải thuật RSA đó là thử phân tách n thành 2 thừa số nguyên tố, thực hiện tìm p và q sau đó sẽ tính ra được n, d. Nhưng với cách tấn công này, chúng ta có thể phòng ngừa bằng cách chọn những số nguyên tố đủ lớn, như vậy việc phân tách n sẽ càng

khó. Hiện nay, cỡ khóa thường là 1024 bit, tương đương với 300 số decimal mới được xem là đủ mạnh và an toàn cho các ứng dụng.

Tuy nhiên với số n càng lớn thì thời gian thực hiện mã hóa càng lâu. Trong thực tế để khắc phục nhược điểm về tốc độ xử lý của phương pháp mã hóa công khai người ta sẽ tiến hành mã hóa bản tin bằng một thuật toán khóa bí mật (mã hóa đối xứng) như DES, rồi mã hóa chìa khóa bí mật (secret - key) với một hệ khóa công khai như RSA. Như vậy thì hệ mã hóa công khai “truyền tải” khóa bí mật. Do khóa bí mật thường ngắn hơn so với bản tin nên việc mã hóa theo cách này sẽ nhanh hơn

Một phần của tài liệu NGHIÊN CỨU VÀ ỨNG DỤNG CHỮ KÝ SỐ TRONG BẢO MẬT TRUYỀN THÔNG (Trang 27 - 74)

Tải bản đầy đủ (DOC)

(74 trang)
w