Yazan : Bilgehan Gürünlü

Simetrik sistemler de “blok şifreleme” ve “dizi şifreleme” sistemleri olarak ikiye ayrılırlar. “Blok şifreleme” sistemlerinde mesaj sabit uzunluklu bloklara bölünür ve her bir blok diğerlerinden bağımsız bir şekilde şifrelenir. Bu şekilde her bir bloğa karşılık aynı alfabeden aynı boyutta başka bir blok karşılık düşürülür. Bu nedenle blok şifreleme sistemleri basit yerine koyma sistemleridir. Eğer anahtarı bilmiyorsa, düşman kripto-analist eline geçirdiği şifreli mesajı çözmek için şifrelemede kullanılmış olması olası tüm anahtarları denemek zorundadır.(Dersde anlatılmış olan “Kaba Kuvvet Yaklaşımı”). Bu nedenle bu tür sistemlerde anahtar kümesi olabildiğince geniş tutulmalıdır.

“Dizi şifreleme” sistemleri ise, her bir mesaj birimini, zamanla değişen bir fonksiyon kullanarak şifreler. Dizi şifreleme sisteminin iç yapısı zamana bağlı olarak durum değiştiren bir makine gibi düşünülebilir. Dolayısıyla şifrelemede kullanılan fonksiyonun zamana bağımlılığı makinenin durum değiştirme bağıntısıyla tanımlanır. Bu tür bir sistemde mesaj biriminin büyük olmasına gerek yoktur. Aksine mesaj biriminin olabildiğince küçük tutulması istenir. Dizi şifreleme sistemlerinde kullanılan mesaj birimleri genelde Latin alfabesinden bir karakter ya da tek dijitlik sayılardır. Ancak bu araştırma ödevinde mesaj birimi olarak tek dijitlik sayılar ele alınacak, kimi özel incelemeler gerektiren durumlarda ise bu tek dijitlik sayılar {0, 1} ikili sayıları olacaktır. Bu nedenle bu sayılardan söz ederken sayı ya da dijit yerine kimi zaman da bit kullanılabileceğim.

Bir dizi şifreleme sisteminde mesaj dijitleri tek tek şifrelendiğinden mesajlar genelde bir dizi şeklinde düşünülür. Mesaj dizisinin her bir dijiti şifrelendikten sonra sistem belirli bir kural uyarınca durum değiştirir. Sistemin durum değiştirmesi şifreleme anahtarının da değişmesine neden olur. Bu nedenle dizi şifreleme sistemlerinde anahtar da mesajla aynı boyutta bir dizi şeklindedir. Bu anahtar dizisinin yapısı şifreleme sisteminin güvenilirliği konusunda oldukça büyük bir önem taşımaktadır.

Tipik bir dizi şifreleme sistemi “kayar anahtar üreteci” (KAÜ) olarak adlandırılan çıkışında sanki-rasgele (pseudorandom) diziler üreten bir sonlu-durumlu makineden oluşmaktadır. Mesajın ikili bir sayı dizisi olduğu düşünülürse sonlu durumlu makinenin çıkışındaki dijitler de ikili sayı dizisi olmalıdır. Bu dizinin bitleri ardışıl olarak açık mesaj (plaintext) dizisindeki bitlerle modülo-2 toplanır (yani EXOR işlemine girer). Sonuçta çıkan ikili dizi de şifreli metin (ciphertext) dizisi olarak adlandırılır. Anahtar dizisi de denilen KAÜ ‘nin çıkışındaki dizinin rasgele görünüşlü olmasındaki amaç, açık mesaj dizisindeki bitlerle şifreli mesaj bitleri arasındaki karşılıklı informasyonun sıfıra inmesini sağlamaktır. Aslında bu dersde anlatılan yada anlatılmayan tüm kripto sistemlerinin ana amacıdır. Gerçekten bir dizi tamamen rasgele bir başka bir diziyle toplanırsa sonuçta çıkan diziden istatiksel olarak bağımsız olacaktır.

Bu nedenle dizi şifreleme sistemlerinin tasarım aşamasında gerçeklenmesi istenen temel özellik olabildiğince rasgele görünüme sahip dizilerin deterministik yollarla bir alt sistem tarafından üretilmesini sağlamaktır. Bilindiği üzere tamamen deterministik yollarla gerçek rastgele dizilerin üretilmesi olanaklı değildir. Bu yüzden amaç KAÜ ‘nin olabildiğince rasgele görünüme sahip bit dizileri üretmesini sağlamak olmalıdır.

