Kriptografik Doğru Cevaplar

Akademiden itibaren geliştirdiğim, test ettiğim sistemlerde uygulamaya çalıştığım bazı kriptografik seçimlerimi paylaşmak için bu özet yazıyı hazırladım.

Her ne kadar bu konuda uzman kişilerin güncel öğütleri çok daha önemli olsa da, nereden başlayacağı konusunda kararsız olanlar için faydalı olabilir.

Not, bu bir yatırım tavsiyesi değildir. 😅

Sabit verilerinizi saklamak için AES 'i CTR (sayıcı/counter) modunda ve HMAC ekleyerek kullanmayı tercih edin.

AES, yaygın bir standart olarak birçok donanım ve yazılım tarafından desteklenmektedir.  

CTR modundan kullanarak ECB modunun zayıflıklarından kurtulursunuz. [1]

Tabi CTR modu ile şifrelenmiş verilerin değiştirilmediğinden, kurcalanmadığından emin olmak için HMAC eklemek gereklidir. [2]

Şifreleme performansını arttırma imkanı ve doğrulama desteği ile AES-GCM tercihi de sık görülen bir alternatifdir. Ancak günümüzdeki donanım/yazılım kapasitelerinde, HMAC'da bir o kadar hızlıdır. Ve GCM 'deki gibi kullanıcı girişine imkan vermediği için yan kanal saldırılarına karşı daha dirençlidir.

Özetlersek; AES-CTR + HMAC 👍

AES anahtar uzunluğu olarak 256 bit seçin.

128 bit bile halen güvenli görülse de, GB/$ ve Mbit/$ seviyelerinin her geçen gün azalması ile anahtar boyutu olarak 256 bit kullanmanızı öneririm.

Sayılara dökecek olursak:

  • 128-bit anahtar kullanımındaki olası kombinasyonlar; 3.4 x 10^38
  • 256-bit anahtar kullanırsak bu kombinasyon; 1.1 x 10^77 'ye çıkmaktadır.

Özetlersek; 🔑2️⃣5️⃣6️⃣

HMAC'u simetrik imzalar için de kullanın.

Zor olduğunu düşündüğünüz, yeni bir kütüphane daha eklemek istemediğiniz veya kendinizi yazılımın kralı/kraliçesi gibi hissettiğiniz için uygulamalarınıza, SDK ve API'lerinize lütfen, lütfen, LÜTFEN kendi kripto fonksiyonlarınızı geliştirMEyin.

Veya biraz daha yaygın ve güvenli gelen; data ve anahtarı birleştirip bir hash fonksiyonuna besleyerek simetrik imza oluşturma işine girmeyin.

Güzel güzel, eski dostumuz Hash-based Message Authentication Code - HMAC'u kullanın.

func(📚 + 🔑) ⛔

hmac.new(🔑, 📚, hashlib.sha256)✅

Hash / HMAC için şimdilik SHA256 kullanalım, ama imkan varsa SHA3'e geçişi planlayın.

Teknolojinin gelişimi, Moore yasasının geçilmesi, blok zincirin popülerliği, GPU performanslarının yükselişi ile bildiğiniz üzere MD5, SHA1 gibi algoritmalar artık güvensizdir.

SHA256 ve SHA512 tasarımsal olarak benzer olduğu içinde bir sonraki adım için kullanımını planlamak pek doğru olmaz.

Rastgele ID'ler için SHA-256 bit rastgele sayı kullanın.

Doğum günü paradoksu, çakışmalardan kaçınmak için seçeceğiniz değer sayısının iki katı büyüklüğünde rastgele değerler seçmeniz gerektiğini belirtir.

Şimdiye kadar herhangi bir uygulamanın 2^64 rastgele değer seçebilirken çakışma yaklaştığı pek olası değildir. Ancak BT sistemlerimiz katlanarak ölçeklenmeye devam ediyor. Ve bu önümüzdeki 10 yılda gerçekleşebilir.

