Pengalaman menggunakan teknologi Rutoken untuk mendaftar dan membenarkan pengguna dalam sistem (bahagian 1)

Selamat petang Saya ingin berkongsi pengalaman saya mengenai topik ini.

Rutoken ialah penyelesaian perkakasan dan perisian dalam bidang pengesahan, keselamatan maklumat dan tandatangan elektronik. Pada asasnya, ini ialah pemacu kilat yang boleh menyimpan data pengesahan yang digunakan pengguna untuk log masuk ke sistem.

Dalam contoh ini, Rutoken EDS 2.0 digunakan.

Untuk bekerja dengan Rutoken ini anda perlukan pasang pemacu pada tingkap.

Untuk Windows, memasang hanya satu pemacu memastikan semua yang diperlukan dipasang supaya OS melihat Rutoken anda dan boleh berfungsi dengannya.

Anda boleh berinteraksi dengan Rutoken dalam pelbagai cara. Anda boleh mengaksesnya dari sisi pelayan aplikasi, atau terus dari sisi klien. Contoh ini akan melihat interaksi dengan Rutoken dari sisi klien aplikasi.

Bahagian klien aplikasi berinteraksi dengan rutoken melalui pemalam rutoken. Ini ialah program yang dipasang secara berasingan pada setiap pelayar. Untuk Windows anda hanya perlu memuat turun dan memasang pemalam, terdapat di pautan ini.

Itu sahaja, kini kita boleh berinteraksi dengan Rutoken dari sisi klien aplikasi.

Contoh ini membincangkan idea untuk melaksanakan algoritma kebenaran pengguna dalam sistem menggunakan skema respons cabaran.

Intipati idea adalah seperti berikut:

  1. Pelanggan menghantar permintaan kebenaran kepada pelayan.
  2. Pelayan bertindak balas kepada permintaan daripada klien dengan menghantar rentetan rawak.
  3. Pelanggan pad rentetan ini dengan rawak 32 bit.
  4. Pelanggan menandatangani rentetan yang diterima dengan sijilnya.
  5. Pelanggan menghantar mesej disulitkan yang diterima ke pelayan.
  6. Pelayan mengesahkan tandatangan dengan menerima mesej asal yang tidak disulitkan.
  7. Pelayan menanggalkan 32 bit terakhir daripada mesej tidak disulitkan yang diterima.
  8. Pelayan membandingkan hasil yang diterima dengan mesej yang dihantar apabila meminta kebenaran.
  9. Jika mesej adalah sama, maka kebenaran dianggap berjaya.

Dalam algoritma di atas terdapat perkara seperti sijil. Untuk contoh ini, anda perlu memahami beberapa teori kriptografi. Di HabrΓ© ada artikel hebat mengenai topik ini.

Dalam contoh ini, kami akan menggunakan algoritma penyulitan asimetri. Untuk melaksanakan algoritma asimetri, anda mesti mempunyai pasangan kunci dan sijil.

Sepasang kunci terdiri daripada dua bahagian: kunci persendirian dan kunci awam. Kunci persendirian, seperti namanya, mestilah rahsia. Kami menggunakannya untuk menyahsulit maklumat. Kunci awam boleh diedarkan kepada sesiapa sahaja. Kunci ini digunakan untuk menyulitkan data. Oleh itu, mana-mana pengguna boleh menyulitkan data menggunakan kunci awam, tetapi hanya pemilik kunci peribadi boleh menyahsulit maklumat ini.

Sijil ialah dokumen elektronik yang mengandungi maklumat tentang pengguna yang memiliki sijil itu, serta kunci awam. Dengan sijil, pengguna boleh menandatangani sebarang data dan menghantarnya ke pelayan, yang boleh mengesahkan tandatangan dan menyahsulit data.

Untuk menandatangani mesej dengan betul dengan sijil, anda perlu menciptanya dengan betul. Untuk melakukan ini, pasangan kunci pertama kali dibuat pada Rutoken, dan kemudian sijil mesti dipautkan kepada kunci awam pasangan kunci ini. Sijil mesti mempunyai kunci awam yang betul-betul terletak di Rutoken, ini penting. Jika kita hanya mencipta pasangan kunci dan sijil serta-merta pada bahagian klien aplikasi, maka bagaimanakah pelayan boleh menyahsulit mesej yang disulitkan ini? Lagipun, dia tidak tahu sama sekali tentang pasangan kunci atau sijil.

Jika anda mendalami topik ini, anda boleh mendapatkan maklumat menarik di Internet. Terdapat pihak berkuasa pensijilan tertentu yang jelas kami percayai. Pihak berkuasa pensijilan ini boleh mengeluarkan sijil kepada pengguna mereka memasang sijil ini pada pelayan mereka. Selepas ini, apabila pelanggan mengakses pelayan ini, dia melihat sijil ini, dan melihat bahawa ia dikeluarkan oleh pihak berkuasa pensijilan, yang bermaksud pelayan ini boleh dipercayai. Terdapat juga banyak maklumat di Internet tentang cara menetapkan semuanya dengan betul. Sebagai contoh, anda boleh mulakan dengan ini.

Jika kita kembali kepada masalah kita, penyelesaiannya nampak jelas. Anda perlu membuat pusat pensijilan anda sendiri. Tetapi sebelum itu, anda perlu memikirkan atas dasar apa pusat pensijilan harus mengeluarkan sijil kepada pengguna, kerana dia tidak tahu apa-apa mengenainya. (Sebagai contoh, nama pertamanya, nama keluarga, dll.) Terdapat perkara sedemikian yang dipanggil permintaan sijil. Maklumat lanjut tentang piawaian ini boleh didapati, contohnya, di Wikipedia ru.wikipedia.org/wiki/PKCS
Kami akan menggunakan versi 1.7 - PKCS#10.

Mari kita terangkan algoritma untuk menjana sijil pada Rutoken (sumber asal: dokumentasi):

  1. Kami mencipta pasangan kunci pada klien dan menyimpannya pada Rutoken. (penyimpanan berlaku secara automatik)
  2. Kami membuat permintaan sijil pada pelanggan.
  3. Daripada pelanggan kami menghantar permintaan ini kepada pelayan.
  4. Apabila kami menerima permintaan untuk sijil pada pelayan, kami mengeluarkan sijil daripada pihak berkuasa pensijilan kami.
  5. Kami menghantar sijil ini kepada pelanggan.
  6. Kami menyimpan sijil Rutoken pada pelanggan.
  7. Sijil mesti terikat pada pasangan kunci yang dibuat pada langkah pertama.

Kini menjadi jelas bagaimana pelayan akan dapat menyahsulit tandatangan pelanggan, kerana ia sendiri mengeluarkan sijil kepadanya.

Dalam bahagian seterusnya, kami akan melihat dengan lebih dekat cara menyediakan kuasa sijil anda berdasarkan openSSL perpustakaan kriptografi sumber terbuka penuh.

Sumber: www.habr.com

Tambah komen