Bu durumda bir dizinin rasgele olmasının ne demek olduğu ve kriptografik sağlamlık açısından ne tür kıstasların değerlendirilmeye alınması gerektiği konusundan biraz bahsetmem gerekirse:

Genel olarak, eğer bir dizi içerisinde yapısal bir düzenlilik bulunmuyorsa, dizi elemanları hakkında, önceki terimlere bakarak hiç bir öngörü ya da dizi üzerinde herhangi bir tanımlama yapılamıyorsa, o dizinin rasgeleliğinden söz edilebilir. Burada tanımlama sözüyle görece az sayıda teriminden dizinin yeniden üretilebilmesini sağlayacak bir kural ya da bir bağıntı kastedilmektedir. Bir dizinin görece basit bir bağıntıyı sağlaması demek o dizinin gerçek rasgele bir dizi olmadığını göstereceğinden, gerçek rastgele bir dizinin yeniden üretilebilmesi için basit bir bağıntı bulmak imkansızdır. Diğer yanda deterministik yollarla üretilen sanki-rastgele dizilerin gerçek rastgele diziler kadar güçlü olacağını düşünmek yanlış olur. Dolayısıyla böyle bir dizinin göreceli olarak daha basit bir bağıntıyı sağlayacağı açıktır. Bu durumda KAÜ çıkışındaki dizinin, basit olması olası böyle bir bağıntıyı sağlaması sistemin güvenilirliğini önemli ölçüde sarsacaktır. O halde yapılması gereken sistem tasarlanırken bu bağıntının yeterince karmaşık olmasını sağlamak, böylece eldeki hesaplama olanaklarıyla bulunmasını imkansız bir hale getirmek olacaktır.

Kayar anahtarın küçük bir parçasından yeniden üretilebilmesinin neden bu kadar sakıncalıdır. Çünkü; eğer düşman eline geçirdiği küçük bir anahtar parçasıyla dizinin geri kalan kısmını kolayca bulabiliyorsa şifreyi kırmış olacaktır.(Dizi şifreleme sistemlerinin tüm sağlamlığı,ders boyunca da anlatıldığı gibi, gizli anahtarın iyi saklanmasına bağlıdır.)

Dizi şifreleme sistemlerine örnek olarak çok bilinen ve yaygın kullanım alanı bulan “ikili toplamsal dizi şifreleme” sistemidir. Bu sistemin basit blok şeması Şekil 1 ‘de gösterildiği gibidir. İkili toplamsal dizi şifrelemede gerçek gizli anahtar, kayar anahtardan farklıdır. K bitlik gizli anahtar Z, KAÜ ‘ni kontrol ederek asıl anahtar dizisi Z1′,Z2′,…,ZN’ nin üretilmesini sağlar. Burada Z’ anahtar dizisini üreten K bitlik gerçek gizli anahtar Z ye tohum (seed) denir. Gerçek gizli anahtar (Z) hiçbir zaman şifreleme işleminde doğrudan kullanılmaz. Gizli anahtarın uzunluğu kayar anahtarın uzunluğu yanında oldukça küçüktür (K « N). Şifreli-metin bitleri, ikili açık-metin bitlerinin kayar anahtar dizisiyle terim terim modülo-2 toplanması sonucunda elde edilirler:

Yn=Xn + Z’n n = 1,2,…,N    (Şifreleme)

Burada Xn açık-metinin n. Bitini Yn de şifreli-metinin n. bitini göstermektedir. Modülo-2 toplama ve çıkarma işlemleri eşdeğer olduğundan,

Xn=Yn + Z’n n = 1,2,…,N     (Şifre Çözme)

şifreleme ve şifre çözme işlemleri eşdeğer cihazlarla gerçekleştirilirler.



Şekil 1. İkili toplamsal dizi şifreleme sistemi

Bu sistemde bir açık-metin biti yalnızca tek bir şifreli-metin bitini etkileyecektir. Bu çok iyi bir durum değildir. Çünkü şifreleme uygulamaları açısından açık-metinde yer alan bir bitin şifreli-metinde yer alan birçok biti etkilemesi, bir diğer deyişle “yayılımın” (diffusion) fazla olması gerekli bir koşuldur. Ancak diğer yandan her bir gizli anahtar biti şifreli-metindeki birçok biti etkileyeceğinden “anahtar yayılımı” iyi olur. Bu şekilde sistem dengelenmiş olur

