<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[TurkTeam | Türk Siber Güvenlik Topluluğu - Kriptografi]]></title>
		<link>https://www.turkteam.org/</link>
		<description><![CDATA[TurkTeam | Türk Siber Güvenlik Topluluğu - https://www.turkteam.org]]></description>
		<pubDate>Sun, 25 Oct 2026 19:26:26 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[eMudhra Sonrası: Tarayıcı Güvende, Ya Java ve CI Trust Store'ları?]]></title>
			<link>https://www.turkteam.org/konu-emudhra-sonrasi-tarayici-guvende-ya-java-ve-ci-trust-store-lari.html</link>
			<pubDate>Sat, 24 Oct 2026 11:31:09 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-emudhra-sonrasi-tarayici-guvende-ya-java-ve-ci-trust-store-lari.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=407" loading="lazy"  alt="[Resim: attachment.php?aid=407]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
eMudhra ara CA özel anahtarlarının zayıf olduğu skandalında tarayıcılar hızla tepki verdi. Sonatype'ın 23 Ekim 2026 yazısı ise asıl soruyu soruyor: <span style="font-weight: bold;" class="mycode_b">kurumunuzdaki diğer araçlar hâlâ etkilenen zincirlere güveniyor mu?</span> Java cacerts, Node, Python, Go, Git ve sistem demetleri ayrı ayrı güncellenmeden "tarayıcı düzeldi" demek yetmez.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Neden tek trust store yetmiyor?<br />
</li>
<li>Sonatype Audit and Fix betiği<br />
</li>
<li>Betiğin görmedikleri<br />
</li>
<li>Pratik yol haritası<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Neden tek trust store yetmiyor?</span></span><br />
Bir makinede tarayıcı işletim sistemi deposunu kullanırken JDK kendi cacerts dosyasını, bazı CLI araçları gömülü kökleri kullanır. Birini güncellemek diğerlerini güncellemez. Filippo Valsorda'nın deyişiyle bu, Heartbleed'den büyük bir temizlik işi; IoT, Docker ve unutulmuş Linux kutuları uzun kuyruk oluşturur.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Sonatype betiği</span></span><br />
Paul Horton'un açık kaynak <span style="font-weight: bold;" class="mycode_b">eMudhra Audit and Fix</span> betiği Unix benzeri makinelerde Java, Node.js, Python, Go, Git ve sistem demetlerini tarar. Desteklenen yerlerde etkilenen ara CA'lara zincirlenen test sunucularına HTTPS isteği atar; kontrol için GitHub'a da bakar. Varsayılan olarak <span style="font-weight: bold;" class="mycode_b">hiçbir şeyi değiştirmez</span>. --no-network yalnızca sürüm kontrolü yapar; --dry-run / --fix isteğe bağlıdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Betiğin görmedikleri</span></span><br />
Uzak sunucular, konteyner imajları, CI ajanları, üretim hostları ve proje bağımlılıkları taranmaz. Geliştirici dizüstü bilgisayar sonucu kurumsal durum demek değildir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Pratik yol haritası</span></span><br />
<ol type="1" class="mycode_list"><li>Önce OS ve tarayıcı güncellemelerini tamamlayın.<br />
</li>
<li>Geliştirici iş istasyonlarında betiği çalıştırıp çıktıyı envantere işleyin.<br />
</li>
<li>CI runner ve temel konteyner imajlarını ayrı süreçle yenileyin.<br />
</li>
<li>Java uygulamalarında cacerts / özel trust store yollarını bulun.<br />
</li>
<li>Tedarikçi yamasını tercihen kullanın; elle sertifika silmeyi test edin.<br />
</li>
</ol>
<br />
CI ajanlarınızın trust store durumunu kim izliyor?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://www.sonatype.com/blog/a-protected-browser-doesnt-mean-your-enterprise-is-remediated" target="_blank" rel="noopener" class="mycode_url">https://www.sonatype.com/blog/a-protecte...remediated</a><br />
</li>
<li><a href="https://www.sonatype.com/blog/emudhra-ca-incident-sonatypes-assessment-and-guidance" target="_blank" rel="noopener" class="mycode_url">https://www.sonatype.com/blog/emudhra-ca...d-guidance</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=407" target="_blank" title="">15-b05-emudhra-trust-store.png</a> (Dosya Boyutu: 112.25 KB / İndirme Sayısı: 2)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=407" loading="lazy"  alt="[Resim: attachment.php?aid=407]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
eMudhra ara CA özel anahtarlarının zayıf olduğu skandalında tarayıcılar hızla tepki verdi. Sonatype'ın 23 Ekim 2026 yazısı ise asıl soruyu soruyor: <span style="font-weight: bold;" class="mycode_b">kurumunuzdaki diğer araçlar hâlâ etkilenen zincirlere güveniyor mu?</span> Java cacerts, Node, Python, Go, Git ve sistem demetleri ayrı ayrı güncellenmeden "tarayıcı düzeldi" demek yetmez.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Neden tek trust store yetmiyor?<br />
</li>
<li>Sonatype Audit and Fix betiği<br />
</li>
<li>Betiğin görmedikleri<br />
</li>
<li>Pratik yol haritası<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Neden tek trust store yetmiyor?</span></span><br />
Bir makinede tarayıcı işletim sistemi deposunu kullanırken JDK kendi cacerts dosyasını, bazı CLI araçları gömülü kökleri kullanır. Birini güncellemek diğerlerini güncellemez. Filippo Valsorda'nın deyişiyle bu, Heartbleed'den büyük bir temizlik işi; IoT, Docker ve unutulmuş Linux kutuları uzun kuyruk oluşturur.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Sonatype betiği</span></span><br />
Paul Horton'un açık kaynak <span style="font-weight: bold;" class="mycode_b">eMudhra Audit and Fix</span> betiği Unix benzeri makinelerde Java, Node.js, Python, Go, Git ve sistem demetlerini tarar. Desteklenen yerlerde etkilenen ara CA'lara zincirlenen test sunucularına HTTPS isteği atar; kontrol için GitHub'a da bakar. Varsayılan olarak <span style="font-weight: bold;" class="mycode_b">hiçbir şeyi değiştirmez</span>. --no-network yalnızca sürüm kontrolü yapar; --dry-run / --fix isteğe bağlıdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Betiğin görmedikleri</span></span><br />
Uzak sunucular, konteyner imajları, CI ajanları, üretim hostları ve proje bağımlılıkları taranmaz. Geliştirici dizüstü bilgisayar sonucu kurumsal durum demek değildir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Pratik yol haritası</span></span><br />
<ol type="1" class="mycode_list"><li>Önce OS ve tarayıcı güncellemelerini tamamlayın.<br />
</li>
<li>Geliştirici iş istasyonlarında betiği çalıştırıp çıktıyı envantere işleyin.<br />
</li>
<li>CI runner ve temel konteyner imajlarını ayrı süreçle yenileyin.<br />
</li>
<li>Java uygulamalarında cacerts / özel trust store yollarını bulun.<br />
</li>
<li>Tedarikçi yamasını tercihen kullanın; elle sertifika silmeyi test edin.<br />
</li>
</ol>
<br />
CI ajanlarınızın trust store durumunu kim izliyor?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://www.sonatype.com/blog/a-protected-browser-doesnt-mean-your-enterprise-is-remediated" target="_blank" rel="noopener" class="mycode_url">https://www.sonatype.com/blog/a-protecte...remediated</a><br />
</li>
<li><a href="https://www.sonatype.com/blog/emudhra-ca-incident-sonatypes-assessment-and-guidance" target="_blank" rel="noopener" class="mycode_url">https://www.sonatype.com/blog/emudhra-ca...d-guidance</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=407" target="_blank" title="">15-b05-emudhra-trust-store.png</a> (Dosya Boyutu: 112.25 KB / İndirme Sayısı: 2)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[eMudhra Skandalı: P-384 Özel Anahtarı 4 Çıktı, Sekiz Ara CA Sertifikası İptal Edildi]]></title>
			<link>https://www.turkteam.org/konu-emudhra-skandali-p-384-ozel-anahtari-4-cikti-sekiz-ara-ca-sertifikasi-iptal-edildi.html</link>
			<pubDate>Thu, 22 Oct 2026 11:19:01 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=2">Tonyukuk</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-emudhra-skandali-p-384-ozel-anahtari-4-cikti-sekiz-ara-ca-sertifikasi-iptal-edildi.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=342" loading="lazy"  alt="[Resim: attachment.php?aid=342]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Kriptografide "algoritma güçlü ama anahtar zayıf" senaryosunun bundan daha net bir örneğini görmek zor. Sertifika otoritesi eMudhra, sekiz ara (intermediate) sertifikasını iptal etti; çünkü bu sertifikaların özel anahtarları o kadar küçüktü ki herkes neredeyse anında kurtarabiliyordu. Bu anahtarlarla büyük tarayıcıların ve işletim sistemlerinin güvendiği, meşru siteler adına sahte sertifikalar üretmek mümkündü.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Ne bulundu, nasıl bulundu?<br />
</li>
<li>"Değeri 256'dan küçük P-384 anahtarı" ne demek?<br />
</li>
<li>Tarayıcılar ve yazılım ekosistemi nasıl tepki verdi?<br />
</li>
<li>Kendi sistemlerinizde kontrol listesi<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne bulundu?</span></span><br />
BleepingComputer'ın aktardığına göre Wayne takma adlı bir araştırmacı 17 Ekim'de kamuya açık sertifika verilerini tararken zayıflığı fark etti. Mozilla'nın olay raporuna göre sekiz sertifikanın tamamı Nisan 2025'te üretilmiş P-384 özel anahtarları kullanıyordu ve bu anahtarların değerleri 256'dan küçüktü. Yani anahtarı bulmak için yalnızca 256 olasılığı denemek yeterliydi.<br />
<br />
Araştırmacı Flüpke zayıflığı göstermek için ele geçen anahtarlardan birini GitHub'da yayınladı: eMudhra'nın "EM OV TLS CA - G3C" sertifikasının özel anahtar değeri sadece <span style="font-weight: bold;" class="mycode_b">4</span> idi. BleepingComputer yayınlanan anahtarın iptal edilen sertifikalardan biriyle eşleştiğini bağımsız olarak doğruladı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Teknik açıdan: neden felaket?</span></span><br />
Eliptik eğri kriptografisinde (ECDSA) özel anahtar, eğrinin mertebesinden küçük rastgele bir tam sayıdır; açık anahtar ise bu sayının eğri üzerindeki üreteç noktasıyla çarpımıdır. P-384 eğrisinde güvenlik, özel anahtarın yaklaşık 384 bitlik uzaydan <span style="font-weight: bold;" class="mycode_b">rastgele</span> seçilmesine dayanır. Anahtar 1 ile 255 arasında bir değerse, saldırganın yapması gereken tek şey bu değerleri sırayla deneyip açık anahtarla karşılaştırmaktır; bu, sıradan bir bilgisayarda anlık bir iştir.<br />
<br />
Burada algoritma kırılmadı; anahtar üretim süreci bozuldu. eMudhra'nın Mozilla'ya açıklamasına göre Nisan 2025'te sertifikaları üreten bir betikteki hata ikinci bir zayıf anahtar seti üretti ve bu anahtarlar, düzgün üretilmiş anahtarlara benzer etiketler taşıdığı için yanlışlıkla imzalama için seçildi. Bazı sertifikalar Sectigo'ya çapraz imza için de gönderilmişti.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Mantığı anlamak için kavramsal örnek (lab, Python + cryptography)
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
hedef = ec.derive_private_key(4, ec.SECP384R1()).public_key()   # "zayıf" anahtar
hp = hedef.public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint)
for d in range(1, 256):
    k = ec.derive_private_key(d, ec.SECP384R1()).public_key()
    if k.public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint) == hp:
        print("ozel anahtar bulundu:", d); break</code></div></div>Bu örnek yalnızca kavramı gösterir: rastgelelik yoksa, en güçlü eğri bile hiçbir şey ifade etmez.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ekosistem nasıl tepki verdi?</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">eMudhra:</span> Sekiz sertifikayı iptal etti ve G3 kökü altında yeni sertifika vermeyi durdurdu. Şirket, etkilenen ara sertifikaların çoğunun üretimde kullanılmadığını ve son kullanıcılara sertifika verildiğine dair kanıt bulmadığını söylüyor. Ancak anahtarlar Nisan 2025'ten beri kurtarılabilir durumdaydı.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mozilla:</span> 17 Ekim'de OneCRL ile sertifikaları engelledi (güncelleme veya yeniden başlatma gerekmeden). 20 Ekim'de Firefox 158.0.1 ve ESR güncellemeleri yayınlandı.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Google Chrome:</span> TLS sertifikası verme yetkisi olan altı ara sertifikayı aynı gün engelledi.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Apple:</span> 19 Ekim'de koruma ekledi.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Go:</span> 1.27.3 ve 1.26.10 sürümleri sorunu CVE-2026-111943 olarak ele alıyor.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kendi sistemlerinizde kontrol listesi</span></span><br />
Kendi sertifika deposunu kullanan veya iptal kontrolü yapmayan yazılımlar, güncellenene kadar bu ara sertifikalara güvenmeye devam edebilir. BleepingComputer'ın tablosundaki bazı yamalı sürümler:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>NSS                  3.131.1
Python certifi       2026.10.19
pip                  26.2.2
uv                   0.13.4
Go                   1.27.3 / 1.26.10
rustls-webpki        0.103.16
webpki-roots         1.0.10
Electron             44.9.1 / 43.8.1 / 42.11.16
Composer ca-bundle   1.4.16 / 1.6.0
Alpine ca-certificates 20261020-r0
curl CA bundle       2026-10-20
Debian, FreeBSD, Node.js, Bun: haber tarihinde "bekliyor"</code></div></div>Mozilla kriptografi mühendisi Dennis Jackson ayrıca macOS'teki yerleşik /usr/bin/curl aracının, sertifika paketinin iptal bilgisini kontrol etmemesi nedeniyle bu sertifikalara güvenmeye devam edebileceği uyarısında bulundu.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Linux/Python ortamında hızlı sürüm kontrolü
python3 -c "import certifi; print(certifi.__version__)"
pip --version
go version 2&gt;/dev/null
dpkg -l ca-certificates 2&gt;/dev/null | tail -1</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ders</span></span><br />
Kriptografide en zayıf halka çoğu zaman matematik değil, operasyondur: anahtar üretimi, etiketleme, betik hataları ve denetim. HSM içinde üretilen, üretim sonrası istatistiksel kontrolden geçirilen ve sertifika şeffaflığı (CT) loglarıyla izlenen anahtarlar bu tür hataları erken yakalamanın yoludur.<br />
<br />
Sizin kurumda sertifika deposu güncellemeleri nasıl yönetiliyor? Konteyner imajlarında ca-certificates paketini ne sıklıkla yeniliyorsunuz?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://www.bleepingcomputer.com/news/security/mozilla-google-apple-block-compromised-emudhra-ca-certificates/" target="_blank" rel="noopener" class="mycode_url">https://www.bleepingcomputer.com/news/se...tificates/</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=342" target="_blank" title="">05-t05-emudhra-zayif-anahtar.png</a> (Dosya Boyutu: 121.69 KB / İndirme Sayısı: 4)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=342" loading="lazy"  alt="[Resim: attachment.php?aid=342]" class="mycode_img" /></div>
<br />
Selamlar,<br />
<br />
Kriptografide "algoritma güçlü ama anahtar zayıf" senaryosunun bundan daha net bir örneğini görmek zor. Sertifika otoritesi eMudhra, sekiz ara (intermediate) sertifikasını iptal etti; çünkü bu sertifikaların özel anahtarları o kadar küçüktü ki herkes neredeyse anında kurtarabiliyordu. Bu anahtarlarla büyük tarayıcıların ve işletim sistemlerinin güvendiği, meşru siteler adına sahte sertifikalar üretmek mümkündü.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Ne bulundu, nasıl bulundu?<br />
</li>
<li>"Değeri 256'dan küçük P-384 anahtarı" ne demek?<br />
</li>
<li>Tarayıcılar ve yazılım ekosistemi nasıl tepki verdi?<br />
</li>
<li>Kendi sistemlerinizde kontrol listesi<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne bulundu?</span></span><br />
BleepingComputer'ın aktardığına göre Wayne takma adlı bir araştırmacı 17 Ekim'de kamuya açık sertifika verilerini tararken zayıflığı fark etti. Mozilla'nın olay raporuna göre sekiz sertifikanın tamamı Nisan 2025'te üretilmiş P-384 özel anahtarları kullanıyordu ve bu anahtarların değerleri 256'dan küçüktü. Yani anahtarı bulmak için yalnızca 256 olasılığı denemek yeterliydi.<br />
<br />
Araştırmacı Flüpke zayıflığı göstermek için ele geçen anahtarlardan birini GitHub'da yayınladı: eMudhra'nın "EM OV TLS CA - G3C" sertifikasının özel anahtar değeri sadece <span style="font-weight: bold;" class="mycode_b">4</span> idi. BleepingComputer yayınlanan anahtarın iptal edilen sertifikalardan biriyle eşleştiğini bağımsız olarak doğruladı.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Teknik açıdan: neden felaket?</span></span><br />
Eliptik eğri kriptografisinde (ECDSA) özel anahtar, eğrinin mertebesinden küçük rastgele bir tam sayıdır; açık anahtar ise bu sayının eğri üzerindeki üreteç noktasıyla çarpımıdır. P-384 eğrisinde güvenlik, özel anahtarın yaklaşık 384 bitlik uzaydan <span style="font-weight: bold;" class="mycode_b">rastgele</span> seçilmesine dayanır. Anahtar 1 ile 255 arasında bir değerse, saldırganın yapması gereken tek şey bu değerleri sırayla deneyip açık anahtarla karşılaştırmaktır; bu, sıradan bir bilgisayarda anlık bir iştir.<br />
<br />
Burada algoritma kırılmadı; anahtar üretim süreci bozuldu. eMudhra'nın Mozilla'ya açıklamasına göre Nisan 2025'te sertifikaları üreten bir betikteki hata ikinci bir zayıf anahtar seti üretti ve bu anahtarlar, düzgün üretilmiş anahtarlara benzer etiketler taşıdığı için yanlışlıkla imzalama için seçildi. Bazı sertifikalar Sectigo'ya çapraz imza için de gönderilmişti.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Mantığı anlamak için kavramsal örnek (lab, Python + cryptography)
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
hedef = ec.derive_private_key(4, ec.SECP384R1()).public_key()   # "zayıf" anahtar
hp = hedef.public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint)
for d in range(1, 256):
    k = ec.derive_private_key(d, ec.SECP384R1()).public_key()
    if k.public_bytes(serialization.Encoding.X962, serialization.PublicFormat.UncompressedPoint) == hp:
        print("ozel anahtar bulundu:", d); break</code></div></div>Bu örnek yalnızca kavramı gösterir: rastgelelik yoksa, en güçlü eğri bile hiçbir şey ifade etmez.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ekosistem nasıl tepki verdi?</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">eMudhra:</span> Sekiz sertifikayı iptal etti ve G3 kökü altında yeni sertifika vermeyi durdurdu. Şirket, etkilenen ara sertifikaların çoğunun üretimde kullanılmadığını ve son kullanıcılara sertifika verildiğine dair kanıt bulmadığını söylüyor. Ancak anahtarlar Nisan 2025'ten beri kurtarılabilir durumdaydı.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mozilla:</span> 17 Ekim'de OneCRL ile sertifikaları engelledi (güncelleme veya yeniden başlatma gerekmeden). 20 Ekim'de Firefox 158.0.1 ve ESR güncellemeleri yayınlandı.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Google Chrome:</span> TLS sertifikası verme yetkisi olan altı ara sertifikayı aynı gün engelledi.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Apple:</span> 19 Ekim'de koruma ekledi.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Go:</span> 1.27.3 ve 1.26.10 sürümleri sorunu CVE-2026-111943 olarak ele alıyor.<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kendi sistemlerinizde kontrol listesi</span></span><br />
