Chế độ chính (Main mode)

Một phần của tài liệu Kỹ thuật VPN sử dụng IPSEC (Trang 34)

Main mode xác nhận và bảo vệ tính đồng nhất của các bên có liên quan trong qua trình giao dịch. Trong chế độ này, 6 thông điệp được trao đổi giữa các điểm:

• 2 thông điệp đầu tiên dùng để thỏa thuận chính sách bảo mật cho sự thay đổi. • 2 thông điệp kế tiếp phục vụ để thay đổi các khóa Diffie-Hellman và nonces.

Những khóa sau này thực hiện một vai trò quan trọng trong cơ chế mã hóa.

• 2 thông điệp cuối cùng của chế độ này dùng để xác nhận các bên giao dịch với sự giúp đỡ của chữ ký, các hàm băm, và tuỳ chọn với chứng nhận.

Header: Một tiêu đề ISAKMP tương ứng với chế độ được dùng SA: Liên kết bảo mật được được thương lượng

Nonce: Một số ngẫu nhiên gửi cho việc ký số

KE: Dữ liệu trao đổi khóa với trao đổi khóa Diffie-Hellman Sig: chữ ký dùng cho xác thực

Cert: Một chứng chỉ số cho khóa công khai

ID: Định danh (ss là của Sender, sr là của Recipient trong pha I)

Hình 2.3: Trao đổi thông điệp trong chế độ chính (Main mode)

2.2.3.2. Chế độ tích cực (Aggressive mode).

Aggressive mode về bản chất giống Main mode. Chỉ khác nhau thay vì main mode có 6 thông điệp thì chế độ này chỉ có 3 thông điệp được trao đổi. Do đó, Aggressive mode nhanh hơn Main mode. Các thông điệp đó bao gồm:

• Thông điệp đầu tiên dùng để đưa ra chính sách bảo mật, pass data cho khóa chính, và trao đổi nonces cho việc ký và xác minh tiếp theo.

• Thông điệp kế tiếp hồi đáp lại cho thông tin đầu tiên. Nó xác thực người nhận và hoàn thành chính sách bảo mật bằng các khóa.

• Thông điệp cuối cùng dùng để xác nhận người gửi (hoặc bộ khởi tạo của phiên làm việc).

Header: Một tiêu đề ISAKMP tương ứng với chế độ được dùng SA: Liên kết bảo mật được được thương lượng

Nonce: Một số ngẫu nhiên gửi cho việc ký số

KE: Dữ liệu trao đổi khóa với trao đổi khóa Diffie-Hellman Sig: chữ ký dùng cho xác thực

ID: Định danh (ss là của Sender, sr là của Recipient trong pha II)

Hình 2.4: Trao đổi thông điệp trong chế độ tích cực (Aggressive mode)

2.2.3.3. Chế độ nhanh (Quick mode).

Chế độ thứ ba của IKE, Quick mode, là chế độ trong pha II. Nó dùng để thỏa thuận SA cho các dịch vụ bảo mật IPSec. Ngoài ra, Quick mode cũng có thể phát sinh khóa chính mới. Nếu chính sách của bảo mật chuyển tiếp đầy đủ Perfect Forward Secrecy (PFS) được thỏa thuận trong pha I, một sự thay đổi hoàn toàn Diffie-Hellman key được khởi tạo. Mặt khác, khóa mới được phát sinh bằng các giá trị băm.

Quá trình trao đổi trong Quick mode có thể được miêu tả như sau:

Bên khởi tạo Bên đáp ứng

HDR*, HASH(1), SA, Ni

[,KE] [,IDci, IDcr] 

 HDR*, HASH(2), SA, Nr

[,KE] [,IDci, IDcr]

HDR*, HASH(3) 

Trong đó, HASH(1) là hàm prf đối với message ID (M-ID) lấy từ ISAKMP header kết hợp với toàn bộ thông báo theo sau hàm hash bao gồm tất cả các payload header, nhưng không chứa các phần được chèn thêm vào để mã hóa. HASH(2) giống với HASH(1), điều khác là nonce của bên khởi tạo (trừ đi payload header) được thêm vào sau M-ID nhưng trước toàn bộ thông báo. Việc thêm nonce vào HASH(2) là để cung cấp bằng chứng về sự tồn tại. HASH(3) (cung cấp bằng chứng về sự tồn tại) là hàm prf đối với giá trị 0 đại diện cho một octet đơn, sau đó là sự kết hợp giữa M-ID và 2 nonce (nonce của bên đáp ứng đi sau nonce của bên khởi tạo). Hay nói cách khác, các hàm hash đối với trao đổi trên là:

