Thuật toán sử dụng trong quản lý trao đổi khóa và xác thực cho SRTP:

Một phần của tài liệu Đảm bảo an ninh cho hệ thống VOIP di động (Trang 61)

a. Thuật toán AES dùng trong mã hóa cho SRTP:

Đặc điểm kỹ thuật

AES là một thuật toán mã hóa khối đối xứng với độ dài khóa là 128 bít (một chữ số nhị phân có giá trị 0 hoặc 1), 192 bít và 256 bít tƣơng ứng dọi là AES-128, AES-192 và AES-256. AES-128 sử dụng 10 vòng (round), AES-192 sử dụng 12 vòng và AES-256 sử dụng 14 vòng.

Vòng lặp chính của AES thực hiện các hàm sau: SubBytes(), ShiftRows(), MixColumns() và AddRoundKey(). Ba hàm đầu của một vòng AES đƣợc thiết kế để ngăn chặn phân tích mã bằng phƣơng thức “mập mờ“ (confusion) và phƣơng thức “khuếch tán“ (diffusion), còn hàm thứ tƣ mới thực sự đƣợc thiết kế để mã hóa dữ liệu. Trong đó “khuếch tán“ có nghĩa là các kiểu mẫu trong bản rõ (Dữ liệu đầu vào của phép mã hóa hoặc dữ liệu đầu ra của phép giải mã) đƣợc phân tán trong các bản mã (Dữ liệu đầu ra của phép mã hóa hoặc dữ liệu đầu vào của phép giải mã), “mập mờ“ nghĩa là mối quan hệ giữa bản rõ và bản mã bị che khuất. Một cách đơn giản hơn để xem thứ tự hàm AES là: Trộn từng byte (SubBytes), trộn từng hàng (ShiftRows), trộn từng cột (MixColumns) và mã hóa (AddRoundKey).

Đặc tả thuật toán AES

Đối với thuật toán AES, độ dài của khối đầu vào, khối đầu ra và trạng thái là 128 bít, số các cột (các từ có độ dài 32 bít) tạo nên trạng thái là Nb = 4.

Trong thuật toán AES, độ dài khóa mã K có thể là 128, 192 hay 256 bít. Độ dài khóa đƣợc biểu diễn bằng Nk = 4, 6 hoặc 8 thể hiện số lƣợng các từ 32 bít (số cột) của khóa mã.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Đối với thuật toán AES, số vòng đƣợc thay đổi trong quá trình thực hiện thuật toán phụ thuộc vào kích cỡ khóa. Số vòng này đƣợc ký hiệu là Nr. Nr = 10 khi Nk = 4, Nr = 12 khi Nk = 6 và Nr = 14 khi Nk = 8.

Các tổ hợp khóa-khối-vòng phù hợp đối với tiêu chuẩn này thể hiện trong Bảng 2.1. Việc thực hiện cụ thể thuật toán có liên quan đến độ dài khóa, kích cỡ khối và số vòng. Độ dài khóa (Nk từ) Độ dài khối (Nb từ) Số vòng (Nr) AES-128 4 4 10 AES-196 6 4 12 AES-256 8 4 14 Bảng 2.1: Tổ hợp Khóa-khối-vòng

Đối với phép mã hóa và phép giải mã, thuật toán AES sử dụng một hàm vòng gồm bốn phép biến đổi byte nhƣ sau: phép thay thế byte (một nhóm gồm 8 bít) sử dụng một bảng thay thế (Hộp-S), phép dịch chuyển hàng của mảng trạng thái theo các offset (số lƣợng byte) khác nhau, phép trộn dữ liệu trong mỗi cột của mảng trạng thái, phép cộng khóa vòng và trạng thái. Các phép biến đổi này (cũng nhƣ các phép nghịch đảo tƣơng ứng của chúng) đƣợc mô tả trong phần dƣới đây.

Phép mã hóa

