H. Giới thiệu LDAP và JNDI
1. SSL và các chứng chỉ số
Trong các giao dịch điện tử trên mạng và trong các giao dịch thanh toán trực tuyến, thông tin/dữ liệu trên môi trường mạng Internet không an toàn thường được bảo đảm bởi cơ chế bảo mật thực hiện trên tầng vận tải có tên Lớp cổng bảo mật SSL (Secure Socket Layer) - một giải pháp kỹ thuật hiện nay được sử dụng khá phổ biến trong các hệ điều hành mạng máy tính trên Internet. SSL là giao thức đa mục đích được thiết kế để tạo ra các giao tiếp giữa hai chương trình ứng dụng trên một cổng định trước (socket 443) nhằm mã hoá toàn bộ thông tin đi/đến, được sử dụng trong giao dịch điện tử như truyền số liệu thẻ tín dụng, mật khẩu, số bí mật cá nhân (PIN) trên Internet. Giao thức SSL được hình thành và phát triển đầu tiên nǎm 1994 bởi nhóm nghiên cứu Netscape dẫn dắt bởi Elgammal, nhằm đảm bảo an toàn cho các giao dịch giữa các máy chủ Web với các trình duyệt. Giao thức này sử dụng một bên thứ ba, nhà cung cấp chứng thực số (Certificate Authority, viết tắt là CA), để định danh một đầu cuối hoặc cả 2 đầu của các cuộc giao dịch.Và ngày nay đã trở thành chuẩn bảo mật thi công trên mạng Internet. Phiên bản SSL hiện nay là 3.0 và vẫn đang tiếp tục được bổ sung và hoàn thiện. Tương tự như SSL, một giao thức khác có tên là Công nghệ truyền thông riêng tư (Private Communication Technology, viết tắt là PCT ) được đề xướng bởi Microsoft, hiện nay cũng được sử dụng rộng rãi trong các mạng máy tính chạy trên hệ điều hành Windows NT.
Ngoài ra, một chuẩn của Nhóm đặc trách kỹ thuật Internet (Internet Engineering Task Force, viết tắt là IETF) có tên là Bảo mật lớp giao vận (Transport Layer Security, viết tắt là TLS) dựa trên SSL cũng được hình thành và xuất bản dưới khuôn khổ nghiên cứu của IETF Internet Draft được tích hợp và hỗ trợ trong sản phẩm của Netscape.
1.1 Cách thức hoạt động của giao thức SSL
Điểm cơ bản của SSL là được thiết kế độc lập với tầng ứng dụng để đảm bảo tính bí mật, an toàn và chống giả mạo luồng thông tin qua Internet giữa hai ứng dụng bất kỳ, ví dụ như webserver và các trình duyệt (browser), do đó được sử dụng rộng rãi trong nhiều ứng dụng khác nhau trên môi trường Internet. Toàn bộ cơ chế hoạt động và hệ thống thuật toán mã hoá sử dụng trong SSL được phổ biến công khai, trừ khoá chia sẻ tạm thời được sinh ra tại thời điểm trao đổi giữa hai ứng dụng là tạo ngẫu nhiên và bí mật đối với người quan sát trên mạng máy tính.
Ngoài ra, giao thức SSL còn đòi hỏi ứng dụng chủ phải được chứng thực bởi một đối tượng lớp thứ ba (CA) thông qua chứng chỉ số điện tử (digital certificate) dựa trên mật mã công khai (ví dụ RSA). Sau đây ta xem xét một cách khái quát cơ chế hoạt động của SSL để phân tích cấp độ an toàn của nó và các khả nǎng áp dụng trong các ứng dụng nhạy cảm, đặc biệt là các ứng dụng về thương mại và thanh toán điện tử.
Giao thức SSL dựa trên hai nhóm con giao thức là giao thức "bắt tay" (handshake protocol) và giao thức "bản ghi" (record protocol). Giao thức bắt tay xác định các tham số giao dịch giữa hai đối tượng có nhu cầu trao đổi thông tin hoặc dữ liệu, còn giao thức bản ghi xác định khuôn dạng cho tiến hành mã hoá và truyền tin hai chiều giữa hai đối tượng đó. Khi hai ứng dụng máy tính, ví dụ giữa một trình duyệt web và máy chủ web, làm việc với nhau, máy chủ và máy khách sẽ trao đổi "lời chào" (hello) dưới dạng các thông điệp cho nhau với xuất phát đầu tiên chủ động từ máy chủ, đồng thời xác định các chuẩn về thuật toán mã hoá
Giới Thiệu SSL và nén số liệu có thể được áp dụng giữa hai ứng dụng. Ngoài ra, các ứng dụng còn trao đổi "số nhận dạng/khoá theo phiên" (session ID, session key) duy nhất cho lần làm việc đó.
Sau đó ứng dụng khách (trình duyệt) yêu cầu có chứng chỉ số điện tử (digital certificate) xác
minh của ứng dụng chủ (web server).
Chứng chỉ số điện tử thường được xác minh rộng rãi bởi một cơ quan trung gian - nhà cung cấp chứng thực số (Certificate Authority, viết tắt là CA) như RSA Data Sercurity hay VeriSign Inc., một dạng tổ chức độc lập, trung lập và có uy tín. Các tổ chức này cung cấp dịch vụ "xác minh" số nhận dạng của một công ty và phát hành chứng chỉ số duy nhất cho công ty đó như là bằng chứng nhận dạng (identity) cho các giao dịch trên mạng, ở đây là các máy chủ webserver.
Sau khi kiểm tra chứng chỉ số điện tử của máy chủ (sử dụng thuật toán mật mã công khai, như RSA tại trình máy trạm), ứng dụng máy trạm sử dụng các thông tin trong chứng chỉ số điện tử để mã hoá thông điệp gửi lại máy chủ mà chỉ có máy chủ đó có thể giải mã. Trên cơ sở đó, hai ứng dụng trao đổi khoá chính (master key) - khoá bí mật hay khoá đối xứng - để làm cơ sở cho việc mã hoá luồng thông tin/dữ liệu qua lại giữa hai ứng dụng chủ khách. Toàn bộ cấp độ bảo mật và an toàn của thông tin/dữ liệu phụ thuộc vào một số tham số:
1. Số nhận dạng theo phiên làm việc ngẫu nhiên;
2. Cấp độ bảo mật của các thuật toán bảo mật áp dụng cho SSL;
3. Độ dài của khoá chính (key length) sử dụng cho lược đồ mã hoá thông tin.
Cách thức hoạt động đơn giản như sau:
1. Một trình duyệt yêu cầu một trang được bảo mật (thường với https://) 2. Máy chủ Web gửi khóa công khai của nó cùng với chứng chỉ số của nó.
3. Trình duyệt kiểm tra chứng chỉ số đó phải được cấp phát bởi một bên được tín nhiệm (thường là một nhà cung cấp chứng thực tín nhiệm được tín nhiệm), chúng thư vẫn còn hợp lệ và có quan hệ với trang được liên kết.
4. Kế đến, trình duyệt sử dụng khóa công khai để mã hóa một khóa đã được mã hóa đối xứng ngẫu nhiên và gửi nó đến máy chủ cùng với URL đã được mã hóa theo yêu cầu cũng như là dữ liệu http khác cũng đã được mã hóa.
5. Máy chủ Web sử dụng khóa bí mật để giải mã khóa mã hóa đối xứng và khóa đối xứng để giải mã URL và dữ liệu http.
6. Máy chủ Web gửi phản hồi tài liệu html theo yêu cầu và dữ liệu http đã được mã hóa bằng khóa đối xứng.
7. Trình duyệt sử dụng khóa đối xứng để giải mã dữ liệu http, tài liệu html và hiển thị thông tin.
Để dễ hiểu, phần này sẽ trình bày qua ví dụ cụ thể: Alice trao đổi thông tin với Bob bằng công nghệ khóa chung. {something}key có nghĩa là something được mã hóa hoặc giải mã bằng key.
Alice cần chắc chắn là mình sẽ nói chuyện với Bob mà không phải là một ai khác. Alice sẽ tiến hành xác thực(authenticate) Bob.Bob có một cặp khóa gồm một khóa chung và một khóa riêng. Bob cho Alice biết trước khóa chung của mình (sẽ nói sau bằng cách nào). Alice tạo ra
A->B message ngẫu nhiên
Bob dùng khóa riêng của mình để mã hóa thông điệp vừa nhận được và gởi trả lại cho Alice:
B->A {message ngẫu nhiên}khóa-riêng-của-bob
Alice nhận được message từ Bob, dùng khóa chung của Bob để giải mã message này và sau đó so sánh message vừa giải mã được với random-message đã gởi đi. Nếu giống nhau, Alice có thể tin chắc rằng mình đang nói chuyện với Bob.
1. Bản tóm tắt (digest)
Thay vì phải mã hóa toàn bộ message nhận được từ Alice, Bob có thể xây dựng một bản tóm tắt(digest) của message bằng hàm băm một chiều (hash one-way), sau đó mã hóa digest bằng khóa riêng của mình và gởi cho Alice. Alice sẽ dùng khóa chung của Bob để giải mã digest do Bob gởi tới và tính digest của message đã được gởi đi, sau đó so sánh hai digest này với nhau.
Nếu trùng nhau, có nghĩa Alice có thể tin chắc là mình đang nói chuyện với Bob.
Digest thực chất là chỉ là một số nguyên(integer). Hai thuật toán phổ biến được dùng để tạo digest là MD5 hash 128bit, SHA hash 160 bit. Ai đó có được digest của Bob cũng không thể nào suy luận ra được message nguyên bản(original) vì digest chỉ là giá trị hash một chiều. Hai message khác nhau sẽ có digest khác nhau, khả năng trùng nhau xấp xỉ là 0.
2. Chữ kí điện tử (digital signature)
Theo cách ở trên thì Bob đã kí(sign) message do Alice gởi tới, nhở như ai đó đã thay đổi message này thì sao? Vì vậy cần thay đổi một chút như sau:
A->B Chào, Có phải Bob đó không?
B->A Alice, Mình là Bob đây!
{digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob
Như bạn thấy Bob không hề kí message của Alice. Thay vào đó, Bob sẽ gởi một mesage khác(không bị mã hóa) và digest của của message này (đã được mã hóa bằng khóa riêng của Bob) đến cho Alice. Bob chỉ tin tưởng vào chính mình. Alice dễ dàng thẩm tra Bob bằng cách dùng khóa chung của Bob giải mã digest nhận được, sau đó tính digest của message nhận từ Bob và so sánh hai digest này với nhau. Digest mà Bob gởi tới Alice chính là một chữ kí điện tử. Nó kí cho message "Alice, Mình là Bob đây!" để đảm bảo chắc chắn là message này không bị ai đó thay đổi gì khi đến Alice. Nếu thay đổi Alice sẽ biết ngay qua việc thẩm tra digest.
3. Trao khóa chung
Bob trao khóa chung của mình cho Alice bằng cách nào? Bạn hãy xem thử giao thức sau:
A->B Xin chào!
B->A Chào, Mình là Bob. Đây là khóa chung của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob
Giới Thiệu SSL
Với cách này thì ai cũng có thể giả mạo Bob và trao khóa chung của họ cho Alice, làm cho Alice tưởng lầm là mình đang nói chuyện với Bob.
Để giải quyết vấn đề này, Alice và Bob có thể dùng giấy chứng chỉ số 4. Giấy chứng chỉ số (digital certificate)
Giấy chứng chỉ số dùng để chứng nhận khóa chung của một cá nhân nào đó. Một giấy chứng chỉ số thường bao gồm các thứ sau:
tên cơ quan cấp giấy chứng nhận (issuer's name)
tên thực thể(entity) được cấp giấy chứng nhận(còn được gọi là đối tượng - subject) khóa chung của subject
tem thời gian(time-stamps) cho biết thời gian có hiệu lực của giấy chứng nhận
Chỉ có các cơ quan có thẩm quyền Certificate Authority (thường được gọi tắt là CA) mới đươc phép cấp giấy chứng nhận. Giấy chứng nhận được kí bằng khóa riêng của người cấp.
CA cũng được tổ chức theo dạng cây "hierarchy" tương tự như domain-name. Dĩ nhiên bạn cũng có thể tạo ra một CA mới cho riêng cho mình.
Chúng ta hãy xem giao thức mới này:
A->B Xin chào!
B->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
{digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob
Ai đó dùng giấy chứng nhận của Bob để giả mạo Bob sẽ bị Alice phát hiện ngay!
A->M Xin chào
M->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->M Hãy đưa bằng chứng đi!
M->A ???
Mallet không biết khóa riêng của Bob nên không thể xây dựng được message để Alice có thể tin mình là Bob.
5. Trao đổi khóa bí mật (secret-key)
Sau khi Alice đã xác thực mình đang nói chuyện với Bob, Alice sẽ gởi cho Bob một message đã bị mã hóa bằng khóa chung của Bob:
A->B {khóa bí mật}khóa-chung-của-bob
Bằng cách này, chỉ có Bob mới có thể giải mã message trên và lấy được khóa bí mật bởi vì chỉ có Bob mới biết được khóa riêng để giải mã. Trao đổi khóa bí mật bằng công nghệ khóa chung cực kì an toàn. Không một ai ngoại trừ Alice và Bob biết được khóa bí mật. Khóa bí mật này còn được biết đến với cái tên là khóa phiên(session key). Kể từ đây Alice và Bob sẽ dùng khóa phiên để trao đổi dữ liệu cho nhau. Khóa phiên được tạo ra trong mỗi phiên kết nối SSL và hoàn toàn bí mật(chỉ có Alice và Bob biết) nên rất an toàn. Công nghệ chuyên chở khóa phiên bằng khóa chung và dùng khóa phiên như một khóa đối xứng bí mật để trao đổi
kết hợp cả hai phương pháp mã hóa dung khóa đối xứng và khóa chung-khóa riêng.
Đây là giao thức mới:
A->B Xin chào!
B->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
{digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob A->B Ok Bob, Đây là {khóa bí mật}khóa-chung-của-bob B->A {message 1}khóa-bí-mật
B->A {message 2}khóa-bí-mật 6. Tấn công man-in-the-middle
Giao thức trên chưa phải là an toàn tuyệt đối. Mallet ngồi giữa Alice và Bob có thể chơi trò tấn công man-in-the-middle như sau:
A->M Xin chào!
M->B Xin chào!
B->M Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
M->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->M Hãy đưa bằng chứng đi!
M->B Hãy đưa bằng chứng đi!
B->M Alice, Mình là Bob đây!
{digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob M->A Alice, Mình là Bob đây!
{digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob A->M Ok Bob, đây là {khóa bí mật}khóa-chung-của-bob M->B Ok Bob, đây là {khóa bí mật}khóa-chung-của-bob B->M {some message}khóa-bí-mật
M->A Xén[{some message}khóa-bí-mật]
Mallet sẽ chuyển tiếp dữ liệu giữa Alice và Bob cho đến khi họ trao đổi khóa bí mật. Tại thời điểm này Alice nghĩ rằng mình đang nói chuyện với Bob nên tin tưởng hoàn toàn vào các message do Bob gởi tới. Thực chất không phải là như vậy. Mallet mặc dù không biết khóa bí mật nhưng hoàn toàn có thể xén, thêm hoặc sửa đổi gì đó trên các dữ liệu được gởi từ Bob
đến Alice.
7. Mã xác thực thông điệp (MAC)
Giới Thiệu SSL Để ngăn chặn cuộc tấn công man-in-the-middle trên, Alice và Bob có thể dùng thêm mã xác thực thông điệp (Message Authentication Code) thường được gọi tắt là MAC. Thuật toán tạo MAC khá đơn giản:
MAC = Digest[some message, khóa bí mật]
Mallet không biết khóa bí mật nên không tài nào tính đúng giá trị digest của message. Thậm chí nếu Mallet có cắt xén random các message thì tỉ lệ thành công là rất thấp vì dữ liệu digest vô cùng lớn. Ví dụ, nếu dùng MD5, Alice và Bob có thể gởi kèm MAC 128bit trong các message. Mallet cần trúng giá trị MAC nếu muốn tấn công man-in-the-middle với khả năng thành công là 1/18.446.744.073.709.551.616 khả năng trong một thời gian vô cùng ngắn.
Đây là toàn bộ giao thức:
A->B Xin chào!
B->A Chào, Mình là Bob. Đây là giấy chứng nhận của mình!
A->B Hãy đưa bằng chứng đi!
B->A Alice, Mình là Bob đây!
{digest[Alice, Mình là Bob đây!]}khóa-riêng-của-bob A->B Ok Bob, đây là {khóa bí mật}khóa-chung-của-bob {some message, MAC}khóa-bí-mật
1.2 Các thuật toán mã hoá và xác thực của SSL được sử dụng bao gồm (Ver 3.0)
1. DES - chuẩn mã hoá dữ liệu (ra đời nǎm 1977), phát minh và sử dụng của chính phủ Mỹ;
2. DSA - thuật toán chữ ký điện tử, chuẩn xác thực điện tử, phát minh và sử dụng của chính phủ Mỹ;
3. KEA - thuật toán trao đổi khoá, phát minh và sử dụng của chính phủ Mỹ;
4. MD5 - thuật toán tạo giá trị "bǎm" (message digest), phát minh bởi Rivest;
5. RC2, RC4 - mã hoá Rivest, phát triển bởi công ty RSA Data Security;
6. RSA - thuật toán khoá công khai, cho mã hoá và xác thực, phát triển bởi Rivest, Shamir và Adleman;
7. RSA key exchange - thuật toán trao đổi khoá cho SSL dựa trên thuật toán RSA;
8. SHA-1 - thuật toán hàm bǎm an toàn, phát triển và sử dụng bởi chính phủ Mỹ;
9. SKIPJACK - thuật toán khoá đối xứng phân loại được thực hiện trong phần cứng Fortezza, sử dụng bởi chính phủ Mỹ;
10. Triple-DES - mã hoá DES ba lần.
Cơ sở lý thuyết và cơ chế hoạt động của các thuật toán sử dụng về bảo mật bên trên hiện nay là phổ biến rộng rãi và công khai, trừ các giải pháp thực hiện trong ứng dụng thực hành vào