Eğitim / Dersler etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Eğitim / Dersler etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

12 Temmuz 2016 Salı

Kriptografi ve Ağ Güvenliği - Bölüm 2

RSA Algoritması

RSA, güvenilirliği çok büyük tam sayılarla işlem yapmanın zorluğuna dayanan bir şifreleme tekniğidir. Bu algoritma, adını Ron Rivest, Adi Shamir ve Leonard Adleman adlı geliştiricilerinin soyadlarının ilk harflerinden almıştır.

Özellikleri

  • Asimetrik bir şifreleme algoritmasıdır. Simetrik şifrelemedeki gibi tek anahtar kullanılmasının yerine; biri gizli (Private Key) diğeri açık (Public Key) olmak üzere iki anahtar kullanılır.
  • Güvenilirlik derecesi, şifrelemede kullanılan asal sayıların büyüklüğü ile orantılıdır.
  • Özellikle çok kullanıcısı olan sistemlerde güvenli veri paylaşımına ve sayısal imza ile kimlik doğrulaması (authentication) yapılmasına olanak sağlamaktadır.
  • Sistemin güvenilirliğinin yanı sıra hızının da yüksek olması için, kullanılacak anahtarın sayısal büyüklüğü önemlidir. Yeterli güvenilirlik derecesine ulaşmak için gerekli büyüklük Eliptik Eğri Şifreleme (ECC) Algoritması kullanılarak belirlenmektedir.

Avantajları
  • Simetrik şifreleme, şifrelenmiş veriyi alan tarafın veriyi deşifre edebilmesi için, gizli anahtar paylaşımını gerekli kılar. Ancak RSA asimetrik bir şifreleme tekniği olduğu için gizli anahtarın paylaşılmasına gerek yoktur. Kullanıcıların gizli anahtarlarının saklanması gerekmez. Bu da sistemi büyük bir depolama yükünden kurtarır.
  • Büyük sayılarla işlem yapmak zor olduğu için güvenilirliği son derece yüksek olan bir şifreleme tekniğidir.
Dezavantajları
  • RSA algoritmasının en büyük dezavantajı, asimetrik bir şifreleme algoritması olması ve büyük sayılarla işlem yapması nedeniyle yavaş olmasıdır.
  • Özellikle kablosuz ağ sistemlerinde bu algoritmanın kullanılması bazı sorunlara yol açabilir. Çünkü band genişliğini fazlaca tüketir ve sistemi yavaşlatarak performans düşüşüne neden olur.
.NET Teknolojisi ile RSA Şifreleme

.NET teknolojisi ile yazılım geliştirenler, herhangi bir veride şifreleme yapmak için .NET Framework içerisinde yer alan System.Security.Cryptography kütüphanesini kullanmaktadırlar. Bu kütüphane içerisinde yer alan fonksiyonlar sayesinde, yazılımcı istediği platformda güvenli bir şekilde veri şifreleme ve şifre çözümleme yapabilmektedir. Yazılım geliştiricinin RSA algoritmasını kullanarak şifreleme yapabilmesi için RSACryptoServiceProvider sınıfını kullanması gerekmektedir. Bununla ilgili bağlantıda yer alan uygulama incelenebilir.

Aşağıdaki kod parçası RSA algoritmasına parametre atamaya yarar.
public static RSACryptoServiceProvider rsa; public static void AssignParameter()
    {
        const int PROVIDER_RSA_FULL = 1;
        const string CONTAINER_NAME = "SpiderContainer";
        CspParameters cspParams =
              new CspParameters(PROVIDER_RSA_FULL);
        cspParams.KeyContainerName = CONTAINER_NAME;
        cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
        cspParams.ProviderName =
              "Microsoft Strong Cryptographic Provider";
        rsa = new RSACryptoServiceProvider(cspParams);
    }

Aşağıdaki kod parçası "AssignParameter" metoduyla aldığı parametreleri kullanarak alınan katar ifadeyi Açık Anahtar (Public Key) yardımıyla şifrelenmesini sağlar.
public static string EncryptData(string data2Encrypt)
    {
        AssignParameter();
        StreamReader reader =
              new StreamReader(@"D:\publickey.xml");
        string publicOnlyKeyXML = reader.ReadToEnd();
        rsa.FromXmlString(publicOnlyKeyXML);
        reader.Close();
        byte[] plainbytes =
              System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
        byte[] cipherbytes = rsa.Encrypt(plainbytes, false);
        return Convert.ToBase64String(cipherbytes);
    }