Çoğu uygulama için, 128 bitlik rastgele değerler yerine 256 bitlik rastgele değer tercih etmek, maliyette önemli bir artış sağlamaz. Ancak ufacık bir çakışma ihtimaline karşı da bizleri güvenli tarafta tutar. Böylece ihtimalleri güneş sisteminin ömrü boyunca dünyadaki tüm bilgisayarlar sayısı seviyesine taşır.

🎂♾

Kullanıcıdan bir şifre alır almaz onu Argon2, scrypt veya PBKDF2 ile hash'leyin. Ve düz metni hafızadan tamamen uçurun.

Eminim kimse yapmıyordur ama sakın ola kullanıcı şifrelerini düz metin olarak herhangi bir yerde saklamayın.

MD5, SHA1 gibi günümüzde güçünü, güvenilirliğini kaybetmiş algoritmalar ile hash'lemeyin. Yada bunların farklı sayıda uygulanması ile; md5(md5(sha1("⛔")))

Bu tarz bir senaryo için geliştirilmiş gerçek bir anahtar türetme algoritması kullanın. PBKDF2 resmi bir standart gibi görülse de scrypt ve Argon2 daha güçlüdür.

Lütfen kendi uygulamalarınızı ve kullanıcı havuzunu küçümsemeyin. Unutmayın biz insanlar tembel varlıklarız. Aynı veya benzer şifreleri birçok yerde kullanmayı tercih ederiz. Böyle bir koşulda, eğer bir gün sizlerin o çok umursamadığı, az kullanıcılı, düşük etkileşimli uygulama bir sızıntı yaşarsa; bu kullanıcılara çok daha büyük zarar verebilir.

🙊🙉🙈

Asimetrik şifreleme için güvenli eliptik eğri temelli algoritmalar kullanın.

PGP, Signal, SSL, S/MIME, Bitcoin, SSH gibi sizde asimetrik şifreleme kullanımında eliptik eğrileri tercih edin.

Ancak her sakallıya dede demediğimiz gibi her eğri fonksiyonu da güvenli değildir. Edward Snowden'in de bahsettiği gibi NSA, en az bir eliptik eğri fonksiyonuna arka kapı yerleştirmiştir. [3, 4, 5]

Bu yüzden eğrilerin güvenliğini araştıran SafeCurves projesini takip edin. Ve oradan seçiminizi yapın.

SafeCurves, gereksinimlerini 3 başlık altında toplamıştır (1) temel parametreler, (2) ECDLP güvenliği ve (3) ECDLP güvenliğinin ötesindeki ECC güvenliği

Tüm ağ tabanlı çalışmalarınızda SSL desteği olsun.

Eskiden SSL sertifikası almak, yönetmek epey zor ve maliyetliydi. Ama artık kar amacı gütmeyen Internet Security Research Group vakfı tarafından yürütülen Let's Encrypt girişimi ile bu çok kolay.

Hele ZeroSSL'in yürüttüğü açık kaynaklı Caddy sunucu yazılımı ile çok daha pratik oldu.

28 saniyede otomatik HTTPS

Kullanın. 🔒

Referanslar

[1] Blok şifre çalışma kipleri https://tr.wikipedia.org/wiki/Blok_şifre_çalışma_kipleri

[2] Özet tabanlı mesaj doğrulama kodu https://tr.wikipedia.org/wiki/Özet_tabanlı_mesaj_doğrulama_kodu

[3] https://tr.wikipedia.org/wiki/Eliptik_eğri_kriptografisi#Arka_Kapı

[4] Dual_EC_DRBG https://en.wikipedia.org/wiki/Dual_EC_DRBG

[5] Green M., The Many Flaws of Dual_EC_DRBG https://blog.cryptographyengineering.com/2013/09/18/the-many-flaws-of-dualecdrbg/

Onur Keskin

Onur Keskin