Trivium Dizi Şifreleme Algoritması donanım bazlı senkron bir dizi şifreleme sistemidir. Senkron olmasının sebebi, anahtar dizisinin açık metinden bağımsız olarak üretilmesidir. Trivium Dizi Şifreleme Algoritması’ nın üretilme amacı hız ve alan arasında esnek bir optimizasyon sağlamaktır. Trivium, güvenlik, hız ve esneklikten fedakarlık etmeden bir dizi şifreleme sisteminin ne kadar basitleştirilebileceğini araştırmak için tasarlanmıştır.

Trivium Şifrelemesi bir akış şifrelemesidir. Bütün akış şifrelemelerinde olduğu gibi; bu şifrelemede de amaç yöntem olarak bir akışı kullanmaktır. Yani her şifreleme birimindeki işlem bir önceki şifreleme işlemine bağlıdır. Örneğin her harfin şifrelenmesi sırasında bir önceki şifrelemeden çıkan bilgi anahtar olarak kullanılabilir. Veya anahtar kendi içerisinde çeşitli formüllere tabi tutularak bir sonraki anahtar bilgilerini üretebilir.

Trivium Dizi Şifreleme Algoritması, dizi şifreleme konusunda Avrupa Birliği standardının seçilmesi amacıyla düzenlenen ECRYPT Dizi Şifreleme Projesi’ne (e-stream) adaylığı Eylül 2008 itibariyle Profile 2’den kabul edilen 3 algoritmadan bir tanesidir. Trivium, donanım bazlı çalışan senkron bir dizi şifreleme algoritmasıdır. Donanım bazlı olması sebebiyle bir donanım betimleme dili olan VHDL (Very High Speed Integrated Circuit – Hardware Description Language) kullanılarak Sahada Programlanabilir Kapı Dizileri (FPGA-Field Programmable Gate Array) üzerinde gerçeklenmesi gerekmektedir. Bu
şifreleme algoritması Christophe De Canniere ve Bart Preneel tarafından ortaya çıkartılmıştır.

1) Özellikleri :

Trivium Dizi Şifreleme Algoritması, 80-bit gizli anahtar (tohum) ve 80-bit ilk değer (IV) ile 264 bite kadar anahtar dizisi üretebilen senkron bir dizi şifreleme sistemidir. Trivium, diğer dizi şifreleme sistemlerinde olduğu gibi iki aşamadan oluşur: ilk olarak gizli anahtar (K) ve ilk değer (IV) kullanılarak şifreleyici başlangıç durumuna getirilir, daha sonra durum tekrar tekrar güncellenir ve anahtar bitlerini üretmek için kullanılır. Trivium algoritmasının parametreleri Tablo 1 deki gibidir.

Tablo 1.
Trivium Parametreleri

Parametreler

Uzunluğu

Anahtar Uzunluğu

80 bit

İlk Değer Uzunluğu

80 bit

İç Durum Uzunluğu

288 bit

2) Anahtar Dizisinin Üretilmesi :

Trivium Dizi Şifreleme Algoritmasında 288-bitlik iç durum (internal state) s1, s2, …, s288 ile gösterilmiştir. Anahtar dizisi üretilme işlemi 15 özel bitin ayrılması, hepsinin 3 bitin güncellenmesinde kullanılması ve son olarak 1 bit anahtar dizisi zi’ nin hesaplanması işlemlerini içerir. Daha sonra durum bitleri kaydırılarak döndürülür ve istenen N ≤ 264 bitlik anahtar dizisi üretilene kadar işlem tekrarlanır. Algoritmanın matematiksel tanımı aşağıdaki gibidir :

for
i = 1 to N do

t1 ← s66 + s93

t2 ← s162 + s177

t3 ← s243 + s288

zi ← t1 + t2 + t3

t1 ← t1 + s91 . s92 + s171

t2 ← t2 + s175 . s176 + s264

t3 ← t3 + s286 . s287 + s69

(s1, s2, . . . , s93) ← (t3, s1, . . . , s92)

(s94, s95, . . . , s177) ← (t1, s94 , . . . , s176)

