|
||||||||
|
||||||||
|
|
Công Cụ | Xếp Bài |
24-07-2009, 12:10 AM | #1 |
Guest
Trả Lời: n/a
|
Tổng quan về kerberos
TỔNG QUAN VỀ KERBEROS
Nếu ai đã học qua môn 70-299 hoặc ở môn 70-291 thì sẽ được nghe ít nhiều về phương pháp chứng thực Kerberos. Nhưng do thời lượng ở trên lớp quá ít, các bạn chỉ được biết phương pháp Kerberos là phương pháp mà trong đó, A và B muốn giao dịch với nhau thì phải đi lên C để xin ticket. Một số bạn thì vẫn còn mơ hồ rất nhiều về Kerberos. Cho nên hôm nay, nhóc tui mạo muội viết 1 bài bình dân về Kerberos để sao cho bà con chúng ta cùng nhau hiểu bản chất của Kerberos là gì và cách thức mà Kerberos mã hóa như thế nào. Bây giờ chúng ta khoan đề cập gì vội tới Kerberos, chúng ta hãy nghĩ đến chuyện đời thường. Để nhóc kể cho các bạn nghe một câu chuyện. Nhóc với tèo là 2 thằng bạn rất thân. Hằng ngày, tèo thường hay gửi mail đến cho nhóc (vì nhu cầu công việc) và nhóc cần biết được là liệu cái lá mail mà nhóc nhận được có phải thật sự là do thằng tèo gửi hay không? Nhóc đem chuyện này nói với tèo. Sau nhiều ngày suy nghĩ (suy nghĩ kỹ dữ lắm àh nghen), nhóc với tèo quyết định là sẽ lựa chọn ra 1 password, và sẽ không share cái pass này cho bất kì ai. Như vậy cứ mỗi lần gửi mail, nếu mà cái lá mail của tèo bắng cách nào đó có thể chứng minh được là người gửi biết cái password giữa nhóc và tèo, thì nhóc biết rằng người gửi lá mail cho nhóc là tèo Nghe ra cách giải quyết trên thì rất ok nhưng tèo sẽ làm như thế nào để chứng minh mình là người biết password? Cách đơn giản là ở cuối mỗi lá thư, tèo để nội dung “Đây là thư do tèo gửi, pass bí mật giữa tèo và nhóc là xxxx”. Hehe, vậy là đã giải quyết được vấn đề rồi. Nhưng… có vẻ như không ổn. Vì trong công ty của nhóc và tèo còn có thằng tý (hix, thằng này ghê lém. Nó có một sở thích kỳ quặc là khoái đọc mail người khác ). Lỡ đâu một ngày nào đó nó dùng tool scan và phát hiện ra được pass giữa nhóc và tèo thì sao? Rồi sau đó, chưa kể đến việc nó mạo danh thằng tèo gửi thư cho nhóc. Hix, vậy là xong, ko lẽ ko còn cách nào khác sao? Sau nhiều đêm suy nghĩ, tèo mới có sáng kiến, cứ mỗi lần thằng tèo gửi mail thì nó sẽ alô cho nhóc “Nhóc ơi, tao mới gửi mail cho mày đó. Mày check mail nha”. Nếu như thằng tèo gửi 1 bức thì không sao, nhưng nếu như một ngày nó gửi 200 lá mail thì nó phải gọi cho nhóc 200 cuộc điện thoại. Hehe, dạo này Mobifone đang khuyến mãi cho thuê bao nhận cuộc gọi nội mạng (60d/phút), cái này nhóc lời chắc. Nhưng làm người ai nỡ làm thế, đành phải suy nghĩ cách khác thôi. Lần này nhóc không dám để cho thằng tèo suy nghĩ nữa (sáng kiến của nó thành ra tối kiến rồi). Nhóc bèn bạo gan lên hỏi ông sếp (1 chuyên gia về bảo mật). Sau khi nghe nhóc trình bày, ổng đưa cho nhóc 1 xấp tài liệu về Kerberos và nói “Tất cả đều nằm trong này”. Hehe, cho nên hôm nay nhóc tui mới có cái để viết cho mọi người. Quả thật giao thức Kerberos đã giải quyết được vấn đề của nhóc và tèo. Thay vì chia sẻ cái password, thì nhóc và tèo sẽ nhờ Kerberos mã hóa password đó thành 1 cái key và giao dịch với nhau thông qua key đó. Key này có tính đối xứng, nghĩa là nó vừa có chức năng mã hóa và đồng thời cũng có chức năng giải mã. Giờ đây ví dụ nhóc gửi tin nhắn cho tèo, password thống nhất giữa nhòc và tèo là “nhocteo”. Sau đó, nhóc và tèo nhờ Kerberos mã hóa giùm cái pass “nhocteo” thành “$$$$$$”. Tiếp theo, nhóc sẽ dùng cái key “$$$$$$” mã hóa một phần thông tin trong bức mail và gửi đến cho tèo. Về phía tèo, tèo cũng sẽ dùng cái key “$$$$$$” để giải mã nội dung. Để cho các bạn dẽ hình dung, chúng ta sẽ thử đi phân tích quá trình sent dữ liệu giữa nhóc và tèo, quá trình chứng thực sẽ diễn ra như thế nào? 1. Đầu tiên nhóc sẽ gửi cho tèo 1 lá mail bao gồm tên của nhóc (ở dạng plaintext) và 1 cái giấy xác nhận (giấy này đã được mã hóa bởi cái key bí mật giữa nhóc và tèo). Giây xác nhận này có 2 thông tin: 1 là chứa thông tin cùa nhóc, 2 là chứa giờ của máy nhóc 2. Tèo nhận được cái lá mail đó, dùng cái key bí mật giữa nhóc và tèo để giải mã cái giấy xác nhận. Tèo sẽ bung cái phần chứa giờ của máy nhóc ra. Giả sử như đồng hồ của máy tèo và máy nhóc đã được đồng bộ hóa. Thời gian lệch nhau không được quá 5 phút (đây là mức chuẩn). Bây giờ tèo sẽ so sánh thời gian của cái giấy xác nhận với giờ hiện tại trên máy của tèo. Lúc này sẽ có 2 trường hợp xảy ra. + Nếu sự chênh lệch giữa 2 thời gian > 5 phút, thì tèo sẽ tự động loại bỏ cái giấy chứng nhận đó xem như đây là giả mạo + Nếu thời gian chênh lệch nhau phù hợp (dưới 5 phút), thì có lẽ giấy xác nhận này đến từ nhóc. 3. Sau đó tèo dùng cái key bí mật giữa nhóc và tèo, mã hóa với thời gian của bức thư nhóc gửi và gửi trả kết quả về cho nhóc. Tèo không gửi toàn bộ nội dung mà tèo đã giải mã từ cái giấy xác nhận của nhóc, mà chỉ gửi cái thời gian. Tại sao lại như vậy? Nếu như tèo gửi toàn bộ nội dung giấy xác nhận, thì nhóc sẽ nghi ngờ. Nhóc sẽ nghĩ là có người nào đó copy lại toàn bộ nội dung giấy xác nhận của bức mail nhóc gửi cho tèo và gửi trả ngược lại cho nhóc. Cho nên, để cho chắc ăn, tèo chỉ gửi một phần thông tin, để chứng minh là tèo có khả năng giải mã được cái giấy giác nhận của nhóc. Tại sao tèo lại chọn cách gửi thời gian mà không gửi phần nội dung nào đó trong giấy xác nhận, đơn giản bởi vì thời gian cuả cái giấy xác nhận mà nhóc gửi cho tèo là bằng chứng duy nhất và cái thời gian này chỉ có nhóc biết. 4. Nhóc nhận được tin nhắn trả lời từ tèo, giải mã nó ra, và so sánh kết quả với thời gian của giấy chứng nhận gốc của nhóc. Nếu nó giống nhau, nhóc có thể biết chắc rằng giấy chứng nhận của nhóc đã đến được đúng tay người nhận. Vì chỉ có ai biết cái key bí mật giữa nhóc và tèo thì mới có thể giải mã được cai giấy xác nhận đó và có thể xem được cái thời gian. Quá trình chứng thực giữa nhóc và tèo. Vậy là bạn đã có thể hiểu sơ về quá trình chứng thực của giao thức Kerberos. Nhưng nhóc chưa giải thích cho bạn biết là “Nhóc và tèo sẽ lấy cái key bí mật ở đâu và lấy bằng cách nào?” Nếu bạn đã đọc tới phần này, thì bạn đã đi cùng nhóc hơn nửa chặng đường rồi. Trả lời câu hỏi ở trên có 2 trường hợp: 1. Nếu là con người : Nhóc và tèo có thể gặp nhau, cùng thống nhất 1 key 2. Nếu là máy tính thì sao? Giả sử như nhóc là máy client và tèo là máy server. Và vấn đề này sẽ đau đầu hơn nữa nếu máy nhóc muốn giao tiếp với nhiều máy server, có nghĩa là cứ mỗi server sẽ cần 1 key mã hóa. Ngược lại, máy tèo là máy server, cũng phải giao tiếp với nhiều máy client và cũng cần nhìêu key mã hóa tương ứng cho mỗi máy client. Vậy chúng ta có nhu cầu là mỗi client khi giao tiếp với nhiều server thì chỉ cần 1 key mà thôi, và server cũng vậy, việc phân phối key cũng cần phải nhanh chóng. Và chúng ta cũng cần một nơi để lưu trữ và bảo vệ các key. Bạn có biết tên Kerberos có nghĩa là gì không? Đây là tên của một con chó 3 đầu (trong thần thoại Hy Lạp), nó có nhiệm vụ canh giữ cổng địa ngục. Hehe, cũng giống như Kerberos, phương pháp chứng thực Kerberos cũng có 3 cái đầu: 1 là client, 2 là server và 3 là 1 người trung gian tin cậy giữa client và server. Và cái người trung gian này được gọi là Key Distribution Center (KDC). KDC là dịch vụ mà nó chứa tất cả những gì bảo mật trên server. Nó sẽ lưu trữ những key mã hóa. Khi mà user logon, Kerberos client trên máy của user sẽ chấp nhận password đó và nó sẽ chuyển đổi password đó thành một cái key mã hóa, và cái key này gọi là long-term key(key dài hạn).Nghe có vẻ khó hiểu quá nhỉ. Chúng ta sẽ đi tiếp theo câu chuyện của nhóc và tèo: Máy nhóc (client) muốn nói chuyện với máy tèo (server), thì máy nhóc sẽ gửi yêu cầu tới KDC: “KDC, nhóc muốn liên lạc tèo”. Sau khi KDC nhận được yêu cầu, KDC sẽ phân phối duy nhất 1 cái key ngắn hạn (short-term key) cho máy tèo và máy nhóc. Máy nhóc sẽ copy cái key ngắn hạn này đem mã hóa với cái key dài hạn của máy nhóc. Máy tèo cũng sẽ copy cái key ngắn hạn này đi mã hóa với key dài hạn (long-term key) trên máy tèo MÔ HÌNH LÝ THUYẾT Nhưng đây chỉ là lý thuyết mà thôi. Trên thực tế, thì tiến trình này diễn ra rất phức tạp chứ không phải dễ dàng như vậy. Khi mà KDC nhận được yêu cầu từ phía máy nhóc, thì nó sẽ gửi cả 2 bản copy short-term key tới máy nhóc. Bản copy session key của máy nhóc được mã hóa với key dài hạn của máy nhóc. Bản copy session key của máy tèo cũng được nhúng vào cùng với thông tin của máy nhóc, đây được gọi là session ticket. Tất cả những cái này, sau đó sẽ được mã hóa với key dài hạn của máy tèo MÔ HÌNH THỰC TẾ Khi mà máy tèo nhận được giấy úy nhiệm từ máy nhóc, nó sẽ giải mã session ticket với cái key dài hạn của máy tèo, mở cái short-term key ra, và dùng cái short-term key giải mã giấy chứng nhận của máy nhóc. Nếu mọi thứ ok, thì máy tèo biết rằng giấy ủy nhiệm từ máy nhóc được cấp phát bởi 1 nơi xác nhận tin cậy, đó là KDC Như vậy, khi bạn đọc tới phần này thì ít nhiều bạn cũng đã biết rõ Kerberos là như thế nào. Nhóc không đi sâu vào thuật toán mã hóa bởi vì nó rất phức tạp, nếu bạn nào yêu thích về security thì nên tìm hiểu thêm về phần này. Hy vọng qua bài viết của nhóc, bạn có thể hiểu được thêm về Kerberos. By Nguyễn Mạnh Trọng www.msopenlab.com |
|
|