Kendi sertifika deposunu kullanan veya iptal kontrolü yapmayan yazılımlar, güncellenene kadar bu ara sertifikalara güvenmeye devam edebilir. BleepingComputer'ın tablosundaki bazı yamalı sürümler:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>NSS                  3.131.1
Python certifi       2026.10.19
pip                  26.2.2
uv                   0.13.4
Go                   1.27.3 / 1.26.10
rustls-webpki        0.103.16
webpki-roots         1.0.10
Electron             44.9.1 / 43.8.1 / 42.11.16
Composer ca-bundle   1.4.16 / 1.6.0
Alpine ca-certificates 20261020-r0
curl CA bundle       2026-10-20
Debian, FreeBSD, Node.js, Bun: haber tarihinde "bekliyor"</code></div></div>Mozilla kriptografi mühendisi Dennis Jackson ayrıca macOS'teki yerleşik /usr/bin/curl aracının, sertifika paketinin iptal bilgisini kontrol etmemesi nedeniyle bu sertifikalara güvenmeye devam edebileceği uyarısında bulundu.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Linux/Python ortamında hızlı sürüm kontrolü
python3 -c "import certifi; print(certifi.__version__)"
pip --version
go version 2&gt;/dev/null
dpkg -l ca-certificates 2&gt;/dev/null | tail -1</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ders</span></span><br />
Kriptografide en zayıf halka çoğu zaman matematik değil, operasyondur: anahtar üretimi, etiketleme, betik hataları ve denetim. HSM içinde üretilen, üretim sonrası istatistiksel kontrolden geçirilen ve sertifika şeffaflığı (CT) loglarıyla izlenen anahtarlar bu tür hataları erken yakalamanın yoludur.<br />
<br />
Sizin kurumda sertifika deposu güncellemeleri nasıl yönetiliyor? Konteyner imajlarında ca-certificates paketini ne sıklıkla yeniliyorsunuz?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yasal uyarı</span></span><br />
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li><a href="https://www.bleepingcomputer.com/news/security/mozilla-google-apple-block-compromised-emudhra-ca-certificates/" target="_blank" rel="noopener" class="mycode_url">https://www.bleepingcomputer.com/news/se...tificates/</a><br />
</li>
</ul>
<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=342" target="_blank" title="">05-t05-emudhra-zayif-anahtar.png</a> (Dosya Boyutu: 121.69 KB / İndirme Sayısı: 4)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Sertifika Pinning Ne Zaman Mantıklı? Mobil ve API İçin Değerlendirme]]></title>
			<link>https://www.turkteam.org/konu-sertifika-pinning-ne-zaman-mantikli-mobil-ve-api-icin-degerlendirme.html</link>
			<pubDate>Mon, 19 Oct 2026 02:21:08 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=2">Tonyukuk</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-sertifika-pinning-ne-zaman-mantikli-mobil-ve-api-icin-degerlendirme.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=293" loading="lazy"  alt="[Resim: attachment.php?aid=293]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Sertifika pinning (certificate pinning) mobil uygulamada veya kalın istemcide "yalnızca şu genel anahtar / sertifika zincirine güven" demektir. MITM'i zorlaştırır ama operasyonel maliyeti vardır. Bu yazıda ne zaman mantıklı olduğunu ve alternatifleri konuşuyorum.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne işe yarar?</span></span><br />