Aşağıdaki kod parçası "AssignParameter" metoduyla oluşturulmuş Açık Anahtar ve Gizli Anahtar (Private Key) bilgilerinin yerel bir xml dosyasında saklanmasını sağlar. Böylece oluşturulmuş şifreler "EncryptData" ve "DecryptData" metodlarının kullanımına açılır.
public static void AssignNewKey()
    {
        AssignParameter();
        StreamWriter writer =
              new StreamWriter(@"D:\privatekey.xml");
        string publicPrivateKeyXML = rsa.ToXmlString(true);
        writer.Write(publicPrivateKeyXML);
        writer.Close();
        writer = new StreamWriter(@"D:\publickey.xml");
        string publicOnlyKeyXML =
              rsa.ToXmlString(false);
        writer.Write(publicOnlyKeyXML);
        writer.Close();
    }


Aşağıdaki kod parçası "EncryptData" metodunun Açık anahtar yardımıyla şifrelediği veriyi Gizli Anahtarı kullanarak tekrar ilk haline çevirmeyi sağlar.
public static string DecryptData(string data2Decrypt)
    {
        AssignParameter();
        byte[] getpassword =
              Convert.FromBase64String(data2Decrypt);
        StreamReader reader =
              new StreamReader(@"D:\privatekey.xml");
        string publicPrivateKeyXML = reader.ReadToEnd();
        rsa.FromXmlString(publicPrivateKeyXML);
        reader.Close();
        byte[] plain = rsa.Decrypt(getpassword, false);
        return System.Text.Encoding.UTF8.GetString(plain);
    }

Kaynak : http://bidb.itu.edu.tr/seyirdefteri/blog/2013/09/08/rsa-algoritması

 

Kriptografi ve Ağ Güvenliği - Bölüm 1


Kriptografi şifreleme bilimi demektir. Teknolojinin hızlı bir şekilde gelişmesiyle askeri, elektronik, banka sistemleri ve daha bir çok yer kriptografi biliminin kullanım alanları haline gelmiştir.  Günümüz sistemlerinde en önemli gereksinimlerden birisi bilgilerin sorunsuz bir şekilde taşınması ve gizliliktir. Verilerin güvenli bir şekilde yollanması ve karşı taraftan alınabilmesi için kriptografi bilimi aracılığıyla geliştirilen çeşitli şifreleme, anahtarlama ve çözümleme algoritmaları kullanılmaktadır.  Kriptoloji algoritmalarından en  yaygın kullanılanı ise şifreleme algritmalarıdır. Şifreleme algoritması şifrelenecek metni ve şifreleme anahtarını girdi olarak alır. Çözümleme algoritması ise şifreleme algoritmasının ters yönünde çalışır.  
Kriptografide şifreleme için kullanılan anahtarın özellikleri ve çeşidine göre temel olarak iki çeşit şifreleme algoritması bulunmaktadır.

1 - Simetrik Şifreleme Algoritmaları (Gizli Anahtarlı Şifreleme)

Kriptografik yöntemlerden, hem şifreleme hem de deşifreleme işlemi için aynı anahtarı kullanan kriptosistemlere verilen isimdir. Simetrik şifreleme olarak da adlandırılır. Simetrik şifreleme uzun bir geçmişe sahiptir. Haberleşen tarafların(Hem göndericinin hem de alıcının) aynı anahtarı kullanmaları gerektiği için burada asıl sorun anahtarın karşıya güvenli bir şekilde iletilmesidir. Simetrik şifreleme anahtar karşıya güvenli bir şekilde iletildiği sürece Açık anahtarlı şifrelemeden daha güvenlidir. Anahtar elinde olmayan birisi şifrelenmiş metini ele geçirse de şifrelenmiş metinden asıl metni bulması mümkün değildir. Simetrik şifrelemede haberleşen tarafların her biri için bir anahtar çifti üretilmelidir. Bu yüzden de çok fazla anahtar çifti ile uğraşmak gerekebilir.

Sezar,Vigenere, DES, 3DES, RC5, Blowfish, IDEA, SAFER gibi algoritmalar gizli anahtarlı şifreleme algoritmalarına örnek olarak verilebilir.
Simetrik şifrelemede, Açık anahtarlı şifreleme ile, aynı seviyede güvenliği sağlamak için gereken anahtarın boyutu çok daha küçüktür. Anahtar boyutunun küçük olmasından dolayı Açık anahtarlı şifrelemeye göre daha hızlı şifreleme yapabilir. Yine anahtar boyutunun küçük olmasından dolayı anahtar üretim hızı daha yüksektir.

Kuvvetli Yönleri;
  • Algoritmalar olabildiğince hızlıdır.
  • Donanımla birlikte kullanılabilir.
  • Güvenlidir.
Zayıf Yönleri;
  • Güvenli anahtar dağıtımı zordur.
  • Kapasite sorunu vardır.
  • Kimlik doğrulama ve bütünlük ilkeleri hizmetlerini güvenli bir şekilde gerçekleştirmek zordur.
