BÁO CÁO MÔN HỌC Đề tài: OPENID Môn học: BẢO MẬT THÔNG TIN Chuyên ngành: MẠNG MÁY TÍNH Giảng viên hướng dẫn: ThS. Văn Thiên Hoàng Sinh viên thực hiện: Trần Hoàng Nhật Nguyễn Đăng Khoa Huỳnh Nhật Trường Nguyễn Hoài Minh Vương Lớp: 10LDTHM1 TP. Hồ Chí Minh, 5/2012 MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ OPENID 3 1.1 Tổng quan 3 1.2 Lịch sử phát triển 3 1.3 Ứng dụng và giải pháp công nghệ 3 1.3.1 Ứng dụng 3 1.3.2 Giải pháp 3 1.4 Các thành phần của một hệ thống quản lý định danh 3 1.5 Quy trình hoạt động chính của hệ thống quản lý định danh 3 CHƯƠNG 2: PHƯƠNG THỨC HOẠT ĐỘNG CỦA OPENID 3 2.1 Giao tiếp giữa các thành phần trong hệ thống OpenID 3 2.2 Cơ chế hoạt động của OpenID 3 2.2.1 Cơ chế Smart mode 3 2.2.1.1 Quy trình xác định thành phần Identity Provider 3 2.2.1.2 Quy trình gởi thuộc tính định danh 3 2.2.1.3 Quy trình kiểm tra thuộc tính định danh 3 2.2.2 Cơ chế Dumb mode 3 2.3 Cơ chế xác thực của OpenID: 3 2.4 Ứng dụng thuật toán Diffie-Hellman 3 2.4.1 Mô hình trao đổi khóa Diffie-Hellman 3 2.4.2 Thuật toán trao đổi khóa Diffie-Hellman 3 2.5 Sơ đồ quy trình giao tiếp giữa Client – Server 3 2.6 Quy trình xử lý các bước giao tiếp 3 CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM 3 3.1 Mô hình triển khai thực nghiệm 3 3.1.1 Triển khai dịch vụ OpenID trên website NukeViet 3 3.1.2 Công cụ demo 3 3.2 Các bước thực hiện 3 3.3 Kết quả đạt được 3 3.3.1 Client Hello 3 3.3.2 Server Hello, Certificate, Server Hello Done 3 3.3.3 Client Key Exchange 3 3.3.4 Change Cipher Spec 3 3.3.5 Application Data RP – OP 3 3.3.6 Application Data OP – RP 3 3.3.7 Encrypted Alert 3 3.3.8 Biểu đồ Flow tổng hợp các bước giao tiếp giữa client và server 3 CHƯƠNG 4: KẾT LUẬN 3 4.1 Ưu điểm của OpenID 3 4.1.1 Đối với Website và nhà phát triển WebApp 3 4.1.2 Đối với người dùng cuối 3 4.2 Hạn chế của OpenID 3 4.2.1 Triển khai OpenID 3 4.2.2 Bảo mật đối với OpenID 3 PHỤ LỤC A 3 PHỤ LỤC B 3 TÀI LIỆU THAM KHẢO 3 CHƯƠNG 1: TỔNG QUAN VỀ OPENID 1.1 Tổng quan OpenID là một dịch vụ định danh (Identify) chia sẻ, là một hệ thống đăng nhập một lần không có tính tập trung, cho phép người sử dụng đăng nhập nhiều website khác nhau chỉ bằng 1 định danh số, tránh việc sử dụng các tài khoản và mật khẩu khác nhau cho mỗi website. OpenID là định chuẩn mở, miễn phí và phân quyền cho phép người dùng điều khiển được các thông tin cá nhân của mình công khai trên Internet. Một OpenID là dạng liên kết URL, URL này có thể là tên miền của website hoặc URL của nhà cung cấp định danh OpenID. Khi đăng nhập với tài khoản OpenID, bạn phải đăng nhập vào Nhà cung cấp dịch vụ định danh để kiểm tra tính hợp lệ của tài khoản. OpenID là một phương thức giúp bạn xác thực tài khoản đăng ký tại một provider duy nhất mà bạn tin tưởng và cho phép người dùng thực hiện việc đăng nhập vào các lần sau. 1.2 Lịch sử phát triển Phiên bản đầu tiên của OpenID được phát triển vào tháng 5 năm 2005 bởi Brad Fitzpatrick, tác giả của trang web cộng đồng LiveJournal, làm việc cho công ty Six Apart, ban đầu có tên là Yadis (“Yet another distributed identity system": hệ thống đăng nhập phân tán), và được gọi là OpenID sau khi tên miền www.openid.net được trao cho Six Apart để sử dụng cho dự án. Tháng 6/2005, các cuộc thảo luận giữa người dùng cuối và nhà phát triển từ công ty phần mềm NetMesh về khả năng hợp tác giữa OpenID và LID (Một giao thức tương tự được phát triển bởi NetMesh). Kết quả của sự hợp tác đó là giao thức Yadis được phát triển và giữ tên gọi mới là OpenID. Giao thức OpenID được công bố tháng 24/10/2005, sau khi hội thảo Internet Identity Workshop diễn ra vài ngày. Tháng 12, các nhà phát triển SXIP (Simple Extensible Identity Protoco
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP HCM
BÁO CÁO MÔN HỌC
Đề tài:
OPENID
Môn học: BẢO MẬT THÔNG TIN
Chuyên ngành: MẠNG MÁY TÍNH
Giảng viên hướng dẫn: ThS Văn Thiên Hoàng Sinh viên thực hiện:
Trần Hoàng Nhật Nguyễn Đăng Khoa Huỳnh Nhật Trường Nguyễn Hoài Minh Vương Lớp: 10LDTHM1
TP Hồ Chí Minh, 5/2012
MỤC LỤC
Trang 2CHƯƠNG 1: TỔNG QUAN VỀ OPENID 3
1.1 Tổng quan 3
1.2 Lịch sử phát triển 3
1.3 Ứng dụng và giải pháp công nghệ 3
1.3.1 Ứng dụng 3
1.3.2 Giải pháp 3
1.4 Các thành phần của một hệ thống quản lý định danh 3
1.5 Quy trình hoạt động chính của hệ thống quản lý định danh 3
CHƯƠNG 2: PHƯƠNG THỨC HOẠT ĐỘNG CỦA OPENID 3
2.1 Giao tiếp giữa các thành phần trong hệ thống OpenID 3
2.2 Cơ chế hoạt động của OpenID 3
2.2.1 Cơ chế Smart mode 3
2.2.1.1 Quy trình xác định thành phần Identity Provider 3
2.2.1.2 Quy trình gởi thuộc tính định danh 3
2.2.1.3 Quy trình kiểm tra thuộc tính định danh 3
2.2.2 Cơ chế Dumb mode 3
2.3 Cơ chế xác thực của OpenID: 3
2.4 Ứng dụng thuật toán Diffie-Hellman 3
2.4.1 Mô hình trao đổi khóa Diffie-Hellman 3
2.4.2 Thuật toán trao đổi khóa Diffie-Hellman 3
2.5 Sơ đồ quy trình giao tiếp giữa Client – Server 3
2.6 Quy trình xử lý các bước giao tiếp 3
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM 3
3.1 Mô hình triển khai thực nghiệm 3
3.1.1 Triển khai dịch vụ OpenID trên website NukeViet 3
3.1.2 Công cụ demo 3
Trang 33.2 Các bước thực hiện 3
3.3 Kết quả đạt được 3
3.3.1 Client Hello 3
3.3.2 Server Hello, Certificate, Server Hello Done 3
3.3.3 Client Key Exchange 3
3.3.4 Change Cipher Spec 3
3.3.5 Application Data RP – OP 3
3.3.6 Application Data OP – RP 3
3.3.7 Encrypted Alert 3
3.3.8 Biểu đồ Flow tổng hợp các bước giao tiếp giữa client và server 3
CHƯƠNG 4: KẾT LUẬN 3
4.1 Ưu điểm của OpenID 3
4.1.1 Đối với Website và nhà phát triển WebApp 3
4.1.2 Đối với người dùng cuối 3
4.2 Hạn chế của OpenID 3
4.2.1 Triển khai OpenID 3
4.2.2 Bảo mật đối với OpenID 3
PHỤ LỤC A 3
PHỤ LỤC B 3
TÀI LIỆU THAM KHẢO 3
Trang 4CHƯƠNG 1: TỔNG QUAN VỀ OPENID
1.1 Tổng quan
OpenID là một dịch vụ định danh (Identify) chia sẻ, là một hệ thống đăng nhập một lần không có tính tập trung, cho phép người sử dụng đăng nhập nhiều website khác nhau chỉ bằng 1 định danh số, tránh việc sử dụng các tài khoản và mật khẩu khác nhau cho mỗi website OpenID là định chuẩn mở, miễn phí và phân quyền cho phép người dùng điều khiển được các thông tin cá nhân của mình công khai trên Internet
Một OpenID là dạng liên kết URL, URL này có thể là tên miền của website hoặc URL của nhà cung cấp định danh OpenID Khi đăng nhập với tài khoản OpenID, bạn phảiđăng nhập vào Nhà cung cấp dịch vụ định danh để kiểm tra tính hợp lệ của tài khoản OpenID là một phương thức giúp bạn xác thực tài khoản đăng ký tại một provider duy nhất mà bạn tin tưởng và cho phép người dùng thực hiện việc đăng nhập vào các lần sau
1.2 Lịch sử phát triển
Phiên bản đầu tiên của OpenID được phát triển vào tháng 5 năm 2005 bởi Brad Fitzpatrick, tác giả của trang web cộng đồng LiveJournal, làm việc cho công ty Six Apart,ban đầu có tên là Yadis (“Yet another distributed identity system": hệ thống đăng nhập phân tán), và được gọi là OpenID sau khi tên miền www.openid.net được trao cho Six Apart để sử dụng cho dự án
Tháng 6/2005, các cuộc thảo luận giữa người dùng cuối và nhà phát triển từ công ty phần mềm NetMesh về khả năng hợp tác giữa OpenID và LID (Một giao thức tương tự được phát triển bởi NetMesh) Kết quả của sự hợp tác đó là giao thức Yadis được phát triển và giữ tên gọi mới là OpenID Giao thức OpenID được công bố tháng 24/10/2005, sau khi hội thảo Internet Identity Workshop diễn ra vài ngày
Trang 5Tháng 12, các nhà phát triển SXIP (Simple Extensible Identity Protocol) và XRI (Một chuẩn nhận dạng mới trên Internet) và bắt đầu tích hợp vào OpenID, thay vì nhận dạng bằng URL ban đầu, OpenID đã phát triển thành một chuận nhận dạng đầy đủ cho danh tính người sử dụng Phiên bản OpenID 2.0 xuất hiện.
Ngày 31/1/2007, Symantec công bố hổ trợ OpenID trong trang dịch vụ và sản phẩm.Một tuần sau, ngày 6/2/2007, Microsoft kết hợp với JanRain, Sxip, và VeriSign (Những
tổ chức tham gia phát triển OpenID) tuyên bố hổ trợ OpenID và xem xét khả năng tương tác giữa OpenID và MS CardSpace (Một phương thức nhận dạng của Microsoft), cùng với đó là việc xem xét các vấn đề bảo mật cho sự phát triển của OpenID Giữa tháng 2, AOL hổ trợ thử nghiệm OpenID
OpenID sau đó được các đại gia như Yahoo, Google quan tâm, kéo theo đó là các mạng xã hội và các website có lượng người sử dụng lớn cũng bắt đầu hổ trợ OpenID (Trở thành Provider hoặc WebApp hổ trợ OpenID)
1.3 Ứng dụng và giải pháp công nghệ
1.3.1 Ứng dụng
– Website, mạng xã hội, phần mềm lập trình, Ebank, Windows
– Giúp người dùng dễ dàng đăng ký và đăng nhập, thao tác xử lý nhanh và đơn giản Hoàn toàn phụ thuộc vào việc lựa chọn nhà cung cấp dịch vụ từ phía người dùng tin cậy
– Khả năng tích hợp, triển khai, cơ chế quản lý bảo mật thông tin người dùng cao.– Giải quyết được bài toán lập trình nhanh (kết nối và chứng thực qua các nhà dịch
vụ cho việc xử lý đăng nhập) mà không cần xây dựng chức năng xử lý đăng nhập cục bộ
Trang 6– Giúp người dùng dễ dàng sử dụng nhiều ứng dụng khác nhau chỉ với cùng một tài khoản duy nhất.
– Cho phép hệ thống có thể sử dụng các tài khoản đã có trước từ bên ngoài hoặc dùng các tài khoản tạo bên trong hệ thống:
Chứng thực qua email: Đòi hỏi người dùng sau khi đăng kí tài khoản tại site
sẽ phải kích hoạt tài khoản thông qua email
Chứng thực bằng tay: Tất cả các tài khoản chỉ có thể tạo bởi người quản trị
Không chứng thực: Người dùng chỉ cần đăng kí tài khoản là xong, không cần xác nhận qua email
1.4 Các thành phần của một hệ thống quản lý định danh
Các hệ thống quản lý định danh rất đa dạng và phong phú Mỗi hệ thống có thể có danh sách các thành phần, cách hoạt động, cách giao tiếp khác nhau
Tuy nhiên, trong hệ thống quản lý định danh thông thường có các thành phần:
Trang 7Hình 1.1 Các thành phần chính của hệ thống định danh
– Relying Party: là dịch vụ sử dụng cơ chế định danh để chứng thực Ví dụ, một
số trang web sử dụng cơ chế đăng nhập người dùng để định danh như trang zing, trang eplay Hiện nay đã có rất nhiều thành phần Relying Party trên mạng Phần lớn trong số đó đã hỗ trợ định danh bằng hệ thống khác như tài khoản email của Yahoo hay Gmail
Hình 1.2 Ví dụ về thành phần Relying Party– Identity Provider (IdP): là thành phần có nhiệm vụ quản lý các thuộc tính định danh của người dùng hệ thống IdP có chức năng truyền những thông tin cần
Trang 8thiết để thực hiện chứng thực đến Relying Party sau khi xác định đúng là người dùng đang sử dụng dịch vụ Hiện nay đã có rất nhiều hệ thống nổi tiếng đã xây dựng thành phần Identity Provider cho riêng mình dựa trên cơ chế của hệ thốngOpenID như Google, Yahoo…
– Identity Selector (IS): là thành phần trung gian của hệ thống, là cầu nối giữa người dùng, Relying Party, Identity Provider Mọi hoạt động của thành phần này được điều khiển trực tiếp bởi người dùng
1.5 Quy trình hoạt động chính của hệ thống quản lý định danh
Hình 1.3 Quy trình hoạt động chính của hệ thống quản lý định danh
Quy trình của một hệ thống quản lý định danh được minh họa trong Hình 1.3 bao
Trang 9gồm các bước chính sau để thực hiện quá trình chứng thực:
– Bước 1: Người dùng sẽ cung cấp thông tin về Identity Provider cho thành phần Identity Selector
– Bước 2: Thành phần Identity Selector sẽ tự động giao tiếp với thành phần Relying Party Sau đó, Identity Selector sẽ truyền các thông tin về Identity Provider do người dùng cung cấp ở bước 1 đến thành phần Relying Party.– Bước 3: Thành phần Relying Party sẽ sử dụng thông tin người dùng cung cấp
để kết nối với thành phần Identity Provider (thông qua một kênh truyền an toàn) Sau đó, Relying Party sẽ gởi danh sách tên các thuộc tính cần thiết để thực hiện định danh đến thành phần Identity Provider thông qua kênh truyền
an toàn đã được thiết lập
– Bước 4: Thành phần Identity Provider sẽ tạo các thuộc tính cần định danh mà thành phần Relying Party yêu cầu ở bước 3 Sau đó, Identity Provider sẽ ký xác nhận các thông tin mình tạo ra bằng chữ ký của mình Cuối cùng, IdentityProvider sẽ truyền thông điệp đã ký về Identity Selector
– Bước 5: Identity Selector sẽ hiện lên các thông tin định danh tương ứng Sau
đó, người dùng sẽ kiểm tra các thông tin này và xác nhận có truyền những thuộc tính định danh đến Relying Party hay không
– Bước 6: Các thuộc tính định danh sẽ được truyền đến Relying Party nếu người dùng đã xác nhận ở bước 5
– Bước 7: Relying Party sẽ kiểm tra những thuộc tính định danh và trả về kết quả cho người dùng
Trang 10CHƯƠNG 2: PHƯƠNG THỨC HOẠT ĐỘNG CỦA OPENID
2.1 Giao tiếp giữa các thành phần trong hệ thống OpenID
OpenID cung cấp cho người dùng URI duy nhất để đăng nhập vào những Relying Party khác nhau URI đóng vai trò là thuộc tính định danh được quản lý tại Identity Provider Sự giao tiếp giữa các thành phần trong hệ thống OpenID với URI là địa chỉ của Identity Provider được thể hiện như hình 2.1
Trang 11Hình 2.1 URI là địa chỉ của Identity Provider.
Tuy nhiên, URI không nhất thiết phải là địa chỉ Identity Provider Ví dụ, URI thật của Identity Provider có thể lưu ở một máy khác như trong hình 2.2 Trong trường hợp này, hệ thống phải sử dụng hệ thống Web Server Location of Identifier URI để có thể xác định được địa chỉ URI thật sự của Identity Provider
Hình 2.2 URI không phải là địa chỉ của Identity Provider
2.2 Cơ chế hoạt động của OpenID
OpenID có hai cơ chế giao tiếp là Smart mode và Dumb mode Hai cơ chế này được dựa trên khả năng của Relying Party Trong chế độ Smart mode, Relying Party có khả năng lưu lại khóa chia sẻ bí mật cho việc chứng thực sau đó Ngược lại, ở chế độ Dumb mode, Relying Party không có khả năng lưu trữ thông tin nên phải thực hiện thêm một số bước để hoàn tất quá trình chứng thực
2.2.1 Cơ chế Smart mode
Trang 12Quy trình định danh của hệ thống OpenID ở chế độ Smart Mode có thể chia làm 3 quy trình con sau:
– Quy trình xác định thành phần Identity Provider
– Quy trình gởi thuộc tính định danh
– Quy trình kiểm tra thuộc tính định danh
2.2.1.1 Quy trình xác định thành phần Identity Provider
Hình 2.3 Quy trình xác định thành phần Identity ProviderQuy trình xác định thành phần Identity Provider gồm 6 bước như hình 2.3:
– Bước 1.1: Người dùng sẽ nhập địa chỉ URL của Relying Party vào Browser.– Bước 1.2: Dựa vào URL người dùng nhập vào, Browser sẽ giao tiếp với thành phần Relying Party
– Bước 1.3: Relying Party sẽ trả về Browser trang đăng nhập có hỗ trợ OpenID trong đó có textbox yêu cầu người dùng nhập vào URI của Identity Provider.– Bước 1.4: Browser hiển thị trang đăng nhập cho người dùng
– Bước 1.5: Người dùng sẽ điền URI của Identity Provider vào Browser Sau khi điền vào URI, người dùng nhấn nút “Đăng nhập”
– Bước 1.6: Browser sẽ chuyển thông tin về URI người dùng nhập vào đến Relying Party Relying Party sẽ lấy thông tin về URI người dùng nhập vào để xác định được thành phần Identity Provider tương ứng URI người dùng nhập vào sẽ có hai loại:
Trang 13 Loại 1: URI đó chính là địa chỉ của Identity Provider Trong trường hợp này, Relying Party đã có được địa chỉ của Identity Provider chính là URI người dùng nhập cung cấp.
Loại 2: URI này không phải là địa chỉ của Identity Provider Trong trườnghợp này, thành phần Relying Party phải dùng Yadis để lấy địa chỉ của Identity Provider Dịch vụ Yadis có vai trò nhận vào một URI và sẽ trả về địa chỉ và thông tin về Identity Provider tương ứng Quy trình xác định địachỉ Identity Proivder dựa trên Yadis được minh họa trong hình 2.4
Hình 2.4 Sử dụng Yadis để xác định địa chỉ của Identity Provider
2.2.1.2 Quy trình gởi thuộc tính định danh
Hình 2.5 Quy trình gởi thuộc tính định danhQuy trình gởi thuộc tính định danh lên Relying Party gồm 10 bước trong hình 2.5:– Bước 2.1: Relying Party sau khi xác định được thành phần Identity Provider ở quy trình xác định thành phần Identity Provider (xem phần 2.2.1.1) Bước 2.1 làbước tùy chọn bao gồm hai trường hợp xảy ra như sau:
Trang 14 Trường hợp 1: Relying Party và Identity Provider chưa có khóa chia sẻ bí mật ở những lần định danh trước đây, hoặc khóa chia sẻ bí mật đã hết thời gian sử dụng Trong trường hợp này, Relying Party sẽ kết nối bằng một kênh truyền an toàn với Identity Provider để chia sẻ khóa bí mật Khóa bí mật sẽ được sử dụng để kiểm tra các thuộc tính định danh ở quy trình kiểm tra thuộc tính định danh sau này ở bước 3.1 hay những lần định danhsau đó.
Trường hợp 2: Nếu thành phần Relying Party đã có được khóa bí mật chưa hết thời gian sử dụng ở các lần thực hiện định danh trước đây thì không cần phải thực hiện bước này Vì vậy bước 2.1 là bước tùy chọn – Bước 2.2: Relying Party gởi danh sách tên các thuộc tính yêu cầu Identity Provider cung cấp để chứng thực
– Bước 2.3: Identity Provider sẽ yêu cầu người dùng đăng nhập bằng cách trả về Browser trang đăng nhập
– Bước 2.4: Browser sẽ hiển thị trang đăng nhập đến người dùng
– Bước 2.5: Người dùng sẽ đăng nhập vào Identity Provider (ví dụ, người dùng
sẽ nhập vào username và password để đăng nhập) Sau đó, người dùng sẽ nhấn nút “đăng nhập”
– Bước 2.6: Browser sẽ chuyển thông tin đăng nhập người dùng đến Identity Provider để kiểm tra
– Bước 2.7: Identity Provider sẽ kiểm tra thông tin đăng nhập Sau đó, Identity Provider sẽ dựa tręn danh sách tęn các thuộc tính yęu cầu từ Relying Party; Identity Provider sẽ tạo một thông điệp có chứa các thuộc tính tương ứng Cuối cùng, Identity Provider sẽ ký trên danh sách các thuộc tính định danh và trả về Browser
Trang 15– Bước 2.8: Browser sẽ hiện lên tất cả thuộc tính định danh nhận được từ IdentityProvider cho người dùng.
– Bước 2.9: Người dùng sẽ kiểm tra các thuộc tính định danh có hợp lệ Sau đó, người dùng sẽ xác nhận truyền các thuộc tính định danh
– Bước 2.10: Browser sẽ truyền các thông tin định danh của người dùng đến Relying Party
2.2.1.3 Quy trình kiểm tra thuộc tính định danh
Hình 2.6 Quy trình kiểm tra thuộc tính định danhQuy trình gởi thuộc tính định danh lên Relying Party gồm 3 bước được minh họatrong hình 2.6:
– Bước 3.1: Dựa trên thuộc tính định danh nhận được từ thành phần IdentityProvider ở quy trình gởi thuộc tính định danh (xem phần 2.2.1.2) cùng với khóachia sẻ bí mật được tạo ra ở bước 2.1 Relying Party sẽ kiểm tra xem thuộc tínhđịnh danh có hợp lệ hay không
– Bước 3.2: Relying Party trả về kết quả định danh về Browser
– Bước 3.3: Browser sẽ hiển thị kết quả định danh đến người dùng
2.2.2 Cơ chế Dumb mode
Chế độ Dumb mode cũng tương tự như chế độ Smart mode Nhưng ở chế độ Dumb mode, Relying Party không có khả năng lưu trữ các thông tin trước đó Do đó thành phần Identity Provider và Relying Party sẽ chưa có khóa chia sẻ để kiểm tra thuộc tính định
Trang 16danh Vì vậy, ở bước 3.1 trong quy trình kiểm tra thuộc tính định danh (xem phần 2.2.1.3)trong chế độ Dumb mode, Relying Party cần phải tạo kết nối an toàn với Identity Provider
để kiểm tra thuộc tính định danh Các bước khác ở chế độ Dumb mode hoàn toàn giống với chế độ Smart mode Hình 2.7 minh họa quá trình kiểm tra thuộc tính định danh ở chế
độ Dumb mode khác so với chế độ Smart mode ở bước 3.1
Hình 2.7 Quy trình kiểm tra thuộc tính định danh ở chế độ Dumb mode
2.3 Cơ chế xác thực của OpenID:
OpenID sử dụng cơ chế xác thực SASL (Simple Authentication and Security Layer),
sử dụng các giao thức lớp ứng dụng như IMAP, POP, XMPP với mục tiêu modules hóa
và bảo mật lớp
OpenID ban đầu được hình dung cho HTTP và HTML, người dùng sẽ chuyển hướngcủa Relying Party vào một nhà cung cấp danh tính xác thực người dùng và sau đó gửi thông tin nhận dạng về thuộc tính khác (hoặc trực tiếp hoặc gián tiếp) với Relying Party
Hình 2.8 Cơ chế xác thực của OpenID
Trang 17Khi xem xét lưu lượng trong SASL, Relying Party và người dùng đều phải thay đổi
mã để thi hành cơ chế SASL Tính xác thực SASL được thể hiện như hình 2.9
Hình 2.9 Xác thực SASLCác bước tiến hành như sau:
– Bước 1: Relying Party hay SASL server sẽ tiến hành cơ chế SASL của OpenID cho client
– Bước 2: Client khởi tạo một xác thực SASL cung cấp
– Bước 3: Sau khi nhận dạng người dùng, các Relying Party thiết lập Endpoint OpenID Provider URL người dùng để xác thực
– Bước 4: Relying Party và OpenID Provider sử dụng thuật toán Diffier_Hellmanthiết lập một khóa bí mật
– Bước 5: Relying Party truyền một yêu cầu xác thực để các OpenID Provider có một sự khẳng định trong các hình thức của một yêu cầu gián tiếp Thông điệp
Trang 18này được chuyển qua client hơn là trực tiếp giữa các Relying Party và OpenID Provider
– Bước 6: Các SASL ở client gửi một phản hồi trống, tiếp tục xác thực thông qua OpenID
– Bước 7: Các ứng dụng máy client phải xây dựng một URL có chứa nội dung trong tin nhắn trước đây từ Relying Party URL này được chuyển đến các OpenID Provider, hoặc tới SASL client hoặc xử lý thích hợp Chẳng hạn như một trình duyệt …
– Bước 8: Client xác nhận cho OpenID Provider và sau đó chấp thuận hoặc không chấp nhận chứng thực với OpenID Provider Cuối cùng là chứng thực cho OpenID Provider trong phạm vi của OpenID
– Bước 9: Các OpenID Provider sẽ truyền tải thông tin về sự thành công hay thất bại của giai đoạn thẩm định cho Relying Party Một lần nữa bằng cách sử dụng một gián tiếp đáp ứng thông qua trình duyệt của client, các client truyền qua HTTP chuyển hướng kết quả OpenID Provider cho Relying Party
– Bước 10: Các thẻ Relying Party gửi một yêu cầu trực tiếp check_authenticationOpenID cho OpenID Provider
– Bước 11: Các máy chủ SASL gửi một phản ứng SASL phù hợp với client
2.4 Ứng dụng thuật toán Diffie-Hellman
2.4.1 Mô hình trao đổi khóa Diffie-Hellman
Năm 1976, Whitfield Diffie và Martin Hellman đã đưa ra một giao thức để trao đổi các giá trị khóa quy ước giữa các đối tác trên đường truyền có độ bảo mật trung bình Sự
ra đời của giao thức trao đổi khóa Diffie-Hellman được xem là bước mở đầu cho lĩnh vực
mã hóa khóa công khai
Trang 19Hình 2.10 Mô hình trao đổi khóa Diffie-HellmanDiffie-Hellman là một thuật toán dùng để trao đổi khóa chứ không dùng để bảo vệ tính bí mật của dữ liệu Tuy nhiên, Diffie-Hellman lại có ích trong giai đoạn trao đổi khóa
bí mật của các thuật toán mật mã đối xứng
Thuật toán trao đổi khóa Diffie-Hellman dựa trên phép logarit rời rạc Cho trước một
số g và x=gk , để tìm k ta thực hiện phép logarit : k= logg(x) Tuy nhiên, nếu cho trước g, n
và (gk mod n), thì quá trình xác định k được thực hiện theo cách khác với cách ở trên và được gọi là logarit rời rạc
2.4.2 Thuật toán trao đổi khóa Diffie-Hellman
Giả sử A và B muốn liên lạc sử dụng hệ mã khoá bí mật Để thoả thuận mã khoá K chung cho cả hai bên qua một kênh không an toàn mà không ai khác có thể biết được, A
và B có thể dùng thuật toán khoá Diffie -Hellman như sau:
– Gọi n là một số nguyên tố lớn và g là một cơ số sinh (generator, số nguyên nhỏ)thỏa điều kiện: với mọi x {1,2,…,n-1}, ta luôn tìm được số y sao cho x=gy
mod n
– Giá trị n và g được phổ biến công khai giữa các thực thể trao đổi khóa Sau đó user A tạo ra một số riêng Xa < n, tính giá trị Ya = (gxa mod n) và gởi cho B Tương tự, user B cũng tạo ra một số riêng Xb <n tính giá trị Yb = (gxb mod n) và gởi lại cho A Xa và Xb tương đương khóa private, Ya và Yb tương đương khóa public
Trang 20– User B xác định được khóa bí mật dùng cho phiên làm việc bằng cách tính giá trị (gxa mod n)xb = (gxaxb mod n) Bằng cách tương tự, user A cũng xác định được cùng khóa bí mật này bằng cách tính giá trị (gxb mod n)xa = (gxaxb mod n).
– Giả sử trong quá trình trao đổi các giá trị, phía tấn công bắt được(gxa mod n ) và(gxb mod n), họ rất khó xác định được Xa và Xb vì độ phức tạp của phép toán logarit rời rạc là rất cao
– Ví dụ: với n=31 và g=3
A: x=8 =>y=38 mod 31 =20k = 16 8 mod 31 =4B: x=6 =>y=36 mod 31 =16 k = 206 mod 31 =4Khóa bí mật không được tạo trước và chuyển từ A sang B hoặc ngược lại, khóa bí mật chỉ được tạo ra sau khi A và B trao đổi với nhau Ya và Yb Vì vậy khóa bí mật này thường được gọi là khóa phiên
2.5 Sơ đồ quy trình giao tiếp giữa Client – Server
Hình 2.11 Sơ đồ giao tiếp giữa Client - Server
2.6 Quy trình xử lý các bước giao tiếp
Các thông số mật mã của trạng thái session được tạo ra bởi giao thức bắt tay TLS, hoạt động trên đầu trang của TLS Layer Khi một khách hàng TLS và máy chủ đầu tiên
Trang 21bắt đầu giao tiếp, họ đồng ý trên một phiên bản giao thức, chọn thuật toán mã hóa, tùy chọn xác thực lẫn nhau, và sử dụng kỹ thuật mã hóa khóa công khai để tạo ra bí mật được chia sẻ Các giao thức bắt tay TLS bao gồm các bước sau đây:
– Trao đổi thông điệp bắt tay thỏa thuận đồng ý giữa các bên về các thuật toán, trao đổi ngẫu nhiên giá trị, và kiểm tra phiên giao dịch
– Trao đổi các thông số mật mã cần thiết để cho phép người dùng cuối và máy chủ đồng ý trên một khóa bí mật premaster
– Giấy chứng nhận exchange và thông tin mật mã để cho phép máy khách và máychủ xác thực bản thân
– Tạo ra một bí mật tổng thể từ bí mật premaster và trao đổi ngẫu nhiên giá trị.– Cung cấp các thông số an ninh lớp ghi
– Cho phép các máy người dùng cuối và máy chủ xác minh, tính toán các thông
số an ninh và những cái bắt tay xảy ra mà không làm bị can thiệp từ bên thứ ba tấn công
Trang 22Hình 2.12 Cấu trúc giao thức bắt tay
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM
3.1 Mô hình triển khai thực nghiệm
3.1.1 Triển khai dịch vụ OpenID trên website NukeViet
NukeViet OpenID hỗ trợ OpenID 2.0 Directed Identity Protocol, cho phép những tênmiền được lưu trữ rên máy chủ có thể yêu cầu xác thực Khi có yêu cầu từ một trang web thứ ba, NukeViet OpenID sẽ thực hiện việc kiểm tra xác thực tên miền hợp lệ Tên miền được mã hóa như một ID và lưu trữ trên máy chủ của NukeViet, nếu ID này là phù hợp thì một yêu cầu xác thực sẽ được trả về cho người dùng yêu cầu họ cho phép gửi thông tintrả về website thứ ba Nếu người dùng chưa đăng nhập trên máy chủ NukeViet, một yêu cầu đăng nhập sẽ được gửi về Nếu địa chỉ website thứ ba không tồn tại trên máy chủ, yêu
Trang 23cầu xác thực sẽ bị từ chối Sơ đồ và trình tự dưới đây mô tả quá trình của một phiên đăng nhập.
Hình 3.1 Quá trình tương tác của một phiên đăng nhập– Các ứng dụng web sẽ yêu cầu người dùng cuối để đăng nhập bằng cách cung cấp một tập hợp các lựa chọn (đăng nhập thông thường và đăng nhập bằng các nhà cung cấp OpenID trong đó có NukeViet)
– Người sử dụng lựa chọn để đăng nhập vào bằng cách sử dụng một tài khoản NukeViet trên http://nukeviet.vn
– Các ứng dụng web thực hiện phát hiện dịch vụ được định nghĩa trong tài liệu xrds
– NukeViet trả về một tài liệu xrds
Trang 24– Các ứng dụng web sẽ gửi một yêu cầu chứng thực đăng nhập đến NukeViet.– Chuyển hướng đăng nhập nếu người dùng chưa đăng nhập trên nukeviet.vn sau
đó yêu cầu người dùng chấp nhận xác thực đăng nhập của ứng dụng web đó.– Người dùng đăng nhập vào nukeviet.vn và xác thực yêu cầu
Trang 25Hình 3.2 Cài đặt WampServer giả lập webserver– Sau khi cài đặt xong, chúng ta sẽ cấu hình WampServer để sử dụng dịch vụ OpenID (mặc định tính năng này không được bật):
Vào file cấu hình php.ini
Hình 3.3 File cấu hình php.ini
Trang 26 Bỏ dấu “;” ở phía trước dòng “extension=php_curl.dll”.
Hình 3.4 Sửa file cấu hình php.ini cho phép thực thi tính năng cURL
Lưu lại
Bật tính năng Put Online cho phép puplic website ra bên ngoài
Hình 3.5 Bật tính năng Put Online– Tạo CSDL
Mở trình duyệt web, gõ http://localhost/phpmyadmin
Trang 27 Tại ô Create new database, nhập tên CSDL “hutech” Create
Hình 3.6 Tạo Database hutech
Trang 28Hình 3.7 Database hutech đã được tạo
– Cài đặt NukeViet
Vào thư mục www trên localhost tạo thư mục hutech chứa source NukeViet(download tại http://nukeviet.vn), sau đó mở trình duyệt và gõ vào địa chỉ websitehttp://localhost/hutech Quá trình cài đặt 1 website sử dụng NukeViet sẽ qua 7 bướcthực hiện mô phòng trên localhost, trên host thực tế và các yêu cầu như sau:
Bước 1: Chọn ngôn ngữ cài đặt rồi nhấn Next
Hình 3.8 Lựa chọn ngôn ngữ cài đặt
Trang 29Hình 3.9 Giao diện Tiếng Việt sau khi chọn ngôn ngữ
Bước 2: Kiểm tra việc CHMOD Bước kế tiếp
Trang 30Hình 3.10 Kiểm tra việc CHMOD
Bước 3: Bản quyền Bước kế tiếp
Trang 31Hình 3.11 Thông tin bản quyền
Bước 4: Kiểm tra máy chủ
Để hệ thống NukeViet có thể hoạt động tốt, ở bước này hệ thống sẽ liệt kê
ra các tính năng yêu cầu máy chủ bắt buộc phải hỗ trợ Yêu cầu phiên bản PHP >=5.0.0 và hỗ trợ MySQL, nếu không thỏa mãn thì quá trình cài đặt không thể tiếptục Ngoài ra hệ thống còn đưa ra những khuyến cáo về những tính năng khác củamáy chủ Bước kế tiếp