Kullanıcı cihazında özel CA ile traffic interception (kurumsal proxy, saldırgan proxy) yapıldığında uygulama bağlantıyı reddedebilir. Bankacılık / yüksek riskli uygulamalarda hâlâ tercih edilen bir kontroldür.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne zaman mantıklı?</span></span><ul class="mycode_list"><li>Yüksek değerli oturum (finans, sağlık)<br />
</li>
<li>Kendi backend sertifika yaşam döngünüzü kontrol edebiliyorsanız<br />
</li>
<li>Pin'i güncelleyecek uygulama güncelleme kanalınız güvenilir ve hızlıysa<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">Ne zaman zararlı / gereksiz?</span><ul class="mycode_list"><li>Sık değişen CDN sertifikaları + sabit pin = üretim kesintisi<br />
</li>
<li>Küçük ekip, pin rotasyon prosedürü yok<br />
</li>
<li>Yalnızca "güvenlik tiyatrosu" için; telemetri ve auth zayıfsa pin yetmez<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=294" loading="lazy"  alt="[Resim: attachment.php?aid=294]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">HPKP notu</span></span><br />
HTTP Public Key Pinning (HPKP) tarayıcılarda deprecated / kaldırıldı. Web için modern yol: doğru sertifika yönetimi, CAA, CT izleme, HSTS. Pinning konuşurken HPKP'yi "yapın" diye önermeyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mobilde pratik</span></span><br />
Android Network Security Config ile domain'e pin eklenebilir; iOS'ta URLSession / TrustKit benzeri yaklaşımlar. Pin'i leaf yerine intermediate / SPKI pinlemek rotasyonu kolaylaştırabilir. Yedek pin (backup pin) şart.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Operasyon kontrol listesi</span></span><br />
<ol type="1" class="mycode_list"><li>Sertifika yenileme takvimi + pin güncelleme PR'ı<br />
</li>
<li>Acil "pin kill switch" (uzak config) — dikkatli tasarlanmalı<br />
</li>
<li>Break-glass: pin başarısızlığında telemetri<br />
</li>
<li>Pentest: pinning varken güvenlik testi için debug build süreci<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Alternatif / tamamlayıcı</span></span><ul class="mycode_list"><li>Certificate Transparency monitoring<br />
</li>
<li>Short-lived certificates<br />
</li>
<li>mTLS (istemci sertifikası) — farklı tehdit modeli<br />
</li>
<li>App Attest / Play Integrity (cihaz bütünlüğü; pinning yerine geçmez)<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li>OWASP MASVS / MASTG - network security<br />
</li>
<li>Android Network Security Config docs<br />
</li>
<li>Mozilla / Chromium HPKP deprecation notları<br />
</li>
</ul>
<br />
Siz production'da SPKI pin mi, yoksa CA pin mi kullanıyorsunuz? Rotasyon kazası yaşayan var mı?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Debug ve pentest build</span></span><br />
Pinning açıkken güvenlik testi için ayrı debug build (pin kapalı veya user CA'ya izin) şart. Production APK'da pin kapatma backdoor'u bırakmayın. Remote config ile pin kapatmak mümkünse o kanalın bütünlüğünü (imza) sağlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">API istemcileri</span></span><br />
Mobil dışı kalın istemcilerde (masaüstü agent) pinning benzeri certificate binding kullanılabilir. Rotasyon runbook'u olmadan production'a pin eklemek, kendi kendine DoS'tur.<br />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Değişiklik yönetimi ile ilişki</span></span><br />
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Eğitim tatbikatı</span></span><br />
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uygulama notu</span></span><br />
Bu rehberdeki komutları olduğu gibi kopyalamadan önce yolları, arayüz adlarını ve IP adreslerini kendi ortamınıza göre değiştirin. Dağıtım farkları (Debian/Ubuntu/RHEL/Windows sunucu) çıktı biçimini değiştirebilir; man sayfası ve resmi dokümantasyon birincil kaynaktır. Bir adım beklediğiniz sonucu vermezse önce yetki (sudo/Administrator), sonra sürüm, en son da yapılandırma dosyası sırasıyla bakın. Değişiklikleri geri almak için snapshot veya yapılandırma yönetimi (Ansible/Git) kullanın; 'elle bir dokundum' geçmişi denetimde kaybolur. Alarm ve log örneklerini ekip kanalında paylaşırken kişisel veri ve iç IP şemasını maskeleyin.<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Anlatılanları yalnızca kendi sistemlerinizde veya yazılı izin aldığınız sistemlerde uygulayın. Yetkisiz erişim ve sistemlere müdahale 5237 sayılı TCK'nın 243, 244 ve 245. maddeleri kapsamında suçtur.</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=293" target="_blank" title="">100-n22-2bb0fb.png</a> (Dosya Boyutu: 61.85 KB / İndirme Sayısı: 13)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=294" target="_blank" title="">n22-inner.png</a> (Dosya Boyutu: 17.45 KB / İndirme Sayısı: 14)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=293" loading="lazy"  alt="[Resim: attachment.php?aid=293]" class="mycode_img" /></div>
<br />
Merhaba,<br />
<br />
Sertifika pinning (certificate pinning) mobil uygulamada veya kalın istemcide "yalnızca şu genel anahtar / sertifika zincirine güven" demektir. MITM'i zorlaştırır ama operasyonel maliyeti vardır. Bu yazıda ne zaman mantıklı olduğunu ve alternatifleri konuşuyorum.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne işe yarar?</span></span><br />
Kullanıcı cihazında özel CA ile traffic interception (kurumsal proxy, saldırgan proxy) yapıldığında uygulama bağlantıyı reddedebilir. Bankacılık / yüksek riskli uygulamalarda hâlâ tercih edilen bir kontroldür.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ne zaman mantıklı?</span></span><ul class="mycode_list"><li>Yüksek değerli oturum (finans, sağlık)<br />
</li>
<li>Kendi backend sertifika yaşam döngünüzü kontrol edebiliyorsanız<br />
</li>
<li>Pin'i güncelleyecek uygulama güncelleme kanalınız güvenilir ve hızlıysa<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">Ne zaman zararlı / gereksiz?</span><ul class="mycode_list"><li>Sık değişen CDN sertifikaları + sabit pin = üretim kesintisi<br />
</li>
<li>Küçük ekip, pin rotasyon prosedürü yok<br />
</li>
<li>Yalnızca "güvenlik tiyatrosu" için; telemetri ve auth zayıfsa pin yetmez<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=294" loading="lazy"  alt="[Resim: attachment.php?aid=294]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">HPKP notu</span></span><br />
HTTP Public Key Pinning (HPKP) tarayıcılarda deprecated / kaldırıldı. Web için modern yol: doğru sertifika yönetimi, CAA, CT izleme, HSTS. Pinning konuşurken HPKP'yi "yapın" diye önermeyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mobilde pratik</span></span><br />
Android Network Security Config ile domain'e pin eklenebilir; iOS'ta URLSession / TrustKit benzeri yaklaşımlar. Pin'i leaf yerine intermediate / SPKI pinlemek rotasyonu kolaylaştırabilir. Yedek pin (backup pin) şart.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Operasyon kontrol listesi</span></span><br />
<ol type="1" class="mycode_list"><li>Sertifika yenileme takvimi + pin güncelleme PR'ı<br />
</li>
<li>Acil "pin kill switch" (uzak config) — dikkatli tasarlanmalı<br />
</li>
<li>Break-glass: pin başarısızlığında telemetri<br />
</li>
<li>Pentest: pinning varken güvenlik testi için debug build süreci<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Alternatif / tamamlayıcı</span></span><ul class="mycode_list"><li>Certificate Transparency monitoring<br />
</li>
<li>Short-lived certificates<br />
</li>
<li>mTLS (istemci sertifikası) — farklı tehdit modeli<br />
</li>
<li>App Attest / Play Integrity (cihaz bütünlüğü; pinning yerine geçmez)<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynaklar</span></span><ul class="mycode_list"><li>OWASP MASVS / MASTG - network security<br />
</li>
<li>Android Network Security Config docs<br />
</li>
<li>Mozilla / Chromium HPKP deprecation notları<br />
</li>
</ul>
<br />
Siz production'da SPKI pin mi, yoksa CA pin mi kullanıyorsunuz? Rotasyon kazası yaşayan var mı?<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Debug ve pentest build</span></span><br />
Pinning açıkken güvenlik testi için ayrı debug build (pin kapalı veya user CA'ya izin) şart. Production APK'da pin kapatma backdoor'u bırakmayın. Remote config ile pin kapatmak mümkünse o kanalın bütünlüğünü (imza) sağlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">API istemcileri</span></span><br />
Mobil dışı kalın istemcilerde (masaüstü agent) pinning benzeri certificate binding kullanılabilir. Rotasyon runbook'u olmadan production'a pin eklemek, kendi kendine DoS'tur.<br />
<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Değişiklik yönetimi ile ilişki</span></span><br />
Sürüüm yükseltmelerinden sonra regresyon testi yapın. 'Aynı config' yeni sürümde farklı varsayılanlara bağlanmış olabilir. Release note'daki breaking change bölümünü okuyun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Eğitim tatbikatı</span></span><br />
Dış bağımlılık (feed, imza seti, konteyner imajı) için bütünlük doğrulaması yapın. İmzasız feed ile gelen kural seti tedarik zinciri riskidir.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Doğrulama senaryosu</span></span><br />
Bu konuyla ilgili ek bir kontrol: değişikliği yaptıktan sonra en az bir negatif test ve bir pozitif test tanımlayın. Negatif test 'alarm boşyere düşmemeli', pozitif test 'bilinen kötü örneği yakalamalı' der. İkisini de kaydedin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lab disiplini</span></span><br />
Ortamlar arasında (lab, staging, production) aynı yapılandırmayı kör kopyalamayın. Adresler, sertifikalar ve kimlikler farklıdır. Şablon kullanın, değerleri envanterden doldurun.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Runbook'a taşımak</span></span><br />
İlgili log ve kanıtları olaydan sonra en az kurum politikasının öngördüğü süre kadar saklayın. Disk dolunca en eski güvenlik logunu silmek klasik hatadır; ayrı retention politikası tanımlayın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ölçüm ve alarm sağlığı</span></span><br />
Yanlış pozitifleri susturmak ile körleşmek arasındaki çizgi incedir. Suppress kuralına gerekçe ve gözden geçirme tarihi yazın. Süresi dolunca yeniden değerlendirin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kapsam ve izin hatırlatması</span></span><br />
Bu adımları change ticket olmadan production'da uygulamayın. Küçük görünen bir audit ayarı bile uygulama uyumluluğunu bozabilir. Önce staging, sonra kontrollü yayılım.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yedekleme ve geri dönüş</span></span><br />
Yılda en az iki kez masabaşı tatbikatı yapın: 'bu kontrol kırılırsa kim fark eder?' sorusunu sorunsuz cevaplayabilmelisiniz. Tatbikat notlarını wiki'ye ekleyin.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Log saklama süresi</span></span><br />
Araç çıktısını ekran görüntüsü olarak bırakmak yerine makinece okunur formatta (JSON/CSV) arşivleyin. İki yıl sonraki denetimde arama kolaylaşır.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Yanlış pozitif yönetimi</span></span><br />
Yetki ayrımı: bu kontrolü yapılandıran kişi ile alarmı triaj eden kişi mümkünse farklı olsun. Küçük ekiplerde olmasa bile en azından farklı hesap kullanın.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Uygulama notu</span></span><br />
Bu rehberdeki komutları olduğu gibi kopyalamadan önce yolları, arayüz adlarını ve IP adreslerini kendi ortamınıza göre değiştirin. Dağıtım farkları (Debian/Ubuntu/RHEL/Windows sunucu) çıktı biçimini değiştirebilir; man sayfası ve resmi dokümantasyon birincil kaynaktır. Bir adım beklediğiniz sonucu vermezse önce yetki (sudo/Administrator), sonra sürüm, en son da yapılandırma dosyası sırasıyla bakın. Değişiklikleri geri almak için snapshot veya yapılandırma yönetimi (Ansible/Git) kullanın; 'elle bir dokundum' geçmişi denetimde kaybolur. Alarm ve log örneklerini ekip kanalında paylaşırken kişisel veri ve iç IP şemasını maskeleyin.<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Anlatılanları yalnızca kendi sistemlerinizde veya yazılı izin aldığınız sistemlerde uygulayın. Yetkisiz erişim ve sistemlere müdahale 5237 sayılı TCK'nın 243, 244 ve 245. maddeleri kapsamında suçtur.</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=293" target="_blank" title="">100-n22-2bb0fb.png</a> (Dosya Boyutu: 61.85 KB / İndirme Sayısı: 13)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=294" target="_blank" title="">n22-inner.png</a> (Dosya Boyutu: 17.45 KB / İndirme Sayısı: 14)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Parolaları Güvenli Saklama: Salt, bcrypt ve Argon2 Rehberi]]></title>
			<link>https://www.turkteam.org/konu-parolalari-guvenli-saklama-salt-bcrypt-ve-argon2-rehberi.html</link>
			<pubDate>Sun, 18 Oct 2026 21:04:51 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-parolalari-guvenli-saklama-salt-bcrypt-ve-argon2-rehberi.html</guid>
			<description><![CDATA[[center]<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=241" loading="lazy"  alt="[Resim: attachment.php?aid=241]" class="mycode_img" /></div>[/center]<br />
<br />
Selam millet, BlueTornado yazıyor.<br />
<br />
Veri sızıntılarında en acı senaryolardan biri, kullanıcı parolalarının düz metin veya hızlı hash ile saklanmış olmasıdır. Bu rehberde salt'ın rolünü, neden düz SHA-256 yetmediğini, bcrypt ve Argon2id kullanımını ve OWASP önerilerini lab örnekleriyle anlatıyoruz. Hashcat konusu ayrıca işlendiği için burada <span style="font-weight: bold;" class="mycode_b">kırma değil, doğru saklama</span> odaklıyız.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Parola saklama tehdit modeli<br />
</li>
<li>Salt, pepper, yavaşlık (key stretching)<br />
</li>
<li>bcrypt kullanımı<br />
</li>
<li>Argon2id (tercih edilen modern seçim)<br />
</li>
<li>Migrasyon ve doğrulama akışı<br />
</li>
<li>İleri seviye: parametre seçimi, MFA, passkey<br />
</li>
<li>Kaynakça ve yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">1) Tehdit Modeli</span></span><br />
Saldırgan veritabanı yedeğinizi ele geçirdiğinde ne olur?<ul class="mycode_list"><li>Düz metin: tüm hesaplar anında açılır; parola reuse ile başka siteler risk altında<br />
</li>
<li>Hızlı hash (MD5/SHA-1/SHA-256, tuzsuz): GPU ile toplu kırma pratik<br />
</li>
<li>Yavaş KDF + unique salt: her parola için maliyetli deneme; iyi parolalar korunur<br />
</li>
</ul>
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite>Hash'lemek "şifrelemek" değildir. Parolayı geri çözmeniz gerekmez; her girişte aynı KDF ile doğrularsınız.</blockquote>
<br />
OWASP Password Storage Cheat Sheet, modern uygulamalar için <span style="font-weight: bold;" class="mycode_b">Argon2id</span>'yi tercih edilen seçenek olarak listeler; bcrypt kabul edilebilir bir alternatiftir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">2) Salt ve Pepper</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Salt:</span> Her kullanıcı/parola için benzersiz rastgele değer. Aynı parola farklı hash üretir; rainbow table etkisizleşir. Salt gizlidir sanılmamalı; hash ile birlikte DB'de tutulur.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Pepper:</span> Uygulama/sunucu tarafında tutulan ek gizli değer (KMS veya config). DB sızsa bile pepper olmadan doğrulama zorlaşır. Pepper'ı git'e yazmayın.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kavramsal
stored = argon2id(password, salt, params, pepper?)
# Doğrulama: aynı params ile verify</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">3) bcrypt Lab</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>pip install bcrypt
python3 - &lt;&lt;'PY'
import bcrypt
password = b"LabParola!2026"
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
print(hashed)
print(bcrypt.checkpw(password, hashed))
print(bcrypt.checkpw(b"yanlis", hashed))
PY</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Çıktı örneği (her seferinde farklı salt -&gt; farklı string)
# &#36;2b&#36;12&#36;...</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Dikkat:</span> bcrypt bazı uygulamalarda 72 byte sınırına sahiptir; çok uzun parolalarda önce SHA-256 sonra bcrypt gibi sarmalamalar tartışılır — kütüphane dokümantasyonunu okuyun. Mümkünse Argon2id tercih edin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">4) Argon2id Lab</span></span><br />
Argon2, Password Hashing Competition kazananıdır. Argon2id, side-channel ve GPU saldırılarına karşı dengeli bir varyanttır.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>pip install argon2-cffi
python3 - &lt;&lt;'PY'
from argon2 import PasswordHasher
from argon2.exceptions import VerifyMismatchError

ph = PasswordHasher(
    time_cost=3,
    memory_cost=65536,  # KiB cinsinden; donanımınıza göre ayarlayın
    parallelism=2,
)
h = ph.hash("LabParola!2026")
print(h)
print(ph.verify(h, "LabParola!2026"))
try:
    ph.verify(h, "yanlis")
except VerifyMismatchError:
    print("mismatch ok")
print("needs_rehash", ph.check_needs_rehash(h))
PY</code></div></div><br />
[center][/center]<br />
<br />
Parametreleri seçerken: giriş başına CPU/RAM maliyeti kabul edilebilir olmalı; brute-force ise pahalı olmalı. OWASP cheat sheet güncel parametre önerilerini kontrol edin (donanım yıllarına göre değişebilir).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">5) Uygulama Akışı</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kayıt
hash = ph.hash(password)
db.save(user, password_hash=hash)

# Giriş
if ph.verify(user.password_hash, password):
    if ph.check_needs_rehash(user.password_hash):
        user.password_hash = ph.hash(password)
        db.save(user)
    login_success()
else:
    login_fail()  # sabit zamanlı mesaj; kullanıcı var/yok sızdırmayın</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># YANLIŞ
hashlib.sha256(password.encode()).hexdigest()
# YANLIŞ
base64.b64encode(password.encode())
# YANLIŞ
AES_encrypt(password, server_key)  # parola saklama için KDF tercih edilir</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Migrasyon:</span> Eski SHA-256 kullanıcıları giriş yaptığında yeni Argon2id'ye yükseltin (transparent rehash). Toplu "hepsini bir gecede dönüştür" için eski hash'leri bilemiyorsanız kullanıcı parola sıfırlama gerekebilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">6) Ek Kontroller</span></span><ul class="mycode_list"><li>Kayıt/şifre değişiminde uzunluk ve breached password kontrolü (Have I Been Pwned Pwned Passwords API, k-anonymity)<br />
</li>
<li>Rate limit + MFA<br />
</li>
<li>Password reset token'ları tek kullanımlık ve kısa ömürlü<br />
</li>
<li>Loglarda parola ve hash yazmayın<br />
</li>
<li>Yedekleri şifreleyin; DB erişimini least privilege yapın<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Pwned Passwords k-anonymity fikri (kavramsal)
# SHA-1(parola)'nın ilk 5 karakterini API'ye gönder, sonek listesinde ara
# Parolanın tamamını göndermeyin</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">7) İleri Seviye</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Passkey / WebAuthn:</span> Parola yerine phishing-resistant kimlik doğrulama. Parola yükünü azaltır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Composition policy:</span> NIST SP 800-63B, karmaşık zorunlu karakter setlerinden ziyade uzunluk + blacklist (yaygın/parola sızıntısı) vurgular. Kurum politikanızı güncel rehberlerle hizalayın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">HSM / KMS pepper:</span> Pepper'ı uygulama belleğinden ayrı tutmak ihlal etkisini azaltır.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Rapor / mimari not dili
Parola saklama: Argon2id (argon2-cffi), time_cost=3, memory_cost=65536, parallelism=2
Salt: kütüphane tarafından unique
Pepper: yok/var (KMS)
Migrasyon: SHA-256 -&gt; Argon2id on-login</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">8) Sonuç</span></span><br />
Parolaları Base64 veya düz SHA ile saklamayın. Unique salt + Argon2id (veya bcrypt) + dengeli parametreler + MFA temel pakettir. Sızıntı olsa bile iyi parolaların toplu kırılmasını zorlaştırmak hedeflenir.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek: Operasyonel Senaryolar</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Sızıntı sonrası:</span> Tüm oturumları iptal edin, kullanıcıları bilgilendirin (KVKK süreçleri), zorla parola yenileme veya "girişte rehash + MFA zorunlu" uygulayın. Hash algoritmanız zayıfsa aciliyet artar.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Eski mobil uygulama:</span> Eski istemci hâlâ SHA-1 hash gönderiyorsa sunucu tarafında kabul etmeyin; protokolü yükseltin.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Doğrulama maliyeti ölçümü (lab)
python3 - &lt;&lt;'PY'
import time
from argon2 import PasswordHasher
ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=2)
t0=time.time(); ph.hash("x"*12); print("hash_s", round(time.time()-t0,3))
PY</code></div></div><br />
Hedef: meşru girişte yüzlerce ms kabul edilebilir; kitle brute-force'ta ise pahalı. Aşırı yüksek maliyet DoS'a dönüşebilir; login rate limit ile birlikte düşünün.<br />
<br />
[center][/center]<br />
<br />
Unutmayın: Teknik KDF doğru olsa bile kullanıcı "123456" seçerse risk devam eder; breached password engeli ve passkey geçişi tamamlayıcıdır.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek Lab Komutları</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># bcrypt maliyeti karşılaştırması
python3 - &lt;&lt;'PY'
import bcrypt, time
for r in (10, 12, 14):
    t=time.time(); bcrypt.hashpw(b"x", bcrypt.gensalt(r)); print(r, round(time.time()-t,3),"s")
PY</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Argon2 parametre dizesini okuma
python3 - &lt;&lt;'PY'
from argon2 import PasswordHasher
h=PasswordHasher().hash("demo")
print(h.split("&#36;")[:5])
PY</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Secrets ile salt üretimi (elle saklama senaryosu - genelde kütüphane yapar)
python3 -c "import secrets; print(secrets.token_bytes(16).hex())"</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP Password Storage Cheat Sheet</a><br />
</li>
<li><a href="https://github.com/P-H-C/phc-winner-argon2" target="_blank" rel="noopener" class="mycode_url">Argon2 resmi depo</a><br />
</li>
<li><a href="https://csrc.nist.gov/publications/detail/sp/800-63b/final" target="_blank" rel="noopener" class="mycode_url">NIST SP 800-63B</a><br />
</li>
<li><a href="https://haveibeenpwned.com/API/v3#PwnedPasswords" target="_blank" rel="noopener" class="mycode_url">Have I Been Pwned - Pwned Passwords API</a><br />
</li>
<li><a href="https://argon2-cffi.readthedocs.io/" target="_blank" rel="noopener" class="mycode_url">argon2-cffi dokümantasyonu</a><br />
</li>
<li><a href="https://owasp.org/Top10/A02_2021-Cryptographic_Failures/" target="_blank" rel="noopener" class="mycode_url">OWASP A02 Cryptographic Failures</a><br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Yasal Uyarı</span></span><br />
Bu içerik savunma ve güvenli yazılım geliştirme içindir. Başkalarına ait parola hash'lerini izinsiz kırmaya çalışmak veya sistemlere yetkisiz girmek TCK <span style="font-weight: bold;" class="mycode_b">243-245</span> kapsamında suç olabilir. Lab parolalarını üretimde kullanmayın; sorumluluk uygulayana aittir.<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=241" target="_blank" title="">000-team-new-b261c5.png</a> (Dosya Boyutu: 61.36 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[[center]<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=241" loading="lazy"  alt="[Resim: attachment.php?aid=241]" class="mycode_img" /></div>[/center]<br />
<br />
Selam millet, BlueTornado yazıyor.<br />
<br />
Veri sızıntılarında en acı senaryolardan biri, kullanıcı parolalarının düz metin veya hızlı hash ile saklanmış olmasıdır. Bu rehberde salt'ın rolünü, neden düz SHA-256 yetmediğini, bcrypt ve Argon2id kullanımını ve OWASP önerilerini lab örnekleriyle anlatıyoruz. Hashcat konusu ayrıca işlendiği için burada <span style="font-weight: bold;" class="mycode_b">kırma değil, doğru saklama</span> odaklıyız.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Parola saklama tehdit modeli<br />
</li>
<li>Salt, pepper, yavaşlık (key stretching)<br />
</li>
<li>bcrypt kullanımı<br />
</li>
<li>Argon2id (tercih edilen modern seçim)<br />
</li>
<li>Migrasyon ve doğrulama akışı<br />
</li>
<li>İleri seviye: parametre seçimi, MFA, passkey<br />
</li>
<li>Kaynakça ve yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">1) Tehdit Modeli</span></span><br />
Saldırgan veritabanı yedeğinizi ele geçirdiğinde ne olur?<ul class="mycode_list"><li>Düz metin: tüm hesaplar anında açılır; parola reuse ile başka siteler risk altında<br />
</li>
<li>Hızlı hash (MD5/SHA-1/SHA-256, tuzsuz): GPU ile toplu kırma pratik<br />
</li>
<li>Yavaş KDF + unique salt: her parola için maliyetli deneme; iyi parolalar korunur<br />
</li>
</ul>
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite>Hash'lemek "şifrelemek" değildir. Parolayı geri çözmeniz gerekmez; her girişte aynı KDF ile doğrularsınız.</blockquote>
<br />
OWASP Password Storage Cheat Sheet, modern uygulamalar için <span style="font-weight: bold;" class="mycode_b">Argon2id</span>'yi tercih edilen seçenek olarak listeler; bcrypt kabul edilebilir bir alternatiftir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">2) Salt ve Pepper</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Salt:</span> Her kullanıcı/parola için benzersiz rastgele değer. Aynı parola farklı hash üretir; rainbow table etkisizleşir. Salt gizlidir sanılmamalı; hash ile birlikte DB'de tutulur.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Pepper:</span> Uygulama/sunucu tarafında tutulan ek gizli değer (KMS veya config). DB sızsa bile pepper olmadan doğrulama zorlaşır. Pepper'ı git'e yazmayın.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kavramsal
stored = argon2id(password, salt, params, pepper?)
# Doğrulama: aynı params ile verify</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">3) bcrypt Lab</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>pip install bcrypt
python3 - &lt;&lt;'PY'
import bcrypt
password = b"LabParola!2026"
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
print(hashed)
print(bcrypt.checkpw(password, hashed))
print(bcrypt.checkpw(b"yanlis", hashed))
PY</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Çıktı örneği (her seferinde farklı salt -&gt; farklı string)
# &#36;2b&#36;12&#36;...</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Dikkat:</span> bcrypt bazı uygulamalarda 72 byte sınırına sahiptir; çok uzun parolalarda önce SHA-256 sonra bcrypt gibi sarmalamalar tartışılır — kütüphane dokümantasyonunu okuyun. Mümkünse Argon2id tercih edin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">4) Argon2id Lab</span></span><br />
Argon2, Password Hashing Competition kazananıdır. Argon2id, side-channel ve GPU saldırılarına karşı dengeli bir varyanttır.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>pip install argon2-cffi
python3 - &lt;&lt;'PY'
from argon2 import PasswordHasher
from argon2.exceptions import VerifyMismatchError

ph = PasswordHasher(
    time_cost=3,
    memory_cost=65536,  # KiB cinsinden; donanımınıza göre ayarlayın
    parallelism=2,
)
h = ph.hash("LabParola!2026")
print(h)
print(ph.verify(h, "LabParola!2026"))
try:
    ph.verify(h, "yanlis")
except VerifyMismatchError:
    print("mismatch ok")
print("needs_rehash", ph.check_needs_rehash(h))
PY</code></div></div><br />
[center][/center]<br />
<br />
Parametreleri seçerken: giriş başına CPU/RAM maliyeti kabul edilebilir olmalı; brute-force ise pahalı olmalı. OWASP cheat sheet güncel parametre önerilerini kontrol edin (donanım yıllarına göre değişebilir).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">5) Uygulama Akışı</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kayıt
hash = ph.hash(password)
db.save(user, password_hash=hash)

# Giriş
if ph.verify(user.password_hash, password):
    if ph.check_needs_rehash(user.password_hash):
        user.password_hash = ph.hash(password)
        db.save(user)
    login_success()
else:
    login_fail()  # sabit zamanlı mesaj; kullanıcı var/yok sızdırmayın</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># YANLIŞ
hashlib.sha256(password.encode()).hexdigest()
# YANLIŞ
base64.b64encode(password.encode())
# YANLIŞ
AES_encrypt(password, server_key)  # parola saklama için KDF tercih edilir</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Migrasyon:</span> Eski SHA-256 kullanıcıları giriş yaptığında yeni Argon2id'ye yükseltin (transparent rehash). Toplu "hepsini bir gecede dönüştür" için eski hash'leri bilemiyorsanız kullanıcı parola sıfırlama gerekebilir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">6) Ek Kontroller</span></span><ul class="mycode_list"><li>Kayıt/şifre değişiminde uzunluk ve breached password kontrolü (Have I Been Pwned Pwned Passwords API, k-anonymity)<br />
</li>
<li>Rate limit + MFA<br />
</li>
<li>Password reset token'ları tek kullanımlık ve kısa ömürlü<br />
</li>
<li>Loglarda parola ve hash yazmayın<br />
</li>
<li>Yedekleri şifreleyin; DB erişimini least privilege yapın<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Pwned Passwords k-anonymity fikri (kavramsal)
# SHA-1(parola)'nın ilk 5 karakterini API'ye gönder, sonek listesinde ara
# Parolanın tamamını göndermeyin</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">7) İleri Seviye</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Passkey / WebAuthn:</span> Parola yerine phishing-resistant kimlik doğrulama. Parola yükünü azaltır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Composition policy:</span> NIST SP 800-63B, karmaşık zorunlu karakter setlerinden ziyade uzunluk + blacklist (yaygın/parola sızıntısı) vurgular. Kurum politikanızı güncel rehberlerle hizalayın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">HSM / KMS pepper:</span> Pepper'ı uygulama belleğinden ayrı tutmak ihlal etkisini azaltır.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Rapor / mimari not dili
Parola saklama: Argon2id (argon2-cffi), time_cost=3, memory_cost=65536, parallelism=2
Salt: kütüphane tarafından unique
Pepper: yok/var (KMS)
Migrasyon: SHA-256 -&gt; Argon2id on-login</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">8) Sonuç</span></span><br />
Parolaları Base64 veya düz SHA ile saklamayın. Unique salt + Argon2id (veya bcrypt) + dengeli parametreler + MFA temel pakettir. Sızıntı olsa bile iyi parolaların toplu kırılmasını zorlaştırmak hedeflenir.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek: Operasyonel Senaryolar</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Sızıntı sonrası:</span> Tüm oturumları iptal edin, kullanıcıları bilgilendirin (KVKK süreçleri), zorla parola yenileme veya "girişte rehash + MFA zorunlu" uygulayın. Hash algoritmanız zayıfsa aciliyet artar.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Eski mobil uygulama:</span> Eski istemci hâlâ SHA-1 hash gönderiyorsa sunucu tarafında kabul etmeyin; protokolü yükseltin.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Doğrulama maliyeti ölçümü (lab)
python3 - &lt;&lt;'PY'
import time
from argon2 import PasswordHasher
ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=2)
t0=time.time(); ph.hash("x"*12); print("hash_s", round(time.time()-t0,3))
PY</code></div></div><br />
Hedef: meşru girişte yüzlerce ms kabul edilebilir; kitle brute-force'ta ise pahalı. Aşırı yüksek maliyet DoS'a dönüşebilir; login rate limit ile birlikte düşünün.<br />
<br />
[center][/center]<br />
<br />
Unutmayın: Teknik KDF doğru olsa bile kullanıcı "123456" seçerse risk devam eder; breached password engeli ve passkey geçişi tamamlayıcıdır.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek Lab Komutları</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># bcrypt maliyeti karşılaştırması
python3 - &lt;&lt;'PY'
import bcrypt, time
for r in (10, 12, 14):
    t=time.time(); bcrypt.hashpw(b"x", bcrypt.gensalt(r)); print(r, round(time.time()-t,3),"s")
PY</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Argon2 parametre dizesini okuma
python3 - &lt;&lt;'PY'
from argon2 import PasswordHasher
h=PasswordHasher().hash("demo")
print(h.split("&#36;")[:5])
PY</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Secrets ile salt üretimi (elle saklama senaryosu - genelde kütüphane yapar)
python3 -c "import secrets; print(secrets.token_bytes(16).hex())"</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP Password Storage Cheat Sheet</a><br />
</li>
<li><a href="https://github.com/P-H-C/phc-winner-argon2" target="_blank" rel="noopener" class="mycode_url">Argon2 resmi depo</a><br />
</li>
<li><a href="https://csrc.nist.gov/publications/detail/sp/800-63b/final" target="_blank" rel="noopener" class="mycode_url">NIST SP 800-63B</a><br />
</li>
<li><a href="https://haveibeenpwned.com/API/v3#PwnedPasswords" target="_blank" rel="noopener" class="mycode_url">Have I Been Pwned - Pwned Passwords API</a><br />
</li>
<li><a href="https://argon2-cffi.readthedocs.io/" target="_blank" rel="noopener" class="mycode_url">argon2-cffi dokümantasyonu</a><br />
</li>
<li><a href="https://owasp.org/Top10/A02_2021-Cryptographic_Failures/" target="_blank" rel="noopener" class="mycode_url">OWASP A02 Cryptographic Failures</a><br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Yasal Uyarı</span></span><br />
Bu içerik savunma ve güvenli yazılım geliştirme içindir. Başkalarına ait parola hash'lerini izinsiz kırmaya çalışmak veya sistemlere yetkisiz girmek TCK <span style="font-weight: bold;" class="mycode_b">243-245</span> kapsamında suç olabilir. Lab parolalarını üretimde kullanmayın; sorumluluk uygulayana aittir.<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=241" target="_blank" title="">000-team-new-b261c5.png</a> (Dosya Boyutu: 61.36 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TLS/HTTPS Nasıl Çalışır? El Sıkışma, Sertifikalar ve Güvenli Bağlantı]]></title>
			<link>https://www.turkteam.org/konu-tls-https-nasil-calisir-el-sikisma-sertifikalar-ve-guvenli-baglanti.html</link>
			<pubDate>Sun, 18 Oct 2026 19:11:25 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-tls-https-nasil-calisir-el-sikisma-sertifikalar-ve-guvenli-baglanti.html</guid>
			<description><![CDATA[[center]<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=204" loading="lazy"  alt="[Resim: attachment.php?aid=204]" class="mycode_img" /></div>[/center]<br />
<br />
Selam TurkTeam, BlueTornado yazıyor.<br />
<br />
Tarayıcınızdaki kilit simgesinin arkasında TLS (Transport Layer Security) vardır. HTTPS, HTTP'nin TLS ile şifrelenmiş kanal üzerinden taşınmasıdır. Bu rehberde TLS'in üç temel vaadini (gizlilik, bütünlük, kimlik doğrulama), TLS 1.3 el sıkışmasını adım adım, sertifika zincirinin nasıl doğrulandığını ve bunların hepsini kendi bilgisayarınızda openssl, curl ve Wireshark ile nasıl gözlemleyeceğinizi anlatıyorum. Simetrik/asimetrik şifreleme temellerini (AES, RSA) ayrı konuda işlediğimiz için burada TLS'in bunları nasıl bir araya getirdiğine odaklanıyoruz. Sunucu sıkılaştırma (Nginx ayarları) bu konunun kapsamı dışında.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>TLS nedir, HTTPS ile ilişkisi<br />
</li>
<li>TLS'in sağladığı güvenceler ve sağlamadıkları<br />
</li>
<li>TLS 1.3 el sıkışması adım adım<br />
</li>
<li>X.509 sertifikaları ve güven zinciri<br />
</li>
<li>Lab: openssl s_client ile el sıkışmayı izlemek<br />
</li>
<li>Lab: kendi sertifikanızı üretip yerel TLS sunucusu açmak<br />
</li>
<li>Wireshark ile kendi trafiğinizi çözmek (SSLKEYLOGFILE)<br />
</li>
<li>İleri seviye: forward secrecy, 0-RTT, Certificate Transparency, sertifika ömürleri<br />
</li>
<li>Kaynakça ve yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">1) TLS Nedir?</span></span><br />
TLS, iki uç arasında şifreli ve kimliği doğrulanmış bir kanal kuran protokoldür. Eski adı SSL'dir; SSL 2.0/3.0 ile TLS 1.0 ve 1.1 artık güvensiz kabul edilir (RFC 8996, TLS 1.0 ve 1.1'i resmen kullanımdan kaldırdı). Güncel sürümler TLS 1.2 (RFC 5246) ve TLS 1.3'tür (RFC 8446). HTTPS'te tarayıcı önce TCP (veya HTTP/3'te QUIC) bağlantısı kurar, ardından TLS el sıkışmasını yapar ve HTTP isteklerini bu şifreli kanaldan gönderir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">TLS'in sağladıkları:</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Gizlilik:</span> Aradaki biri (aynı Wi-Fi, ISS) içeriği okuyamaz<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Bütünlük:</span> Trafik yolda değiştirilirse alıcı bunu fark eder (AEAD şifreleri)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Kimlik doğrulama:</span> Konuştuğunuz sunucunun gerçekten o alan adının sahibi olduğu sertifika ile kanıtlanır<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Sağlamadıkları:</span> Sitenin kendisinin güvenilir olduğunu garanti etmez. Oltalama siteleri de geçerli sertifika alabilir; kilit simgesi "bağlantı şifreli" demektir, "site masum" demek değildir. Ayrıca bağlanılan alan adı (SNI) ve IP adresi, ek önlem (ör. Encrypted Client Hello) yoksa ağ gözlemcisine görünür.<br />
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite>Kilit simgesi = doğru sunucuyla şifreli konuşuyorsunuz. Sunucunun niyeti ayrı bir sorudur.</blockquote>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">2) TLS 1.3 El Sıkışması Adım Adım</span></span><br />
TLS 1.3 tam el sıkışma için yalnızca bir gidiş-dönüş (1-RTT) kullanır; TLS 1.2'de bu iki gidiş-dönüştü.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>İstemci                                   Sunucu
ClientHello
 + supported_versions, key_share,
 + signature_algorithms, server_name (SNI)  --------&gt;
                                            ServerHello + key_share
                                            {EncryptedExtensions}
                                            {Certificate}
                                            {CertificateVerify}
                                   &lt;-------- {Finished}
{Finished}                         --------&gt;
[Uygulama verisi]                  &lt;-------&gt;  [Uygulama verisi]

{} = el sıkışma anahtarlarıyla şifreli   [] = uygulama anahtarlarıyla şifreli</code></div></div><br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">ClientHello:</span> İstemci desteklediği sürümleri, şifre takımlarını ve tahmin ettiği grup için geçici (ephemeral) bir Diffie-Hellman açık anahtarını (key_share) gönderir. SNI ile hangi alan adına bağlandığını belirtir.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">ServerHello:</span> Sunucu sürümü ve şifre takımını seçer, kendi key_share'ini gönderir. Bu noktada iki taraf ortak bir sır hesaplar; buradan HKDF ile el sıkışma anahtarları türetilir.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">EncryptedExtensions:</span> Ek parametreler (ör. ALPN ile h2 seçimi), artık şifreli.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Certificate:</span> Sunucunun sertifika zinciri.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">CertificateVerify:</span> Sunucu, el sıkışma dökümünü özel anahtarıyla imzalar. Böylece sertifikadaki açık anahtarın sahibi olduğunu kanıtlar.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Finished:</span> Her iki taraf tüm dökümün MAC'ini gönderir; araya giren biri mesajları değiştirdiyse burada yakalanır.<br />
</li>
</ol>
<br />
TLS 1.3'te yalnızca beş şifre takımı tanımlıdır ve yaygın kullanılanlar şunlardır:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256</code></div></div>RSA ile anahtar taşıma ve statik DH tamamen kaldırıldı; her bağlantı geçici anahtar kullanır.<br />
<br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">3) Sertifikalar ve Güven Zinciri</span></span><br />
Sertifika, bir açık anahtarı bir kimliğe (alan adına) bağlayan ve bir Sertifika Otoritesi (CA) tarafından imzalanmış X.509 belgesidir (RFC 5280). Tarayıcı şunları kontrol eder:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Zincir:</span> Yaprak (sunucu) sertifikası -&gt; ara (intermediate) CA -&gt; işletim sistemi/tarayıcı deposundaki kök (root) CA. Her halkanın imzası bir üstteki ile doğrulanır.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Alan adı:</span> Bağlanılan ad, Subject Alternative Name (SAN) listesinde olmalı. Modern tarayıcılar yalnızca CN'ye bakmaz.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Geçerlilik tarihleri:</span> notBefore / notAfter.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Anahtar kullanımı:</span> Extended Key Usage içinde serverAuth.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">İptal ve şeffaflık:</span> Tarayıcıya göre CRL tabanlı mekanizmalar ve Certificate Transparency kayıtları.<br />
</li>
</ul>
<br />
[center][/center]<br />
<br />
Sunucu ara sertifikayı göndermeyi unutursa bazı istemcilerde "unable to get local issuer certificate" hatası alınır; bu sık görülen bir yapılandırma hatasıdır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">4) Lab: openssl s_client ile Gözlem</span></span><br />
Herhangi bir halka açık HTTPS sitesine normal bir bağlantı kurmak sıradan tarayıcı davranışıdır; aşağıdaki komutlar yalnızca bağlantı bilgisini okur.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># TLS 1.3 ile bağlan, SNI belirt, el sıkışma özetini gör
openssl s_client -connect example.com:443 -servername example.com -tls1_3 &lt;/dev/null</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Çıktı yorumu:</span> Çıktıda "Certificate chain" bölümü zinciri (s: subject, i: issuer) listeler; altta protokol ve seçilen şifre takımı ile "Verify return code: 0 (ok)" satırı görünür. 0 dışındaki kod, doğrulamanın başarısız olduğunu ve nedenini söyler.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Sunucu sertifikasının ayrıntıları
openssl s_client -connect example.com:443 -servername example.com &lt;/dev/null 2&gt;/dev/null &#92;
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Zincirin tamamını PEM olarak kaydet
openssl s_client -connect example.com:443 -servername example.com -showcerts &lt;/dev/null &gt; zincir.txt</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># curl ile el sıkışmayı ayrıntılı izlemek
curl -sv -o /dev/null https://example.com 2&gt;&amp;1 | grep -E 'SSL connection|ALPN|subject:|issuer:|expire date'</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Belirli bir sürümün reddedildiğini test et (kendi sunucunuzda)
openssl s_client -connect localhost:4443 -tls1_1 &lt;/dev/null</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">5) Lab: Kendi Sertifikanız ve Yerel TLS Sunucusu</span></span><br />
Kendi bilgisayarınızda, yalnızca test amacıyla kendinden imzalı (self-signed) sertifika üretelim:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes &#92;
  -keyout lab.key -out lab.crt -days 30 &#92;
  -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Sertifikayı incele
openssl x509 -in lab.crt -noout -text | grep -A1 -E 'Subject:|Not After|Subject Alternative Name'</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Basit test sunucusu (yalnızca localhost)
openssl s_server -accept 4443 -cert lab.crt -key lab.key -www</code></div></div><br />
Başka terminalden:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>curl -v https://localhost:4443/              # güven hatası beklenir
curl -v --cacert lab.crt https://localhost:4443/   # sertifikaya güvenince geçer</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Çıktı yorumu:</span> İlk komutta curl, sertifikayı tanıdığı bir CA imzalamadığı için bağlantıyı reddeder. Bu tam olarak istenen davranıştır: kimlik doğrulanamayan sunucuya veri gönderilmez. İkinci komutta güven çapasını kendiniz verdiğiniz için doğrulama geçer. Üretimde curl -k veya "sertifika doğrulamayı kapat" seçeneklerini asla kullanmayın; bu, TLS'in kimlik doğrulama güvencesini tamamen ortadan kaldırır.<br />
<br />
Gerçek alan adınız için ücretsiz ve otomatik sertifika Let's Encrypt ve certbot ile alınabilir:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>sudo certbot certonly --webroot -w /var/www/html -d alanadiniz.ornek
sudo certbot renew --dry-run   # yenileme otomasyonunu test et</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">6) Wireshark ile Kendi Trafiğinizi Çözmek</span></span><br />
TLS trafiği Wireshark'ta okunamaz; bu iyi bir şeydir. Kendi tarayıcınızın veya curl'ün oturum anahtarlarını bir dosyaya yazdırarak <span style="font-weight: bold;" class="mycode_b">yalnızca kendi trafiğinizi</span> çözebilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>export SSLKEYLOGFILE="&#36;HOME/tls-keys.log"
curl -s -o /dev/null https://example.com
# Wireshark: Edit &gt; Preferences &gt; Protocols &gt; TLS &gt; (Pre)-Master-Secret log filename = tls-keys.log</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Faydalı görüntü filtreleri
tls.handshake.type == 1      # ClientHello
tls.handshake.type == 2      # ServerHello
tls.handshake.extensions_server_name</code></div></div><br />
Anahtar dosyası, o oturumların tüm içeriğini açar; işiniz bitince silin ve kimseyle paylaşmayın.<br />
<br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">7) İleri Seviye</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Forward secrecy:</span> Her bağlantı geçici (EC)DHE anahtarlarıyla kurulduğu için sunucunun uzun ömürlü özel anahtarı ileride çalınsa bile geçmiş kayıtlı trafik çözülemez. TLS 1.3'te bu zorunludur.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Oturum devamı ve 0-RTT:</span> TLS 1.3, önceki oturumdan alınan PSK ile ilk pakette veri göndermeye (0-RTT / early data) izin verir. Bu veri tekrar oynatma (replay) saldırısına açıktır; RFC 8446 de bu riski belirtir. Yalnızca idempotent istekler (GET gibi) için kullanılmalıdır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Certificate Transparency (RFC 6962):</span> Halka açık CA'ların verdiği sertifikalar kamuya açık loglara yazılır. Alan adınız için beklemediğiniz bir sertifika çıkarılıp çıkarılmadığını crt.sh gibi CT arama araçlarıyla izleyebilirsiniz. Savunma açısından kendi alan adlarınızı düzenli kontrol etmek iyi bir alışkanlıktır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sertifika ömürleri kısalıyor:</span> CA/Browser Forum'un SC-081v3 kararına göre halka açık TLS sertifikalarının azami geçerliliği 15 Mart 2026'dan itibaren 200 gün, 15 Mart 2027'de 100 gün, 15 Mart 2029'da 47 gündür. Pratik sonuç: yenilemeyi elle değil, ACME (certbot vb.) ile otomatik yapın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kendi sunucunuzu denetlemek:</span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>nmap --script ssl-enum-ciphers -p 443 alanadiniz.ornek
./testssl.sh https://alanadiniz.ornek</code></div></div>Bu araçları yalnızca sahibi olduğunuz veya yazılı izin aldığınız sistemlerde çalıştırın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kontrol Listesi</span></span><ul class="mycode_list"><li>Yalnızca TLS 1.2 ve 1.3 açık; 1.0/1.1 ve SSL kapalı<br />
</li>
<li>Sertifika SAN listesi tüm alan adlarını kapsıyor, ara sertifika gönderiliyor<br />
</li>
<li>Yenileme otomatik ve izleniyor (bitiş tarihi alarmı)<br />
</li>
<li>Uygulama kodunda sertifika doğrulaması asla kapatılmıyor<br />
</li>
<li>Özel anahtar dosyası yalnızca servis kullanıcısı tarafından okunabilir<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Sonuç</span></span><br />
TLS; geçici anahtar değişimi, sertifika ile kimlik doğrulama ve AEAD şifreleme parçalarını tek bir el sıkışmada birleştirir. openssl s_client ve kendi lab sunucunuzla bu adımları gözünüzle görmek, "sertifika hatası" mesajlarını okumayı ve doğru yapılandırmayı çok kolaylaştırır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://datatracker.ietf.org/doc/html/rfc8446" target="_blank" rel="noopener" class="mycode_url">RFC 8446 - TLS 1.3</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc5246" target="_blank" rel="noopener" class="mycode_url">RFC 5246 - TLS 1.2</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc8996" target="_blank" rel="noopener" class="mycode_url">RFC 8996 - TLS 1.0 ve 1.1'in kullanımdan kaldırılması</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc5280" target="_blank" rel="noopener" class="mycode_url">RFC 5280 - X.509 Sertifika Profili</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc6962" target="_blank" rel="noopener" class="mycode_url">RFC 6962 - Certificate Transparency</a><br />
</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/Security/Transport_Layer_Security" target="_blank" rel="noopener" class="mycode_url">MDN - Transport Layer Security</a><br />
</li>
<li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP TLS Cheat Sheet</a><br />
</li>
<li><a href="https://docs.openssl.org/master/man1/openssl-s_client/" target="_blank" rel="noopener" class="mycode_url">OpenSSL s_client dokümantasyonu</a><br />
</li>
<li><a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/" target="_blank" rel="noopener" class="mycode_url">CA/Browser Forum Ballot SC-081v3</a><br />
</li>
<li><a href="https://letsencrypt.org/docs/" target="_blank" rel="noopener" class="mycode_url">Let's Encrypt dokümantasyonu</a><br />
</li>
<li><a href="https://wiki.wireshark.org/TLS" target="_blank" rel="noopener" class="mycode_url">Wireshark Wiki - TLS</a><br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Yasal Uyarı</span></span><br />
Bu rehber bağlantılarınızı ve sunucularınızı korumak içindir. Trafik çözme ve TLS taramalarını yalnızca kendi sistemlerinizde, kendi trafiğinizde veya yazılı yetkili kapsamda yapın. Başkalarının haberleşmesine müdahale, izinsiz dinleme veya sistemlere yetkisiz erişim TCK <span style="font-weight: bold;" class="mycode_b">243-245</span> ve ilgili kanunlar kapsamında suç olabilir. Eğitim amaçlıdır.<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=204" target="_blank" title="">000-team-new-3477f7.png</a> (Dosya Boyutu: 61.97 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[[center]<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=204" loading="lazy"  alt="[Resim: attachment.php?aid=204]" class="mycode_img" /></div>[/center]<br />
<br />
Selam TurkTeam, BlueTornado yazıyor.<br />
<br />
Tarayıcınızdaki kilit simgesinin arkasında TLS (Transport Layer Security) vardır. HTTPS, HTTP'nin TLS ile şifrelenmiş kanal üzerinden taşınmasıdır. Bu rehberde TLS'in üç temel vaadini (gizlilik, bütünlük, kimlik doğrulama), TLS 1.3 el sıkışmasını adım adım, sertifika zincirinin nasıl doğrulandığını ve bunların hepsini kendi bilgisayarınızda openssl, curl ve Wireshark ile nasıl gözlemleyeceğinizi anlatıyorum. Simetrik/asimetrik şifreleme temellerini (AES, RSA) ayrı konuda işlediğimiz için burada TLS'in bunları nasıl bir araya getirdiğine odaklanıyoruz. Sunucu sıkılaştırma (Nginx ayarları) bu konunun kapsamı dışında.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>TLS nedir, HTTPS ile ilişkisi<br />
</li>
<li>TLS'in sağladığı güvenceler ve sağlamadıkları<br />
</li>
<li>TLS 1.3 el sıkışması adım adım<br />
</li>
<li>X.509 sertifikaları ve güven zinciri<br />
</li>
<li>Lab: openssl s_client ile el sıkışmayı izlemek<br />
</li>
<li>Lab: kendi sertifikanızı üretip yerel TLS sunucusu açmak<br />
</li>
<li>Wireshark ile kendi trafiğinizi çözmek (SSLKEYLOGFILE)<br />
</li>
<li>İleri seviye: forward secrecy, 0-RTT, Certificate Transparency, sertifika ömürleri<br />
</li>
<li>Kaynakça ve yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">1) TLS Nedir?</span></span><br />
TLS, iki uç arasında şifreli ve kimliği doğrulanmış bir kanal kuran protokoldür. Eski adı SSL'dir; SSL 2.0/3.0 ile TLS 1.0 ve 1.1 artık güvensiz kabul edilir (RFC 8996, TLS 1.0 ve 1.1'i resmen kullanımdan kaldırdı). Güncel sürümler TLS 1.2 (RFC 5246) ve TLS 1.3'tür (RFC 8446). HTTPS'te tarayıcı önce TCP (veya HTTP/3'te QUIC) bağlantısı kurar, ardından TLS el sıkışmasını yapar ve HTTP isteklerini bu şifreli kanaldan gönderir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">TLS'in sağladıkları:</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Gizlilik:</span> Aradaki biri (aynı Wi-Fi, ISS) içeriği okuyamaz<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Bütünlük:</span> Trafik yolda değiştirilirse alıcı bunu fark eder (AEAD şifreleri)<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Kimlik doğrulama:</span> Konuştuğunuz sunucunun gerçekten o alan adının sahibi olduğu sertifika ile kanıtlanır<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Sağlamadıkları:</span> Sitenin kendisinin güvenilir olduğunu garanti etmez. Oltalama siteleri de geçerli sertifika alabilir; kilit simgesi "bağlantı şifreli" demektir, "site masum" demek değildir. Ayrıca bağlanılan alan adı (SNI) ve IP adresi, ek önlem (ör. Encrypted Client Hello) yoksa ağ gözlemcisine görünür.<br />
<br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite>Kilit simgesi = doğru sunucuyla şifreli konuşuyorsunuz. Sunucunun niyeti ayrı bir sorudur.</blockquote>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">2) TLS 1.3 El Sıkışması Adım Adım</span></span><br />
TLS 1.3 tam el sıkışma için yalnızca bir gidiş-dönüş (1-RTT) kullanır; TLS 1.2'de bu iki gidiş-dönüştü.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>İstemci                                   Sunucu
ClientHello
 + supported_versions, key_share,
 + signature_algorithms, server_name (SNI)  --------&gt;
                                            ServerHello + key_share
                                            {EncryptedExtensions}
                                            {Certificate}
                                            {CertificateVerify}
                                   &lt;-------- {Finished}
{Finished}                         --------&gt;
[Uygulama verisi]                  &lt;-------&gt;  [Uygulama verisi]

{} = el sıkışma anahtarlarıyla şifreli   [] = uygulama anahtarlarıyla şifreli</code></div></div><br />
<ol type="1" class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">ClientHello:</span> İstemci desteklediği sürümleri, şifre takımlarını ve tahmin ettiği grup için geçici (ephemeral) bir Diffie-Hellman açık anahtarını (key_share) gönderir. SNI ile hangi alan adına bağlandığını belirtir.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">ServerHello:</span> Sunucu sürümü ve şifre takımını seçer, kendi key_share'ini gönderir. Bu noktada iki taraf ortak bir sır hesaplar; buradan HKDF ile el sıkışma anahtarları türetilir.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">EncryptedExtensions:</span> Ek parametreler (ör. ALPN ile h2 seçimi), artık şifreli.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Certificate:</span> Sunucunun sertifika zinciri.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">CertificateVerify:</span> Sunucu, el sıkışma dökümünü özel anahtarıyla imzalar. Böylece sertifikadaki açık anahtarın sahibi olduğunu kanıtlar.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Finished:</span> Her iki taraf tüm dökümün MAC'ini gönderir; araya giren biri mesajları değiştirdiyse burada yakalanır.<br />
</li>
</ol>
<br />
TLS 1.3'te yalnızca beş şifre takımı tanımlıdır ve yaygın kullanılanlar şunlardır:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256</code></div></div>RSA ile anahtar taşıma ve statik DH tamamen kaldırıldı; her bağlantı geçici anahtar kullanır.<br />
<br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">3) Sertifikalar ve Güven Zinciri</span></span><br />
Sertifika, bir açık anahtarı bir kimliğe (alan adına) bağlayan ve bir Sertifika Otoritesi (CA) tarafından imzalanmış X.509 belgesidir (RFC 5280). Tarayıcı şunları kontrol eder:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Zincir:</span> Yaprak (sunucu) sertifikası -&gt; ara (intermediate) CA -&gt; işletim sistemi/tarayıcı deposundaki kök (root) CA. Her halkanın imzası bir üstteki ile doğrulanır.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Alan adı:</span> Bağlanılan ad, Subject Alternative Name (SAN) listesinde olmalı. Modern tarayıcılar yalnızca CN'ye bakmaz.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Geçerlilik tarihleri:</span> notBefore / notAfter.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Anahtar kullanımı:</span> Extended Key Usage içinde serverAuth.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">İptal ve şeffaflık:</span> Tarayıcıya göre CRL tabanlı mekanizmalar ve Certificate Transparency kayıtları.<br />
</li>
</ul>
<br />
[center][/center]<br />
<br />
Sunucu ara sertifikayı göndermeyi unutursa bazı istemcilerde "unable to get local issuer certificate" hatası alınır; bu sık görülen bir yapılandırma hatasıdır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">4) Lab: openssl s_client ile Gözlem</span></span><br />
Herhangi bir halka açık HTTPS sitesine normal bir bağlantı kurmak sıradan tarayıcı davranışıdır; aşağıdaki komutlar yalnızca bağlantı bilgisini okur.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># TLS 1.3 ile bağlan, SNI belirt, el sıkışma özetini gör
openssl s_client -connect example.com:443 -servername example.com -tls1_3 &lt;/dev/null</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Çıktı yorumu:</span> Çıktıda "Certificate chain" bölümü zinciri (s: subject, i: issuer) listeler; altta protokol ve seçilen şifre takımı ile "Verify return code: 0 (ok)" satırı görünür. 0 dışındaki kod, doğrulamanın başarısız olduğunu ve nedenini söyler.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Sunucu sertifikasının ayrıntıları
openssl s_client -connect example.com:443 -servername example.com &lt;/dev/null 2&gt;/dev/null &#92;
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Zincirin tamamını PEM olarak kaydet
openssl s_client -connect example.com:443 -servername example.com -showcerts &lt;/dev/null &gt; zincir.txt</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># curl ile el sıkışmayı ayrıntılı izlemek
curl -sv -o /dev/null https://example.com 2&gt;&amp;1 | grep -E 'SSL connection|ALPN|subject:|issuer:|expire date'</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Belirli bir sürümün reddedildiğini test et (kendi sunucunuzda)
openssl s_client -connect localhost:4443 -tls1_1 &lt;/dev/null</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">5) Lab: Kendi Sertifikanız ve Yerel TLS Sunucusu</span></span><br />
Kendi bilgisayarınızda, yalnızca test amacıyla kendinden imzalı (self-signed) sertifika üretelim:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes &#92;
  -keyout lab.key -out lab.crt -days 30 &#92;
  -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Sertifikayı incele
openssl x509 -in lab.crt -noout -text | grep -A1 -E 'Subject:|Not After|Subject Alternative Name'</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Basit test sunucusu (yalnızca localhost)
openssl s_server -accept 4443 -cert lab.crt -key lab.key -www</code></div></div><br />
Başka terminalden:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>curl -v https://localhost:4443/              # güven hatası beklenir
curl -v --cacert lab.crt https://localhost:4443/   # sertifikaya güvenince geçer</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Çıktı yorumu:</span> İlk komutta curl, sertifikayı tanıdığı bir CA imzalamadığı için bağlantıyı reddeder. Bu tam olarak istenen davranıştır: kimlik doğrulanamayan sunucuya veri gönderilmez. İkinci komutta güven çapasını kendiniz verdiğiniz için doğrulama geçer. Üretimde curl -k veya "sertifika doğrulamayı kapat" seçeneklerini asla kullanmayın; bu, TLS'in kimlik doğrulama güvencesini tamamen ortadan kaldırır.<br />
<br />
Gerçek alan adınız için ücretsiz ve otomatik sertifika Let's Encrypt ve certbot ile alınabilir:<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>sudo certbot certonly --webroot -w /var/www/html -d alanadiniz.ornek
sudo certbot renew --dry-run   # yenileme otomasyonunu test et</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">6) Wireshark ile Kendi Trafiğinizi Çözmek</span></span><br />
TLS trafiği Wireshark'ta okunamaz; bu iyi bir şeydir. Kendi tarayıcınızın veya curl'ün oturum anahtarlarını bir dosyaya yazdırarak <span style="font-weight: bold;" class="mycode_b">yalnızca kendi trafiğinizi</span> çözebilirsiniz:<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>export SSLKEYLOGFILE="&#36;HOME/tls-keys.log"
curl -s -o /dev/null https://example.com
# Wireshark: Edit &gt; Preferences &gt; Protocols &gt; TLS &gt; (Pre)-Master-Secret log filename = tls-keys.log</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Faydalı görüntü filtreleri
tls.handshake.type == 1      # ClientHello
tls.handshake.type == 2      # ServerHello
tls.handshake.extensions_server_name</code></div></div><br />
Anahtar dosyası, o oturumların tüm içeriğini açar; işiniz bitince silin ve kimseyle paylaşmayın.<br />
<br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">7) İleri Seviye</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Forward secrecy:</span> Her bağlantı geçici (EC)DHE anahtarlarıyla kurulduğu için sunucunun uzun ömürlü özel anahtarı ileride çalınsa bile geçmiş kayıtlı trafik çözülemez. TLS 1.3'te bu zorunludur.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Oturum devamı ve 0-RTT:</span> TLS 1.3, önceki oturumdan alınan PSK ile ilk pakette veri göndermeye (0-RTT / early data) izin verir. Bu veri tekrar oynatma (replay) saldırısına açıktır; RFC 8446 de bu riski belirtir. Yalnızca idempotent istekler (GET gibi) için kullanılmalıdır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Certificate Transparency (RFC 6962):</span> Halka açık CA'ların verdiği sertifikalar kamuya açık loglara yazılır. Alan adınız için beklemediğiniz bir sertifika çıkarılıp çıkarılmadığını crt.sh gibi CT arama araçlarıyla izleyebilirsiniz. Savunma açısından kendi alan adlarınızı düzenli kontrol etmek iyi bir alışkanlıktır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sertifika ömürleri kısalıyor:</span> CA/Browser Forum'un SC-081v3 kararına göre halka açık TLS sertifikalarının azami geçerliliği 15 Mart 2026'dan itibaren 200 gün, 15 Mart 2027'de 100 gün, 15 Mart 2029'da 47 gündür. Pratik sonuç: yenilemeyi elle değil, ACME (certbot vb.) ile otomatik yapın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kendi sunucunuzu denetlemek:</span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>nmap --script ssl-enum-ciphers -p 443 alanadiniz.ornek
./testssl.sh https://alanadiniz.ornek</code></div></div>Bu araçları yalnızca sahibi olduğunuz veya yazılı izin aldığınız sistemlerde çalıştırın.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kontrol Listesi</span></span><ul class="mycode_list"><li>Yalnızca TLS 1.2 ve 1.3 açık; 1.0/1.1 ve SSL kapalı<br />
</li>
<li>Sertifika SAN listesi tüm alan adlarını kapsıyor, ara sertifika gönderiliyor<br />
</li>
<li>Yenileme otomatik ve izleniyor (bitiş tarihi alarmı)<br />
</li>
<li>Uygulama kodunda sertifika doğrulaması asla kapatılmıyor<br />
</li>
<li>Özel anahtar dosyası yalnızca servis kullanıcısı tarafından okunabilir<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Sonuç</span></span><br />
TLS; geçici anahtar değişimi, sertifika ile kimlik doğrulama ve AEAD şifreleme parçalarını tek bir el sıkışmada birleştirir. openssl s_client ve kendi lab sunucunuzla bu adımları gözünüzle görmek, "sertifika hatası" mesajlarını okumayı ve doğru yapılandırmayı çok kolaylaştırır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://datatracker.ietf.org/doc/html/rfc8446" target="_blank" rel="noopener" class="mycode_url">RFC 8446 - TLS 1.3</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc5246" target="_blank" rel="noopener" class="mycode_url">RFC 5246 - TLS 1.2</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc8996" target="_blank" rel="noopener" class="mycode_url">RFC 8996 - TLS 1.0 ve 1.1'in kullanımdan kaldırılması</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc5280" target="_blank" rel="noopener" class="mycode_url">RFC 5280 - X.509 Sertifika Profili</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc6962" target="_blank" rel="noopener" class="mycode_url">RFC 6962 - Certificate Transparency</a><br />
</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/Security/Transport_Layer_Security" target="_blank" rel="noopener" class="mycode_url">MDN - Transport Layer Security</a><br />
</li>
<li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Security_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP TLS Cheat Sheet</a><br />
</li>
<li><a href="https://docs.openssl.org/master/man1/openssl-s_client/" target="_blank" rel="noopener" class="mycode_url">OpenSSL s_client dokümantasyonu</a><br />
</li>
<li><a href="https://cabforum.org/2025/04/11/ballot-sc081v3-introduce-schedule-of-reducing-validity-and-data-reuse-periods/" target="_blank" rel="noopener" class="mycode_url">CA/Browser Forum Ballot SC-081v3</a><br />
</li>
<li><a href="https://letsencrypt.org/docs/" target="_blank" rel="noopener" class="mycode_url">Let's Encrypt dokümantasyonu</a><br />
</li>
<li><a href="https://wiki.wireshark.org/TLS" target="_blank" rel="noopener" class="mycode_url">Wireshark Wiki - TLS</a><br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Yasal Uyarı</span></span><br />
Bu rehber bağlantılarınızı ve sunucularınızı korumak içindir. Trafik çözme ve TLS taramalarını yalnızca kendi sistemlerinizde, kendi trafiğinizde veya yazılı yetkili kapsamda yapın. Başkalarının haberleşmesine müdahale, izinsiz dinleme veya sistemlere yetkisiz erişim TCK <span style="font-weight: bold;" class="mycode_b">243-245</span> ve ilgili kanunlar kapsamında suç olabilir. Eğitim amaçlıdır.<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=204" target="_blank" title="">000-team-new-3477f7.png</a> (Dosya Boyutu: 61.97 KB / İndirme Sayısı: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Simetrik ve Asimetrik Şifreleme Farkı: AES ve RSA Temelleri]]></title>
			<link>https://www.turkteam.org/konu-simetrik-ve-asimetrik-sifreleme-farki-aes-ve-rsa-temelleri.html</link>
			<pubDate>Sun, 18 Oct 2026 18:20:51 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=3">BilgeKagan</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-simetrik-ve-asimetrik-sifreleme-farki-aes-ve-rsa-temelleri.html</guid>
			<description><![CDATA[[center]<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=202" loading="lazy"  alt="[Resim: attachment.php?aid=202]" class="mycode_img" /></div>[/center]<br />
<br />
Selam TurkTeam, BlueTornado ile.<br />
<br />
"Veriyi şifreledik" cümlesi tek başına yetmez: <span style="font-weight: bold;" class="mycode_b">hangi model</span>, <span style="font-weight: bold;" class="mycode_b">hangi algoritma</span>, <span style="font-weight: bold;" class="mycode_b">anahtar nerede</span>? Bu rehberde simetrik (AES) ile asimetrik (RSA/ECC) şifrelemenin farkını, ne zaman hangisinin kullanıldığını ve OpenSSL ile zararsız lab örneklerini anlatıyoruz. Hash/encoding farkı ve parola KDF konuları forumda ayrıca işlenir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Simetrik vs asimetrik: anahtar modeli<br />
</li>
<li>AES temelleri ve modlar<br />
</li>
<li>RSA/ECC: şifreleme ve imza<br />
</li>
<li>Hibrit şifreleme (TLS'in özü)<br />
</li>
<li>Lab: OpenSSL ile denemeler<br />
</li>
<li>İleri seviye: AEAD, anahtar ömrü, post-quantum notu<br />
</li>
<li>Kaynakça ve yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">1) İki Model</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Simetrik:</span> Aynı gizli anahtar hem şifreler hem çözer. Hızlıdır; büyük veri için uygundur. Anahtar dağıtımı zordur (her iki taraf aynı sırrı güvenli paylaşmalı).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Asimetrik:</span> Açık anahtar (public) ve özel anahtar (private). Public ile şifrelenen private ile açılır (şifreleme modeli). İmzada tersi: private imzalar, public doğrular. Yavaştır; genelde küçük veri / anahtar sarma / imza için kullanılır.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kavramsal
Simetrik:  AES(key, plaintext) &lt;-&gt; AES(key, ciphertext)
Asimetrik: Encrypt(pub, msg)  &lt;-&gt; Decrypt(priv, ct)
İmza:      Sign(priv, msg)    &lt;-&gt; Verify(pub, sig, msg)</code></div></div><br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite>AES "daha iyi RSA" değildir; farklı işler yaparlar. Gerçek sistemler çoğunlukla ikisini birlikte kullanır (hibrit).</blockquote>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">2) AES (Simetrik) Temelleri</span></span><br />
AES blok şifresidir (128-bit blok). Anahtar uzunlukları: 128, 192, 256 bit. Güvenlik sadece "AES-256 seçtik" ile bitmez; <span style="font-weight: bold;" class="mycode_b">mod</span> ve <span style="font-weight: bold;" class="mycode_b">IV/nonce</span> yönetimi kritiktir.<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">ECB:</span> Aynı blok aynı çıktı -&gt; kalıp sızdırır; kullanmayın<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">CBC:</span> IV gerekir; dolgu (padding) oracle tarihsel riskleri<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GCM (AEAD):</span> Gizlilik + bütünlük; modern varsayılan tercih<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">ChaCha20-Poly1305:</span> AEAD alternatif (özellikle yazılımda hızlı)<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># OpenSSL enc lab (AES-256-CBC + PBKDF2) - sadece eğitim
openssl rand -out /tmp/aes.key 32
echo -n "turkteam lab notu" &gt; /tmp/pt.txt
openssl enc -aes-256-cbc -pbkdf2 -in /tmp/pt.txt -out /tmp/ct.bin -pass file:/tmp/aes.key
openssl enc -d -aes-256-cbc -pbkdf2 -in /tmp/ct.bin -out /tmp/pt2.txt -pass file:/tmp/aes.key
cat /tmp/pt2.txt
rm -f /tmp/aes.key /tmp/pt.txt /tmp/ct.bin /tmp/pt2.txt</code></div></div><br />
Üretimde kendi CBC sarmalayıcınızı yazmak yerine libsodium, OpenSSL EVP AEAD, dilin güvenilir kütüphanelerini kullanın.<br />
<br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">3) RSA ve ECC (Asimetrik)</span></span><br />
RSA, büyük tamsayı çarpanlara ayırma zorluğuna dayanan klasik genel anahtar sistemidir. Günümüzde anahtar sarma ve dijital imza için hâlâ görülür; yeni tasarımlarda ECC (elliptik eğri) daha kısa anahtarlarla benzer güvenlik seviyesi sunar (ör. ECDSA P-256, Ed25519 imza).<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># RSA anahtar çifti lab
openssl genrsa -out /tmp/priv.pem 2048
openssl rsa -in /tmp/priv.pem -pubout -out /tmp/pub.pem
echo -n "kucuk mesaj" &gt; /tmp/msg.txt
openssl pkeyutl -encrypt -pubin -inkey /tmp/pub.pem -in /tmp/msg.txt -out /tmp/msg.enc
openssl pkeyutl -decrypt -inkey /tmp/priv.pem -in /tmp/msg.enc -out /tmp/msg.dec
cat /tmp/msg.dec
rm -f /tmp/priv.pem /tmp/pub.pem /tmp/msg.txt /tmp/msg.enc /tmp/msg.dec</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Ed25519 imza örneği
openssl genpkey -algorithm Ed25519 -out /tmp/ed.priv
openssl pkey -in /tmp/ed.priv -pubout -out /tmp/ed.pub
echo -n "rapor ozeti" &gt; /tmp/r.txt
openssl pkeyutl -sign -inkey /tmp/ed.priv -in /tmp/r.txt -out /tmp/r.sig
openssl pkeyutl -verify -pubin -inkey /tmp/ed.pub -in /tmp/r.txt -sigfile /tmp/r.sig
rm -f /tmp/ed.priv /tmp/ed.pub /tmp/r.txt /tmp/r.sig</code></div></div><br />
RSA ile büyük dosya şifrelemeyin; yavaştır ve pratikte hibrit kullanılır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">4) Hibrit Şifreleme (TLS'in Mantığı)</span></span><br />
<ol type="1" class="mycode_list"><li>Alice rastgele bir simetrik oturum anahtarı üretir<br />
</li>
<li>Bu anahtarı Bob'un public key'i ile sarar (veya Diffie-Hellman ile ortak anahtar türetir)<br />
</li>
<li>Asıl veri AES-GCM ile şifrelenir<br />
</li>
<li>Bob private key / DH ile oturum anahtarını elde eder ve veriyi çözer<br />
</li>
</ol>
<br />
TLS el sıkışması bu fikrin standardize, sertifikalı ve çok daha ayrıntılı halidir.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kendi sunucunuzun TLS bilgisini görün
echo | openssl s_client -connect turkteam.org:443 -servername turkteam.org 2&gt;/dev/null | egrep "Protocol|Cipher"</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">5) Ne Zaman Hangisi?</span></span><ul class="mycode_list"><li>Diskteki büyük yedek / dosya: simetrik (AES-GCM), anahtar KMS'te<br />
</li>
<li>Anahtar dağıtımı / ilk güven: asimetrik veya DH + sertifika<br />
</li>
<li>Yazılım güncellemesi doğrulama: dijital imza (asimetrik)<br />
</li>
<li>Parola saklama: şifreleme değil, Argon2id gibi KDF<br />
</li>
<li>API bütünlüğü: HMAC (simetrik) veya imza (asimetrik)<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Karar özeti
Gizlilik + hız          -&gt; AES-GCM
Kimlik / imza           -&gt; Ed25519 / ECDSA / RSA-PSS
İnternet oturumu        -&gt; TLS (hibrit)
Parola                  -&gt; KDF (hash ailesi, şifreleme değil)</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">6) İleri Seviye Notlar</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Nonce/IV yeniden kullanımı:</span> GCM'de aynı anahtar+nonce felakettir<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Padding oracle:</span> Kendi CBC+PKCS7 protokolünüzü yazmayın<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Anahtar ömrü:</span> Rotate; sızan anahtar için olay planı<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Side-channel:</span> Sabit zamanlı karşılaştırma; amatör crypto implementasyonu riskli<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Post-quantum:</span> NIST PQC standartları (ML-KEM vb.) geçiş planlarında konuşuluyor; abartılı panik yerine envanter çıkarın<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>python3 - &lt;&lt;'PY'
import secrets, hmac, hashlib
print("key", secrets.token_bytes(32).hex())
print("hmac", hmac.new(b"k", b"msg", hashlib.sha256).hexdigest())
PY</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">7) Sonuç</span></span><br />
Simetrik hız ve toplu gizlilik; asimetrik anahtar dağıtımı ve imza demektir. AES ve RSA rakip değil, tamamlayıcıdır. Labda OpenSSL ile deneyin; üretimde hazır, incelenmiş kütüphaneler ve KMS kullanın.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek: Geliştirici Anti-Pattern Listesi</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># 1) ECB ile "AES yaptık" demek
# 2) IV'yi sabit 0x00.. seçmek
# 3) RSA PKCS#1 v1.5 ile yeni protokol tasarlamak (mümkünse OAEP / modern KEM)
# 4) Private key'i uygulama imajına gömmek
# 5) "Gizlilik için" hash kullanmak
# 6) Kendi TLS'inizi yazmak</code></div></div><ul class="mycode_list"><li>Kütüphane seçimi: bakımı yapılan, sabit zamanlı ilkel sunan<br />
</li>
<li>Protokol seçimi: TLS 1.2+ (tercihen 1.3), zayıf suite'leri kapatın<br />
</li>
<li>Anahtar: en az AES-128 güvenliğine denk; pratikte AES-256 ve 2048+ RSA veya ECC<br />
</li>
</ul>
<br />
[center][/center]<br />
<br />
Şüphede kalırsanız: hazır yüksek seviye API (libsodium sealed box, age, Tink) kullanın; düşük seviye blok şifre modlarını kendiniz birleştirmeyin.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek Lab Komutları</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Rastgele AES anahtarı ve nonce (GCM için nonce 12 byte tipik)
openssl rand -hex 32
openssl rand -hex 12</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Public key parmak izi (kendi anahtarınız)
openssl pkey -pubin -in /tmp/ed.pub -outform DER 2&gt;/dev/null | openssl dgst -sha256</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># TLS 1.3 cipher gözlemi (kendi host)
echo | openssl s_client -connect 127.0.0.1:443 -tls1_3 2&gt;/dev/null | head</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP Cryptographic Storage Cheat Sheet</a><br />
</li>
<li><a href="https://www.openssl.org/docs/manmaster/man1/" target="_blank" rel="noopener" class="mycode_url">OpenSSL man sayfaları</a><br />
</li>
<li><a href="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf" target="_blank" rel="noopener" class="mycode_url">NIST FIPS 197 - AES</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc8446" target="_blank" rel="noopener" class="mycode_url">RFC 8446 - TLS 1.3</a><br />
</li>
<li><a href="https://csrc.nist.gov/projects/post-quantum-cryptography" target="_blank" rel="noopener" class="mycode_url">NIST Post-Quantum Cryptography</a><br />
</li>
<li><a href="https://owasp.org/Top10/A02_2021-Cryptographic_Failures/" target="_blank" rel="noopener" class="mycode_url">OWASP A02 Cryptographic Failures</a><br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Yasal Uyarı</span></span><br />
Kriptografi eğitimi sistemleri korumak içindir. İzinsiz şifre çözme, haberleşmeye müdahale veya sistemlere yetkisiz erişim TCK <span style="font-weight: bold;" class="mycode_b">243-245</span> ve ilgili kanunlar kapsamında suç olabilir. Lab anahtarlarını üretimde kullanmayın.<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=202" target="_blank" title="">000-team-new-2bdbcf.png</a> (Dosya Boyutu: 58.23 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[[center]<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=202" loading="lazy"  alt="[Resim: attachment.php?aid=202]" class="mycode_img" /></div>[/center]<br />
<br />
Selam TurkTeam, BlueTornado ile.<br />
<br />
"Veriyi şifreledik" cümlesi tek başına yetmez: <span style="font-weight: bold;" class="mycode_b">hangi model</span>, <span style="font-weight: bold;" class="mycode_b">hangi algoritma</span>, <span style="font-weight: bold;" class="mycode_b">anahtar nerede</span>? Bu rehberde simetrik (AES) ile asimetrik (RSA/ECC) şifrelemenin farkını, ne zaman hangisinin kullanıldığını ve OpenSSL ile zararsız lab örneklerini anlatıyoruz. Hash/encoding farkı ve parola KDF konuları forumda ayrıca işlenir.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Simetrik vs asimetrik: anahtar modeli<br />
</li>
<li>AES temelleri ve modlar<br />
</li>
<li>RSA/ECC: şifreleme ve imza<br />
</li>
<li>Hibrit şifreleme (TLS'in özü)<br />
</li>
<li>Lab: OpenSSL ile denemeler<br />
</li>
<li>İleri seviye: AEAD, anahtar ömrü, post-quantum notu<br />
</li>
<li>Kaynakça ve yasal uyarı<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">1) İki Model</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Simetrik:</span> Aynı gizli anahtar hem şifreler hem çözer. Hızlıdır; büyük veri için uygundur. Anahtar dağıtımı zordur (her iki taraf aynı sırrı güvenli paylaşmalı).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Asimetrik:</span> Açık anahtar (public) ve özel anahtar (private). Public ile şifrelenen private ile açılır (şifreleme modeli). İmzada tersi: private imzalar, public doğrular. Yavaştır; genelde küçük veri / anahtar sarma / imza için kullanılır.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kavramsal
Simetrik:  AES(key, plaintext) &lt;-&gt; AES(key, ciphertext)
Asimetrik: Encrypt(pub, msg)  &lt;-&gt; Decrypt(priv, ct)
İmza:      Sign(priv, msg)    &lt;-&gt; Verify(pub, sig, msg)</code></div></div><br />
<blockquote class="mycode_quote"><cite>Alıntı:</cite>AES "daha iyi RSA" değildir; farklı işler yaparlar. Gerçek sistemler çoğunlukla ikisini birlikte kullanır (hibrit).</blockquote>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">2) AES (Simetrik) Temelleri</span></span><br />
AES blok şifresidir (128-bit blok). Anahtar uzunlukları: 128, 192, 256 bit. Güvenlik sadece "AES-256 seçtik" ile bitmez; <span style="font-weight: bold;" class="mycode_b">mod</span> ve <span style="font-weight: bold;" class="mycode_b">IV/nonce</span> yönetimi kritiktir.<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">ECB:</span> Aynı blok aynı çıktı -&gt; kalıp sızdırır; kullanmayın<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">CBC:</span> IV gerekir; dolgu (padding) oracle tarihsel riskleri<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">GCM (AEAD):</span> Gizlilik + bütünlük; modern varsayılan tercih<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">ChaCha20-Poly1305:</span> AEAD alternatif (özellikle yazılımda hızlı)<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># OpenSSL enc lab (AES-256-CBC + PBKDF2) - sadece eğitim
openssl rand -out /tmp/aes.key 32
echo -n "turkteam lab notu" &gt; /tmp/pt.txt
openssl enc -aes-256-cbc -pbkdf2 -in /tmp/pt.txt -out /tmp/ct.bin -pass file:/tmp/aes.key
openssl enc -d -aes-256-cbc -pbkdf2 -in /tmp/ct.bin -out /tmp/pt2.txt -pass file:/tmp/aes.key
cat /tmp/pt2.txt
rm -f /tmp/aes.key /tmp/pt.txt /tmp/ct.bin /tmp/pt2.txt</code></div></div><br />
Üretimde kendi CBC sarmalayıcınızı yazmak yerine libsodium, OpenSSL EVP AEAD, dilin güvenilir kütüphanelerini kullanın.<br />
<br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">3) RSA ve ECC (Asimetrik)</span></span><br />
RSA, büyük tamsayı çarpanlara ayırma zorluğuna dayanan klasik genel anahtar sistemidir. Günümüzde anahtar sarma ve dijital imza için hâlâ görülür; yeni tasarımlarda ECC (elliptik eğri) daha kısa anahtarlarla benzer güvenlik seviyesi sunar (ör. ECDSA P-256, Ed25519 imza).<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># RSA anahtar çifti lab
openssl genrsa -out /tmp/priv.pem 2048
openssl rsa -in /tmp/priv.pem -pubout -out /tmp/pub.pem
echo -n "kucuk mesaj" &gt; /tmp/msg.txt
openssl pkeyutl -encrypt -pubin -inkey /tmp/pub.pem -in /tmp/msg.txt -out /tmp/msg.enc
openssl pkeyutl -decrypt -inkey /tmp/priv.pem -in /tmp/msg.enc -out /tmp/msg.dec
cat /tmp/msg.dec
rm -f /tmp/priv.pem /tmp/pub.pem /tmp/msg.txt /tmp/msg.enc /tmp/msg.dec</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Ed25519 imza örneği
openssl genpkey -algorithm Ed25519 -out /tmp/ed.priv
openssl pkey -in /tmp/ed.priv -pubout -out /tmp/ed.pub
echo -n "rapor ozeti" &gt; /tmp/r.txt
openssl pkeyutl -sign -inkey /tmp/ed.priv -in /tmp/r.txt -out /tmp/r.sig
openssl pkeyutl -verify -pubin -inkey /tmp/ed.pub -in /tmp/r.txt -sigfile /tmp/r.sig
rm -f /tmp/ed.priv /tmp/ed.pub /tmp/r.txt /tmp/r.sig</code></div></div><br />
RSA ile büyük dosya şifrelemeyin; yavaştır ve pratikte hibrit kullanılır.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">4) Hibrit Şifreleme (TLS'in Mantığı)</span></span><br />
<ol type="1" class="mycode_list"><li>Alice rastgele bir simetrik oturum anahtarı üretir<br />
</li>
<li>Bu anahtarı Bob'un public key'i ile sarar (veya Diffie-Hellman ile ortak anahtar türetir)<br />
</li>
<li>Asıl veri AES-GCM ile şifrelenir<br />
</li>
<li>Bob private key / DH ile oturum anahtarını elde eder ve veriyi çözer<br />
</li>
</ol>
<br />
TLS el sıkışması bu fikrin standardize, sertifikalı ve çok daha ayrıntılı halidir.<br />
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Kendi sunucunuzun TLS bilgisini görün
echo | openssl s_client -connect turkteam.org:443 -servername turkteam.org 2&gt;/dev/null | egrep "Protocol|Cipher"</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">5) Ne Zaman Hangisi?</span></span><ul class="mycode_list"><li>Diskteki büyük yedek / dosya: simetrik (AES-GCM), anahtar KMS'te<br />
</li>
<li>Anahtar dağıtımı / ilk güven: asimetrik veya DH + sertifika<br />
</li>
<li>Yazılım güncellemesi doğrulama: dijital imza (asimetrik)<br />
</li>
<li>Parola saklama: şifreleme değil, Argon2id gibi KDF<br />
</li>
<li>API bütünlüğü: HMAC (simetrik) veya imza (asimetrik)<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Karar özeti
Gizlilik + hız          -&gt; AES-GCM
Kimlik / imza           -&gt; Ed25519 / ECDSA / RSA-PSS
İnternet oturumu        -&gt; TLS (hibrit)
Parola                  -&gt; KDF (hash ailesi, şifreleme değil)</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">6) İleri Seviye Notlar</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Nonce/IV yeniden kullanımı:</span> GCM'de aynı anahtar+nonce felakettir<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Padding oracle:</span> Kendi CBC+PKCS7 protokolünüzü yazmayın<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Anahtar ömrü:</span> Rotate; sızan anahtar için olay planı<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Side-channel:</span> Sabit zamanlı karşılaştırma; amatör crypto implementasyonu riskli<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Post-quantum:</span> NIST PQC standartları (ML-KEM vb.) geçiş planlarında konuşuluyor; abartılı panik yerine envanter çıkarın<br />
</li>
</ul>
<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>python3 - &lt;&lt;'PY'
import secrets, hmac, hashlib
print("key", secrets.token_bytes(32).hex())
print("hmac", hmac.new(b"k", b"msg", hashlib.sha256).hexdigest())
PY</code></div></div><br />
[center][/center]<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">7) Sonuç</span></span><br />
Simetrik hız ve toplu gizlilik; asimetrik anahtar dağıtımı ve imza demektir. AES ve RSA rakip değil, tamamlayıcıdır. Labda OpenSSL ile deneyin; üretimde hazır, incelenmiş kütüphaneler ve KMS kullanın.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek: Geliştirici Anti-Pattern Listesi</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># 1) ECB ile "AES yaptık" demek
# 2) IV'yi sabit 0x00.. seçmek
# 3) RSA PKCS#1 v1.5 ile yeni protokol tasarlamak (mümkünse OAEP / modern KEM)
# 4) Private key'i uygulama imajına gömmek
# 5) "Gizlilik için" hash kullanmak
# 6) Kendi TLS'inizi yazmak</code></div></div><ul class="mycode_list"><li>Kütüphane seçimi: bakımı yapılan, sabit zamanlı ilkel sunan<br />
</li>
<li>Protokol seçimi: TLS 1.2+ (tercihen 1.3), zayıf suite'leri kapatın<br />
</li>
<li>Anahtar: en az AES-128 güvenliğine denk; pratikte AES-256 ve 2048+ RSA veya ECC<br />
</li>
</ul>
<br />
[center][/center]<br />
<br />
Şüphede kalırsanız: hazır yüksek seviye API (libsodium sealed box, age, Tink) kullanın; düşük seviye blok şifre modlarını kendiniz birleştirmeyin.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Ek Lab Komutları</span></span><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Rastgele AES anahtarı ve nonce (GCM için nonce 12 byte tipik)
openssl rand -hex 32
openssl rand -hex 12</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># Public key parmak izi (kendi anahtarınız)
openssl pkey -pubin -in /tmp/ed.pub -outform DER 2&gt;/dev/null | openssl dgst -sha256</code></div></div><br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># TLS 1.3 cipher gözlemi (kendi host)
echo | openssl s_client -connect 127.0.0.1:443 -tls1_3 2&gt;/dev/null | head</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP Cryptographic Storage Cheat Sheet</a><br />
</li>
<li><a href="https://www.openssl.org/docs/manmaster/man1/" target="_blank" rel="noopener" class="mycode_url">OpenSSL man sayfaları</a><br />
</li>
<li><a href="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf" target="_blank" rel="noopener" class="mycode_url">NIST FIPS 197 - AES</a><br />
</li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc8446" target="_blank" rel="noopener" class="mycode_url">RFC 8446 - TLS 1.3</a><br />
</li>
<li><a href="https://csrc.nist.gov/projects/post-quantum-cryptography" target="_blank" rel="noopener" class="mycode_url">NIST Post-Quantum Cryptography</a><br />
</li>
<li><a href="https://owasp.org/Top10/A02_2021-Cryptographic_Failures/" target="_blank" rel="noopener" class="mycode_url">OWASP A02 Cryptographic Failures</a><br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: 4pt;" class="mycode_size">Yasal Uyarı</span></span><br />
Kriptografi eğitimi sistemleri korumak içindir. İzinsiz şifre çözme, haberleşmeye müdahale veya sistemlere yetkisiz erişim TCK <span style="font-weight: bold;" class="mycode_b">243-245</span> ve ilgili kanunlar kapsamında suç olabilir. Lab anahtarlarını üretimde kullanmayın.<br />
<br />
<span style="font-style: italic;" class="mycode_i">Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).</span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=202" target="_blank" title="">000-team-new-2bdbcf.png</a> (Dosya Boyutu: 58.23 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hash Şifreleme Encoding Farkı: Kriptografi Temelleri Rehberi]]></title>
			<link>https://www.turkteam.org/konu-hash-sifreleme-encoding-farki-kriptografi-temelleri-rehberi.html</link>
			<pubDate>Fri, 16 Oct 2026 11:18:41 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://www.turkteam.org/member.php?action=profile&uid=2">Tonyukuk</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.turkteam.org/konu-hash-sifreleme-encoding-farki-kriptografi-temelleri-rehberi.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=25" loading="lazy"  alt="[Resim: attachment.php?aid=25]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hash, Şifreleme ve Encoding: Karıştırmayın</span></span><br />
<br />
Merhaba,<br />
<br />
Güvenlik tartışmalarında en çok karışan üç kavram: <span style="font-weight: bold;" class="mycode_b">hash</span>, <span style="font-weight: bold;" class="mycode_b">şifreleme (encryption)</span> ve <span style="font-weight: bold;" class="mycode_b">encoding</span>. Bu rehberde farklarını, ne zaman hangisinin kullanılacağını ve sık yapılan hataları anlatıyoruz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Encoding nedir? (Base64, URL encoding)<br />
</li>
<li>Hash nedir? (SHA-256, Blake2)<br />
</li>
<li>Şifreleme nedir? (AES, RSA)<br />
</li>
<li>Parola saklama: Hash + salt + KDF<br />
</li>
<li>Pratik komutlar<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1) Encoding</span></span><br />
Amacı gizlilik değil, <span style="font-weight: bold;" class="mycode_b">temsil</span> değiştirmektir. Base64 çözen herkes orijinal veriyi görür.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>echo -n "turkteam" | base64
echo "dHVya3RlYW0=" | base64 -d</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2) Hash</span></span><br />
Tek yönlü özet. Aynı girdi -&gt; aynı çıktı; girdiyi geri elde etmek tasarım gereği zor.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>echo -n "turkteam" | sha256sum
# Dosya bütünlüğü
sha256sum rapor.pdf</code></div></div>Hash <span style="font-weight: bold;" class="mycode_b">şifreleme değildir</span>; "hash'leyip sakladık, kimse okuyamaz" ifadesi yanlıştır (özellikle zayıf/tuzsuz parola hash'leri).<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3) Şifreleme</span></span><br />
Anahtarla geri dönüşümlü dönüşüm. Simetrik (AES) ve asimetrik (RSA/ECC) aileleri vardır.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># OpenSSL ile örnek (lab)
openssl rand -hex 16 &gt; key.bin
echo -n "gizli lab notu" | openssl enc -aes-256-cbc -pbkdf2 -pass file:key.bin -out not.enc
openssl enc -d -aes-256-cbc -pbkdf2 -pass file:key.bin -in not.enc</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4) Parola Saklama</span></span><ul class="mycode_list"><li>Düz metin veya Base64: asla<br />
</li>
<li>Tek başına SHA-256: yetersiz (GPU ile kırılır)<br />
</li>
<li>Doğru yaklaşım: <span style="font-weight: bold;" class="mycode_b">Argon2id / bcrypt / scrypt</span> gibi yavaş KDF + benzersiz salt<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5) Hızlı Karar Tablosu</span></span><ul class="mycode_list"><li>Veriyi geri okumam gerekiyor mu? -&gt; Şifreleme<br />
</li>
<li>Bütünlük / parmak izi mi? -&gt; Hash (HMAC ile daha iyisi)<br />
</li>
<li>Sadece taşıma formatı mı? -&gt; Encoding<br />
</li>
<li>Kullanıcı parolası mı? -&gt; KDF (Argon2id)<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP Password Storage Cheat Sheet</a><br />
</li>
<li><a href="https://www.openssl.org/docs/" target="_blank" rel="noopener" class="mycode_url">OpenSSL Documentation</a><br />
</li>
<li><a href="https://owasp.org/Top10/2025/A04_2025-Cryptographic_Failures/" target="_blank" rel="noopener" class="mycode_url">OWASP Top 10 2025 - A04 Cryptographic Failures</a><br />
</li>
</ul>
<br />
Görsel: TurkTeam özgün kapak görseli.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=25" target="_blank" title="">tonyukuk-16.jpg</a> (Dosya Boyutu: 100.34 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://www.turkteam.org/attachment.php?aid=25" loading="lazy"  alt="[Resim: attachment.php?aid=25]" class="mycode_img" /></div>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Hash, Şifreleme ve Encoding: Karıştırmayın</span></span><br />
<br />
Merhaba,<br />
<br />
Güvenlik tartışmalarında en çok karışan üç kavram: <span style="font-weight: bold;" class="mycode_b">hash</span>, <span style="font-weight: bold;" class="mycode_b">şifreleme (encryption)</span> ve <span style="font-weight: bold;" class="mycode_b">encoding</span>. Bu rehberde farklarını, ne zaman hangisinin kullanılacağını ve sık yapılan hataları anlatıyoruz.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Konuda Anlatılacaklar</span></span><br />
<ol type="1" class="mycode_list"><li>Encoding nedir? (Base64, URL encoding)<br />
</li>
<li>Hash nedir? (SHA-256, Blake2)<br />
</li>
<li>Şifreleme nedir? (AES, RSA)<br />
</li>
<li>Parola saklama: Hash + salt + KDF<br />
</li>
<li>Pratik komutlar<br />
</li>
</ol>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1) Encoding</span></span><br />
Amacı gizlilik değil, <span style="font-weight: bold;" class="mycode_b">temsil</span> değiştirmektir. Base64 çözen herkes orijinal veriyi görür.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>echo -n "turkteam" | base64
echo "dHVya3RlYW0=" | base64 -d</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2) Hash</span></span><br />
Tek yönlü özet. Aynı girdi -&gt; aynı çıktı; girdiyi geri elde etmek tasarım gereği zor.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code>echo -n "turkteam" | sha256sum
# Dosya bütünlüğü
sha256sum rapor.pdf</code></div></div>Hash <span style="font-weight: bold;" class="mycode_b">şifreleme değildir</span>; "hash'leyip sakladık, kimse okuyamaz" ifadesi yanlıştır (özellikle zayıf/tuzsuz parola hash'leri).<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3) Şifreleme</span></span><br />
Anahtarla geri dönüşümlü dönüşüm. Simetrik (AES) ve asimetrik (RSA/ECC) aileleri vardır.<br />
<div class="codeblock"><div class="title">Kod:</div><div class="body" dir="ltr"><code># OpenSSL ile örnek (lab)
openssl rand -hex 16 &gt; key.bin
echo -n "gizli lab notu" | openssl enc -aes-256-cbc -pbkdf2 -pass file:key.bin -out not.enc
openssl enc -d -aes-256-cbc -pbkdf2 -pass file:key.bin -in not.enc</code></div></div><br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4) Parola Saklama</span></span><ul class="mycode_list"><li>Düz metin veya Base64: asla<br />
</li>
<li>Tek başına SHA-256: yetersiz (GPU ile kırılır)<br />
</li>
<li>Doğru yaklaşım: <span style="font-weight: bold;" class="mycode_b">Argon2id / bcrypt / scrypt</span> gibi yavaş KDF + benzersiz salt<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5) Hızlı Karar Tablosu</span></span><ul class="mycode_list"><li>Veriyi geri okumam gerekiyor mu? -&gt; Şifreleme<br />
</li>
<li>Bütünlük / parmak izi mi? -&gt; Hash (HMAC ile daha iyisi)<br />
</li>
<li>Sadece taşıma formatı mı? -&gt; Encoding<br />
</li>
<li>Kullanıcı parolası mı? -&gt; KDF (Argon2id)<br />
</li>
</ul>
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Kaynakça</span></span><ul class="mycode_list"><li><a href="https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html" target="_blank" rel="noopener" class="mycode_url">OWASP Password Storage Cheat Sheet</a><br />
</li>
<li><a href="https://www.openssl.org/docs/" target="_blank" rel="noopener" class="mycode_url">OpenSSL Documentation</a><br />
</li>
<li><a href="https://owasp.org/Top10/2025/A04_2025-Cryptographic_Failures/" target="_blank" rel="noopener" class="mycode_url">OWASP Top 10 2025 - A04 Cryptographic Failures</a><br />
</li>
</ul>
<br />
Görsel: TurkTeam özgün kapak görseli.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://cdn.turkteam.org/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=25" target="_blank" title="">tonyukuk-16.jpg</a> (Dosya Boyutu: 100.34 KB / İndirme Sayısı: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>