Kinh nghiệm sử dụng công nghệ Rutoken để đăng ký và phân quyền người dùng trong hệ thống (phần 1)

Chào buổi chiều Tôi muốn chia sẻ kinh nghiệm của tôi về chủ đề này.

Rutoken là giải pháp phần cứng và phần mềm trong lĩnh vực xác thực, bảo mật thông tin và chữ ký điện tử. Về cơ bản, đây là một ổ flash có thể lưu trữ dữ liệu xác thực mà người dùng sử dụng để đăng nhập vào hệ thống.

Trong ví dụ này, Rutoken EDS 2.0 được sử dụng.

Để làm việc với Rutoken này, bạn cần cài driver trên windows.

Đối với Windows, chỉ cài đặt một trình điều khiển sẽ đảm bảo rằng mọi thứ cần thiết đều được cài đặt để hệ điều hành nhìn thấy Rutoken của bạn và có thể hoạt động với nó.

Bạn có thể tương tác với Rutoken theo nhiều cách khác nhau. Bạn có thể truy cập nó từ phía máy chủ của ứng dụng hoặc trực tiếp từ phía máy khách. Ví dụ này sẽ xem xét sự tương tác với Rutoken từ phía máy khách của ứng dụng.

Phần máy khách của ứng dụng tương tác với rutoken thông qua plugin rutoken. Đây là chương trình được cài đặt riêng biệt trên mỗi trình duyệt. Đối với Windows bạn chỉ cần tải xuống và cài đặt plugin, nằm ở liên kết này.

Vậy là xong, bây giờ chúng ta có thể tương tác với Rutoken từ phía client của ứng dụng.

Ví dụ này thảo luận về ý tưởng triển khai thuật toán ủy quyền người dùng trong hệ thống bằng cách sử dụng sơ đồ phản hồi thử thách.

Bản chất của ý tưởng là như sau:

  1. Máy khách gửi yêu cầu ủy quyền đến máy chủ.
  2. Máy chủ phản hồi yêu cầu từ máy khách bằng cách gửi một chuỗi ngẫu nhiên.
  3. Máy khách đệm chuỗi này bằng 32 bit ngẫu nhiên.
  4. Máy khách ký chuỗi nhận được với chứng chỉ của nó.
  5. Máy khách gửi tin nhắn được mã hóa nhận được đến máy chủ.
  6. Máy chủ xác minh chữ ký bằng cách nhận tin nhắn gốc không được mã hóa.
  7. Máy chủ loại bỏ 32 bit cuối cùng khỏi tin nhắn không được mã hóa nhận được.
  8. Máy chủ so sánh kết quả nhận được với tin nhắn được gửi khi yêu cầu ủy quyền.
  9. Nếu các tin nhắn giống nhau thì việc ủy ​​quyền được coi là thành công.

Trong thuật toán trên có một thứ gọi là chứng chỉ. Đối với ví dụ này, bạn cần hiểu một số lý thuyết về mật mã. Trên Habré có bài viết tuyệt vời về chủ đề này.

Trong ví dụ này, chúng tôi sẽ sử dụng thuật toán mã hóa bất đối xứng. Để triển khai thuật toán bất đối xứng, bạn phải có cặp khóa và chứng chỉ.

Một cặp khóa bao gồm hai phần: khóa riêng và khóa chung. Khóa riêng, như tên gọi của nó, phải là bí mật. Chúng tôi sử dụng nó để giải mã thông tin. Khóa công khai có thể được phân phối cho bất kỳ ai. Khóa này được sử dụng để mã hóa dữ liệu. Do đó, bất kỳ người dùng nào cũng có thể mã hóa dữ liệu bằng khóa chung nhưng chỉ chủ sở hữu khóa riêng mới có thể giải mã thông tin này.

