Makale Özeti

Bu yazımızda, .Net ile uygulamalarımızda .NET’de Veri Güvenliği konusunu ele alacağız. Uygulamamızı C#.Net programlama dili ile geliştireceğiz.

Makale

C#.NET
.NET’de VERİ GÜVENLİĞİ

Merhaba değerli arkadaşlar,

Bu yazımızda, .Net ile uygulamalarımızda .NET’de Veri Güvenliği konusunu ele alacağız. Uygulamamızı C#.Net programlama dili ile geliştireceğiz.

Günden güne artan talepler ve uygulamalardaki kullanıcı sayılarının artması ile Veri Güvenliğinin önemi daha da artmaktadır. Bu nedenle geliştiriciler uygulamalarında yüksek güvenlik önlemleri almak zorundadırlar. .Net Uygulamalarımızda verilerimizin güvenliğini sağlamak adına .NET Framework’ün bize sunmuş olduğu avantajları ve gücü kullanarak verilerimizi nasıl şifreleyeceğimizi ele alacağız.

Bildiğiniz gibi, özellikle web uygulamalarından e-ticaret alışveriş sitelerinde bilgi ve veri güvenliği oldukça önemlidir. Bu yüzden daha güvenli hizmet verebilmek adına verilerimizi şifreleme fikrini unutmamamız gereken bir konu aslında. .Net Framework’ün içinde bulunan (CLR –Ortak Dil Çalışma Zamanı Tarafından sunulan) System.Security.Cryptographyisim uzayını uygulamamıza ekleyerek veri güvenliğini sağlayacak algoritmalarımızı sizlere uygulama eşliğinde göstermeye çalışacağım.

Makalemiz içerisinde sırasıyla şu konulara değineceğiz:

1-      Kriptografik Sistemlere Giriş

2-      Ortak Kripto Sistemlere Genel Bakış

-          Simetrik Kripto Sistemler (Private Key)

-          Asimetrik Kripto Sistemler (Public Key)

-          Karma yada Özetleme(Hashing)

-          Dijital İmzalama (Digital Signature)

 

3-      Veri Şifreleme Standartı (Data Encryption Standard (AES))

a-      Enciphering (Şifre)

1-      SubBytes()

2-      ShiftRows()

3-      MixColumns()

4-      AddRoundKey()

 

b-      Deciphering (Deşifre)

c-       Generating Key

Şeklinde başlıklarımızı ele alarak inceleyeceğiz.

Şimdi, dilerseniz zaman kaybetmeden başlayalım.


KRİPTOGRAFİK SİSTEMLERE GİRİŞ:

Kriptografi, Gizlilik ve Güvenliği sağlayan ve bunlarla ilgilenen alana verilen addır. Bu alan bir çok Kript Sistemler içeren bir alandır. Bu Kripto Sistemler, veri güvenliğini sağlamak amacıyla bir dizi algoritma setinden oluşur. Günümüzde ise Kripto sistemler dijital teknolojinin her alanında geniş bir şekilde kullanılmaktadır.

Bu Kripto Sistemlerin kullanıldığı birkaç uygulama alanını sayacak olursak; İnternet Bankacılığı, Dijital imzalar, Elektronik Mailler bu uygulama alanlarından sadece bir kaçıdır. Burada anlattığımız bu Kripto Sistemlerin sadece özet şeklini vermeye çalışacağız. Özet olarak en çok kullanılan ve en popüler olan özel anahtar şifreleri( private key ciphers) Kripto sistemlerinden AES ve DES detaylarıyla göreceğiz.

Kriptografik Bakış Açısıyla Ağ Uygulamarında Güvenlik ve Koruma Düzeylerine göz atacak olursak, Şu maddeler halinde sıralayabiliriz:

-          Aktarımlarda verinin Şifrelenmesi / Mahremiyet

-          Aktarılan verinin bütünlüğünün sağlanması (Data Integrity)

Veri bütünlüğünü sağlamak için Hash function kullanılır.

-          Göndericinin Doğrulanması

-          İnkâr Edememe(non-repudiating)

Bu sistemi sağlamak için e-imza (digital signature)  kullanılır.

 

