Giảithuật DES (Data Encryption Standard)

Một phần của tài liệu Công nghệ IP VPN luận văn tốt nghiệp đại học (Trang 73)

Thuật toán DES được đưa ra vào năm 1977 tại Mỹ và đã được sử dụng rất rộng rãi. Nó còn là cơ sở để xây dựng một thuật toán tiên tiến hơn là 3DES. Hiện nay, DES vẫn được sử dụng cho những ứng dụng không đòi hỏi tính an toàn cao, và khi chuẩn mật mã dữ liệu mới là AES chưa chính thức thay thế nó. DES mã hóa các khối dữ liệu 64 bit với khóa 56 bit. Sơ đồ thuật toán DES cho trên hình 4.4.

P1 P2 P3 E E E E E E IV C2 C3 C1 C2 C3 D D D D D D P1 P2 P3

Phía phát Phía thu

C1

Hình 4.4. Sơ đồ thuật toán DES

Trước hết 64 bit T đưa vào được hoán vị bởi phép hoán vị khởi tạo IP, không phụ thuộc vào khóa T0 = IP(T). Sau khi thực hiện 16 vòng lặp, dữ liệu được đi qua các bước hoán vị đảo RP và tạo thành khối ciphertext. Thực chất các hoán vị này không là tăng tính an toàn DES.

Trung tâm của mỗi vòng lặp xử lý DES là mạng Fiestel (được đặt theo tên của một nhà khoa hoc tại IBM). Hoạt động của mạng Fiestel được diễn tả như sau:

T =L0R0 với L0 = t1 …t32, R0 = t33 …t64.

Xét ở vòng lặp thức i (0<i<16): Li = Ri-1, Ri = Li-1 F(Ri-1, Ki) trong đó ⊕

là phép cộng XOR và Ki là khóa 48 bit. Ở vòng lặp cuối cùng các nhánh trái và phải không đổi chỗ chi nhau, vì vậy input của IP-1 là R16L16. Trong đó hàm F được thể hiện là khối hộp đen.

a) Hoạt động của khối hộp đen

Khá phức tạp, trong đó nó gồm có các khối chức năng và nhiệm vụ như sau:

- Hoán vị mở rộng: Mở rộng Ri-1 32 bít đầu vào thành khối 48 bít. Hoạt động mở rộng này dựa vào một bảng định trước để lựa chọn các bít đầu ra. Sau đó các bít sau hoán vị mở rộng được XOR với khóa Ki.

- S-box: Kết quả sau khi XOR được chia thành 8 khối 6 bít từ B1 tới B6. Mỗi khối Bj sau đó được đưa vào một hàm Sj. Hàm Sj này sẽ trả lại các khối 6 bit thành khối 4 bit theo bảng định trước.

- P-Box: Các khối 4 bit sau khi được trả lại sẽ kết hợp với nhau thành khối 32 bít đầu ra của hộp đen.

b) Hoạt động tính khóa:

Khóa input ban đầu là một khối 64 bít, sau khi bỏ đi 8 bít parity và hoán vị 56 bít còn lại theo một trật tự nhất định. DES tạo ra 16 khóa, mỗi khóa có chiều dài 48 bit từ một khóa input 56 bit, dùng cho 16 vòng lặp. Tại mỗi vòng lặp, khóa Ki-1 được chia thành hai phần là Ci-1 và Di-1. Sau đó các bit của hai thành phần Ci-1 và Di-1 được hoán vị dịch để tạo thành Ci và Di. Sau khi hoán vị, Ci bỏ qua các bít 9, 18, 22, 25 tạo thành nữa trái của KI (24 bit) và Di bỏ qua các bít 35, 38, 43, 54 tạo ra nữa phải của Ki (24 bít). Ghép nữa trái và nữa phải tạo ra khóa Ki 48 bít.

c) Giải mã: Quá trình giải mã thực hiện các bước này theo thứ tự ngược lại.

d) Phân phối khóa