Chứng chỉ là một tài liệu điện tử chứa thông tin về người dùng sở hữu chứng chỉ cũng như khóa chung. Với chứng chỉ, người dùng có thể ký bất kỳ dữ liệu nào và gửi nó đến máy chủ, máy chủ này có thể xác minh chữ ký và giải mã dữ liệu.

Để ký chính xác một tin nhắn có chứng chỉ, bạn cần tạo nó một cách chính xác. Để thực hiện việc này, trước tiên, một cặp khóa được tạo trên Rutoken và sau đó chứng chỉ phải được liên kết với khóa chung của cặp khóa này. Chứng chỉ phải có chính xác khóa chung nằm trên Rutoken, điều này rất quan trọng. Nếu chúng ta chỉ cần tạo một cặp khóa và chứng chỉ ngay lập tức ở phía máy khách của ứng dụng thì làm cách nào máy chủ có thể giải mã được tin nhắn được mã hóa này? Rốt cuộc, anh ta không biết gì về cặp khóa hoặc chứng chỉ.

Nếu bạn đi sâu hơn vào chủ đề này, bạn có thể tìm thấy thông tin thú vị trên Internet. Có một số cơ quan chứng nhận nhất định mà chúng tôi rõ ràng tin tưởng. Các cơ quan chứng nhận này có thể cấp chứng chỉ cho người dùng; họ cài đặt các chứng chỉ này trên máy chủ của họ. Sau đó, khi khách hàng truy cập vào máy chủ này, anh ta sẽ thấy chính chứng chỉ này và thấy rằng nó được cấp bởi cơ quan chứng nhận, điều đó có nghĩa là máy chủ này có thể được tin cậy. Ngoài ra còn có rất nhiều thông tin trên Internet về cách thiết lập mọi thứ một cách chính xác. Ví dụ: bạn có thể bắt đầu với điều này.

Nếu chúng ta quay lại vấn đề của mình, giải pháp có vẻ hiển nhiên. Bạn cần bằng cách nào đó tạo ra trung tâm chứng nhận của riêng mình. Nhưng trước đó, bạn cần tìm hiểu xem trung tâm chứng nhận nên cấp chứng chỉ cho người dùng dựa trên cơ sở nào, bởi vì anh ta không biết gì về nó. (Ví dụ: họ, tên của anh ấy, v.v.) Có một thứ gọi là yêu cầu chứng chỉ. Thông tin thêm về tiêu chuẩn này có thể được tìm thấy, ví dụ, trên Wikipedia ru.wikipedia.org/wiki/PKCS
Chúng tôi sẽ sử dụng phiên bản 1.7 - PKCS#10.

Hãy để chúng tôi mô tả thuật toán tạo chứng chỉ trên Rutoken (nguồn gốc: документация):

  1. Chúng tôi tạo một cặp khóa trên máy khách và lưu nó trên Rutoken. (việc lưu diễn ra tự động)
  2. Chúng tôi tạo một yêu cầu chứng chỉ trên máy khách.
  3. Từ máy khách, chúng tôi gửi yêu cầu này đến máy chủ.
  4. Khi chúng tôi nhận được yêu cầu về chứng chỉ trên máy chủ, chúng tôi sẽ cấp chứng chỉ từ cơ quan chứng nhận của mình.
  5. Chúng tôi gửi chứng chỉ này cho khách hàng.
  6. Chúng tôi lưu chứng chỉ Rutoken trên máy khách.
  7. Chứng chỉ phải được liên kết với cặp khóa đã được tạo ở bước đầu tiên.

Bây giờ đã rõ làm thế nào máy chủ có thể giải mã chữ ký của khách hàng vì chính nó đã cấp chứng chỉ cho anh ta.

Trong phần tiếp theo, chúng ta sẽ xem xét kỹ hơn cách thiết lập cơ quan cấp chứng chỉ của bạn dựa trên thư viện mật mã nguồn mở chính thức openSSL.

Nguồn: www.habr.com

Thêm một lời nhận xét