CHƯƠNG 1: CƠ CHẾ ĐĂNG NHẬP MỘT LẦN (SSO) 1. Giới thiệu về SSO 1. Khái niệm Đăng nhập một lần (SSO) là dịch vụ xác thực phiên và người dùng cho phép người dùng cuối nhập một bộ thông tin đăng nhập (có thể gồm tên và mật khẩu) để có quyền truy cập vào nhiều ứng dụng. Trong dịch vụ web SSO cơ bản, module agent trên máy chủ ứng dụng sẽ truy xuất thông tin xác thực cho từng người dùng từ máy chủ SSO chuyên dụng, đồng thời xác thực chéo người dùng qua kho lưu trữ người dùng dưới dạng thư mục LDAP [15].
Dịch vụ xác thực người dùng cuối cho tất cả các ứng dụng mà người dùng đã được cấp quyền và loại bỏ lời nhắc nhập mật khẩu tiếp theo cho các ứng dụng riêng lẻ trong cùng một phiên[10]. Hình 1: Giới thiệu về SSO[10] Trước khi có SSO, người dùng phải quản lý nhiều tài khoản và mật khẩu khác nhau để truy cập các ứng dụng website, phần mềm, hệ thống khác nhau. 4 Điều đó gây khó khăn cho người dùng trong việc quản lý tài khoản, ghi nhớ và sử dụng các tài khoản một cách nhanh chóng. Do đó, hệ thống SSO sẽ đem lại nhiều thuận tiện cho người dùng trong việc quản lý thay vì quản lý trên nhiều tài khoản khác nhau thì chỉ phải quản lý một tài khoản duy nhất.
Tuy nhiên, việc bảo mật trên một tài khoản duy nhất như “1 con dao 2 lưỡi”, việc quản lý tài khoản, sử dụng một tài khoản sẽ dễ dàng, thuận tiện hơn rất nhiều nhưng đồng thời rủi ro, sự thiếu an toàn thông tin bảo mật cũng bị đẩy lên cao. Nếu không may tài khoản gốc bị tin tặc đánh cắp thì một loạt thông tin cá nhân sẽ bị truy cập trái phép. Do vậy, hệ thống SSO nên kết hợp các loại hình xác thực khác nhau được trình bày trong mục 1.2 để tăng cường tính bảo mật của hệ thống là điều rất quan trọng. Đăng nhập là quá trình người dùng sử dụng định danh và các thông tin bảo mật khác để kết nối bảo mật với hệ thống, thông thường là dùng ID (Identification) và mật khẩu.
Quá trình đăng nhập gồm 2 bước xác thực và thẩm định (ủy quyền): - Xác thực (Authentication): Xác thực người dùng có hợp lệ không thông qua các phương thức xác thực của hệ thống, phổ biến nhất là username/password, ngoài ra còn một số phương pháp xác thực khác. - Thẩm định (ủy quyền) (Authorization): Là quá trình kiểm tra sau khi người dùng đã được xác thực có đồng ý ứng dụng bên thứ 3 truy cập vào tài nguyên lấy thông tin người dùng hay không? 1. Các phương pháp xác thực Xác thực (Authentication) là một hành động nhằm chứng thực một người, một cá nhân hay một đối tượng nào đó. Xác thực cho phép xác định đối tượng sử dụng hiện tại là ai và có mặt ở đây hay không? Theo cách hiểu đơn giản nhất, quá trình xác thực (Authentication) là đi tìm câu trả lời cho câu hỏi “Bạn là ai?” Các phương pháp xác thực có thể chia thành 3 loại dựa theo các đặc điểm của chúng.
5 Hình 2: Phân loại các phương thức xác thực [12] [12] Knowledge-based authentication (xác thực theo tri thức): Đây là phương thức sử dụng rộng rãi nhất hiện nay. Phương thức sử dụng mật khẩu bằng các chuỗi ký tự, hình ảnh, nhận dạng khuôn mặt hay sử dụng mã số cá nhân (PINs). Đối với mạng Internet không đảm bảo về an ninh, để xác thực thường sử dụng chứng chỉ số (Digital Certificates) and chữ ký số (Digital Signatures). Chúng được cung cấp bởi một hạ tầng khóa công khai (PKI) bao gồm một cặp khóa mật mã công khai và riêng tư.
Possession-based authentication [12] (xác thực theo sự sở hữu): Dựa vào những gì mà người dùng có, phổ biến là các loại thẻ từ. Tuy nhiên nhược điểm của phương thức này là thẻ cá nhân có thể bị chiếm đoạt hay lấy cắp bởi các thủ đoạn tinh vi. Vì vậy phương thức này phải kết hợp giữa thẻ và các loại mã PIN để có thể sử dụng. [12] Biometric-based authentication (xác thực theo sinh trắc học): Đây là phương thức xác thực dựa trên các đặc điểm sinh lý, hành vi của người dùng, đó là các đặc điểm đã được chứng minh là có thể xác thực như vân tay, võng mạc, khuôn mặt, giọng nói… Phương thức này đem lại hiệu quả bảo mật rất cao vì nó không dễ dàng bị đánh cắp.
Tuy nhiện phương thức này chủ yếu được sử dụng trong các hệ thống quan trọng, nơi yêu cầu độ bảo mật cao vì chi phí triển khai rất lớn. 6 Bảng 1: Xếp hạng các loại xác thực từ 1 (thấp) đến 3 (cao)[12] Thái độ và sự Hiệu quả Loại xác thực Dễ thực hiện Dễ sữ dụng chấp nhận của bảo mật người dùng Knowledge- 1 3 3 3 based Possession- 2 2 2 2 based Biometric- 3 1 1 1 based 1. Nguyên lý hoạt động Mô hình nguyên lý hoạt động của Single sign-on điển hình[4] Hình 3: Cách thức hoạt động của Single sign-on[4] SSO hoạt động theo các bước tuần tự như sau: 1. Người dùng lần đầu truy cập domain1 2.
Domain1 sẽ chuyển hướng về trang login AuthServer để xác thực người dùng 7 3. AuthServer thực hiện xác thực với thông tin nhận được từ trang đăng nhập 4. AuthServer thực hiện lưu ‘cookie’ với thông tin xác thực của domain1 5. AuthServer gửi ‘token’ và chuyển hướng về domain1 6.
Domain1 xác thực với ‘token’ nhận được cho phép người dùng truy cập hệ thống 7. Domain1 thực hiện lưu trữ ‘cookie’ với thông tin ‘token’ xác thực nhận được. Người dùng lần đầu truy cập domain2 9. Domain2 chuyển hướng về trang login AuthServer để xác thực người dùng 10.
AuthServer nhận thông tin từ ‘cookie’ ở bước 4 để kiểm tra xác thực 11. AuthServer gửi ‘token’ và chuyển hướng về domain2 12. Domain2 xác thực với ‘token’ nhận được cho phép người dùng truy cập hệ thống 13. Domain2 thực hiện lưu trữ ‘cookie’ với thông tin ‘token’ xác thực nhận được.
Các giao thức xác thực SSO phổ biến Giao thức xác thực là loại giao thức mã hóa với mục đích chứng thực các đối tượng. Hiện nay có rất nhiều các giao thức xác thực được sử dụng (Pap, Chap, Radius, Kerberos, Open Id, OAuth2, Saml2…) , tuy nhiên phổ biến nhất hiện nay là các giao thức: OAuth2, Open Id, Saml2 vì chúng tuân theo chuẩn chung và có nhiều ưu điểm và giao thức Kerberos những năm gần đây bắt đầu được sử dụng nhiều hơn. Giao thức OpenID Khái niệm OpenID là một chuẩn mở cho xác thực (Authentication). Được phát triển bởi tổ chức phi lợi nhuận ‘OpenID Foundation’, OpenID cho phép người dùng có thể được xác thực bởi rất nhiều website sử dụng dịch vụ của bên thứ ba.
Người dùng có thể đăng nhập tới nhiều webstie không hề liên quan tới nhau mà không cần dùng những định danh (Username) và mật khẩu (Password) riêng cho mỗi website[7]. Phiên bản mới nhất của OpenID là OpenID Connect. 8 Cách thức hoạt động của OpenID Connect Hình 4: Cách thức hoạt động của OpenID Connect[16] Quy trình hoạt động diễn ra theo các bước như sau[16]: (A) Người dùng sẽ truy cập bên thứ ba và yêu cầu truy cập; (B) Bên thứ 3 gửi ‘Authentication_request’ cho OpenID provider, mô tả ‘scope’ sẽ được yêu cầu và ‘Response_type’ muốn nhận được; (C) OpenID provider yêu cầu user xác nhận danh tính sau đó sẽ cho phép bên thứ 3 các quyền trong ‘scope’; (D) OpenID provider gửi lại bên thứ 3 ‘Authentication_Response’ chứa thông tin muốn ở bước (A) thường sẽ là ‘ID_Token’ và ‘Access_token’; (E, F) Bên thứ 3 sẽ dùng ‘Access_token’ để trao đổi thông tin mà mình mong muốn. Giao thức SAML Khái niệm: SAML (Security Assertion Markup Language) là giao thức ‘chuẩn mở’ cho phép nhà cung cấp nhận dạng (Identity Provider) xác thực người dùng và ủy quyền cho người dùng sử dụng một dịch vụ nào đó của nhà cung cấp dịch vụ (Service Provider) mà không bắt buộc người dùng phải tạo tài khoản đăng nhập vào dịch vụ đó [5].
Cách thức hoạt động: 9 Các thành phần chính - Identity Provider (IdP): Nhà cung cấp nhận dạng - Service Provider (SP): Nhà cung cấp dịch vụ - SP Private Key: Được thống nhất, trao đổi trước giữa SP và IdP bằng cách nào đó Hình 5: Cách thức hoạt động của SAML[5] Quy trình hoạt động diễn ra theo các bước như sau [5]: Bước 1: Người dùng thực hiện 1 yêu cầu đăng nhập tới SP. Bước 2: Phía SP sẽ tạo ra một ‘SAML_Request’ để gửi tới IdP, ‘SAML_Request’ này sẽ được chính ‘SP’ ký điện tử (sign) bằng chữ ký của SP (chữ ký của SP ở đây chính là khóa bí mật của SP). Bước 3: Phía IdP khi nhận được ‘SAML_Request’ từ SP sẽ phải xác thực chữ ký có đúng là của SP hay không bằng cách dùng khóa private (SP private key) của SP để xác thực. Bước 4: Vẫn đang ở IdP, sau khi xác thực được chữ ký của SP rồi, IdP sẽ làm những thứ sau: - Lấy ra thông tin người dùng đang sử dụng browser (nếu người dùng đang đăng nhập vào IdP, còn nếu người dùng đang không đăng nhập thì bắt người dùng đăng nhập trước) để chuyển hướng (http post) về cho SP sử dụng (kết quả trả về này mình gọi là ‘SAML_Response’).
Trước khi gửi về cho SP thì IdP sẽ ký điện tử (sign) vào ‘SAML_Response’ bằng khóa bí mật của IdP. 10 - Không những IdP ký vào ‘SAML_Response’ mà IdP cũng sẽ mã hóa các kết quả dữ liệu (SAML_Assertions) có trong ‘SAML_Response’ bằng khóa công khai của SP. Bước 5: Khi SP nhận được ‘SAML_Response’, nó sẽ thực hiện những việc sau: - Dùng khóa công khai của IdP để xác thực xem có đúng là kết quả được gửi từ IdP hay không (đây chính là phần xác thực mà OAuth và OAuth2 không có). Khóa công khai của IdP cũng giống như nói ở trên, có thể lấy thông qua metadata url của IdP hoặc có thể được trao đổi trước.
- Nếu xác thực đúng chữ ký, SP sẽ tiếp tục dùng khóa công khai của chính mình để giải mã ‘SAML_Assertions’ đã được mã hóa từ phía IdP. - Lấy các thông tin dữ liệu người dùng trong ‘SAML_Assertions’ để đăng nhập người dùng vào hệ thống của chính mình, và trả về cho người dùng thông báo thành công. Giao thức OAuth2 Khái niệm OAuth2 là một giao thức chuẩn mở để thẩm định (ủy quyền) (Authorization), OAuth2 cũng là nền tảng của OpenID Connect, nó cung cấp OpenID xác thực (Authentication) ở phía trên của OAuth2 thẩm định (ủy quyền) (Authorization) để có một giải pháp bảo mật hoàn chỉnh hơn [2]. Cách thức hoạt động: Các thành phần chính: - Resource Owner: Một thực thể có khả năng cấp quyền truy cập vào một tài nguyên được bảo vệ.
Khi chủ sở hữu tài nguyên là một người, nó được gọi là người dùng cuối.