Tại thời điểm bắt đầu phép mã hóa, đầu vào đƣợc sao chép vào mảng trạng thái sử dụng các quy ƣớc. Sau phép cộng khóa vòng khởi đầu, mảng trạng thái đƣợc biến đổi bẳng cách thực hiện một hàm vòng liên tiếp với số vòng lặp là 10, 12 hoặc 14 (tƣơng ứng với độ dài khóa), vòng cuối cùng khác biệt không đáng kể với Nr-1 vòng đầu tiên. Trạng thái cuối cùng đƣợc chuyển thành đầu ra. Hàm vòng đƣợc tham số hóa bằng cách sử dụng một lƣợc đồ khóa – mảng một chiều chứa các từ 4 byte nhận từ phép mở rộng khóa.

Phép biến đổi cụ thể gồm SubBytes(), ShiftRows(), MixColumns() và AddRoundKey() dùng để xử lý trạng thái.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Phép biến đổi dùng trong phép mã hóa áp dụng lên trạng thái (kết quả mã hóa trung gian, đƣợc mô tả dƣới dạng một mảng chữ nhật của các byte) sử dụng một bảng thay thế byte phi tuyến (Hộp S – bảng thay thế phi tuyến, đƣợc sử dụng trong một số phép thay thế byte và trong quy trình mở rộng khóa, nhằm thực hiện một phép thay thế 1-1 đối với giá trị mỗi byte) trên mỗi byte trạng thái một cách độc lập.

- ShiftRows()

Phép biến đổi dùng trong phép mã hóa áp dụng lên trạng thái bằng cách chuyển dịch vòng ba hàng cuối của trạng thái theo số lƣợng byte các offset khác nhau.

- MixColumns()

Phép biến đổi trong phép mã hóa thực hiện bằng cách lấy tất cả các cột trạng thái trộn với dữ liệu của chúng (một cách độc lập nhau) để tạo ra các cột mới.

- AddRoundKey()

Phép biến đổi trong phép mã hóa và phép giải mã. Trong đó, một khóa vòng (các giá trị sinh ra từ khóa mã bằng quy trình mở rộng khóa) đƣợc cộng thêm vào trạng thái bằng phép toán XOR (phép toán hoặc và loại trừ). Độ dài của khóa vòng bằng độ dài của trạng thái.

Mở rộng khóa

Thuật toán AES nhận vào một khóa mã K và thực hiện phép mở rộng khóa để tạo ra một lƣợc đồ khóa. Phép mở rộng khóa tạo ra tổng số Nb(Nr+1) từ. Thuật toán yêu cầu một tập khởi tạo gồm Nb từ và mỗi trong số Nr vòng đòi hỏi Nb từ làm dữ liệu khóa đầu vào. Lƣợc đồ khóa kết quả là một mảng tuyến tính các từ 4 byte.

Phép giải mã

Các phép biến đổi trong phép mã hóa có thể đƣợc đảo ngƣợc và sau đó thực hiện theo chiều ngƣợc lại nhằm tạo ra phép giải mã trực tiếp của thuật toán AES. Các phép biến đổi sử dụng trong phép giải mã gồm: InvShiftRows(), InvSubBytes(), InvMixColumns() và AddRoundKey().

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Phép biến đổi InvSubBytes() là nghịch đảo của phép thay thế theo byte SubBytes(), trong đó sử dụng một hộp-S nghịch đảo áp dụng cho mỗi byte của trạng thái.

- InvShiftRows()

Phép biến đổi InvShiftRows() là phép biến đổi ngƣợc của ShiftRows(). Các byte trong ba từ cuối của trạng thái đƣợc dịch vòng theo số byte khác nhau. Ở hàng đầu tiên (r=0) không thực hiện phép chuyển dịch, ba hàng dƣới cùng đƣợc dịch vòng Nb-shift(r,Nb) byte.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

- InvMixColumns()

Phép biến đổi InvMixColumns() là phép biến đổi ngƣợc của MixColumns(). Nó thao tác theo từng cột của trạng thái, xem mỗi cột nhƣ một đa thức bốn hạng tử.

- Biến đổi nghịch AddRoundKey()

Phép biến đổi AddRoundKey() là phép biến đổi thuận nghịch vì nó chỉ áp dụng một phép toán XOR nên nó đƣợc thực hiện nhƣ nhau ở cả phép mã hóa và phép giải mã.