(s178, s179 , . . . , s288) ← (t2, s178, . . . , s287)

end for

Modülo-2′ ye göre yazılan yukarıdaki algoritmada toplama (+) işlemi EXOR ve çarpma (.) işlemi AND lojik işlemlerini göstermektedir. Ayrıca s1 en düşük anlamlı biti, s288 ise en yüksek anlamlı biti göstermektedir. Anahtar üretilme işlemi Şekil 2’de gösterildiği gibidir.

2.1) Anahtar ve IV :

Trivium Dizi Şifreleme Algoritması’ nda anahtar üretme işleminden önce durumların başlangıç durumuna getirilmesi gerekmektedir. 288-bitlik iç durum 80-bitlik gizli anahtarın, 80-bitlik ilk değerin (IV) yüklenmesi ve s286, s287 ve s288 hariç diğer bitlerin ‘0’ atanması ile başlangıç konumuna getirilmiş olur. Daha sonra 288-bitlik iç durum 4 tam tur boyunca anahtar bitinin üretilmesi hariç yukarıda anlatıldığı gibi kaydırılarak döndürülür. Başlangıç koşuluna getirilme ve 4 tur döndürme aşağıda matematiksel olarak anlatılmıştır.

(s1, s2, . . . , s93) ← (K1, . . . , K80, 0, . . . , 0)

(s94, s95, . . . , s177) ← (IV1, . . . , IV80, 0, . . . , 0)

(s178, s179 , . . . , s288) ← (0, . . . , 0, 1, 1, 1)

for i = 1 to 4 . 288 do

t1 ← s66 + s91 . s92 + s93 + s171

t2 ← s162 + s175 . s176 + s177 + s264

t3 ← s243 + s286 . s287 + s288 + s69

(s1, s2, . . . , s93) ← (t3, s1, . . . , s92)

(s94, s95, . . . , s177) ← (t1, s94 , . . . , s176)

(s178, s179 , . . . , s288) ← (t2, s178, . . . , s287)

end for

Şekil 2 Trivium ve Anahtar Üretilme İşlemi

3) Gerçekleme

3.1) Donanımsal

Trivium donanım temelli bir şifreleme algoritmasıdır. Bu algoritmanın amacı donanımsal olarak en az kaynağı(en az gücü ve kapıyı) kullanarak çok hızlı bir şifreleme işleminin yapılmasını sağlamaktır. En ideal gerçekleştirme için bitsel yaklaşım, tasarımcıları tarafından önerilmektedir. Ayrıca nonlineer bir yapıda kurulması da tasarımcılar tarafından tavsiye edilmektedir. Az güç tüketimi ve hızlı işlem için paralel bir devre yapısında gerçekleştirilmesi gerekmektedir. Her 64 iterasyonda tekrardan yapı modifiye edilmektedir. İlk gerçekleştirmede 3 AND kapısı ve 11 XOR kapısı kullanılmış ve sonrasında tahmini bir zaman ortaya çıkartılmıştır. Kullanılmış olan bu kapıların, farklı miktarlarda ve değişil türdeki kapılarla 1 Bit’den başlayıp 64 Bit ‘e kadar değişik donanımlarla gerçekleştirildiğinde kullanılan kapılara Tablo 2 den ulaşılabilir.


Tablo 2 1 Bit ile 64 Bit Arası Devreler İçin Kapı Sayısı Tahminleri


3.2) Yazılımsal

Gerçekte Trivium şifreleme sadece yazılımsal bir şifreleme türü olmamasına rağmen standart PC’de de çalışabilmektedir. 1.5GHz Xeon işlemcisi için standart C kodunda yazılmış bir programın çalışma ölçütlerine Tablo 3 ‘den ulaşılabilinir.

Tablo 3 1.5GHz Xeon İşlemcisi İçin Ölçütler


4) Güvenlik :

Blok şifre tasarım teknikleri günümüzde anlaşılır seviyeye gelmiştir. Bu tasarım tekniklerini kullanarak güçlü şifreleme algoritmaları tasarlanmıştır. Ancak aynı şeyi akış şifreler için söylemek mümkün değildir. Şu ana kadar kırılmamış akış şifresi yoktur. Yine de bu konudaki çalışmalar değerlendirilmesi devam edilen eSTREAM projesi kapsamında yarışan 34 şifre ile devam etmektedir. Özellikle blok şifrelerden çok daha hızlı olan güvenli akış şifreleri tasarlama kısıtlı kaynakların kullanıldığı güvenlik gerektiren uygulamalar için önemlidir.