Nhược điểm lớn nhất của các hệ thống mật mã khóa đối xứng là vấn đề phân phối các khóa bí mật thông qua kênh không an toàn. Số lượng các khóa bí mật cần thiết khi sử dụng một thuật toán mật mã khóa đối xứng với n đối tác tham gia sẽ là Cn2 = n(n−1)/2. Có thể thấy việc phân phối các khóa bí mật sẽ trở nên hết sức khó khăn khi số lượng đối tác tham gia trao đổi thông

tin lớn. Hình 4.6 chỉ ra việc phân phối khóa trong hệ thống mật mã khóa đối xứng [10].

Hình 4.6. Phân phối khóa trong hệ thống mật mã khóa đối xứng 4.2.2.3. Giới thiệu AES (Advanced Encryption Standard)

Thuật toán DES với khóa 56 bit đã được phát triển cách đây gẩn 28 năm, và hiện không còn phù hợp với những ứng dụng đòi hỏ tính an toàn dữ liệu cao (đặc biệt các ứng dụng về quân sự, hoặc thương mại điện tử). Đây là lý do cần phát triển các thuật toán mật mã mới đáp ứng được những yêu cầu an toàn dữ liệu ngày càng cao. Trong số các thuật toán mới được phát triển gần đây có 3DES với khóa công khai 168 bít và đặc biệt là AES. Năm 1997, NIST đã tổ chức lựa chọn những thuật toán sau:

* MARS (IBM): Cải tiến mạng Fiestel, thực hiện 32 vòng và dựa trên cấu trúc kết hợp của DES.

* RC6 (RSA): Thực hiện mạng Fiestel 20 vòng, cải tiến thuật toán RC5. * Twofish (Bruce Schneier): thực hiện mạng Fiestel 16 vòng, cải tiến thuật toán Blowfish.

* Serpent (Ross Anderson/ Eli Biham/ Lars Knudsen): Thực hiện mạng hoán vị thay thế 32 vòng.

* Rijndael (Joan Daemen/ Vincent Rijimen): Thực hiện mạng hoán vị thay thế cải tiến 10 vòng.

Trong 5 thuật toán trên, NIST đã chọn Rijindael cho chuẩn AES vào năm 2000. Trong tương lai, AES sẽ là chuẩn mật mã khối đối xứng và sẽ được thực hiện trên cả phần cứng lẫn phần mềm. AES sẽ được thiết kế để có thể tăng độ dài khóa khi cần thiết. Độ dài khối dữ liệu của AES là n = 128 bít, còn độ dài khóa k = 128, 192, 256 bit [12].

4.2.2.4. Thuật toán mật mã luồng (stream cipher)

Mật mã luồng dựa trên một bộ tạo luồng khóa để tạo nên một chuỗi số giả ngẫu nhiên khởi tạo bởi một khóa bí mật. Chuỗi khóa được XOR với chuỗi bit plaintext. Tại phía thu, một bộ tạo khóa giống hệt khởi tọa bởi cùng một khóa bí mật được đồng bộ với chuỗi ciphertext đầu vào. Phía thu phục hồi plaintext bằng cách XOR chuỗi ciphertext với chuỗi khóa đã đồng bộ.

Hình 4.7. Mật mã luồng

4.2.3. Hệ thống mật mã khóa công khai

4.2.3.1. Giới thiệu và lý thuyết về mã khóa công khai

Hệ thống mật mã khóa công khai còn được gọi là hệ thống mật mã khóa không đối xứng, vì theo như có chế mật mã này thì khóa được dùng để mã hóa gói tin và khóa được dùng để giải mã là khác nhau. Sự phát triển của mật mã khóa công khai có ý nghĩa rất lớn và tạo ra một cuộc cách mạng trong toàn

Khóa Khóa Bộ tạo chuỗi giả ngẫu nhiên Bộ tạo chuỗi giả ngẫu nhiên

Luồng bit Plaintext

Luồng bit Plaintext Luồng bit ciphertextLuồng bit ciphertext

Luồng bit plaintext 1 1 1 1 1 1

Luồng bít giả ngẫu nhiên 1 0 0 1 1 0

