Hình 2-5: Chi tiết hoạt động giao thức Kerberos

Một phần của tài liệu giải pháp xác thực và bảo mật cho mạng xã hội ứng dụng mô hình kerberos (Trang 26 - 31)

Trong quá trình mô tả, chúng ta có một số kí hiệu cần chú ý như sau:

o AS = Máy chủ chứng thực (authentication server)

o TGS = Máy chủ cấp vé (ticket granting server)

o SS = Máy chủ dịch vụ (service server).

o A= (B,C): Gói tin A chứa 2 dữ liệu B và C

o A = B || C: Gói tin A có gồm có 2 gói tin B và C

Hoạt động của giao thức Kerberos có thể tóm tắt như sau: đầu tiên, người sử dụng chứng thực mình với máy chủ chứng thực AS, sau đó chứng minh với máy chủ cấp vé TGS rằng mình đã được chứng thực để nhận vé sử dụng dịch vụ, cuối cùng chứng minh với máy chủ dịch vụ SS rằng mình đã được chấp thuận để sử dụng dịch vụ.

Bước 1: Người sử dụng nhập tên và mật khẩu tại máy tính của mình (máy khách). Sau đó, phần mềm máy khách thực hiện hàm băm một chiều trên mật khẩu nhận được. Kết quả sẽ được dùng làm khóa bí mật của người sử dụng.

Bước 2: Phần mềm máy khách gửi một gói tin (không mật mã hóa) AS_REQ tới máy chủ dịch vụ AS để yêu cầu dịch vụ. Nội dung của gói tin là:

AS_REQ = (PrincipalClient , PrincipalService , IP_list , Lifetime )

Trong đó:

o PrincipalClient là principal gắn với người dùng.

o PrincipalService là principal gắn với service được yêu cầu vé (chính là TGS), thường là:krbtgt/REALM@REALM.

o IP_list là một danh sách các địa chỉ IP nơi có thể sử dụng các ticket được cấp phát này.IP_list có thể rỗng.

o Lifetime là thời gian tồn tại được yêu cầu của ticket.

Bước 3: AS kiểm tra PrincipalClient và PrincipalService có nằm trong cơ sở dữ liệu của mình không. Nếu có thì AS thực hiện công việc sau:

o Tạo ra khóa phiên giữa TGS và máy khách kí hiệu là SKTGS