Simetrik algoritmalar blok şifreleme ve dizi şifreleme algoritmaları olarak ikiye ayrılmaktadır. Blok Şifreleme Algoritmaları veriyi bloklar halinde işlemektedir. Bazen bağımsız bazen birbirine bağlı olarak şifrelemektedir. Bu algoritmalarda iç hafıza yoktur, bu yüzden hafızasız şifreleme adını da almıştır. Bütünlük kontrolü gerektiren uygulamalarda genellikle blok şifreleme algoritmaları tercih edilir.

Dizi şifreleme algoritmaları ise veriyi bir bit dizisi olarak almaktadır. Bir üreteç aracılığı ve anahtar yardımıyla istenilen uzunlukta kayan anahtar adı verilen bir dizi üretilir. Kayan anahtar üretimi zamana bağlıdır ve bu yüzden bu algoritmalara aynı zamanda hafızalı şifreleme denir. Telsiz haberleşmesi gibi gürültülü ortamlarda ses iletimini sağlamak için genellikle dizi şifreleme algoritmaları kullanılır.



a.)    DES (Data Encryption Standard) : Dünyada en yaygın kullanılan şifreleme algoritmalarından birisidir. DES, IBM tarafından geliştirilmiştir. 1975 yılında “Federal Register” tarafından yayınlanmıştır. DES 64 bitlik veriyi 56 bitlik anahtar kullanarak şifreler. Ayrıca klasik Feistel Ağı kullanılarak temelde şifreleme işleminin deşifreleme işlemiyle aynı olması sağlanmıştır. Kullanılan teknikler yayılma ve karıştırmadır. DES’in en büyük dezavantajı anahtar uzunluğunun 56 bit olmasıdır. 1975 yılında yayınlanan bu algoritma günümüzde geliştirilen modern bilgisayarlar tarafından yapılan saldırılar karşısında yetersiz kalmaktadır. Daha güvenli şifreleme ihtiyacından dolayı DES, Triple-DES olarak geliştirilmiştir. Triple-DES algoritması geriye uyumluluğu da desteklemek amacıyla 2 adet 56 bitlik anahtar kullanır. Triple-DES algoritması, DES algoritmasının şifreleme, deşifreleme, şifreleme şeklinde uygulanmasıdır.
 

b.)    TWOFISH : 1998 yılında yayınlanan bu algoritma Bruce Schneier - John Kelsey - Doug Whiting - David Wagner - Chris Hall - Niels Ferguson tarafından yaratılmış ve analiz edilmiştir. AES finalistlerinden biridir ve AES kadar hızlıdır. Aynı DES gibi Feistel yapısını kullanır. DES’den farklarından biri anahtar kullanılarak yaratılan değişken S-box (Substitution box – Değiştirme kutuları)’lara sahip olmasıdır. Ayrıca 128 bitlik düz metni 32 bitlik parçalara ayırarak işlemlerin çoğunu 32 bitlik değerler üzerinde gerçekleştirir. AES’den farklı olarak eklenen 2 adet 1 bitlik rotasyon, şifreleme ve deşifreleme algoritmalarını birbirinden farklı yapmış, bu ise uygulama maliyetini arttırmış, aynı zamanda yazılım uygulamalarını %5 yavaşlatmıştır.

c.)    IRON : Diğer iki algoritma gibi Feistel yapısını kullanır. IRON, 64 bitlik veri bloklarını 128 bitlik anahtarla şifrelemede kullanılır. Döngü (round) sayısı 16 ile 32 arasındadır. Alt anahtarlar döngü sayısına bağlıdır. Alt anahtarların sayısı döngü sayısına eşittir. Bu nedenden dolayı  algoritma anahtar bağımlıdır. IRON algoritmasının var olan algoritmalardan farkı da budur. Bu algoritmanın avantajı bitler yerine 16-tabanındaki sayılar kullanmasıdır, dezavantajı ise yazılım için tasarlanmış olmasıdır.

d.)    AES (The Advanced Encryption Standard) : AES, John Daemen ve Vincent Rijmen tarafından Rijndael adıyla geliştirilmiş ve 2002 yılında standart haline gelmiştir. AES uzunluğu 128 bitte sabit olan blok ile uzunluğu 128, 192 ya da 256 bit olan anahtar kullanır. Kullanılan tekniklerden bazıları baytların yer değiştirmesi, 4x4’ lük matrisler üzerine yayılmış metin parçalarının satırlarına uygulanan kaydırma işlemleridir. 2006 yılı itibariyle en popüler simetrik algoritmalardan biridir.


İletişim Formu

Ad

E-posta *

Mesaj *