Bununla beraber eSTREAM projesi kapsamında yarışan ve başarılı bir saldırı gözlenmeyen şifrelerden HC–256 ve Trivium doğrusal olmayan geri beslemeli öteleyici saklayıcıların akış şifrelerin tasarımında önemli bir noktaya geldiğinin de kanıtıdır. Diğer yandan şifrelerin istatistiksel olarak göstereceği başarım da bu şifrelerin gelecekte güvenlik uygulamalarında varolup olamayacaklarını gösterecektir

Aynı parametreler gözönünde bulundurulduğunda diğer Stream Cipher metotlarına göre Trivium şifrelemenin gelebilecek saldırılara karşı daha sağlam bir yapıya sahiptir. Şöyle ki 80 bit gizli anahtar ve 80 bit IV ile 2^64 (2 üzeri 64) kadar key stream üretilir. Bu da kırılması çok zor olan bir ihtimali belirtmektedir.

Trivium Şifrelemenin önemli bir kısmında doğrusal geri beslemeli saklayıcılardan gelen doğrusallığı yok etmek için boole fonksiyon’ları kullanılmaktadır.

Bir boole fonksiyonu , den ye bir harita olarak isimlendirilir. Kriptografide kullanıldığı şekil matematiksel yaklaşımdan biraz değişiklik göstermekle beraber bir boole fonksiyonunun kriptografide kullanıldığı şekliyle iki elemanı vardır: 0 ve 1. Bir boole fonksiyonu bir doğruluk tablosutruth table) ( ile gösterilebilir.Doğruluk tablosu) şeklinde sıralanan ‘in fonksiyon değerlerini gösteren bir vektördür. Aynı şekilde fonksiyonu setine ait bir fonksiyon olmak üzere doğruluk tablosundaki vektörler fonksiyon değerlerine karşılık geliyorsa bu tür gösterilime kutup doğruluk tablosu (polarity truth table) ismi verilir.

Akış şifrelere karşın değişen ve gelişmekte olan çeşitli saldırı teknikleri mevcuttur. Bu saldırı tiplerinden ilinti saldırıları (correlation attacks) doğrusal geri beslemeli öteleyici saklayıcının çıkışı ile anahtar dizisi arasında olacak şekilde bir ilintinin olması ile açıklanabilir ( doğrusal geri beslemeli öteleyici saklayıcının çıkışı ve bilinen anahtar dizisi sembolü). Hızlı ilinti saldırıları ise çıkış dizisinin, doğrusal geri beslemeli saklayıcının durumlarının bir takım doğrusal fonksiyonu ile ilişkili olmasını kullanır. Bu saldırılar daha çok doğrusal olmayan birleştirici ve filtre mekanizmalarına karşı mümkün olmaktadır ve doğrusal geri beslemeli saklayıcının geri besleme polinomunun seyrek olmaması ve birleştirici fonksiyonunun yüksek ilinti dayanıklılığına sahip olması ile engellenebilir. Ayrıca birleştirici fonksiyon olarak dengeli bir boole fonksiyonunun kullanım gerekliliği dengeli ve yüksek ilinti dayanıklı bir boole fonksiyonu kullanma gerekliliğini ortaya çıkarmaktadır.

Akış şifrelerinin klasik yapısı birçok doğrusal geri beslemeli öteleyici saklayıcının bir boole fonksiyonu ile birleştirilmesine dayanmaktadır. Cebirsel saldırılarda doğrusal geri beslemeli öteleyici saklayıcının başlangıç durumu (initial state) ve çıkış arasında doğrusal olmayan denklemler sistemi oluşturulur ve daha sonra bu sistem çözülür


Yukardaki
ifadedeki denklemde bağlantı fonksiyonunu ya da doğrusal güncelleştirici fonksiyonu, filtre ya da birleştirici fonksiyonu tanımlamaktadır. için doğrusal bir fonksiyon olduğu için tüm eşitlikler ‘in derecesine eşittir. Bununla beraber Meier takip eden 2 senaryo ile bu denklemlerin derecesinin azaltılabileceğini göstermiştir.

