Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
The following call sequence is applicable when the IPSEC layer triggers an encryption
operation with the esp_output function. During configuration, the administrator set up
the use of rfc4106(gcm(aes)) as the cipher for ESP. The following call sequence is now
depicted in the ASCII art above:
The SEQIV performs its operation to generate an IV where the core function is
seqiv_geniv().
2. Now, SEQIV uses the AEAD API function calls to invoke the associated AEAD
cipher. In our case, during the instantiation of SEQIV, the cipher handle for GCM is
provided to SEQIV. This means that SEQIV invokes AEAD cipher operations with
the GCM cipher handle.
During instantiation of the GCM handle, the CTR(AES) and GHASH ciphers are
instantiated. The cipher handles for CTR(AES) and GHASH are retained for later
use.
The GCM implementation is responsible to invoke the CTR mode AES and the
GHASH cipher in the right manner to implement the GCM specification.
3. The GCM AEAD cipher type implementation now invokes the SKCIPHER API with
the instantiated CTR(AES) cipher handle.
That means that the SKCIPHER implementation of CTR(AES) only implements the
CTR block chaining mode. After performing the block chaining operation, the
CIPHER implementation of AES is invoked.
4. The SKCIPHER of CTR(AES) now invokes the CIPHER API with the AES cipher
handle to encrypt one block.
5. The GCM AEAD implementation also invokes the GHASH cipher implementation via
the AHASH API.
Tham khảo:
1. RFC 4303: IP encapsulating security payload (esp)
2. RFC 6071: IP Security (IPsec) and Internet Key Exchange (IKE) Document
Roadmap
3. RFC 4106: AES-GCM-ESP
4. RFC 4306 RFC 5282: The IKEv2
5. RFC 2406: IP Encapsulating Security Payload (ESP)
KEYWORD, WORD IN THIS FIELD
Transformation context
Transformation object
NỘI DUNG TÌM HIỂU
I. NGHIÊN CỨU CRYPTO SUBSYSTEM TRONG NHÂN
LINUX
static inline int crypto_aead_decrypt(struct aead_request *req)
{
struct crypto_aead *aead = crypto_aead_reqtfm(req);
Lấy con trỏ trong trường req gán với con trỏ tfm trong aead
struct crypto_alg *alg = aead->base.__crt_alg;
LẤY con trỏ pointer TRƯỜNG ALG KIỂU CRYTO_ALG TRONG AEAD RA.
unsigned int cryptlen = req->cryptlen;
LẤY CHIỀU DÀI DATA MÃ HÓA RA
int ret;
Biến trả về của hàm
crypto_stats_get(alg);
\
if (crypto_aead_get_flags(aead) & CRYPTO_TFM_NEED_KEY)
Lấy cờ crt_flags(32bit) trong tfm của aead (tức là tfm của req)
ret = -ENOKEY;
else if (req->cryptlen < crypto_aead_authsize(aead))
Nó so sánh crytlen trong request vs aead authsize (được tạo ra chắc là chuẩn j đó vì
aead chỉ có tfm thuộc req còn 2 trường còn lại tự maybe set default )
ret = -EINVAL;
else
ret = crypto_aead_alg(aead)->decrypt(req);
Copy trường alg trong aead ( kiểu crypto_aead) vào base ( tên của struct mới kiểu
aead_alg để chứa trường alg( crypto_alg ) )rồi trỏ đến decrypt
Hàm giải mã trỏ vào??? Tìm hiểu sâu hơn nó vô lớp nào??
crypto_stats_aead_decrypt(cryptlen, alg, ret);
Copy &alg->stats.aead.decrypt_tlen ( data length để xử lý giải mã) vào biến
cryptolen nếu ret ko gặp lỗi, và giảm biến refcnt của alg 1 đơn vị.
return ret;
}
RETURN: 0 if successful
- EBADMSG if ….
- <0 if error occur
aead_request: Là 1 struct chứa các biến sau:
* base: Các thuộc tính phổ biến cho các yêu cầu crypto request
* @assoclen: độ dài tính theo byte của associated data cho việc xác thực
* @cryptlen: Độ dài data để encrypt và decrypt
* @iv: Initialisation vector ??? - tìm hiểu kỹ hơn IV
* @src: Source data -
* @dst: Destination data -
* @__ctx: Start of private context data
crypto_aead - authenticate + cipher + intergraty
Là 1 struct gồm 3 :
Int Authsize
Int Reqsize
Struct Crypto_tfm base object để transform
u32 crt_flags;
cờ crt_flags 32 bits
union {
struct ablkcipher_tfm ablkcipher;
struct blkcipher_tfm blkcipher;
struct cipher_tfm cipher;
struct compress_tfm compress;
} crt_u; trường lưu object transform theo các kiểu
Thực thi trong các file cuae gcm (aes): gcm.c; aes-generic.c,ctr.c,ghash-generic.c,seqiv.c
kernel crypto API | IPSEC Layer
|
+-----------+ |
| | (1)
| aead | <----------------------------------- esp_output
| (seqiv) | ---+
+-----------+ |
| (2)
+-----------+ |
| | <--+ (2)
| aead | <-----------------------------------esp_input
| (gcm) | ------------+
+-----------+ |
| (3) | (5)
v v
+-----------+ +-----------+
| | | |
| skcipher | | ahash |
| (ctr) | ---+ | (ghash) |
+-----------+ | +-----------+
|
+-----------+ | (4)
| | <--+
| cipher |
| (aes) |
+-----------+
trong đó, mẫu mã hóa kiểu Cameron và mật mã khối đơn lẻ là mẫu đã nói ở trên và mật
mã khối đơn tương ứng. Nếu có thể, các mẫu bổ sung có thể kèm theo các mẫu khác,
chẳng hạn như
API mã hóa hạt nhân có thể cung cấp nhiều triển khai của một mẫu hoặc một mật mã
khối đơn. Ví dụ, AES trên phần cứng mới hơn của Intel có các triển khai sau: AES-NI,
triển khai trình biên dịch chương trình hoặc thẳng C. Bây giờ, khi sử dụng chuỗi Hồi
quy aeses với API mã hóa hạt nhân, triển khai mã hóa nào được sử dụng? Câu trả lời
cho câu hỏi đó là số ưu tiên được gán cho mỗi lần thực hiện mật mã bởi API mã hóa
hạt nhân. Khi người gọi sử dụng chuỗi để chỉ một mật mã trong quá trình khởi tạo
handler mật mã, API mã hóa hạt nhân sẽ tra cứu tất cả các triển khai cung cấp một
triển khai với tên đó và chọn triển khai với mức ưu tiên cao nhất.
name: the generic name of the cipher that is subject to the priority-based selection –
this name can be used by the cipher allocation API calls (all names listed above are
examples for such generic names)
driver: the unique name of the cipher – this name can be used by the cipher
allocation API calls
module: the kernel module providing the cipher implementation (or “kernel” for
statically linked ciphers)
priority: the priority value of the cipher implementation
refcnt: the reference count of the respective cipher (i.e. the number of current
consumers of this cipher)
selftest: specification whether the self test for the cipher passed
type:
o skcipher for symmetric key ciphers
o cipher for single block ciphers that may be used with an additional template
o shash for synchronous message digest
o ahash for asynchronous message digest
o aead for AEAD cipher type
o compression for compression type transformations
o rng for random number generator
o givcipher for cipher with associated IV generator (see the geniv entry below for
the specification of the IV generator type used by the cipher implementation)
o kpp for a Key-agreement Protocol Primitive (KPP) cipher such as an ECDH or
DH implementation
blocksize: blocksize of cipher in bytes
keysize: key size in bytes
ivsize: IV size in bytes
seedsize: required size of seed data for random number generator
digestsize: output size of the message digest
geniv: IV generation type:
o eseqiv for encrypted sequence number based IV generation
o seqiv for sequence number based IV generation
o chainiv for chain iv generation
o <builtin> is a marker that the cipher implements IV generation and handling as it
is specific to the given cipher
II. NGHIÊN CỨU TỔNG HỢP VỀ ESP – IKE – GIẢI
THUẬT KẾT HỢP 2 IN 1 (AES – GCM)
1. Nghiên cứu về ESP: RFC 4303
ESP cung cấp việc:
- Bảo mật mã hóa confidentially.
- Xác thực nguồn gốc data origin authentication,
- Xác định tính toàn vẹn kết nối connectionless integrity,
- Xác định tính lặp lại gói an anti-replay service (a form of partial sequence integrity), and
tính tuyệt mật của data flow ((limited) traffic flow confidentiality).
Các dịch vụ này phụ thuộc vào options mà thời điểm SA được thiết lập và địa điểm thi
hành trong mạng (dựa trên Security policy).
ESP KHÔNG CHỈ CUNG CẤP MÃ HÓA MÀ CÒN CUNG CẤP HIỆU NĂNG
TỐT TRONG CÁC DỊCH VỤ TRÊN. (THAY VÌ CHỈ DÙNG AH)
Data origin authentication and connectionless integrity :Xác thực nguồn gốc dữ liệu và
tính toàn vẹn không kết nối là các dịch vụ chung , sau đây được gọi chung là 'tính toàn
vẹn'. Nếu xác thực toàn vẹn kết nối thì được tính toán tiếp còn với xác thực nguồn gốc
data thì gián tiếp ràng buộc khóa key giữa 2 bên khi trao đổi. Đây là 1 dịch vụ
optional, nó được trao đổi,thương lượng ở trình quản lý SA protocols và được config ở
đó (IKE). Dịch vụ này thay thế cho AH vì nó nhanh hơn nhiều xài pipeline
Anti-replay được lựa chọn nếu dịch vụ toàn vẹn data integrity được chọn cho nó. Nó do
người nhận chọn chứ ko do negotiate (thương lượng) trong quá trình SA. ESP không áp
dụng đối với giao thức quản lý SA negotiate tính năng này
The traffic flow confidentialy (TFC) bảo mật lưu lượng tuyệt mật, dùng để che giấu địa
chỉ nguồn và địa chỉ đích của các đối tượng trao đổi. Các đặc trưng mới của TFC ở ÉSP
là tạo và bỏ đi lưu lượng giả, làm đệm tốt hơn cho lưu lượng thật.
1.1.ESP format:
-
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----
| Security Parameters Index (SPI) | ^Int.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| Sequence Number | |ered
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ---
-
| Payload Data* (variable) | | ^
~ ~ | |
| |
|Conf.
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov-
| | Padding (0-255 bytes) |
|ered*
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| | Pad Length | Next Header | v v
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -----
-
| Integrity Check Value-ICV (variable) |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- ESP trailer bao gồm: Padding, Pad length, Next Header fields Thêm vào đó, data ESP
trailer ẩn ( ko đc truyền) thì nằm trong phần xác thực.
- Nếu tính toàn vẹn được chọn, tính toàn vẹn bao gồm SPI, sequence number,payload data
và ESP trailer (cả ngầm ẩn và lộ rõ).
- Nếu dịch vụ bảo mật được chọn, nội dung mã hóa bao gồm ciphertext : Payload data,
ESP trailer.
- IV là trường optional được thêm sau.
- Khi sử dụng bất kỳ thuật toán chế độ kết hợp nào, thuật toán được dự kiến sẽ trả về cả
bản rõ (plaintext) được giải mã và dấu hiệu pass / fail để kiểm tra tính toàn vẹn. Đối với
các thuật toán chế độ kết hợp, ICV thường xuất hiện ở cuối gói ESP (khi toàn vẹn được
chọn) có thể bị bỏ qua. Khi ICV bị bỏ qua và toàn vẹn được chọn, trách nhiệm của thuật
toán chế độ kết hợp là mã hóa trong Payload Data, một phương tiện tương đương ICV
để xác minh tính toàn vẹn của gói.
- Nếu thuật toán chế độ kết hợp chỉ cung cấp tính toàn vẹn cho dữ liệu được mã hóa, thì sẽ
cần sao chép SPI và Sequence Number như một phần của Payload Data.
5
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Security Parameters Index (SPI) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
| IV (optional) | ^ p
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | a
| Rest of Payload Data (variable) | | y
~ ~ | l
| | | o
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | a
| | TFC Padding * (optional, variable) | v d
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---
| | Padding (0-255 bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | Pad Length | Next Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Integrity Check Value-ICV (variable) |
~ ~
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Cuối cùng, một điều khoản mới được thực hiện để chèn phần đệm Padding cho luồng lưu
lượng bảo mật sau Payload Data và trước đoạn ESP trailer.
- Nếu chế độ đường hầm đang được sử dụng, thì việc triển khai IPsec có thể thêm phần
đệm Bảo mật Lưu lượng Lưu lượng (TFC) sau trường Payload data và trước trường
Padding .
- Nếu chế độ thuật toán kết hợp được sử dụng thì trường ICV sẽ bị bỏ qua. Bởi vì giải
thuật và mode được fixed khi SA được thiếp lập thì format chi tiết của ESP packet sẽ
được fixed cho tất cả traffic sử dụng SA đó.
Với mỗi SA unicast, SPI được sử dụng bởi chính nó để xác định SA hoặc để sử dụng kết
hợp với các loại IPsec protocol. Bởi vì giá trị SPI được tạo bởi người nhận cho unicast
SA bất kể giá trị đó hiệu quả để xác định SA bởi chính nó hay kết hợp vs các giá trị IPsec
protocol khác là vấn đề nôị bộ. Nếu Ipsec thi hành multicast, nó phải hỗ trợ multicast SA
sử dụng giải thuật để map Ipsec data vs SA. Mỗi entry trong SAD phải xác đích liệu SA
lookup có sử dụng địa chỉ đích hay nuồn Ip address. Đối với truyền multicast, trường SPI
này ko được sử dụng cho SA lookup. Đối với việc gói bảo vệ Ipsec được gửi đến, việc
triển khai phải tiến hành tìm kiếm SAD sao cho tìm thấy mục nhập khớp vs SA dài nhất.
Quá trình tìm kiếm tra cứu SA như sau:
1. Tìm kiếm SAD cho việc match on tra khớp (SPI, des address, source address). Nếu
SAD entry khớp, xử lý gói ESP inbound packet vs SAD đã tra khớp đó. Ngược lại,
tới bước 2
2. Tìm kiếm SAD cho việc tra khớp ( SPI, des address). Nếu SAD entry khớp, xử lý gói
theo SAD tra khớp đó.
3. Tìm kiếm SAD cho việc tra khớp (SPI)…..
Trong thực tế, với việc thực thi bằng phần mềm, có thể index into hash table bởi SPI. Các
SAD entry của mỗi hash table được giữ sắp xếp để xác định SA dài nhất
Sequence number: 32 bit field chứa counter được tăng cho mỗi packet gửi Chống anti-
replay
Extended sequence numver : 64 bit….
Payload data
Padding ( for encryption): 2 nhân tố yêu cầu và động lực sử dụng Padding field.
- Nếu giải thuật mã hóa được sử dụng yêu cầu bản rõ plaintext là bội số của 1 số byte, ví
dụ block size của block cipher, Padding được sử dụng để fill vào plaintext( bao gồm
Payload data,Padding, Pad length, Next header) để đc kích cỡ size phù hợp vs thuật toán
mã hóa
- Padding được yêu cầu, bất kể cả thuật toán mã hóa yêu cầu hay ko => để đảm bảo kích
cỡ của ciphertext chấm dứt ranh giới 4 byte( tức là 4 byte một lần ( nhìn cái sơ đồ packet
là 32 bit) => đảm bảo trương ICV được căn chỉnh 4 byte
- Người gửi có thể thêm vào 0 255 byte của padding.
- Với mục đích để cho số bit mã hóa là bội số của block size, tính toán padding phải được
áp dụng vs payload data, ko bao gồm IV nhưng bao gồm ESP trailer. Nếu là giải thuật
kết hợp ( bao gồm cả mã hóa và xác thuật) yêu cầu SPI và sequence number để xác định
tính toàn vẹn, bản sao chép SPI và sequence number sẽ nằm trong Payload data sau đó
phiên bản sao chép của data này liên kêts vs ICV data ( tương đương) được bao gồm
trong tính toán của pad length.
- Với mục đích đảm bảo ICV được chỉ định ngay tại biên giới 4 byte, việc tính toán
Padding được áp dụng vs payload bao gồm cả IV, pad length, next header. Nếu giải thuật
kết hợp được sử dụng thi bản sao data và dữ liệu tương đương ICV sẽ được nằm trong
payload và được tính toán bởi padding.
Pad length
- Trường pad length xác định số byte pad trong padding nhưng ko chứa TFC padding
Next hear
- Next haeder là trường bắt buộc, 8 bit xác định loại data chứa trong Payload data field.
VD: Ipv4/Ipv6, next layer header and data. Giá trị là giá trị IP protocol ( xem trên IANA)
- Nếu Ip proto là 59 no next header dummy packet thk nhận discard nó đi.
DUMMY PACKET: CÓ THỂ ĐƯỢC THÊM Ở KHOẢNG NGUẪ NHIÊN ĐỂ CHE ĐI
LƯU LƯỢNG THỰC SỰ
TFC padding:
- TFC được thêm vào trước Padding, sau Paylload data để đệm thêm byte ( ko có chuẩn j
cho việc tính toán ra đc value ở field này). Trương này chỉ thêm vào khi Payload data
chúa độ dài cụ thể của IP datagram => Nhờ length trong này mà người nhận có thể bỏ
được TFC padding bởi giá trị thật thì thk Payload biết rồi. Nếu TFC padding được thêm
vào thì cái field chứa độ dài cụ thể của Ip datagram này ko đc hiệu chỉnh để bao gồm
TFC padding.
ICV: độ dài biến thiên được tính dựa trên ESP header (SPI, seq num), payload, esp
trailer(padding, pad length, next header) dựa trên gaiir thuật bảo toàn vẹn được xác
định trong SA.
-----------------------------------------------------------
IPv4 | new IP hdr* | | orig IP hdr* | | | ESP | ESP|
|(any options)| ESP | (any options) |TCP|Data|Trailer| ICV|
-----------------------------------------------------------
|<--------- encryption --------->|
|<------------- integrity ------------>|
- Nếu người nhận đã enable dịch vụ anti-replay cho SA này, Counter của packet của người
nhận cho SA này phải được khởi tạo từ 0 khi SA bắt đầu được thiết lập. Với mỗi gói
nhận được, người nhận phải xác nhận rằng packet chứa Seq number ko trùng vs Seq
number của packet khác trong SA lifetime… (Tìm hiểu tiếp )
Xác thực ICV value vs giải thuật kết hợp:
Người nhận làm theo quá trình sau:
- Giải mã và kiểm tra tính toàn vẹn ESP payload data, padding, pad length và next header
sử dụng key và giải thuật và dữ liệu đồng bộ mã hóa (IV) (được xác định bởi SA).
Trường SPI trong ESP header và Giá trị counter của người nhận là input của giải thuật vì
nó là bắt buộc yêu cầu cho kiểm tra tính toàn vẹn
+ Dữ liệu đồng bộ mã hóa (lộ rõ)( IV) được xác định từ Payload field và là input của giải
thuật mã hóa.
+ Dữ liệu đồng bộ mã hóa ( ẩn) –IV . Phiên bản cục bộ của IV được xây dựng và là input
của 1 số giair thuật
- Nếu kiểm tra tính toàn vẹn đc thực hiện bởi gaiir thuật kết hợp fail => bỏ Ip datagram
- Xử lý Padding trong giải thuật mã hóa
- Receiver kiểm tra Next header, nếu giá trị đó là 59, gói dummy bị bỏ mà ko xử lý tiếp.
- Giải ra Ip data gốc (tunnel mode) hay frame transport (transport mode) từ ESP Payload
Data field. Nó sẽ ngầm bỏ đi padding.
2. Nghiên cứu về IKEv2: RFC 4306 – The Internet Key Exchange
IKE là thành phần của IPsec để xác thực và duy trì SA. IKE sử dụng xác thực lẫn nhau
(mutual anthentication) giữ 2 bên để thiếp lập IKE SA ( bao gồm các thông tin bí mật sử
dụng cho thiết lập SA cho ESP và các giải thuật crypto mà có sử dụng SA để bảo vệ lưu
lượng.
2.1.Giới thiệu cách gọi, khái quát IKE
Ở đây, ta gọi IKE SA Là IKE_SA. SAS cho ESP được thiết lập từ IKE_SA được gọi là
CHILD_Sas
Tất cả giao tiếp IKE đều bao gồm : request và response => Trao đổi.
+ Tin nhắn đầu tiên thiết lập: trao đổi IKE_SA IKE_SA_INIT và IKE_AUT
+ IKE trao đổi tiếp theo là : CREATE_CHILD_SA và INFORMATIONAL
Thường thì chỉ có 1 IKE_SA_INIT vs IKE_auth ( TỔNG CỘNG 4 GÓI) để thiết lập
IKE_SA và CHILD_SA đầu tiên. Trong 1 số trường hợp ngoại lệ, có nhiều hơn. Trong
tất cả case, tất cả trao đổi IKE_SA_INIT phải kết thúc trước khi trao đổi cái khác, sau đó
tất cả IKE_AUT phải được hoàn thành, còn CREATE_CHILD)SA và
INFORMATIONAL trao đổi có thể xảy ra theo bất kỳ thứ tự nào. Trong 1 số trường hợp,
chỉ duy nhất 1 CHILD_SA được dùng cần thiết tại các IPsec endpoints ko cần thêm
trao đổi, những CHILD_SA sau dùng để xác thực cặp endpoints.
Nếu quá timeout mà ko nhận đc resonse (ACK) => truyền lại request.
Cặp req/res đầu tiên trong phiên trao đổi IKE (IKE_SA_INIT) trao đổi thông số bả mật
cho IKE_SA: Gửi nonces (IV), gửi giá trị Difile Hellman ( chắc là ko đối xứng…)
Cặp req/res tiếp theo thứ hai (IKE_AUTH) truyền các danh tính chứng minh các thông
tin tương ứng vs 2 danh tính và thiết lập SA cho ESP CHILD_SA đầu tiên.
Các loại trao đổi tiếp theo là CREATE_CHILD_SA (tạo ra CHILD_SA) và
ÌNORMATIONAL (xóa SA, báo cáo lỗi điều kiện hoặc thực hiện DỌN DẸP khác). Mỗi
yêu cầu yêu cầu một phản hồi. Một yêu cầu INFORMATIONAL không có PAYLOAD
(trừ PAYLOAD được mã hóa trống theo yêu cầu của cú pháp) thường được sử dụng như
một kiểm tra về mức độ sống. Những trao đổi tiếp theo không thể được sử dụng cho đến
khi các trao đổi ban đầu đã hoàn thành.
2.2.Các trường hợp sử dụng
- Security Gateway to Security Gateway Tunnel ( 2mangj Subnet, 2 router,..)
- Endpoint-to-Endpoint Transport ( 2 điểm đầu cuối).
- Endpoint to Security Gateway Tunnel
2.3. Trao đổi khởi tạo
Bắt đầu vs IKE_SA_INIT and IKE_AUTH exchanges (known in IKEv1 as Phase 1).
Gồm 4 messages, chứa cặp req vs res.
Cặp trao đổi IKE_SA_INIT sẽ trao đổi: giải thuật mã hóa, nonces (IV), giá trị Diffie-
Hellman
Cặp trao đổi IKE_AUTH xác thực thông tin messages trước, trao đổi danh tính và
certificate Thiết lập CHILD-SA đầu tiên. Một phần những messages này sẽ bị mã hóa
và bảo toàn vẹn bằng keys thiết lập được từ IKE_SA_INIT.
Payloads trong những message này sẽ chứa các thông tin sau:
Ký hiệu Payload
AUTH Authentication
CERT Certificate
CERTREQ Certificate Request
CP Configuration
D Delete
E Encrypted
EAP Extensible Authentication
HDR IKE Header
IDi Identification - Initiator
IDr Identification - Responder
KE Key Exchange
Ni, Nr Nonce
N Notify
SA Security Association
TSi Traffic Selector - Initiator
TSr Traffic Selector - Responder
V Vendor ID
IKE_SA_INIT
Initiator Responder
----------- -----------
HDR, SAi1, KEi, Ni -->
<-- HDR, SAr1, KEr, Nr, [CERTREQ]
Bên khởi tạo: HDR chứa SPIs, version num, flags của sự sắp xếp. Sai1 chứa giải thuật mã
hóa mà thằng khởi taọ hỗ trợ cho IKE_SA. KE là cái key: Là giá trị của đứa khởi tạo cho
Diffie-Hellman cho IKE_SA. Ni là IV, (nonces) (tạo bởi Pseudo Random Function) của
thằng khởi tạo.
Bên hồi đáp sẽ chọn giải thuật mã hóa crypto từ thằng khởi tạo đề nghị và truyền đạt sự
lựa chọn của nó trong SAr1, hoàn thành trao đổi Difie-Hellman trong Key payload, gửi
giá trị nonces (IV) của nó trong Nr payload. Vào thời điểm trao đổi, mỗi bên sẽ tạo 1 cái
SKEYSEED, từ đó mã tất cả các key được lấy cho quá trình IKE_SA. Tất cả ngoại trừ
headers của tất cả messages sẽ được mã háo và xác thực bởi keys lấy từ SKEYSEED.
Trong đó SK_e (cho encrypt) và SK_a (cho authenc) được tính riêng biệt tại mỗi bên, lấy
từ DH value để bảo vệ IKE_SA. Một khóa khác là SK_D được lấy và sử dụng để là vật
liệu tạo khóa cho CHILD_SAS
Initiator Responder
----------- -----------
HDR, SK {[N], SA, Ni, [KEi],
[TSi, TSr]} -->
where:
T1 = prf (K, S | 0x01)
T2 = prf (K, T1 | S | 0x02)
T3 = prf (K, T2 | S | 0x03)
T4 = prf (K, T3 | S | 0x04)
VD:nếu các khóa bắt buộc là khóa AES 256 bit và khóa HMAC 160 bit và chức năng prf
tạo ra 160 bit, thì khóa AES sẽ đến từ T1 và đầu T2, trong khi HMAC sẽ đến từ phần còn
lại của T2 và đầu T3)
2.7.Cách tạo Key material cho IKE_SA
Khóa chung được tính như sau: Một số lượng được gọi là SKEYSEED được tính từ
nonces (được trao đổi trong suốt IKE_SA_INIT trao đổi) và giá trị Diffie-hellman chung
được thiết lập trong quá trình trao đổi này. SKEYSEED được sử dụng để tính 7 key:
SK_d ( sử dụng để tạo key material cho CHILD_SAs => tạo key cho CHILD_SA( thiết
lập vs IKE_SA này); SK_ai và SK_ar được sử dụng cho giải thuật bảo vệ toàn vẹn;
SK_ei và SK_er cho mã hóa; SK_pi và SK_pr được sử dụng khi tạo AUTH payload.)
SKEYSEED và những thứ đc gọi ( làm từ nó):
SKEYSEED = 9 crgbv dfcxYH10:30 PM | Nr, g^ir)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SPI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 32-bit Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SPI |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 64-bit Extended Sequence Number |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+