2.2.1. Tính xác thực
2.2.1.1. Giao thức xác thực mật khẩu
Là giao thức đơn giản nhất và là giao thức xác thực kết nối đường quay số tới ISP thông dụng nhất. Nó cũng được dùng để xác thực các kết nối dựa trên PPP, xác thực người dùng PPP trước khi một kết nối được thiết lập. Tuy nhiên nó gửi ID và mật khẩu của người dùng qua liên kết mà không mã hoá. Như vậy, nó không đưa ra được sự bảo vệ từ việc phát lại hay thử lặp và các tấn công lỗi.
PAP có các lỗ hỗng khác là các thực thể truyền thông cuối chỉ được xác thực một lần khi khởi tạo kết nối. Vì vậy, nếu kẻ tấn công vượt qua được một lần thì không còn phải lo lắng về vấn đề xác thực trong tương lai nữa. Vì lý do này, PAP được xem như là một giao thức xác thực ít phức tạp nhất và không phải là cơ chế xác thực được ưa thích trong VPN.
2.2.1.2. Giao thức xác thực có thăm dò trước (CHAP)
Giao thức xác thực mật khẩu yêu cầu bắt tay CHAP (Challenge Handshake Authentication Protocol) được thiết kế cho việc sử dụng tương tự như PAP nhưng là một phương pháp bảo mật tốt hơn đối với xác thực các kết nối PPP.
CHAP là một giao thức bắt tay ba chiều nó bao gồm ba bước để thực hiện kiểm tra một kết nối, sau khi kết nối được khởi tạo đầu tiên hay tại bất kỳ thời điểm nào sau khi kết nối được thiết lập. Thay vì dùng một mật khẩu hay tiến trình chấp nhận giống như PAP, CHAP sử dụng một hàm băm một chiều (one-way hashing function).
- Máy tính xác thực gửi một bản tin thách thức (challenge massage) đến máy tính ngang cấp (peer)
- Máy tính ngang cấp tính toán một giá trị sử dụng một hàm băm một chiều và gửi lại cho máy tính xác thực.
- Máy tính xác thực có thể đáp ứng chấp nhận nếu giá trị gửi lại tương ứng với giá trị mong muốn
Tiến trình này có thể lặp lại tại bất kỳ thời điểm nào trong suốt quá trình kết nối để đảm bảo rằng kết nối luốn được nắm quyền và không bị suy yếu trong mọi trường hợp. Máy chủ điều khiển quá trình xác thực tại CHAP.
PAP và CHAP có nhược điểm là đều phụ thuộc vào một mật khẩu bí mật được lưu trữ trên máy tính của người dùng ở xa và máy tính nội bộ. Nếu bất kỳ một máy tính nào chịu sự điều khiển của một kẻ tấn công mạng và bị thay đổi mật khẩu bí mật thì không thể xác thực được.
2.2.1.3. RADIUS and TACACS
RADIUS là giao thức bảo mật mạng dựa theo mô hình client-server. Nó dùng giao thức UDP. RADIUS server thường chạy trên máy tính. Client là các dạng thiết bị có thể truyền thông tin đến RADIUS server được chỉ định trước
và sau đó đóng vai trò phúc đáp mà nó trả về. Giao tiếp giữa client và RADIUS server được xác thực thông qua việc sử dụng khóa bí mật chung không được truyền qua mạng.
Một số ưu điểm của RADIUS là:
- RADIUS có phần overhead ít hơn so với TACACS vì nó sử dụng UDP, trong phần overhead không có địa chỉ đích, port đích.
- Với cách thức phân phối dạng source code, RADIUS là dạng giao thức hoàn toàn mở rộng. Người dùng có thể thay đổi nó để làm việc với bất kì hệ thống bảo mật hiện có.
- RADIUS yêu cầu chức năng tính cước (accounting) mở rộng.
RADIUS thường được dùng để tính cước dựa trên tài nguyên đã sử dụng. Ví dụ như ISP sẽ tính cước cho người dùng về chi phí kết nối. Ta có thể cài đặt RADIUS Accounting mà không cần sử dụng RADIUS để xác thực và cấp quyền. Với chức năng accounting mở rộng, RADIUS cho phép dữ liệu được gửi từ các thiết bị xuất phát cũng như là thiết bị đích, từ đó giúp ta theo dõi việc sử dụng tài nguyên (thời gian, số lượng các gói tin, số lượng byte,...) trong suốt phiên làm việc.
TACACS (Terminal Access Controller Access Control System) là hệ thống được phát triển để không chỉ cung cấp cơ chế xác thực mà còn thực hiện chức năng: cho phép (authorization) và tính cước (accounting). TACACS được thiết kế như một hệ thống client/server mềm dẻo hơn và đặc biệt trong việc quản lý bảo mật mạng. Trung tâm hoạt động của TACACS là một máy chủ xác thực TACACS.
Máy chủ xác thực TACACS giữ các yêu cầu xác thực từ phần mềm client được cài đặt tại một gateway hay một điểm truy cập mạng. Máy chủ duy trì một cơ sở dữ liệu nhận dạng người dùng, mật khẩu, PIN và các khóa bí mật được sử dụng để được chấp nhận hay bị từ chối các yêu cầu truy cập mạng. Tất cả
xác thực, cấp quyền và dữ liệu tính cước được hướng đến máy chủ trung tâm khi một người dùng truy cập mạng.
2.2.1.4. Sử dụng phần cứng
Smart Card là thiết bị có kích thước giống như một thẻ tín dụng, bao gồm: một bộ vi xử lý được gắn chặt vào card và một bộ nhớ. Một thiết bị đọc tương đương cho Smart Card được yêu cầu để giao tiếp với Smart Card. Smart Card có thể lưu giữ một khóa riêng của người dùng cùng với một số ứng dụng nhằm đơn giản hóa tiến trình xác thực. Một số Smart Card hiện nay gồm một bộ đồng xử lý mã hóa và giải mã làm cho việc mã hóa dữ liệu dễ dàng hơn và nhanh hơn. Các hệ thống chứng nhận điện tử được sử dụng trong Smart Card, nó yêu cầu người dùng nhập vào một số nhận dạng cá nhân PIN để tiến hành quá trình xác thực, thường thì số PIN được lưu trên Smart Card.
Thiết bị thẻ bài (Token Devices): các hệ thống thẻ bài thường được dựa trên các phần cứng riêng biệt dùng để hiển thị các mã nhận dạng (passcode) thay đổi mà người dùng sau đó phải nhập vào máy tính để thực hiện việc xác thực.
Cơ chế hoạt động của thẻ bài là có một bộ xử lý bên trong thẻ bài lưu giữ một tập các khóa mã hóa bí mật được dùng để phát cho các mã nhận dạng một lần. Các mã nhận dạng này chuyển đến một máy chủ bảo mật trên mạng, máy chủ này kiểm tra tính hợp lệ từ đó đưa ra các quyết định cấp quyền hay không. Sau khi các mã được lập trình, không có người dùng hay nhà quản trị nào có quyền truy cập đến chúng.
Trước khi các người dùng được phép xác thực, các thiết bị thẻ bài yêu cầu một PIN, sau đó sử dụng một trong ba cơ chế khác nhau để xác định người dùng là ai như: Cơ chế đáp ứng thách thức (Challenge response), cơ chế sử dụng sự đồng bộ thời gian (Time Synchronization), Cơ chế đồng bộ sự kiện (Event Synchronzation).
2.2.1.5. Xác thực sinh trắc
Mỗi người có một đặc điểm sinh học duy nhất. Dữ liệu sinh trắc học của từng cá nhân với đặc điểm khuôn mặt, ảnh chụp võng mạc, giọng nói sẽ được kết hợp với nhau bằng phần mềm để tạo ra mật khẩu dành cho những giao dịch điện tử. Tuy nhiên hệ thống không được sử dụng rộng rãi trong thực tế vì giá thành đắt và các hệ thống bảo mật này thường tích hợp trong một làm khó khăn trong việc giao tiếp với các hệ thống khác.
Hệ thống sinh trắc học chỉ phù hợp cho những nơi cần độ bảo mật cao nhất và trong phạm vi nhỏ.
2.2.2. Tính toàn vẹn
Tính toàn vẹn của thông tin là bảo vệ sự chính xác, hoàn chỉnh của thông
tin và thông tin chỉ được thay đổi bởi những người được cấp quyền. Xác thực tính toàn vẹn liên quan đến những khía cạnh sau:
- Bảo vệ tính toàn vẹn của mẩu tin tức là bảo vệ mẩu tin không bị thay đổi hoặc có cả biện pháp phát hiện nếu mẩu tin bị thay đổi trên đường truyền.
- Kiểm chứng danh tính và nguồn gốc: là mẩu tin này được gửi bởi đúng người gửi mà không bị giả mạo bởi một người khác
- Không từ chối bản gốc: người gửi không thể từ chối hành động gửi, thời gian gửi và nội dung của mẩu tin.
Để giải quyết vấn đề trên, có 3 hàm lựa chọn sau đây được sử dụng: + Mã hóa mẩu tin bằng mã đối xứng hoặc mã công khai
+ Mã xác thực mẩu tin (MAC): dùng khóa và một hàm nén mẩu tin cần gửi để nhận được một đặc trưng đính kèm với mẩu tin và người gửi đó.
+ Hàm hash (hàm băm): nén mẩu tin tạo thành “dấu vân tay” cho mẩu tin.
2.2.2.1. Hàm Hash
Nén mẩu tin bất kỳ về kích thước cố định. Giả thiết hàm hash là công khai và không dùng khóa. Hash chỉ phụ thuộc mẩu tin.
Hash được sử dụng để phát hiện thay đổi của mẩu tin. Hash có thể sử dụng nhiều cách khác nhau với mẩu tin, Hash thường được kết hợp dùng để tạo chữ ký trên mẩu tin.
Hàm Hash tạo nên dấu vân tay (tức là thông tin đặc trưng) của một tệp, mẩu tin hay dữ liệu h = H(M).
Nén mẩu tin có kích thước tùy ý về dấu vân tay có kích thước cố định. Hàm Hash được giả thiết là công khai, mọi người đều biết cách sử dụng.
Hàm băm H(x) là một hàm tính checksum mạnh thỏa mãn các yêu cầu sau: 1) H có thể áp dụng cho các thông điệp x với các độ dài khác nhau 2) Kích thước của output h = H(x) là cố định và nhỏ
3) Tính một chiều: với một h cho trước, không thể tìm lại được x sao cho h = H(x) (về mặt thời gian tính toán)
4) Tính chống trùng yếu: cho trước một x, không thể tìm y≠ x sao cho H(x) = H(y)
5) Tính chống trùng mạnh: không thể tìm ra cặp x, y bất kỳ (x≠y) sao cho H(x) = H(y), hay nói cách khác nếu H(x) = H(y) thì có thể chắc chắn rằng x = y.
2.2.2.2. Thuật toán SHA-1
Trong mật mã học, SHA-1 là một hàm băm mật mã được thiết kế bởi Cơ Quan An Ninh Quốc Gia và được công bố bởi NIST hay còn gọi là Cục Xử Lý Thông Tin Tiêu Chuẩn Liên Bang của Mỹ.
SHA là viết tắt của Secure Hash Algorithm. Ba thuật toán SHA có cấu trúc khác nhau và được phân biệt là: SHA-0, SHA-1 và SHA-2. SHA-1 gần tương tự như SHA0, nhưng sửa chữa một lỗi trong các đặc tả kỹ thuật gốc của hàm băm SHA dẫn đến những điểm yếu quan trọng. Các thuật toán SHA-0 đã không được sử dụng trong nhiều ứng dụng. SHA-2 mặt khác có những điểm khác biệt quan trọng so với hàm băm SHA-1.
Bảng 2.1 Phân loại thuật toán SHA
Bảng 2.2 Kích thước của các thuật toán SHA
Thuật toán
Kích thước (đơn vị: bit)
Độ an toàn (đơn vị: bit) Thông điệp Khối Từ Thông điệp
rút gọn SHA-1 < 264 512 32 160 80 SHA-224 < 264 512 32 224 112 SHA-256 < 264 512 32 256 128 SHA-384 < 2128 1024 64 384 192 SHA-512 < 2128 1024 64 512 256 Giải thuật:
Đầu vào: chuỗi có độ dài tối đa 264 bits. Đầu ra: giá trị băm có độ dài 160 bits.
Bước 1: nhồi thêm dữ liệu
Thông điệp được nhồi thêm các bit sao cho độ dài là l ≡ 448 mod 512 hay l = n * 512 + 448 (n, l nguyên).
Số bit nhồi thêm nằm trong khoảng 1 đến 512.
Phần dữ liệu nhồi thêm bao gồm một bit 1 và theo sau là các bit 0.
Bước 2: thêm vào độ dài
Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64 bit và được thêm vào cuối chuỗi nhị phân kết quả của bước 1.
Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu.
Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của 512. Khối dữ liệu được biểu diễn:
Bằng một dãy L khối 512 bit Y0, Y1, …, YL-1
Bằng một dãy N từ (word) 32 bit M0, M1, MN-1. Vậy N = L x 16 (32x16 =512)
Bước 3: Khởi tạo bộ đệm MD (MD buffer)
Một bộ đệm 160 bit được dùng lưu trữ các giá trị băm trung gian và kết quả. Bộ đệm được biểu diễn bằng 5 thanh ghi 32 bit với các giá trị khởi tạo ở dạng bigiendian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) như sau:
A = 01 23 45 67 D = 76 54 32 10
B = 89 AB CD EF E = C3 D2 E1 F0
C = FE DC BA 98
Các giá trị này tương đương với các từ 32 bit sau:
A = 01 23 45 67 D = 76 54 32 10
B = 89 AB CD EF E = C3 D2 E1 F0
C = FE DC BA 98
Bước 4: Xử lý các khối dữ liệu 512 bit
Trọng tâm của giải thuật bào gồm 4 vòng lặp thực hiện tất cả 80 bước. 4 vòng lặp có cấu trúc như nhau, chỉ khác nhau ở các hàm logic f1, f2, f3, f4.
Mỗi vòng có đầu vào gồm khối 512 bit hiện thời và một bộ đệm 160 bit ABCDE. Các thao tác sẽ cập nhật giá trị bộ đệm.
Mỗi bước sử dụng một hằng số Kt (0≤ t ≤79)
Kt = 5A827999 (0≤ t ≤19) Kt = 8F1BBCDC (40≤ t ≤59) Kt = 6ED9EBA1 (20≤ t ≤39) Kt = CA62C1D6 (60≤ t ≤79) Đầu ra của 4 vòng (bước 80) được cộng với đầu ra của bước CVq để tạo ra CVq+1
Hình 2.5 SHA-1 xử lý các khối dữ liệu 512 bit Bước 5: Xuất kết quả
Sau khi thao tác trên toàn bộ L blocks. Kết quả của khối thứ L là bảng băm 160 bit.
2.2.3. Tính bảo mật
Hiện có hai loại mã hóa chính: mã hóa đối xứng và mã hóa công khai. Hệ mã hóa đối xứng có khóa mã hóa và khóa giải mã giống nhau, theo nghĩa biết được khóa này thì dễ tính được khóa kia. Vì vậy phải giữ bí mật cả hai khóa.
Hệ mã hóa công khai có khóa mã hóa khác khóa giải mã , biết khóa này cũng khó tính được khóa kia. Vì vậy chỉ cần bí mật khóa giải mã, còn công khai khóa mã hóa [2].
2.3.3.1. Mã hóa đối xứng
Tức là cả hai quá trình mã hóa và giải mã đều dùng một khóa. Để đảm bảo tính an toàn, khóa này phải được giữ bí mật tức là thuật toán mã hóa dùng khóa riêng (hay bí mật). Các thuật toán loại này lý tưởng cho mục đích mã hóa dữ liệu của cá nhân hay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ với một bên thứ hai [1,2].
Ưu điểm: Hệ mã hóa đối xứng mã hóa và giải mã nhanh hơn hệ mã hóa công khai.
Nhược điểm:
- Mã hóa khóa đối xứng chưa thật an toàn vì người mã hóa và người giải mã phải có chung một khóa phải giữ bí mật tuyệt đối
- Vấn đề thỏa thuận khóa và quản lý khóa chung là khó khăn và phức tạp. Người gửi và người nhận phải luôn thống nhất với nhau về khóa. Việc thay đổi khóa là rất khó và dễ bị lộ. Khóa chung phải được gửi cho nhau trên kênh an toàn.
Hệ mã hóa đối xứng thường được sử dụng trong môi trường mà khóa chung có thể dễ dàng trao chuyển bí mật, chẳng hạn trong cùng một mạng nội
bộ. Hệ mã hóa đối xứng thường dùng để mã hóa những bản tin lớn, vì tốc độ mã hóa và giải mã nhanh hơn hệ mã hóa công khai.
Mã hóa đối xứng có thể phân thành hai nhóm phụ:
- Block ciphers: thuật toán khối, trong đó từng khối dữ liệu trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Độ dài mỗi khối gọi là block size, thường được tính bằng đơn vị bit. Một số thuật toán khối thông dụng là: AES, 3DES, DES, Blowfish, RC5, RC6, CAST…
- Stream ciphers: thuật toán dòng, trong đó dữ liệu đầu vào được mã hóa từng bit một. Các thuật toán dòng có tốc độ nhanh hơn các thuật toán khối, được dùng khi khối lượng dữ liệu cần mã hóa chưa được biết trước, ví dụ trong kết nối không dây. Có thể coi thuật toán dòng là thuật toán khối với kích thước mỗi khối là 1 bit. Một số thuật toán dòng thông dụng: RC4, A5/1, A5/2, Chameleon [2].
2.3.3.2. Mã hóa công khai
Hệ mã hóa công khai là hệ mã hóa có khóa mã hóa và khóa giải mã khác nhau, biết được khóa này cũng khó tính được khóa kia. Khóa mã hóa được công khai gọi là khóa công khai (Public key). Khóa giải mã được giữ bí mật còn gọi