Senaryo 1:
olacak şekilde düşük dereceli ve sıfır olmayan bir fonksiyonu vardır.


ve yada .

Senaryo 2:
olacak şekilde düşük dereceli ve sıfır olmayan bir fonksiyonu vardır.


ve yada .

Courtois tarafından ortaya konulan hızlı cebirsel saldırılar, cebirsel saldırılardan daha etkili olabilmektedir. Hızlı cebirsel saldırılarda saldırgan doğrusal geri beslemeli öteleyici saklayıcının başlangıç durumu ile çıkış fonksiyonunun bazı bitleri arasında birlikte ilişki kurarak sistemin derecesi ‘yi azaltmaya çalışır. Çünkü cebirsel saldırılar da görülmüştür ki cebirsel saldırıların karmaşıklığı anahtar genişliği ile polinomsal, denklem sisteminin derecesi ile üssel bir ilişkiye sahiptir. Eğer daha düşük dereceden yeni denklemler bulmak mümkün olursa toplam saldırı aşırı derecede hızlandırılabilir.

Yukarıdan anlaşılacağı gibi cebirsel derece ya da cebirsel dayanıklılık akış şifrelerinin tasarımında önemli bir yer almıştır. Diğer yandan bir boole fonksiyonunun cebirsel derecesi ile ilinti dayanıklılık derecesi arasında bir ödünleşim (tradeoff) vardır. ‘in cebirsel derecesi olmak üzere n değişkenli bir boole fonksiyonunun ilinti dayanıklılığı ‘i geçemez. Bundan dolayıdır ki Trivium’un tasarımında yukarıda bahsedilen özellikler ışığında iki farklı yönde gelişme vardır. Bunlardan birincisi bahsedilen özellikleri doyuran çok değişkenli boole fonksiyonları arama, ikincisi tasarım stratejisini değiştirme. Bu tasarım stratejilerinden ilki birleştirici fonksiyonu sonlu bir durum otomatı ile değiştirmek (Bluetooth ta kullanılan E0 akış şifresinde olduğu gibi). İkincisi ise doğrusal geri beslemeli öteleyici saklayıcı yerine doğrusal olmayan öteleyici saklayıcı kullanmaktır. Bu tür akış şifrelere örnek olarak donanım uygulamaları için önerilmiş Trivium şifresi verilebilir. Trivium şifresinin sahte kodu aşağıda verilmiştir. Trivium şifresinin 288 bitlik başlangıç durumuna 80-bit anahtar ve 80-bit IV (initial value- başlangıç değeri) yüklenir ve durumun 286, 287 ve 288. bitleri hariç kalan diğer bitler 0 değerine çekilir.Yükleme bittikten sonra durum (state) aşağıdaki sahte kodu verilen algoritma kullanılarak anahtar biti üretmeye hazır hale getirilir ve daha sonra aşağıda verildiği gibi bit bit değerler olacak şekilde üretilir.

Trivium şifresinin anahtar üreten sahte kodu:

5) Sonuçlar

Yapılan bu ödevde, dizi şifreleme konusunda Avrupa Birliği Standardının seçilmesi amacıyla düzenlenen ECRYPT Dizi Şifreleme Projesi’ ne 2.fazda seçilmiş olan algoritmalardan bir tanesi olan Trivium Algoritmasının gerçeklenmesinin yanında şifreleme konusunda geniş bilgi edinilmişdir. Hazırlanan bu ödevde faydalınan kaynakların listesine aşağıdan ulaşılabilir.

Kaynaklar

  • http://www.ecrypt.eu.org/stream/trivium.html
  • http://wapedia.mobi/en/Trivium_(cipher)
  • http://www.lshift.net/blog/2008/12/09/trivium-sse2-corepy-and-the-cube-attack
  • http://www.experiencefestival.com/trivium_cipher
  • http://www.spiritus-temporis.com/trivium/
  • http://www.lshift.net/blog/category/cryptology
  • http://www.ecrypt.eu.org/stream/
  • http://eprint.iacr.org/2006/141.pdf
  • http://citeseer.ist.psu.edu/old/733336.html

Yorumlar

  1. Ahmet Ülgen

    Bilgehan Bey Merhaba;

    Çok güzel bir konuda kaliteli yazılarınız mevcut. Paylaşımınız için teşekkürler.

    Yeni makalelerinizde görüşebilmek dileğimle.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


beş + 8 =