bộ lịch sử của mật mã khóa. Những thuật toán công khai đều dựa trên những hàm toán học hơn là những nhóm thay thế và hoán vị trong mật mã khóa cổ điển. Trong hệ thống mật mã khóa công khai thì mỗi đối tác tham gia sẽ sở hữu một cặp khóa duy nhất, bao gồm một khóa bí mật (được lưu bí mật bởi đối tác) và một khóa công khai tương ứng (được phát trong các thư mục công cộng). Hai khóa này có quan hệ với nhau để đảm bảo rằng khóa công khai thực hiện chức năng mã hóa và khóa bí mật thực hiện chức năng giải mã.

Các bước cần thiết trong quá trình mã hóa khóa công khai:

- Một hệ thống cuối trong mạng tạo ra một cặp khóa để dùng cho mã hóa và giải mã đoạn tin mà nó sẽ nhận.

- Mỗi hệ thống công bố rộng rãi khóa mã hóa bằng cách đặt khóa vào một thanh ghi hay một file công khai. Đây là khóa công khai, khóa còn lại được giữ riêng.

- Nếu A muốn gửi một đoạn tin tới B thì A sẽ mã hóa đoạn tin bằng khóa công khai của B.

- Khi B nhận được đoạn tin mã hóa, nó giải mã bằng khóa bí mật của mình. Không một người nào khác có thể giải mã đoạn tin mã này bởi vì chỉ minh B biết khóa bí mật đó thôi.

nh 4.8. Sơ đồ mã khóa công khai

Với cách tiếp cận này, tất cả những người tham gia có thể truy xuất khóa công khai. Khóa bí mật được tạo ra bởi từng các nhân, vì vậy không bao giờ

Khóa công khai

Đoạn tin Khóa bí mật Đoạn tin

được mật mã Đoạn tin

User A Giải thuật

mã hóa Giải thuật

mã hóa Giải thuật giải mã

Giải thuật

giải mã User B

Kênh truyền

được phân bố. Ở bất kì thời điểm nào, hệ thống cũng có thể chuyển đổi cặp khóa để đảm bảo tính bảo mật mà không cần sử dụng kênh thông tin an toàn để truyền khóa bảo mật.

Các yêu cầu của mật mã khóa công khai:

1/ Công việc tính toán thì dễ dàng cho người nhận B: tạo cặp khóa công khai KU và khóa bí mật KR.

2/ Công việc tính toán thì dễ dàng cho người nhận A: biết khóa công khai và đoạn tin cần mã hóa M, để tạo mật mã tương ứng C=EKub(M).

3/Công việc tính toán dễ dàng cho người nhận B để thực hiện giải mã: sử dụng khóa bí mật để giải mã đoạn tin mã hóa C, khôi phục lại đoạn tin ban đầu.

M = DKRb(C) = DKRb[EKUb(M)]

4/ Công việc tính toán không thể thấy trước đối với địch thủ biết khóa công khai KUb để xác định khóa bí mật KRb.

Công việc tính toán không thể thấy trước đối với địch thủ biết khóa công khai KUb và đoạn tin mật mã C để khôi phục đoạn tin ban đầu M.

5/ Chức năng mã hóa và giải mã có thể được áp dụng theo thứ tự:

M = DKRb[EKUb(M)] M = EKUb[DKRb(M)]

Có thể nhận thấy rằng việc tính Y = f(X) thì dễ dàng trong khi tính X=f- 1(Y) là không thể thấy trước. Nói chung từ “dễ dàng” được xác định bởi 1 bài toán là nó có thể được giải quyết trong thời gian nhất định (nó phụ thuộc vào chiều dài input). Nếu chiều dài input là n bít thì thời gian để tính hàm đó tỉ lệ với na . Để đảm bảo tính bảo mật thì phải sử dụng khóa có kích thước đủ lớn (thường trên 100 chữ số thập phân). Ví dụ kích thước khóa và thời gian bẻ khóa (MIPS tính theo năm) trong các giải thuật RSA/DSS và ECC như sau [11].

Bảng 4.2. Thời gian bẻ khóa trong giải thuật RSSA/DSS và ECC.

