Pengalaman menggunakan teknologi Rutoken untuk mendaftarkan dan mengotorisasi pengguna dalam sistem (bagian 1)

Selamat siang Saya ingin berbagi pengalaman saya tentang topik ini.

Rutoken adalah solusi perangkat keras dan perangkat lunak di bidang otentikasi, keamanan informasi dan tanda tangan elektronik. Intinya, ini adalah flash drive yang dapat menyimpan data otentikasi yang digunakan pengguna untuk masuk ke sistem.

Dalam contoh ini, Rutoken EDS 2.0 digunakan.

Untuk bekerja dengan Rutoken ini, Anda memerlukannya instal driver di windows.

Untuk Windows, menginstal hanya satu driver memastikan bahwa semua yang diperlukan telah diinstal sehingga OS melihat Rutoken Anda dan dapat bekerja dengannya.

Anda dapat berinteraksi dengan Rutoken dengan berbagai cara. Anda dapat mengaksesnya dari sisi server aplikasi, atau langsung dari sisi klien. Contoh ini akan melihat interaksi dengan Rutoken dari sisi klien aplikasi.

Bagian klien dari aplikasi berinteraksi dengan rutoken melalui plugin rutoken. Ini adalah program yang diinstal secara terpisah di setiap browser. Untuk Windows Anda hanya perlu mengunduh dan menginstal plugin, terletak di tautan ini.

Itu saja, sekarang kita dapat berinteraksi dengan Rutoken dari sisi klien aplikasi.

Contoh ini membahas ide penerapan algoritma otorisasi pengguna dalam sistem menggunakan skema tantangan-respons.

Inti dari idenya adalah sebagai berikut:

  1. Klien mengirimkan permintaan otorisasi ke server.
  2. Server merespons permintaan dari klien dengan mengirimkan string acak.
  3. Klien mengisi string ini dengan 32 bit acak.
  4. Klien menandatangani string yang diterima dengan sertifikatnya.
  5. Klien mengirimkan pesan terenkripsi yang diterima ke server.
  6. Server memverifikasi tanda tangan dengan menerima pesan asli yang tidak terenkripsi.
  7. Server menghapus 32 bit terakhir dari pesan tidak terenkripsi yang diterima.
  8. Server membandingkan hasil yang diterima dengan pesan yang dikirimkan saat meminta otorisasi.
  9. Jika pesannya sama, maka otorisasi dianggap berhasil.

Pada algoritma di atas ada yang namanya sertifikat. Untuk contoh ini, Anda perlu memahami beberapa teori kriptografi. Di HabrΓ© ada artikel bagus tentang topik ini.

Dalam contoh ini, kita akan menggunakan algoritma enkripsi asimetris. Untuk mengimplementasikan algoritma asimetris, Anda harus memiliki pasangan kunci dan sertifikat.

Pasangan kunci terdiri dari dua bagian: kunci privat dan kunci publik. Kunci pribadi, seperti namanya, harus dirahasiakan. Kami menggunakannya untuk mendekripsi informasi. Kunci publik dapat didistribusikan kepada siapa saja. Kunci ini digunakan untuk mengenkripsi data. Dengan demikian, setiap pengguna dapat mengenkripsi data menggunakan kunci publik, namun hanya pemilik kunci pribadi yang dapat mendekripsi informasi ini.

Sertifikat adalah dokumen elektronik yang berisi informasi tentang pengguna pemilik sertifikat, serta kunci publik. Dengan sertifikat, pengguna dapat menandatangani data apa pun dan mengirimkannya ke server, yang dapat memverifikasi tanda tangan dan mendekripsi data.

Untuk menandatangani pesan dengan sertifikat dengan benar, Anda harus membuatnya dengan benar. Untuk melakukan ini, pasangan kunci pertama kali dibuat di Rutoken, dan kemudian sertifikat harus ditautkan ke kunci publik dari pasangan kunci ini. Sertifikat harus memiliki kunci publik yang sama persis dengan yang ada di Rutoken, ini penting. Jika kita hanya membuat pasangan kunci dan sertifikat langsung di sisi klien aplikasi, lalu bagaimana server dapat mendekripsi pesan terenkripsi ini? Lagi pula, dia tidak tahu apa-apa tentang pasangan kunci atau sertifikatnya.

Jika Anda mendalami topik ini lebih dalam, Anda dapat menemukan informasi menarik di Internet. Ada otoritas sertifikasi tertentu yang jelas kami percayai. Otoritas sertifikasi ini dapat menerbitkan sertifikat kepada pengguna; mereka menginstal sertifikat ini di server mereka. Setelah itu, ketika klien mengakses server ini, dia melihat sertifikat ini, dan melihat bahwa sertifikat tersebut dikeluarkan oleh otoritas sertifikasi, yang berarti server ini dapat dipercaya. Ada juga banyak informasi di Internet tentang cara mengatur semuanya dengan benar. Misalnya, Anda bisa memulainya dengan ini.

Jika kita kembali ke masalah kita, solusinya tampak jelas. Anda perlu membuat pusat sertifikasi Anda sendiri. Namun sebelum itu, Anda perlu mencari tahu atas dasar apa pusat sertifikasi harus mengeluarkan sertifikat kepada pengguna, karena dia tidak tahu apa-apa tentangnya. (Misalnya nama depannya, nama belakangnya, dll.) Ada yang namanya permintaan sertifikat. Informasi lebih lanjut tentang standar ini dapat ditemukan, misalnya di Wikipedia ru.wikipedia.org/wiki/PKCS
Kami akan menggunakan versi 1.7 - PKCS#10.

Mari kita jelaskan algoritma untuk menghasilkan sertifikat di Rutoken (sumber asli: dokumentasi):

  1. Kami membuat pasangan kunci pada klien dan menyimpannya di Rutoken. (penyimpanan terjadi secara otomatis)
  2. Kami membuat permintaan sertifikat pada klien.
  3. Dari klien kami mengirimkan permintaan ini ke server.
  4. Saat kami menerima permintaan sertifikat di server, kami menerbitkan sertifikat dari otoritas sertifikasi kami.
  5. Kami mengirimkan sertifikat ini ke klien.
  6. Kami menyimpan sertifikat Rutoken di klien.
  7. Sertifikat harus terikat pada pasangan kunci yang dibuat pada langkah pertama.

Sekarang menjadi jelas bagaimana server dapat mendekripsi tanda tangan klien, karena server sendiri yang mengeluarkan sertifikat kepadanya.

Di bagian selanjutnya, kita akan melihat lebih dekat cara menyiapkan otoritas sertifikat Anda berdasarkan perpustakaan kriptografi open-source openSSL yang lengkap.

Sumber: www.habr.com

Tambah komentar