Bunlardan Aktarımlarda verinin Şifrelenmesi / Mahremiyet, Sistem korumasıyla birlikte verilerin şifrelenerek çok karmaşık bir yapıya büründürmektir. Gönderici tarafında verilerin şifrelenme işlemleri ve alıcı tarafında şifrelenen verinin çözümlenmesi için Encryption / Decryption Algoritmalarının kullanmasıyla gerçekleşir.

ORTAK KRİPTO SİSTEMLERE GENEL BAKIŞ

Birçok güvenlik uygulamasının temelinde, 3 Kripto Sistem vardır. Bunlar;

-          Simetrik

-          Asimetrik

-          Hashing dediğimiz Karma yada Özetleme

Sistemlerdir.

Simetrik (Private Key) Kripto Sistemler:

Simetrik Kripto Sistemler, Şifreleme(Encryption) ve Deşifreleme(Decryption) işlemlerinin her ikisinde de aynı anahtarı kullanırlar. Yani bir gizli anahtarın paylaşıldığı yöntemdir. Mesaj gönderen ve mesaj alan kişinin anahtarı aynıdır. Bu iki işlem genellikle benzerdir. Buna rağmen bu işlemler bazı noktalarda birbirine ters sırayla uygulanırlar. (Örneğin; AES için, Deşifreleme algoritması, Şifreleme algoritmasının tersi sırasını uygular. Bu işlem, bazı küçük değişikliklerle diğer metotların üzerinde gerçekleşir.)

Simetrik Şifreleme, küçük bloklar halinde veriyi böler ve onlara gizli bir anahtar kullanılarak tek tek şifreleme imkânı verir. Daha sonra bu bloklar bir araya getirilerek, bir bütün olarak alıcıya gönderilir.

Alıcı tarafında, Şifre Çözme işlemi (Decryption) aynı anahtar kullanılarak, veriler restore edilir.
Simetrik Algoritmalar, Asimetrik algoritmalarla kıyaslandığında son derece daha hızlıdır. Ve de büyük veri akışları üzerinde şifreleme dönüşümleri gerçekleştirmek için ideal bir Şifreleme Sistemidir.

En Popüler Simetrik şifreleme algoritmaları DES, AES, TripleDES’tir. Bunlardan TripleDES, bir dizi içinde farklı anahtarlar ile 3 kez DES kullanır.

Günümüzde bilgi güvenliğini göz önünde bulundurduğumuzda; Developerler yazılım geliştirirken gerek web uygulamalarında gerekse diğer uygulamalarda şifreleri depolama işlemine dikkat etmeleri gereken en önemli konudur. Şifreleri direk veritabanında saklamak günümüz bilgi güvenliği açısından tehlike arz eden konuların başında gelmektedir. Bunun için Açık-Sade metin(Plain Text) şeklinde şifrelemek yerine Kriptografik özet şeklinde (Hash) saklamak, en uygun metotların başında gelir. Hash algoritmaları şifrelerin güvenlik mekanizmasını korumak amaçlı tasarlanmış olmamalarına rağmen Açık-Sade metinler (Plain Text) şeklinde veritabanına saklanmasından daha güvenli oldukları kanıtlanmıştır.

Simetrik Kripto Sistemleri Kategorize etmek istersek şu şekilde bir yapı karşımıza çıkar:

               1- Geleneksel Simetrik Algoritmalar
                        - Shift cipher,Affine cipher(Mono),Hill Cipher(Poli) gibi

              2- Modern Simetrik Algoritmalar.
                        - DES, AES ,RC4  gibi

Şimdi Simetrik Şifreleme Sistemine dair söylediklerimizi bir blok diyagram üzerinde gösterecek olursak:

 

Şeklinde bir Blok diyagram elde ederiz.

 

 

 

Plain Text (Açık-Sade metin) Private Key ile şifrelenir ve iletildikten sonra tekrardan aynı Private Key (özel anahtar) ile Deşifrelenir.



Kodları incelediğimiz zaman Basit Private Key(Özel Anahtar) şifreleme işlemine ait kodları görürüz.

Buradaki kodları şöyle bir analiz edecek olursak;