RSA ECC MIPS (năm)

512 768 1024 106 132 160 104 108 1012

4.2.3.2. Hệ thống mật mã khóa công khai RSA

RSA do Rivest, Shamir và Adleman phát triển năm 1977. Sơ đồ RSA là sơ đồ mã hóa từng khối, với mỗi khối có giá trị nhỏ hơn n. Việc mã hóa và giải mã theo hình thức sau, cho khối văn bản M và khối bảo mật C:

C = Me mod n

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

Cả người gửi và nhận phải biết giá trị n, người gửi biết e và chỉ có người nhận biết d. Cho nên đây là giải thuật mã hóa với khóa công khai KU = [e,n] và khóa bí mật KR = [d,n]. Vì giải thuật này thỏa giải thuật mã khóa công khai nên các yêu cầu sau phải được đáp ứng:

* Có thể tìm thấy giá trị d, e, n để: M = Mde mod n với mọi M<n hay không?

* Một cách tương đối dễ dàng tính Me và Cd với mọi M<n hay không? * Không thể xác định d khi biết e và n.

Theo lý thuyết Euler: cho 2 số nguyên p và q, 2 số nguyên n và m (n = p*q, 0<m<n) và số nguyên k. Ta có:

mk0(n)+1mod n= mk(p-1)(q-1)+1 mod n= m mod n 0(n)=0(pq)=(p-1)(q-1)

Do đó:

Nếu: de = k0(n) + 1 và gcd(0(n),e)=1 (gcd: ước số chung lớn nhất) Thì: de mod 0(n) = 1 và d mod 0(n) = e- 1

Sơ đồ RSA:

Giả sử user A đã công bố khóa công khai e của nó và user B muốn gửi đoạn tin M tới A. Khi đó B tính C=Me mod n và truyền C. Khi nhận được đoạn tin C này, user A giải mã bằng cách tính Cd mod n. Có thể thấy rằng M=Cd mod n vì:

de mod 0(n) = 1 hay de = k0(n)+1

Mk0(n)+1mod n = Mk(p-1)(q-1)+1mod n=M mod n=(Mde mod n) modn=Mde mod n

Cd mod n = (Me)dmod n = Mde mod n = M

Có thể tóm tắt giải thuật RSA như bảng sau:

Bảng 4.3. Tóm tắt giải thuật RSA và độ phức tạp

Tạo khóa Độ phức tạp

Tạo 2 số nguyên tố lớn p và q Tính n = p*q, 0(n) = (p-1)*(q-1)

Chọn 1 số ngẫu nhiên 1<e<0(n): gcd (0(n),e) = 1 Tính d: d=e-1mod 0(n) (giải thuật Euclidean mở rộng) Khóa công khai KU=[e,n]

Khóa bí mật KR=[d,n]

0((log n)2) 0(log(0(n))2) 0((log n)3)

Ví dụ về quá trình mật mã và giải mã của thuật toán RSA: Chọn p = 3, q = 11. Khi đó ta có n = pq = 33 và (p-1)(q-1) = 20 = 2*5*5. Giá trị e được chọn phải quan hệ nguyên tố với 20 , nghĩa là không chứa các ước số 2,5 và e < 20. Ta chọn e = 3, d = 7. Khi đó ta có: Phía mật mã: Giả sử có bản tin: M = {10, 9, 5, 20} M3={1000, 729, 125, 8000} và C=M3 mod 33={10, 3, 26, 14}. Phía giải mã: C7 ={107, 2187, 267, 147} M=C7 mod 33{10, 9, 5, 20}

Kích thước khóa RSA: tùy thuộc vào tính bảo mật và thời gian sống của khóa mà khóa có chiều dài thích hợp:

- Loại Export : 512 bít. - Loại Personnal : 768 bit. - Loại Commercial : 1024 bit. - Loại Militery : 2048 bit.

Trên đây là những nội dung chính của thuật toán mật mã RSA. Thực tế, để thực hiện được các thuật toán với kích thước khóa lớn đòi hỏi một lượng tính toán rất lớn liên quan đến vấn đề lý thuyết số như thuật toán Euclide để tìm USCLN của hai số nguyên hay thuật toán Miller-Rabin để kiểm tra tính nguyên tố của các số tự nhiên này [10].