o Tạo ra Ticket Granting Ticket (TGT bao gồm các dữ liệu sau:

TGT = (PrincipalClient , PrincipalService, IP_list , Timestamp , Lifetime , SKTGS )

Trong đó:

+ PrincipalClient , PrincipalService, IP_list lấy ở AS_REQ.

+ Timestamp: thời gian tạo vé (lấy theo thời gian của KDC). + Lifetime: thời gian sống của TGT.

o Tạo ra gói tin AS_REP gửi cho máy khách với nội dung sau:

AS_REP = {PrincipalService , Timestamp , Lifetime , SKTGS }KUser || { TGT }KTGS

Trong đó: KUser là khóa bí mật của user, KTGS là khóa bí mật của TGS.

Bước 4: Khi nhận được gói tin AS_REP trên, phần mềm máy khách giải mã một phần của gói tin để có khóa phiên với TGS bằng password của mình còn TGT được lưu trong credential cache của người dùng. Tại thời điểm này, người dùng có thể lấy vé TGT để gửi đến TGS để xin vé dịch vụ.

Bước 5: Khi yêu cầu vé dịch vụ, phần mềm bên phía người dùng phải làm các công việc sau:

o Tạo ra phần xác thực authenticator (bao gồm định danh người sử dụng và thời điểm yêu cầu), mật mã hóa với "Khóa phiên TGS/máy khách".

Authenticator = {PrincipalClient , Timestamp }SKTGS

o Tạo ra gói tin TGS_REQ bao gồm: principal của dịch vụ cần kết nối, thời gian tồn tại của vé mong muốn, phần xác thực và TGT được mã hóa bởi khóa của TGS.

TGS_REQ = (PrincipalService , Lifetime , Authenticator) || { TGT }KTGS (adsbygoogle = window.adsbygoogle || []).push({});

Bước 6: Khi nhận được gói tin TGS_REQ, TGS kiểm tra service được yêu cầu có ở trong cơ sở dữ liệu của KDC hay không.Nếu tồn tại TGS sẽ mở TGT bằng khóa của nó và lấy được khóa phiên SKTGS,khóa này dùng để giải mã phần xác thực authenticator. Để có thể cấp phát được service ticket, các điều kiện sau phải thỏa mãn:

o Vé TGT chưa hết hạn

o PrincipalClient ở trong authenticator phải khớp với ở trong TGT.

o Authenticator không có trong replay cache và chưa hết hạn.

o Nếu IP_List không rỗng thì nó sẽ kiểm tra địa chỉ IP nguồn của gói tin TGS_REQ phải có trong IP_List.

Tất cả các điều kiện trên thỏa mãn chứng tỏ rằng TGT thực sự thuộc về người dùng gửi yêu cầu này và do đó TGS bắt đầu tiến trình phản hồi lại như sau:

o Tạo ra khóa phiên giữa máy khách và máy chủ dịch vụ.Kí hiệu là SKService

o Tạo ra một service ticket có các nội dung sau: PrincipalClient lấy trong authenticator, PrincipalService lấy trong AP_REQ, danh sách các địa chỉ IP,thời gian tạo vé,thời gian sống của vé, khóa phiên với service server.

TService = (PrincipalClient , PrincipalService , IP_list ,Timestamp , Lifetime , SKService )

o TGS gửi lại máy khách gói tin TGS_REP với nội dung sau:

TGS_REP = {PrincipalService , Timestamp , Lifetime , SKService }SKTGS||{ TService }KService

Trong đó: KService là khóa bí mật của server dịch vụ mà người dùng muốn sử dụng.

Bước 7: Khi nhận được gói tin TGS_REP, người dùng giải mã một phần của gói tin bằng SKTGS lấy trong credential cache để có được khóa phiên SKService và lưu trữ khóa này cùng với vé dịch vụ nhận được. Đến lúc này, người dùng đã đủ thông tin để gửi yêu cầu đến máy chủ dịch vụ bằng cách:

o Tạo ra phần xác thực authenticator mới, bao gồm chỉ danh người sử dụng, thời điểm yêu cầu và được mật mã hóa với khóa phiên máy chủ dịch vụ/máy khách SKService .

Authenticator = { PrincipalClient , Timestamp }SKService

o Tạo ta gói tin AP_REQ gửi đến cho máy chủ dịch vụ với nội dung bao gồm:phần xác thực authenticator và service ticket nhận được ở TGS_REP.

AP_REQ = Authenticator || {TService}KService

Bước 8: Máy chủ dịch vụ SS giải mã service ticket bằng khóa bí mật của mình để có được khóa phiên, khóa phiên này lại được dùng để mở phần authenticator. Để xác định người dùng có quyền sử dụng dịch vụ, các điều kiện sau phải thỏa mãn:

o Service ticket chưa hết hạn.

o PrincipalClient ở trong authenticator phải khớp với ở trong vé dịch vụ.

o Authenticator không có trong replay cache và chưa hết hạn.

o Nếu IP_List ở trong service ticket không rỗng thì nó sẽ kiểm tra địa chỉ IP nguồn của gói tin AP_REQ phải có trong IP_List.

Sau khi các điều kiện trên được thỏa mãn, SS sẽ gửi lại gói tin AP_REP với nội dung: Thời điểm trong gói tin AP_REQ cộng thêm 1, mật mã hóa với khóa phiên máy chủ dịch vụ/máy khách SKService.

Bước 9: Máy khách giải mã gói tin xác nhận và kiểm tra thời gian có được cập nhật chính xác. Nếu đúng thì người sử dụng có thể tin tưởng vào máy chủ SS và bắt đầu gửi yêu cầu sử dụng dịch vụ.

Bước 10: Máy chủ cung cấp dịch vụ cho người sử dụng thông qua kênh truyền thiết lập bởi SKService.

1.5. Lý thuyết về Web Service

1.5.1. Định nghĩa Web Service

Theo định nghĩa của W3C (World Wide Web Consortium), dịch vụ Web là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet, giao diện chung và sự gắn kết của nó được mô tả bằng XML.

1.5.2. Ưu, nhược điểm của Web Service

 Ưu điểm: (adsbygoogle = window.adsbygoogle || []).push({});

o Dịch vụ Web cung cấp khả năng hoạt động rộng lớn với các ứng dụng phần mềm khác nhau chạy trên những nền tảng khác nhau.

o Sử dụng các giao thức và chuẩn mở. Giao thức và định dạng dữ liệu dựa trên văn bản (text), giúp các lập trình viên dễ dàng hiểu được.

o Nâng cao khả năng tái sử dụng.

o Thúc đẩy đầu tư các hệ thống phần mềm đã tồn tại bằng cách cho phép các tiến trình/chức năng nghiệp vụ đóng gói trong giao diện dịch vụ Web.

o Tạo mối quan hệ tương tác lẫn nhau và mềm dẻo giữa các thành phần trong hệ thống, dễ dàng cho việc phát triển các ứng dụng phân tán.

o Thúc đẩy hệ thống tích hợp, giảm sự phức tạp của hệ thống, hạ giá thành hoạt động, phát triển hệ thống nhanh và tương tác hiệu quả với hệ thống của các doanh nghiệp khác.

 Nhược điểm:

o Những thiệt hại lớn sẽ xảy ra vào khoảng thời gian chết của Dịch vụ Web, giao diện không thay đổi, có thể lỗi nếu một máy khách không được nâng cấp, thiếu các giao thức cho việc vận hành.

o Có quá nhiều chuẩn cho dịch vụ Web khiến người dùng khó nắm bắt.

1.5.3. Một số khái niệm cơ bản trong Webservice a. Simple Object Access Protocol (SOAP)

SOAP là một giao thức đơn giản nhằm mục đích trao đổi thông tin trong môi trường ứng dụng phân tán. SOAP dựa trên nền công nghệ XML và bao gồm 2 thành phần:

 Một “bì thư” (envelope) để quản lý các thông tin mở rộng và mang tính điều khiển.

 Một chuẩn mã hóa quy định cách thể hiện thông tin trong envelope. SOAP có thể được sử dụng kết hợp với các giao thức chuẩn khác như SMTP, HTTP/HTTPS, FTP… Tuy nhiên hiện nay chỉ mới có HTTP/HTTPS được xem như giao thức chuẩn để trao đổi gói tin SOAP. Việc sử dụng SOAP như một giao thức trao đổi dữ liệu chuẩn khiến WebService có khả năng hoạt động trên nhiều môi trường lập trình khác nhau như Java, .NET,…

Gói tin SOAP là một phương tiện giao tiếp một chiều từ nơi gửi đến nơi nhận. Gói tin SOAP được gửi bên trong một gói tin HTTP request hoặc gói tin HTTP response. Cấu trúc chung của một gói tin SOAP được mô tả ở hình 2-2 dưới đây:

Hình 2-6: Cấu trúc chung của SOAP

Một phần của tài liệu giải pháp xác thực và bảo mật cho mạng xã hội ứng dụng mô hình kerberos (Trang 26 - 31)