Rfc2898DeriveBytes bir PBKDF2 uygulamasıdır. Buraya kadar okuduğunuzda hemen aklınıza böyle bir soru gelmiştir. Peki, bu PBKDF2 nedir? PBKDF2 (Password-Based Key Derivation Function 2) , buradaki 2 sayısı versiyonun numarasıdır.

 

       -->  “PBKDF1”  sadece 160 Bit uzunluğuna kadar olan anahtarları üretir.

       -->  “PBKDF2”  özetle, Bir Kriptografik İkili (Binary) anahtar içine bir parola dizesini dönüştürme yolunun durumu olarak açıklanabilir.

Böyle bir algoritma tasarlamak için birçok yol vardır.

PBKDF2, üç farklı konseptin birleşmesinden oluşur. Bu konseptler; Hashing,İterasyon ve Salting’dir.

PBKDF2 fonksiyonu sayesinde anahtar esnetme olayları gerçekleştirilir. Hash Algoritmalarının özetlenme süresini artırmak için “Anahtar Esnetme” denilen yöntem uygulanır. Bu Anahtar esnetme metodu; Olası bir saldırı sırasında, rainbow veya lookup tablosundaki yada brute force ile üretilmiş her bir şifrenin, bu metot fonksiyonu içindeki yinelemelerle diğer adıyla iterasyonlarıyla, Hacker tarafından denenme süresini artırarak saldırının gerçekleşmemesi için kullanılır.

NOT:
Yukarıdaki Salt, Look up ve Rainbow,Brute Force gibi ifadeler daha sonra açıklanacaktır.


ASİMETRİK (Public Key) KriptoSistemler

Asimetrik Kripto birbirleri ile matematiksel bağlantılı olan Public(Açık) –Private(Gizli) anahtar çiftleri ile şifreleme ve şifre çözme işlemleri gerçekleştiren Kriptografik Sistemlerdir. Kısaca Açık anahtarlı sistemlerdir. Simetrik Kripto Sistemlerin aksine, bir public key kullanarak verileri şifrelediği zaman, private key kullanmadan verileri geri yüklemek imkânsızdır.

Eğer verileri şifrelemek için private key kullanıyorsanız, şifreyi çözmek için public key kullanmalısınız, yâda tam tersi.

Asimetrik şifreleme algoritmaları ağır matematiksel işlemlere dayalı işlemler yürütür. Böylece daha büyük veri bloklarını işleme de verimli bir Kripto sistem değildir. Genellikle, küçük oturum anahtarların güvenli bir şekilde alışverişinde kullanılan bir sistemdir. Asimetrik Şifreleme Gizlilik ve Kimlik Doğrulama işlemlerinde de kullanılır. Bunların en popüler olanı ise RSA’dır.(exponential)

Aşağıdaki kod yapısı RSA’nın yapısını göstermektedir.

 

 

HASHİNG (ÖZETLEME)

Kaba bir şekilde tanımlayacak olursam, Hashing verinin parmak izi alma işlemidir diyebilirim.

Hash Algoritmaları Tek yönlü algoritmalardır. Ters fonsiyonu(reverse function) bulunmaz. Yani Tersinir değildir.  Şifreler özetlenerek saklandığında gerçek şifreye veri tabanı yöneticisi, software developerler  dahil hiçkimse herhangi bir ters fonksiyon(reverse function) kullanarak tekrar ulaşamaz. Hash yani Özet algoritması şifrenin uzunluğundan bağımsız olarak sabit uzunlukta şifrenin özetini oluşturur.   MD5, RIPEMD160, SHA1, SHA256, SHA384, SHA512, MACTripleDES, HMACSHA1 gibi farklı algoritmaların oluşturdukları özet uzunlukları farklıdır. Şifre içindeki tek karakterin değişimi bile özetin yani hashing’in tamamen değişmesine neden olur diyebiliriz. Hash Algoritmasının şifre ve veri güvenliğinde kullanılmasında ki en büyük etken, oluşturulan özetin tekrar giriş değerine dönüştürülememesi ve aynı özeti veren 2 veya daha fazla giriş değerinin bulunmasının zor olması bu etkenlerin en başında geldiğini söyleyebilirim.

 

O zaman hep beraber, kullanıcı tarafında bu özetlemenin nasıl yapıldığına bakalım. Mesela;