4.2.4. Thuật toán trao đổi khóa Diffie-Hellman

Thuật toán Diffie-Hellman cho phép hai bên trao đổi với nhau một khóa bí mật chung. Các bước thực hiện như sau:

Bảng 4.4. Các bước thực hiện để trao đổi khóa Diffie Hellman

Bên A Mạng Bên B

Đồng ý với bên B về sử dụng số nguyên lớn ban đầu: P

→ ← Đồng ý với bên A về sử dụng số nguyên lớn ban đầu: P Đồng ý về số nguyên làm nhiệm

vụ tạo khóa: G

→ ← Đồng ý về số nguyên làm nhiệm vụ tạo khóa: G

Chọn lọc số bí mật: A → ← Chọn lọc số bí mật: B

Tính số công cộng: X=GAmod P Tính số công cộng: Y=GBmod P

Gửi số X tới bên B X→

←Y

Gửi số X tới bên B

Bây giờ đã biết: P, G, A, X, Y Bây giờ đã biết: P, G, B, X, Y

Tính KA=YAmod P Tính KB=XBmod P

Bây giờ đã có khóa bảo mật chia sẻ: KA=KB=K

Bây giờ đã có khóa bảo mật chia sẻ: KA=KB=K

Chứng minh:

KA=(GBmod P)Amod P

Chứng minh:

KA=(GB)Amod P KA=GBAmod P KA KB=(GA)Bmod P KB=GAB mod P KB

Ví dụ về trao đổi khóa Diffie-Hellman như sau: hai bên A và B thống nhất với nhau số nguyên tố P=31 và một số nguyên G=3.

Tại A: chọn A=8 X=38mod 31 = 20. X=20 này được gửi đến B. Tại B: chọn B=6 Y=36mod 31 = 16. Y=16 này được gửi đến A. Tính khóa bí mật K:

Tại A: KA=168mod 31 = 4 Tại B: KB=206mod 31 = 4

Hai bên chọn khóa bí mật là KA=KB=K=8 cho quá trình mật mã và giải mã thông tin.

4.3. Tổng kết

Chương này nói về một số thuật toán được áp dụng để đảm bảo an toàn dữ liệu cho IP-VPN dựa trên IPSec. Đối với vấn đề an toàn dữ liệu có 2 vấn đề chính đó là mật mã dữ liệu và xác thực dữ liệu. Đối với mật mã dữ liệu, tồn tại hai thuật toán là khóa đối xứng và khóa công khai. Ở đây đã trình bày chi tiết về thuật toán khóa đối xứng DES và cơ sở lí thuyết của thuật toán khóa công khai. Ngoài ra, chương này còn trình bày về trao đổi khóa Diffie- Hellman. Đối với xác thực dữ liệu có hai vấn đề trọng tâm là xác thực nguồn gốc dữ liệu và xác thực tính toàn vẹn của dữ liệu: thuật toán MD5/SHA-1để đảm bảo vấn đề toàn vẹn dữ liệ; giới thiệu các phương pháp xác thực và chứng thực số để xác định nguồn gốc dữ liệu

Chương 5. Thực hiện IP-VPN

5.1. Giới thiệu

Các chương trước đã trình bày về những kỹ thuật cơ bản của IP-VPN bao gồm các giao thức đường ngầm, thuật toán mật mã và xác thực. Các kỹ thuật này hiện đã được giải quyết tích hợp sẵn trong các sản phẩm của nhiều hãng trên thế giới. Do hiện nay chưa có một chuẩn thống nhất cho việc sản xuất các thiết bị VPN, nên vấn đề đặt ra là sự tương thích giữa các sản phẩm của các hãng khác nhau. Người sử dụng cần phải được đảm bảo rằng thiết bị mà họ

Một phần của tài liệu Công nghệ IP VPN luận văn tốt nghiệp đại học (Trang 73)

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

(112 trang)
w