HASH(1) = prf(SKEYID_a, M-ID | SA | Ni [ | KE ] [ | IDci | IDcr] ) HASH(2) = prf(SKEYID_a, M-ID| Ni_b| SA | Nr [| KE] [|IDci |IDcr] ) HASH(3) = prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b) (adsbygoogle = window.adsbygoogle || []).push({});

Ngoài ra các hàm HASH, SA và các ID payload tùy chọn, thì không có bất kỳ một giới hạn nào khác về thứ tự trên Quick mode. HASH(1) và HASH(2) có thể khác với miêu tả trên nếu thứ tự của các payload trong thông báo khác với thứ tự ở miêu tả trên hoặc một payload bất kỳ tùy chọn nào được thêm vào.

Nếu không cần đến PFS và các KE payload không được trao đổi thì mầm khóa mới được xác định như sau:

KEYMAT = prf(SKEYID_d, protocol | SPI | Ni_b | Nr_b).

Nếu cần đến PFS và các KE được trao đổi, thì mầm khóa này được xác định như sau: KEYMAT = prf(SKEYID_d, g(qm)^xy | protocol | SPI | Ni_b | Nr_b).

Trong đó, g(qm)^xy là bí mật được chia sẻ từ trao đổi Diffie – Hellman của Quick mode này. Đối với các tình huống mà lượng mầm khóa cần thiết là lớn hơn lượng mà hàm prf cung cấp, thì KEYMAT được mở rộng bằng cách đưa các kết quả của hàm prf trở lại chính nó và kết hợp các kết quả cho đến khi đạt được mầm khóa mong muốn. Hay nói cách khác:

KEYMAT=K1|K2|K3… trong đó:

K1 = prf(SKEYID_d, [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b) K2 = prf(SKEYID_d, K1| [g(qm)^xy|] protocol| SPI | Ni_b | Nr_b) K3 = prf(SKEYID_d, K2 | [ g(qm)^xy | ] protocol | SPI | Ni_b |Nr_b) …

Mầm khóa này (có hoặc không có PFS, và được trực tiếp hay thông qua kết hợp) phải được sử dụng với liên kết an toàn được thỏa thuận. Tùy thuộc vào dịch vụ mà xác định các khóa được sinh ra từ mầm khóa như thế nào.

Đối với trao đổi Diffie – Hellman trong Quick mode, thì hàm mũ g(qm)^xy bị loại bỏ và SKEYID_e và SKEYID_a (được sinh ra từ thỏa thuận trong pha I) tiếp tục bảo vệ và xác thực liên kết an toàn ISAKMP và SKEYID_d tiếp tục được sử dụng để sinh khóa.

2.2.3.4. Chế độ nhóm mới (New group mode).

Chế độ nhóm mới xảy ra sau pha I nhưng trước pha II, là một cơ chế để định nghĩa thêm các nhóm riêng cho trao đổi Diffie – Hellman. Trong các tình huống mà các nhóm được định nghĩa không có đủ độ mạnh cần thiết, thì chế độ nhóm mới có thể được thực hiện trao đổi một nhóm Diffie – Hellman có đủ độ mạnh cần thiết.

Chế độ nhóm mới được miêu tả như sau:

HDR*, HASH(1), SA 

 HDR*, HASH(2), SA

Trong đó HASH(1)=prf(SKEYID_a, M-ID|SA), là đầu ra của prf sử dụng SKEYID_a làm khóa, và message-ID trong ISAKMP header kết hợp với toàn bộ SA payload (cả thân và header) làm dữ liệu.

HASH(2)=prf(SKEYID_a, M-ID), là đầu ra của hàm prf, sử dụng SKEYID_a làm khóa và message-ID trong ISAKMP header kết hợp với phần đáp lại làm dữ liệu.

Ngoài 4 chế độ IKE phổ biến trên, còn có thêm Informational mode. Chế độ này kết hợp với quá trình thay đổ của giai đoạn II và SAs. Chế độ này cung cấp cho các bên có liên quan một số thông tin thêm, xuất phát từ những thất bại trong quá trình thỏa thuận. Ví dụ, nếu việc giải mã thất bại tại người nhận hoặc chữ ký không được xác minh thành công, Informational mode được dùng để thông báo cho các bên khác biết.

Như vậy chúng ta thấy rằng, IKE là một thành tựu đáng kể của an toàn thông tin trên mạng. Nó là sự kết hợp hoàn hảo giữa kỹ thuật mạng máy tính và kỹ thuật mật mã học hiện đại, nó mở ra một khả năng trao đổi thông tin an toàn hữu hiệu trên hệ thống mạng mở toàn cầu ngày nay. Vì vậy chúng ta cần nghiên cứu, làm chủ kỹ thuật này và cố gắng áp dụng các lợi ích của nó vào ngành cơ yếu nước ta ngày nay.

CHƯƠNG III: NGHIÊN CỨU VỀ OPENSWAN VÀ ĐỀ XUẤT GIẢI PHÁP ỨNG DỤNG TRONG CÁC SẢN PHẨM BẢO MẬT THÔNG TIN

3.1. GIỚI THIỆU VỀ OPENSWAN.

FreeS/WAN là dự án đầu tiên hoàn thành việc thực hiện các giao thức IPSec trên hệ điều hành Linux được bắt đầu vào tháng 4 năm 1999. OpenSwan và Strongswan đã tiếp tục dự án FreeS/WAN. OpenSwan là dự án phần mềm mã nguồn mở của tập đoàn Xelerance, cho phép chúng ta xây dựng các tunnel an toàn thông qua các mạng không tin cậy (Internet). Tất cả các luồng thông tin qua các mạng không tin cậy được mã hóa bởi máy IPSec gateway và được giải mã bởi một IPSec gateway khác ở đầu bên kia. Kết quả tạo ra một mạng riêng ảo.

OpenSwan là sự bổ sung của IPSec cho Linux, nó hỗ trợ các nhân 2.2+ và chạy trên nhiều nền khác nhau bao gồm x86, x86-64, MIPS, và ARM.

Các giao thức IPSec được phát triển bởi tổ chức IETF (Internet Engineering Task Force) và là tính năng tùy chọn trong IPv4 nhưng là một tính năng bắt buộc trong IPv6. Hiện nay, hầu như tất cả các nhà sản xuất Router và các phần mềm an toàn đều hỗ trợ IPSec. Rất nhiều công ty

hợp tác với nhau trong dự án này để đảm bảo các sản phẩm của họ có khả năng hoạt động một cách tương thích.

Mục tiêu chính của dự án này là:

• Làm cho IPSec trở nên phổ biến rộng rãi không giới hạn. o Cung cấp mã nguồn miễn phí theo quy định của GNU. o Chạy trên nhiều hành lang phần cứng khác nhau. o Không giới hạn về khu vực địa lý, lãnh thổ.

• Đảm bảo thực hiện IPSec chất lượng cao trên hệ điều hành Linux. o Tương thích với tất cả các CPU mà Linux hỗ trợ.

o Tương thích với các hệ thống thực hiện IPSec khác..

OpenSwan được thiết kế thành 2 tập module chính, đó là Pluto và KLIPS. Vai trò của Pluto là thực hiện việc thiết lập các SA an toàn dựa trên giao thức IKE. Vai trò của KLIPS là thực hiện xác thực và bảo vệ các gói dữ liệu trên các SA đã được thiết lập.

Hình 3.1: Sơ đồ hoạt động của các module trong OpenSwan 3.1.1. Giới thiệu về Pluto. (adsbygoogle = window.adsbygoogle || []).push({});

Các module chương trình chính trong Pluto.

Tên module Chức năng

Spdc.h Spdc.c

Xây dựng các cơ sở của chính sách an toàn( ví dụ: các cấu trúc của các transform, thuật toán xác thực, mã hóa nhóm của Diffie-Hellman.)

IPSec_doi.h IPSec_doi.c

Thực hiện việc trao đổi các thông tin với các gateway khác để thực hiện các quá trình thỏa thuận các SA an toàn, trong module này, nó cũng thực hiện việc xác thực các gateway mã

hóa bằng việc sử dụng khóa chia sẻ từ trước hay hệ mật khóa công khai.

Preshared.h Preshared.c

Thực hiện việc lấy các giá trị khóa của RSA đặt trong /etc/IPSec.conf và /etc/IPSec.seccrets để phục vụ cho việc mã hóa, giải mã và xác thực

Crypto.h Crypto.c

Mã và giải mã các message của pluto trong quá trình thỏa thuận các SA an toàn. Thuật toán mã hóa ở đây sử dụng DES hoặc IDEA( giá trị mặc định là IDEA)

Cookie.h Cookie.c

Sinh ra các Cookie

Connection.h Connection.c

Sử lý các thông tin về các kết nối

Kernel.h Kernel.c Server.h Server.c Kernel_comm.h Kernel_comm.c

Thực hiện việc trao đổi các thông tin giữa Pluto và KLIPS

Whack.h Whack.c

Kerkel_comm.h Kerkel_comm.c

Giao diện để thực hiện các lệnh của Pluto( Whack) và thực hiện các tiến trình của Whack

Constants.h Lưu và định nghĩa các hằng, bao gồm cả số Diffie-Hellman. Md5.h

Md5.c

Tạo các giá trị tóm lược của hàm băm theo giải thuật MD5

IPSec KLIPS IP TCP UDP ICMP Telnet Pluto SPD SPD KLIPS IP TCP UDP ICMP Telnet Pluto SPD SPD sha1.c

Config.in Lưu trữ các thông tin cấu hình của IPSec để add và Kernel Defconfig Đặt các giá trị ngầm định của IPSec vào Kernel

IPSec_md5.h IPSec_md5.c IPSec_sha1.h IPSec_sha1.c

Thực hiện các hàm băm MD5 và SHA-1

pfkey_v2.h pfkey_v2.c

pfkey_v2_parser.h pfkey_v2_parser.c

Thực hiện việc trao đổi thông tin giữa Pluto và KLIPS (adsbygoogle = window.adsbygoogle || []).push({});

IPSec_xform.h IPSec_xform.c

Kết hợp với các thư viện DES, IDEA và các thông tin thỏa thuận được của Pluto chuyển xuống để tạo ra các khóa an toàn cho phiên liên lạc.

IPSec_rcv.h IPSec_rcv.c

Thực hiện việc giải mã các gói tin từ ngoài tới

IPSec_tunnel.h IPSec_tunnel.c

Mã và đóng gói các gói tin rồi gửi ra đường mạng

Hình 3.2: Cơ chế hoạt động của Pluto 3.1.2. Giới thiệu về KLIPS.

KLIPS lần đầu tiên có trong IPSec Stack cho Linux, phiên bản đầu tiên chạy trên hệ điều hành Linux 2.0, và phiên bản mới nhất chạy trên bất cứ hệ điều hành Linux nào giữa 2.2 và 2.6. Một tính năng của KLIPS là nó hỗ trợ đầy đủ Path MTU Discovery (RFC 1191). Path MTU Discovery mô tả một phương pháp để xác định đơn vị truyền cực đại của một gói tin.

Path MTU Discovery tìm ra kích thước lớn nhất các gói tin có thể được xử lý bởi các định tuyến trung gian giữa hai máy tính. Các máy tính sẽ khởi xướng gửi các gói tin nhỏ, nhưng khi nó nhận biết chính xác về mọi mặt của gói tin thì nó sẽ tăng kích thước gói tin lớn dần. Khi dung lượng của gói tin đã quá lớn, nó sẽ hủy gói tin và gửi lại thông báo cho các máy chủ với nội dung “Destination Unreachable”; trong đó sẽ có một thông báo nói rằng "Datagram Too Big (gói dữ liệu quá lớn)". Máy tính gửi sẽ nhận được thông báo đó, đọc giá trị “Next-Hop MTU”, và sử dụng gói tin có dung lượng nhỏ hơn.

Hình 3.3: Cơ chế hoạt động của KLIPS 3.2. ỨNG DỤNG CỦA OPENSWAN.

• Mạng riêng ảo (VPN): Cho phép 2 mạng máy tính truyền thông một cách an toàn khi kết nối giữa chúng được thực hiện thông qua một mạng không tin cậy thứ 3. Phương pháp thực hiện là đặt gateway an toàn giữa các mạng tin cậy và mạng không tin cậy. Các gateway sẽ mã tất cả các gói tin đi ra mạng không tin cậy và giải mã tất cả tất cả các gói tin đến từ mạng không tin cậy. Do đó tạo thành một Tunnel qua mạng không tin cậy. Nếu thuật toán mật mã là mạnh, quá trình thực hiện cẩn thận, quản trị gateway thành thạo, khi đó ta có thể hoàn toàn tin cậy tính an toàn của Tunnel: hai mạng tin cậy khi đó sẽ trở thành một mạng riêng lớn đơn lẻ.

• Road Warrior: Đây là trường hợp mà các người dùng không có địa chỉ IP tĩnh muốn kết nối đến mạng con phía sau gateway an toàn. Trong trường hợp này, để kết nối được cần phải biết các tham số sau: IP tĩnh của gateway, dải IP của mạng con phía sau gateway, tên mà mỗi bên dùng để đàm phán cho Ipsec (tên này được phân dải ở gateway có dạng @xyz.example.com). Ở đây gateway sẽ không xác thực dựa vào địa chỉ IP của người dùng mà sẽ xác thực thông qua tên đã được phân dải ở gateway. Nếu xác thực thành công gateway sẽ mã hóa tất cả các gói tin được gửi

tới người dùng và giải mã tất cả các gói tin từ người dùng gửi tới. Qua đó tạo nên một kênh an toàn giữa người dùng với mạng con phía sau gateway.

3.3. CÀI ĐẶT, CẤU HÌNH OPENSWAN.3.3.1. Mô hình cài đặt. 3.3.1. Mô hình cài đặt.

Hình 3.4: Mô hình cài đặt hệ thống dùng OpenSwan

Mô hình cài đặt gồm các thành phần:

- 2 Router R1 và R2 có chức năng định tuyến giữa 2 máy OpenSwan1 và OpenSwan2. - OpenSwan1, OpenSwan2 là các gateway mã hóa. Cả 2 máy đều có 2 giao diện mạng; một giao diện nối với mạng trong (192.168.34.0/24 đối với OpenSwan1, 192.168.56.0/24 đối với OpenSwan2), một giao diện nối với mạng ngoài (172.16.11.0/24 đối với OpenSwan1, 172.16.22.0/24 đối với OpenSwan2).

- Client1, Clien2 là 2 máy tính đã cài đặt sẵn các ứng dụng người dùng.

3.3.2. Cài đặt OpenSwan.

Giải nén file openswan-2.6.32.tar.gz bằng câu lệnh

tar –xzf openswan-2.6.32.tar.gz

Tiếp đó vào thư mục openswan-2.6.32 để cài đặt.

[root@dungnv1 openswan-2.6.32]# make programs install

[root@dungnv1openswan-2.6.32]#make KERNELSRC=/usr/src/linux-2.6.36 module minstall programs install

Khởi động dịch vụ IPSEC và kiểm tra kết quả cài đặt OpenSwan:

Hình 3.5: Kết quả cài đặt OpenSwan

Như vậy quá trình cài đặt OpenSwan đã thành công.

3.3.3. Cấu hình OpenSwan.

a). Trên cả 2 máy OpenSwan1 và OpenSwan2 cùng bật “net.ipv4.ip_forward = 1” trong file “/etc/sysctl.conf”:

# Kernel sysctl configuration file for Red Hat Linux (adsbygoogle = window.adsbygoogle || []).push({});

# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details.

# Controls IP packet forwarding net.ipv4.ip_forward = 1

b). Tạo file /etc/ipsec.secrets: file này chứa tham số bí mật RSA sử dụng để xác thực máy OpenSwan ở bên kia.

Trên máy OpenSwan1 thực hiện lệnh:

[root@dungnv1 ~]#ipsec newhostkey --output /etc/ipsec.secrets

Trên máy OpenSwan2 thực hiện lệnh:

[root@dungnv2 ~]#ipsec newhostkey --output /etc/ipsec.secrets

c). Lấy khóa xác thực bên trái và bên phải: Trên máy OpenSwan1 thực hiện lệnh:

[root@dungnv1 ~]# ipsec showhostkey --left

Trên máy OpenSwan2 thực hiện lệnh:

[root@dungnv2 ~]# ipsec showhostkey --right

Kết quả thu được như sau:

Hình 3.7: Khóa xác thực của máy OpenSwan2

d). Cấu hình file ipsec.conf: Đây là file cấu hình của Ipsec mô tả các thông tin điều khiển và cấu hình hệ thống.

Trong mô hình cài đặt hệ thống ở trên sự kết nối giữa 2 nút trong mạng liên lạc có thể là giữa Gateway với Gateway, Gateway với Subnet, Subnet với Gateway hay Subnet với Subnet. Để

Một phần của tài liệu Kỹ thuật VPN sử dụng IPSEC (Trang 34)