Kullanıcılar herhangi bir web sitesinde veya web uygulamasında bir account açmak istediğinde kendisine ait bir kullanıcı adı ve parola seçer. Bu parola diske yazılmadan önce belirli hash algoritması ile özetlenir ve veri tabanına özetlenmiş biçimiyle yazılır. Daha sonra bu kullanıcı tekrar sisteme giriş yapmak istediğinde girmiş olduğu parola tekrar özetlenerek veri tabanındaki özet ile karşılaştırılır. Özetlerin eşleşmesi halinde kullanıcının hesabına giriş yetkisi verilmiş olur.

 

Hemen şu soruyu sorduğunuzu duyar gibiyim. Ters fonksiyonu bulunmayan bu hashing şifreler nasıl kırılabiliniyor? Diye . Evet, kırılabiliniyor maalesef. Sebebi ise yukarda saydığım Hashing Şifrelerine karşı saldırıların düzenlenmesidir.

 

 Bu saldırılar,

 

-          Dictionary ve Brute force saldırıları

-          Lookup Tabloları

-          Reverse Lookup Tabloları

-          Rainbow Tabloları

-          Salt

Olarak sayabiliriz. Bunlara karşı önlem olarak Anahtar Esnetme metodunu önermiştik.

Aşağıdaki yapı Hashing metoduna örnek bir hesaplama kodlarıdır.

 

 

 

Dijital (Sayısal) İmza (Hash içeren)

 

Sayısal imza uygulamaları iki kriptografik metot tabanlıdır. Bunlar;  Public Key (Açık Anahtar) ve Hashing’dir.  Aslına bakılırsa bu iki metodu yukarda ayrı ayrı işlemiştik ve nasıl oluşturulduğu hakkında fikir sahibiyiz.

 

Örneğin;

Muhammed ÖNAL, Veysel Uğur KIZMAZ’a mesaj gönderirken kendisi tarafından gönderildiğini kanıtlamak istiyor. Burdan hareketle;

-          Hash bizim özetimiz yani girdimiz

-          İmza’mız Hash içeriyor.

Bu özellikleri Veysel Uğur KIZMAZ’a gönderir. Veysel Uğur KIZMAZ aldığı mesajı şu şekilde doğrular;

-          Hash ,İmza

-          Hash ,girdimiz

-          Ve alınan mesajla kıyaslama yapar

 

Herhangi biri Muhammed ÖNAL’ın Public Key(Açık anahtarı) ile Muhammed ÖNAL’ın mesajın göndericisi olduğunu kontrol edebilir. İşte Sayısal İmza, mesajın içeriğini, taşıma seviyesini ve mesajın değiştirilmesini önleyen bir algoritmadır.

 

Örneğin kimlik doğrulama işlemleri için ise:

Muhammed ÖNAL, Veysel Uğur KIZMAZ’a mesajın gerçek anlamda kendisinden gittiğini söyleyecektir.

 

Bundan dolayı Sayısal İmza Fonksiyonu, Doğrulama fonksiyonunu içerir.

 

NOT:

Digital Signature Standards (DSS) yani Sayısal İmza Standartları NITS standartlarından Hash Algoritması güvenliğini kullanır. (SHA)

Sayısal İmza’ya ait kod yapımız aşağıdaki gibidir.

 

 

Diğer Algoritmalara ve Şifreleme Metotlarına bir sonraki GÜVENLİK YÖNETİMİ yazı serimizde devam edeceğim.

Örnek Uygulamamıza ait projemizi aşağıdaki linkten indirebilirsiniz:

Örnek Projeyi indirmek için tıklayınız.

Projemizi bu linkten 

Proje Download   edebilirsiniz.

 

Bugünlükte bizden bu kadar diyor ve makalemizin sonuna gelmiş bulunuyoruz. Kafanıza takılan soru işaretleri var ise mail yoluyla sorularınızı iletebilirsiniz. BOL GÜVENLİ YAZILIMLI HAYAT DİLİYORUM J

Yazılım ve Programlama aşkı ile tutuştuğumuz bir sonraki yazımızda görüşmek dileğiyle.

Saygılarımla;

Muhammed ÖNAL
Bilgisayar & Gömülü Sistemler Mühendisi
Copyright © Muhammed ÖNAL , 2012


E-mail

 muhammed.onal23@gmail.com

muhammedonal@hotmail.com.tr

 

Facebook

http://www.facebook.com/muhammedhazar.onal/