Ngoài các phép giải mã trên, thuật toán AES còn cho phép thực hiện một phép giải mã tƣơng đƣơng có cùng thứ tự các phép biến đổi nhƣ trong phép mã hóa (các biến đổi đƣợc thay bằng các phép biến đổi ngƣợc). Có thể thực hiện đƣợc điều này là nhờ một thay đổi trong lƣợc đồ khóa. Hai tính chất tạo nên một phép giải mã tƣơng đƣơng là: Tính giao hoán giữa hai phép biến đổi SubBytes() và ShiftRows() (tính chất này cũng đúng với phép nghịch đảo InvSubBytes() và InvShiftRows()), Các phép toán trộn cột MixColumns() và InvMixColumns() là tuyến tính đối với đầu vào cột. Các tính chất này cho phép đảo ngƣợc thứ tự của các phép biến đổi InvSubBytes() và InvShiftRows(). Thứ tự của các phép biến đổi AddRoundKey() và InvMixColumns() cũng có thể đảo ngƣợc với điều kiện đảm bảo rằng các cột của lƣợc đồ khóa giải mã đƣợc chỉnh sửa bằng cách sử dụng phép biến đổi InvMixColumns().

Vấn đề thực hiện khóa

- Yêu cầu về độ dài khóa

Việc thực hiện khóa của thuật toán AES sẽ hỗ trợ ít nhất một trong ba độ dài khóa là 128 bít, 192 bít và 256 bít. Việc thực hiện khóa có thể tùy chọn hỗ trợ hai hoặc ba độ dài khóa, nhằm tăng thêm tính tƣơng tác cho các thực hiện thuật toán.

- Tham số hóa độ dài khóa, kích thƣớc khối và số vòng

AES quy định cụ thể các giá trị đƣợc phép dùng cho chiều dài khóa, kích thƣớc khối và số vòng. Tuy nhiên, các giá trị này có thể thay đổi trong tƣơng lai. Do đó, những nhà triển khai thuật toán AES có thể lựa chọn thiết kế linh hoạt với mong muốn của họ.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

MIKEY (Multimedia Internet KEYing) để thỏa thuận các tham số cần thiết cho các bên tham gia liên lạc với đặc tính dữ liệu thời gian thực và để tạo khóa phiên đảm bảo cho mã hóa, xác thực và toàn vẹn dữ liệu thoại giữa các bên. Trong trƣờng hợp MIKEY kết hợp với SRTP, MIKEY cung cấp khóa chủ (master key) cho SRTP. Trên cơ sở khóa chủ đó, khóa phiên (Khóa mã, khóa xác thực, và salt) cho giao dịch an toàn đƣợc tạo ra.

MIKEY hỗ trợ ba cơ chế xác thực khác nhau: Sử dụng khóa chia sẻ trƣớc (shared key), Khóa công khai với vận chuyển khóa, và Khóa công khai với trao đổi khóa sử dụng lƣợc đồ Diffie-Hellman (DH) có ký. Cơ chế thỏa thuận các tham số ở đây (kể cả cơ chế xác thực) đƣợc thực hiện theo giao thức mô tả phiên SDP (Section Description Protocol) dƣới hình thức Yêu cầu/Trả lời (Request /Response) để đảm bảo tính toàn vẹn, đối với khóa chia sẻ trƣớc là mã toàn vẹn thông báo (MIC- Message Integrity Code) và chữ ký số đối với hai trƣờng hợp còn lại.

