Kullanıcıları sisteme kaydetmek ve yetkilendirmek için Rutoken teknolojisini kullanma deneyimi (bölüm 1)

Tünaydın Bu konu ile ilgili deneyimimi paylaşmak istiyorum.

Rutoken kimlik doğrulama, bilgi güvenliği ve elektronik imza alanında donanım ve yazılım çözümleridir. Temel olarak bu, kullanıcının sisteme giriş yapmak için kullandığı kimlik doğrulama verilerini saklayabilen bir flash sürücüdür.

Bu örnekte Rutoken EDS 2.0 kullanılmıştır.

Bu Rutoken ile çalışmak için ihtiyacınız olan Windows'a sürücüyü yükle.

Windows için yalnızca tek bir sürücünün yüklenmesi, işletim sisteminin Rutoken'inizi görmesi ve onunla çalışabilmesi için gereken her şeyin yüklenmesini sağlar.

Rutoken ile çeşitli şekillerde etkileşime girebilirsiniz. Uygulamanın sunucu tarafından veya doğrudan istemci tarafından erişebilirsiniz. Bu örnekte uygulamanın istemci tarafından Rutoken ile etkileşime bakılacaktır.

Uygulamanın istemci kısmı, rutoken eklentisi aracılığıyla rutoken ile etkileşime girer. Bu, her tarayıcıya ayrı ayrı yüklenen bir programdır. Windows için eklentiyi indirip yüklemeniz yeterlidir. bu linkte yer alıyor.

İşte bu kadar, artık uygulamanın istemci tarafından Rutoken ile etkileşime geçebiliriz.

Bu örnekte, sorgulama-yanıt şemasını kullanarak sistemde bir kullanıcı yetkilendirme algoritması uygulama fikri tartışılmaktadır.

Fikrin özü şu şekildedir:

  1. İstemci sunucuya bir yetkilendirme isteği gönderir.
  2. Sunucu, istemciden gelen isteğe rastgele bir dize göndererek yanıt verir.
  3. İstemci bu dizeyi rastgele 32 bitle doldurur.
  4. İstemci, alınan dizeyi sertifikasıyla imzalar.
  5. İstemci aldığı şifreli mesajı sunucuya gönderir.
  6. Sunucu, orijinal şifrelenmemiş mesajı alarak imzayı doğrular.
  7. Sunucu, alınan şifrelenmemiş mesajın son 32 bitini çıkarır.
  8. Sunucu, alınan sonucu yetkilendirme istendiğinde gönderilen mesajla karşılaştırır.
  9. Mesajlar aynıysa yetkilendirme başarılı kabul edilir.

Yukarıdaki algoritmada sertifika diye bir şey var. Bu örnek için, bazı kriptografik teorileri anlamanız gerekir. Habré'de var bu konuyla ilgili harika bir makale.

Bu örnekte asimetrik şifreleme algoritmalarını kullanacağız. Asimetrik algoritmaları uygulamak için bir anahtar çiftine ve sertifikaya sahip olmanız gerekir.

Bir anahtar çifti iki bölümden oluşur: özel anahtar ve genel anahtar. Özel anahtar, adından da anlaşılacağı gibi gizli olmalıdır. Bilginin şifresini çözmek için kullanıyoruz. Genel anahtar herkese dağıtılabilir. Bu anahtar verileri şifrelemek için kullanılır. Böylece herhangi bir kullanıcı, genel anahtarı kullanarak verileri şifreleyebilir, ancak yalnızca özel anahtarın sahibi bu bilginin şifresini çözebilir.

Sertifika, sertifikanın sahibi olan kullanıcı hakkında bilgilerin yanı sıra ortak anahtarı da içeren elektronik bir belgedir. Bir sertifikayla kullanıcı herhangi bir veriyi imzalayabilir ve bunu sunucuya gönderebilir; sunucu da imzayı doğrulayabilir ve verilerin şifresini çözebilir.

Bir mesajı sertifikayla doğru bir şekilde imzalamak için onu doğru şekilde oluşturmanız gerekir. Bunun için öncelikle Rutoken üzerinde bir anahtar çifti oluşturulur ve ardından bu anahtar çiftinin ortak anahtarına bir sertifikanın bağlanması gerekir. Sertifikanın tam olarak Rutoken'de bulunan ortak anahtara sahip olması gerekir, bu önemlidir. Uygulamanın istemci tarafında hemen bir anahtar çifti ve sertifika oluşturursak, sunucu bu şifrelenmiş mesajın şifresini nasıl çözebilir? Sonuçta ne anahtar çifti ne de sertifika hakkında hiçbir şey bilmiyor.

Bu konuyu daha derinlemesine incelerseniz internette ilginç bilgiler bulabilirsiniz. Açıkçası güvendiğimiz belirli sertifika yetkilileri var. Bu sertifika yetkilileri kullanıcılara sertifika verebilir; bu sertifikaları sunucularına yüklerler. Bundan sonra istemci bu sunucuya eriştiğinde bu sertifikayı görür ve bunun bir sertifika yetkilisi tarafından verildiğini görür, bu da bu sunucuya güvenilebileceği anlamına gelir. İnternette her şeyin nasıl doğru şekilde kurulacağı hakkında da pek çok bilgi var. Örneğin bununla başlayabilirsiniz.

Sorunumuza dönersek çözüm açık görünüyor. Bir şekilde kendi sertifika merkezinizi oluşturmanız gerekiyor. Ancak bundan önce, sertifika merkezinin kullanıcıya hangi temelde sertifika vermesi gerektiğini bulmanız gerekir çünkü kendisi bu konuda hiçbir şey bilmiyor. (Örneğin adı, soyadı vb.) Sertifika isteği diye bir şey var. Bu standart hakkında daha fazla bilgiyi örneğin Wikipedia'da bulabilirsiniz. ru.wikipedia.org/wiki/PKCS
1.7 - PKCS#10 sürümünü kullanacağız.

Rutoken'de sertifika oluşturma algoritmasını açıklayalım (orijinal kaynak: документация):

  1. İstemcide bir anahtar çifti oluşturup bunu Rutoken'e kaydediyoruz. (kaydetme otomatik olarak gerçekleşir)
  2. Client üzerinde sertifika talebi oluşturuyoruz.
  3. İstemciden bu isteği sunucuya göndeririz.
  4. Sunucuda sertifika talebi aldığımızda sertifika yetkilimizden bir sertifika düzenleriz.
  5. Bu sertifikayı istemciye gönderiyoruz.
  6. Rutoken sertifikasını istemciye kaydediyoruz.
  7. Sertifikanın ilk adımda oluşturulan anahtar çiftine bağlanması gerekir.

Artık sunucunun, sertifikayı kendisine verdiği için müşterinin imzasının şifresini nasıl çözebileceği anlaşılıyor.

Bir sonraki bölümde, tam teşekküllü açık kaynaklı şifreleme kitaplığı openSSL'i temel alarak sertifika yetkilinizi nasıl ayarlayacağınıza daha yakından bakacağız.

Kaynak: habr.com

Yorum ekle