I. Cấu trúc gói tin IPsec
Đầu tiên ta nhắc lại chút về IPSEC
IPSEC là kỹ thuật mã theo tiêu chuẩn IETF
-Tính bảo mật “confidentiality” (tức packet được mã hóa trước khi truyền đi trên mạng)
-Kiểm tra tính toàn vẹn gói tin “integrity”(tức kiểm tra gói tin không bị thay đổi khi đi qua một hệ thống mạng)
-Chứng thực mỗi gói tin”authentication” (chứng thực đúng người gửi hay không)
-
Hình 1.1
+ Với hình trên ta thấy một Frame bình thường gồm 3 phần L2-IP-(L4_Payload)
+ Với mode transport thì header ESP/ AH được chèn vào giữa IP và L4_payload của Frame.
+ Với mode Tunnel thì lúc này Frame sẽ được chèn thêm cặp IP source/destionation mới (Ở đây là 2 IP public 12.1.1.1 và 23.1.1.1). Lúc này bạn cứ hình dung mode Mode Tunnel sẽ đối xử toàn bộ phần packet của gói tin cũ “IP cũ + (L4_Payload) như là payload_L4_mới. Và header ESP/ AH cũng được chèn giữa New IP và Payload_L4_mới này.
II. AH và ESP header
1. AH:
- Không có mã hóa gói tin
+ Kiểm tra tính toàn vẹn
+ Kiểm tra chứng thực mỗi gói tin
2. ESP:
+ Mã hóa gói tin
+ Kiểm tra tính toàn vẹn
+ Kiểm tra chứng thực mỗi gói tin
3. Kiểm tra tính toàn vẹn gói tin và chứng thực đúng người gửi:
Làm thế nào để kiểm tra tính toàn vẹn của gói tin (tức gói tin không bị sửa chửa trong quá trình truyền đến đích).
Ta xem hình sau
Hình 1.2
+ Đối với Transport mode
Data ở đây tức là L4_Payload trong hình 1.1
IP header ở đây tức là phần IP trong hình 1.1
Key sẽ do mình cấu hình bằng tay (dùng lệnh Router(config)#crypto isakmp key …)
+ Đối với Transport mode
Data ở đây tức là (IP + L4_Payload) trong hình 1.1
IP header ở đây tức là phần New IP trong hình 1.1
Key sẽ do mình cấu hình bằng tay (dùng lệnh Router(config)#crypto isakmp key …)
+ AH header
Data + IP header + Key = Value A
Hash Value A ta được Hash_A
Hash_A này được sử dụng để xây dựng AH header.
+ ESP header.
Mã hóa Data thành Data_encrypted (mã hóa, xem phần thông tin thêm)
Data_encrypted + IP header + Key = Value A
Hash Value A ta được Hash_A
Hash_A này được sử dụng để xây dựng ESP header.
AH Header hay ESP Header được chèn vào giữa Nhu đã mô tả trong phần I.
Hash là một giá trị luôn không đổi.
Vd:
10:2=5
Nhưng 20:4=5
Hash chỉ có tính 1 chiều do từ 5 ta không thể nào suy được giá trị data ban đầu là 10 hay 20. Chỉ có lúc 2 router thương lượng giá nhau nên hash bằng cách chia cho 2 hay chia cho 4 thì lúc này mới suy ra được giá trị ban đầu.
Tính toàn vẹn dữ liệu (integrity)và chứng thực(authentication) đúng người gửi
Xem lại hình 1.2.
Nếu trong quá trình truyền mà gói tin bị sửa đổi thì lúc router bên kia nhận (Router 2 bên phải). Router 2 lấy (IP header + Data của gói tin)_router1 + Key_router2 hash ra rồi đem so sánh với AH_router1.
Nếu Hash_router2 = AH_router1 => gói tin không bị chỉnh sửa.
Nếu Hash_router2 # AH_router1 => gói tin đã bị thay đổi.
Đây gọi là kiểm tra tính toàn vẹn của Data và chứng thực data đó đúng chính xác người gửi. (tức Key_router1 giống Key_router2).
4. Thông tin thêm:
+ Các loại Hash thường dùng là SHA-1 hoặc MD5
Mã hóa gói tin(chỉ trong ESP protocol)
+ Thuật toán mã hóa đối xứng như(cùng key cho mã và giải mã): DES, 3DES, AES (dùng từ 80 tới 256 bits).
Diffie-Hellman được dùng để trao đổi Shared_key trong mã bất đối xứng. Shared_key đều giống nhau ở mỗi bên.
Key do hệ thống tự sinh và trao đổi với nhau.
+ Thuật toán mã hóa bất đối xứng như(dùng puclic key để mã, private key để giải mã): RSA (dùng từ 1024 tới 15360 bit)
Key do một nhà chuyên cung cấp chứng thực số như CA. Hoặc do hệ thống tự sinh.
III. Ipsec NAT Traversal
Ta thấy thiết bị cấu hình chức năng NAT port (hay còn gọi PAT) sẽ cần phải thấy port (tức phải thấy layer 4). Như hình 1.1 bên trên thì ESP/AH đã che mất phần layer 4.
Nếu qua thiết bị NAT không hỗ trợ NAT Traversal thì gói tin có header ESP/AH này sẽ bị Drop ngay lập tức.
Do đó, để giái quyết vần đề này người ta sẽ cần phải thêm UDP header vào phía trước ESP header.
Hình 1.3
Từ việc thêm vào UDP header sẽ không còn bị tình trạng Frame Ipsec qua thiết bị NAT sẽ bị Drop. Lúc này thiết bị PAT sẽ đối xử packet có chứa ESP header như là một UDP packet bình thường. Việc thêm vào UDP header sẽ làm cho checksum thay đổi do đó gói tin có UDP header này sẽ luôn được reset checksum=0.
Đầu tiên ta nhắc lại chút về IPSEC
IPSEC là kỹ thuật mã theo tiêu chuẩn IETF
-Tính bảo mật “confidentiality” (tức packet được mã hóa trước khi truyền đi trên mạng)
-Kiểm tra tính toàn vẹn gói tin “integrity”(tức kiểm tra gói tin không bị thay đổi khi đi qua một hệ thống mạng)
-Chứng thực mỗi gói tin”authentication” (chứng thực đúng người gửi hay không)
-
Hình 1.1
+ Với hình trên ta thấy một Frame bình thường gồm 3 phần L2-IP-(L4_Payload)
+ Với mode transport thì header ESP/ AH được chèn vào giữa IP và L4_payload của Frame.
+ Với mode Tunnel thì lúc này Frame sẽ được chèn thêm cặp IP source/destionation mới (Ở đây là 2 IP public 12.1.1.1 và 23.1.1.1). Lúc này bạn cứ hình dung mode Mode Tunnel sẽ đối xử toàn bộ phần packet của gói tin cũ “IP cũ + (L4_Payload) như là payload_L4_mới. Và header ESP/ AH cũng được chèn giữa New IP và Payload_L4_mới này.
II. AH và ESP header
1. AH:
- Không có mã hóa gói tin
+ Kiểm tra tính toàn vẹn
+ Kiểm tra chứng thực mỗi gói tin
2. ESP:
+ Mã hóa gói tin
+ Kiểm tra tính toàn vẹn
+ Kiểm tra chứng thực mỗi gói tin
3. Kiểm tra tính toàn vẹn gói tin và chứng thực đúng người gửi:
Làm thế nào để kiểm tra tính toàn vẹn của gói tin (tức gói tin không bị sửa chửa trong quá trình truyền đến đích).
Ta xem hình sau
Hình 1.2
+ Đối với Transport mode
Data ở đây tức là L4_Payload trong hình 1.1
IP header ở đây tức là phần IP trong hình 1.1
Key sẽ do mình cấu hình bằng tay (dùng lệnh Router(config)#crypto isakmp key …)
+ Đối với Transport mode
Data ở đây tức là (IP + L4_Payload) trong hình 1.1
IP header ở đây tức là phần New IP trong hình 1.1
Key sẽ do mình cấu hình bằng tay (dùng lệnh Router(config)#crypto isakmp key …)
+ AH header
Data + IP header + Key = Value A
Hash Value A ta được Hash_A
Hash_A này được sử dụng để xây dựng AH header.
+ ESP header.
Mã hóa Data thành Data_encrypted (mã hóa, xem phần thông tin thêm)
Data_encrypted + IP header + Key = Value A
Hash Value A ta được Hash_A
Hash_A này được sử dụng để xây dựng ESP header.
AH Header hay ESP Header được chèn vào giữa Nhu đã mô tả trong phần I.
Hash là một giá trị luôn không đổi.
Vd:
10:2=5
Nhưng 20:4=5
Hash chỉ có tính 1 chiều do từ 5 ta không thể nào suy được giá trị data ban đầu là 10 hay 20. Chỉ có lúc 2 router thương lượng giá nhau nên hash bằng cách chia cho 2 hay chia cho 4 thì lúc này mới suy ra được giá trị ban đầu.
Tính toàn vẹn dữ liệu (integrity)và chứng thực(authentication) đúng người gửi
Xem lại hình 1.2.
Nếu trong quá trình truyền mà gói tin bị sửa đổi thì lúc router bên kia nhận (Router 2 bên phải). Router 2 lấy (IP header + Data của gói tin)_router1 + Key_router2 hash ra rồi đem so sánh với AH_router1.
Nếu Hash_router2 = AH_router1 => gói tin không bị chỉnh sửa.
Nếu Hash_router2 # AH_router1 => gói tin đã bị thay đổi.
Đây gọi là kiểm tra tính toàn vẹn của Data và chứng thực data đó đúng chính xác người gửi. (tức Key_router1 giống Key_router2).
4. Thông tin thêm:
+ Các loại Hash thường dùng là SHA-1 hoặc MD5
Mã hóa gói tin(chỉ trong ESP protocol)
+ Thuật toán mã hóa đối xứng như(cùng key cho mã và giải mã): DES, 3DES, AES (dùng từ 80 tới 256 bits).
Diffie-Hellman được dùng để trao đổi Shared_key trong mã bất đối xứng. Shared_key đều giống nhau ở mỗi bên.
Key do hệ thống tự sinh và trao đổi với nhau.
+ Thuật toán mã hóa bất đối xứng như(dùng puclic key để mã, private key để giải mã): RSA (dùng từ 1024 tới 15360 bit)
Key do một nhà chuyên cung cấp chứng thực số như CA. Hoặc do hệ thống tự sinh.
III. Ipsec NAT Traversal
Ta thấy thiết bị cấu hình chức năng NAT port (hay còn gọi PAT) sẽ cần phải thấy port (tức phải thấy layer 4). Như hình 1.1 bên trên thì ESP/AH đã che mất phần layer 4.
Nếu qua thiết bị NAT không hỗ trợ NAT Traversal thì gói tin có header ESP/AH này sẽ bị Drop ngay lập tức.
Do đó, để giái quyết vần đề này người ta sẽ cần phải thêm UDP header vào phía trước ESP header.
Hình 1.3
Từ việc thêm vào UDP header sẽ không còn bị tình trạng Frame Ipsec qua thiết bị NAT sẽ bị Drop. Lúc này thiết bị PAT sẽ đối xử packet có chứa ESP header như là một UDP packet bình thường. Việc thêm vào UDP header sẽ làm cho checksum thay đổi do đó gói tin có UDP header này sẽ luôn được reset checksum=0.
Comment