Trong trƣờng hợp sử dụng khóa chia sẻ trƣớc, khóa đƣợc sinh ra bởi ngƣời khởi tạo phiên và đƣợc truyền bằng cách bí mật nào đó tới đối tác. Tất nhiên khóa chia sẻ trƣớc chỉ đƣợc áp dụng trong môi trƣờng có số ngƣời sử dụng hạn chế. Đối với môi trƣờng nhiều ngƣời sử dụng cần xây dựng cơ sở hạ tầng khóa công khai (PKI) với triển khai thực tế nhƣ sau: Ngƣời dùng lƣu một tập con các CA gốc (Root CAs ), nhà cung cấp dịch vụ SIP phải có chứng chỉ ký bởi một trong các CA gốc đó, và đến lƣợt mình nhà cung cấp dịch vụ SIP cấp chứng chỉ sử dụng cho ngƣời dùng. Trong các cơ chế xác thực dựa trên chứng chỉ, chúng ta chỉ quan tâm đến trƣờng hợp xác thực sử dụng DH, còn trƣờng hợp sử dụng khóa công khai dựa trên vận chuyển khóa không đƣợc đề cập đến ở đây do độ trễ trong quá trình xác thực khá lớn (trên thực tế Alice phải bằng cách nào đó có đƣợc khóa công khai của Bob trƣớc khi Alice gửi thông báo INVITE). Mặt khác sử dụng DH có ký còn có thể đạt đƣợc an toàn phía trƣớc hoàn thiện (perfect forward secrecy) (Với an toàn phía trƣớc hoàn thiện, kẻ tấn công không thể giải mã đƣợc cuộc nói chuyện (bản mã) đã ghi âm giữa Alice và Bob, ngay cả khi sau đó kẻ tấn công có đƣợc khóa riêng của họ).

Đáng lƣu ý ở đây là khi đƣa chứng chỉ vào trong nội dung thông báo MIKEY thông báo SIP sẽ quá lớn (khi độ dài khóa lớn hơn 1024 bit), không thể sử dụng

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

giao vận UDP để vận chuyển thông báo (thông báo SIP khi đó sẽ lớn hơn 1300 byte, vƣợt ngƣỡng cho phép) và phải vận chuyển bằng giao vận TCP hay TLS.

* Thuật toán Diffie – Hellman:

Hệ phân phối khoá Diffie-Hellman

Hệ phân phối khoá Diffie-Hellman không đòi hỏi TA (Trusted Authority – cơ quan đáng tin cậy) phải biết và chuyển bất kỳ thông tin bí mật nào về khoá của các ngƣời tham gia trong mạng để họ thiết lập đƣợc khoá chung bí mật cho việc truyền tin với nhau.

Trong một hệ phân phối khoá Diffie-Hellman, TA chỉ việc chọn một số nguyên tố lớn p và một phần tử nguyên thuỷ α theo mod p, sao cho bài toán tính logα trong p Zp* là rất khó. Các số p và α đƣợc công bố công khai cho mọi ngƣời tham gia trong mạng. Ngoài ra, TA có một sơ đồ chữ ký với thuật toán ký (bí mật) sigTA và thuật toán kiểm chứng (công khai) verTA.

Một thành viên bất kỳ A với danh tính ID(A) tuỳ ý chọn một số aA(0 ≤ aA ≤ p − 2) và tính bA= αa

A mod p. A giữ bí mật aA và đăng ký các thông tin (ID(A), bA) với TA. TA cấp cho A chứng chỉ:

C(A) = (ID(A), bA, sigTA(ID(A), bA)).

Các chứng chỉ của các thành viên trong mạng có thể đƣợc lƣu giữ trong một cơ sở dữ liệu công khai hoặc uỷ thác cho TA lƣu giữ và cung cấp công khai cho các thành viên mỗi khi cần đến.

Khi hai thành viên A và B trong mạng cần có một khoá bí mật chung để truyền tin bảo mật cho nhau thì A dùng thông tin công khai bB có trong C(B) kết hợp với số bí mật củamình là aA để tạo nên khoá:

KA,B= bBaA mod p = αaBaA mod p

Khoá chung đó B cũng tạo ra đƣợc từ các thông tin công khai bA của A và số bí mật của mình:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Để bảo đảm đƣợc các thông tin về và bB và bA là chính xác, A và B có thể dùng thuật toán verTA để kiểm chứng chữ ký xác thực của TA trong các chứng chỉ C(B) và C(A) tƣơng ứng.

Độ an toàn của hệ phân phối khoá Diffie-Hellman đƣợc bảo đảm bởi yếu tố sau đây: Biết bA và bB để tính KA,B chính là bài toán Diffie-Hellman tƣơng đƣơng: biết αa mod p và αb mod p, tính αab mod p. Đây là một bài toán khó tƣơng đƣơng bài toán tính lôgarit rời rạc hay bài toán phá mật mã ElGamal.

Giao thức trao đổi khoá Diffie-Hellman

Hệ phân phối khoá Diffie-Hellman nói trong mục trƣớc có thể dễ dàng biến đổi thành một giao thức trao đổi (hay thoả thuận) khoá trực tiếp giữa những ngƣời sử dụng mà không cần có sự can thiệp của một TA làm nhiệm vụ điều hành hoặc phân phối khoá.

Một nhóm bất kỳ ngƣời sử dụng có thể thoả thuận cùng dùng chung một số nguyên tố lớn p và một phần tử nguyên thuỷ α theo mod p, hai ngƣời bất kỳ trong nhóm A và B mỗi khi muốn truyền tin bảo mật cho nhau có thể cùng thực hiện giao thức sau đây để trao đổi khoá:

1. A chọn ngẫu nhiên số aA (0 aA p -2), giữ bí mật aA, tính bA= αa

A mod p và gửi bA cho B.

2. Tƣơng tự, B chọn ngẫu nhiên số aB (0 aB p -2), giữ bí mật aB, tính bB= αa B

mod p và gửi bB cho A.

3. A và B cùng tính đƣợc khoá chung:

KA,B= bBaA mod p = bAaB mod p( = αaAaBmod p)

Giao thức trao đổi khoá Diffie-Hellman có các tính chất sau:

1. Giao thức là an toàn đối với việc tấn công thụ động, nghĩa là một ngƣời thứ ba, dù biết bA và bB sẽ khó mà biết đƣợc KA,B.

Ta biết rằng bài toán “biết bA và bB tìm KA,B” chính là bài toán Diffie- Hellman và bài toán đó tƣơng đƣơng với bài toán phá mật mã El Gamal.

2. Giao thức là không an toàn đối với việc tấn công chủ động bằng cách đánh tráo giữa đƣờng, nghĩa là một ngƣời thứ ba C có thể đánh tráo các thông tin trao đổi giữa A và B, chẳng hạn, C thay αa

A mà A định gửi cho B bởi αa'A, và thay αa

Bmà B định gửi cho A bởi αa'

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

một khoá chung αaAa'B với C mà vẫn tƣởng là với B, đồng thời B đã lập một khoá chung αa'

AaB với C mà vẫn tƣởng là với A; C có thể giải mã mọi thông báo mà A tƣởng nhầm là mình gửi đến B, cũng nhƣ mọi thông báo mà B tƣởng nhầm là mình gửi đến A!

Một cách khắc phục kiểu tấn công chủ động nói trên là làm sao để A và B có thể kiểm chứng để xác thực tính đúng đắn của các khoá công khai bA và bB. Đƣa vào giao thức trao đổi khoá Diffie-Hellman thêm vai trò điều phối của một TA để đƣợc một hệ phân phối khoá Diffie-Hellman là một cách khắc phục nhƣ vậy. Trong hệ phân phối khoá Diffie-Hellman, sự can thiệp của TA là rất yếu, thực ra TA chỉ làm mỗi một việc là cấp chứng chỉ xác nhực khoá công khai cho từng ngƣời dùng chứ không đòi hỏi biết thêm bất cứ một bí mật nào của ngƣời dùng. Tuy nhiên, nếu chƣa thoả mãn với vai trò hạn chế đó của TA, thì có thể cho TA một vai trò xác nhận yếu hơn, không liên quan gì đến khoá, chẳng hạn nhƣ xác nhận thuật toán kiểm thử chữ ký của ngƣời dùng,

còn bản thân các thông tin về khoá (cả bí mật và công khai) thì do những ngƣời dùng trao đổi trực tiếp với nhau.

Giao thức trao đổi khoá D-H có chứng chỉ xác thực

Mỗi ngƣời dùng A có một danh tính ID(A) và một sơ đồ chữ ký với thuật

Một phần của tài liệu Đảm bảo an ninh cho hệ thống VOIP di động (Trang 61)