---
title: 'Asimetrik Şifreleme'
source: 'https://academia.sh/tr/kurslar/kimlik-ve-kriptografi/asimetrik-sifreleme'
course: 'Kimlik, Erişim ve Kriptografi'
language: tr
updated: '2026-08-17T18:08:36+00:00'
license: 'CC BY-SA 4.0'
---

# Asimetrik Şifreleme

Açık ve özel anahtarın rollerinin ayrılması: dört anahtar-işlem birleşiminden ikisinin çalışması ve birinin gizlilik, ötekinin kaynak iddiası vermesi, 2048 bitlik modülde 190 baytlık üst sınır, gizli kalem sayısının 12.401 katılımcıda 7,69×10^7'den 12.401'e inmesi ve taşınan gizli kalemin sıfırlanması, melez kullanımın şişmeyi yüzde 38'den yüzde 7'ye indirmesi.

Önceki dersin çözümsüz kalemi tek bir cümledeydi: şifreli konuşmaya başlayabilmek için önceden
paylaşılmış bir sır gerekiyor ve o sırrı paylaşmanın kendisi şifreli bir kanal istiyor. Döngü
simetrik şifrelemenin içinde kırılamaz, çünkü tek anahtar hem kilidi hem açarı taşır.

Bu ders kilidi ikiye ayırır. Birlikte üretilen iki anahtardan biri kilitler, öteki açar; ikisi
birbirinin yerine geçmez ve biri herkese verilebilir. Ayrımın kendisi sayılabilir bir soruya
dönüşür: dört olası anahtar-işlem birleşiminden hangisi çalışır ve çalışanlar ne sağlar?

## İki Anahtar, Bir Çift

**KT14:** asimetrik şifrelemede iki anahtar birlikte üretilir ve matematiksel olarak bağlıdır.
Biriyle yapılan işlem yalnızca ötekiyle geri alınır; aynı anahtarla geri alınmaz.

**KT15:** açık anahtarla şifreleme gizlilik verir — çıktıyı yalnızca özel anahtarın sahibi
okuyabilir. Özel anahtarla şifreleme gizlilik vermez, çünkü açık anahtar herkestedir; taşıdığı
şey kaynak iddiasıdır.

```js
// asim/rol.mjs — acik ve ozel anahtarin hangi islemi hangi yonde yaptigi gercekten
// kosturulur. Kurgu bolgesel olcum aginda merkez icin bir anahtar cifti uretilir;
// anahtar malzemesi yazdirilmaz, yalnizca uzunluk ve sonuc yazilir.
import { generateKeyPairSync, publicEncrypt, privateDecrypt,
         privateEncrypt, publicDecrypt, constants } from "node:crypto";

// KT14: asimetrik sifrelemede iki anahtar birlikte uretilir; biriyle yapilan islem
//       yalnizca otekiyle geri alinir, ayni anahtarla geri alinmaz.
// KT15: acik anahtarla sifreleme gizlilik verir (yalniz ozel anahtar sahibi okur);
//       ozel anahtarla sifreleme gizlilik vermez, kaynak iddiasini tasir.

const BIT = 2048;
const { publicKey: ACIK, privateKey: OZEL } = generateKeyPairSync("rsa", { modulusLength: BIT });
const OKUMA = "SAY-4417|2026-03-01T06:00Z|41982";
const OAEP = { oaepHash: "sha256", padding: constants.RSA_PKCS1_OAEP_PADDING };
const dene = (f) => { try { return f().toString() === OKUMA ? "evet" : "hayir"; }
                      catch { return "hayir"; } };
const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));

const oaepSifreli = publicEncrypt({ key: ACIK, ...OAEP }, Buffer.from(OKUMA));
const ozelSifreli = privateEncrypt(OZEL, Buffer.from(OKUMA));
const R = [-12, -12, 9, -24];
yaz(R, "sifreleyen", "geri alan", "calisti", "  ne saglar");
for (const [a, b, f, ne] of [
  ["acik", "ozel", () => privateDecrypt({ key: OZEL, ...OAEP }, oaepSifreli), "gizlilik"],
  ["acik", "acik", () => publicDecrypt(ACIK, oaepSifreli), "-"],
  ["ozel", "acik", () => publicDecrypt(ACIK, ozelSifreli), "kaynak iddiasi"],
  ["ozel", "ozel", () => privateDecrypt(OZEL, ozelSifreli), "-"],
]) yaz(R, a, b, dene(f), "  " + ne);

const enCok = BIT / 8 - 2 * 32 - 2;                  // OAEP-SHA256 icin ust sinir
const sigar = (n) => { try { publicEncrypt({ key: ACIK, ...OAEP }, Buffer.alloc(n));
                             return "evet"; } catch { return "hayir"; } };
console.log(`\nmodul ${BIT} bit = ${BIT / 8} bayt; OAEP-SHA256 ust siniri ${enCok} bayt`);
const S = [10, 9, 12];
yaz(S, "duz metin", "sigdi", "sifreli boy");
for (const n of [32, enCok, enCok + 1])
  yaz(S, n + " bayt", sigar(n), sigar(n) === "evet"
    ? publicEncrypt({ key: ACIK, ...OAEP }, Buffer.alloc(n)).length + " bayt" : "-");
console.log(`okuma ${Buffer.byteLength(OKUMA)} bayt; sifreli hali ${oaepSifreli.length} bayt`);
```

```
sifreleyen  geri alan     calisti  ne saglar
acik        ozel             evet  gizlilik
acik        acik            hayir  -
ozel        acik             evet  kaynak iddiasi
ozel        ozel            hayir  -

modul 2048 bit = 256 bayt; OAEP-SHA256 ust siniri 190 bayt
 duz metin    sigdi sifreli boy
   32 bayt     evet    256 bayt
  190 bayt     evet    256 bayt
  191 bayt    hayir           -
okuma 32 bayt; sifreli hali 256 bayt
```

Dört birleşimin ikisi çalışır ve ikisi çalışmaz. Çalışmayan iki satır aynı şeyi söyler: bir
anahtarla yapılan işlem o anahtarla geri alınmaz. Bu, simetrik düzenle arasındaki tek yapısal
farktır ve dersin geri kalanı bu farkın sonuçlarını sayar.

Çalışan iki satır ise birbirinin karşıtıdır. **Açık anahtarla şifrele, özel anahtarla çöz**
yönü gizlilik verir: açık anahtar herkeste olduğu için herkes merkeze şifreli okuma
gönderebilir, ama okuyabilen tek taraf özel anahtarın sahibidir. Kurgu ölçüm ağında bunun
anlamı, 12.400 sayaç ucunun hiçbirinin ötekinin gönderdiğini okuyamamasıdır.

**Özel anahtarla şifrele, açık anahtarla geri al** yönü ise gizlilik vermez — açık anahtar
herkeste olduğu için çıktıyı herkes geri alabilir. Verdiği şey kaynak iddiasıdır: geri alma
başarılıysa, işlemi yapan taraf özel anahtarı elinde tutan taraftır. Bu yön dijital imzanın
temelidir ve yedinci derste kendi biçimiyle ele alınır.

Alt tablo asimetrik şifrelemenin ikinci kısıtını verir. Modül 256 bayttır ve dolgu düzeni bunun
66 baytını tüketir; taşınabilecek en büyük düz metin 190 bayttır. 190 bayt çalışır, 191 bayt
çalışmaz. Çıktı ise girdi ne olursa olsun 256 bayttır — 32 baytlık bir okuma da 256 bayta çıkar,
sekiz katlık bir şişme.

## Gizli Kalem Sayısı ve Melez Kullanım

Boyut sınırı bir engel gibi görünür ama asıl ölçüm başka yerdedir: bu düzen kaç gizli kalem
gerektiriyor ve bunların kaçı taşınıyor?

```js
// asim/kalem.mjs — asimetrik duzenin gizli kalem sayisina etkisi ve buyuk veri icin
// melez kullanim (model + kosan olcum). Katilimci sayilari kurgudur.
import { generateKeyPairSync, publicEncrypt, privateDecrypt, randomBytes,
         createCipheriv, createDecipheriv, constants } from "node:crypto";

// KT16: asimetrik duzen gizli kalem sayisini n(n-1)/2'den n'e indirir ve gizli kalemlerin
//       hicbiri tasinmaz; tasinan tek sey acik anahtardir ve o gizli degildir.

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const say = (x) => x >= 1e7 ? x.toExponential(2) : Math.round(x).toLocaleString("tr-TR");
const A = [10, 12, 11, 11, 14, 14];
yaz(A, "katilimci", "simetrik", "asimetrik", "asimetrik", "tasinan gizli", "tasinan gizli");
yaz(A, "", "gizli kalem", "gizli", "acik", "kalem (sim)", "kalem (asim)");
for (const n of [2, 7, 40, 12_401]) {
  const c = (n * (n - 1)) / 2;
  yaz(A, say(n), say(c), say(n), say(n), say(c), 0);
}

const { publicKey: ACIK, privateKey: OZEL } = generateKeyPairSync("rsa", { modulusLength: 2048 });
const OAEP = { oaepHash: "sha256", padding: constants.RSA_PKCS1_OAEP_PADDING };
const YIGIN = Buffer.alloc(4096, 65);                // kurgu gunluk okuma yigini
const UST = 190;                                     // OAEP-SHA256 ust siniri

const anahtar = randomBytes(32), nonce = randomBytes(12);
const s = createCipheriv("aes-256-gcm", anahtar, nonce);
const govde = Buffer.concat([s.update(YIGIN), s.final()]), etiket = s.getAuthTag();
const zarf = publicEncrypt({ key: ACIK, ...OAEP }, anahtar);
const c = createDecipheriv("aes-256-gcm", privateDecrypt({ key: OZEL, ...OAEP }, zarf), nonce);
c.setAuthTag(etiket);
const geri = Buffer.concat([c.update(govde), c.final()]);

console.log(`\n${YIGIN.length} baytlik yigin iki yolla tasinsa:`);
const B = [-16, 12, 12, 12, 10];
yaz(B, "yol", "asimetrik", "simetrik", "cikti bayt", "sisme");
const dogrudan = Math.ceil(YIGIN.length / UST);
yaz(B, "dogrudan RSA", dogrudan, 0, say(dogrudan * 256),
    "%" + Math.round((dogrudan * 256 / YIGIN.length - 1) * 100));
const melez = zarf.length + nonce.length + govde.length + etiket.length;
yaz(B, "melez", 1, 1, say(melez), "%" + Math.round((melez / YIGIN.length - 1) * 100));
console.log("melez yol yigini aynen geri verdi mi:", geri.equals(YIGIN) ? "evet" : "hayir");
```

```
 katilimci    simetrik  asimetrik  asimetrik tasinan gizli tasinan gizli
           gizli kalem      gizli       acik   kalem (sim)  kalem (asim)
         2           1          2          2             1             0
         7          21          7          7            21             0
        40         780         40         40           780             0
    12.401     7.69e+7     12.401     12.401       7.69e+7             0

4096 baytlik yigin iki yolla tasinsa:
yol                asimetrik    simetrik  cikti bayt     sisme
dogrudan RSA              22           0       5.632       %38
melez                      1           1       4.380        %7
melez yol yigini aynen geri verdi mi: evet
```

Birinci tablonun ikinci ve üçüncü sütunu önceki dersin sorusunu kapatır. 12.401 katılımcı için
simetrik düzen 7,69×10^7 gizli kalem isterken asimetrik düzen 12.401 ister — kareselden
doğrusala iner. Açık anahtar sayısı da 12.401'dir ama o kalemler gizli değildir ve gizli
olmayan bir kalemin yönetim maliyeti bambaşkadır.

Asıl sayı son sütundadır ve sıfırdır. Simetrik düzende her gizli kalem iki tarafa **taşınmak**
zorundadır; 12.401 uçlu ağda bu 7,69×10^7 taşıma demektir ve önceki derste sayılan elle
kalemlerin kaynağı buydu. Asimetrik düzende taşınan gizli kalem yoktur: her taraf kendi özel
anahtarını kendi üretir ve hiçbir yere göndermez. Taşınan tek şey açık anahtardır ve o açık
kanaldan gidebilir.

İkinci tablo boyut sınırının nasıl aşıldığını gösterir. 4096 baytlık bir yığın doğrudan
asimetrik şifrelemeyle taşınırsa 22 ayrı işlem gerekir ve çıktı 5.632 bayta, yüzde 38 şişmeye
çıkar. Melez yolda ise asimetrik şifreleme yalnızca 32 baytlık bir simetrik anahtarı taşır;
yığının kendisi simetrik kiple şifrelenir. İşlem sayısı bire iner, çıktı 4.380 bayt olur ve
şişme yüzde 7'ye düşer. Son satır bu yolun gerçekten çalıştığını doğrular.

İşlem sayısındaki fark yalnız bir bayt hesabı değildir. Asimetrik işlemler simetrik işlemlerden
kat kat pahalıdır ve doğrudan yol, 4 kilobaytlık bir yığın için bu pahalı işlemi 22 kez
tekrarlar. Melez yolda pahalı işlem bir kez yapılır ve yığının tamamı ucuz işlemle taşınır.
Kurgu ağda günde 12.400 yığın işleniyorsa, iki yol arasındaki fark günlük 273.000 fazladan
asimetrik işlemdir.

Melez düzenin ayrımı nettir: asimetrik şifreleme **anahtar taşır**, simetrik şifreleme **veri
taşır**. Her ikisinin de zinciri kendi dersindeki gibi kalır; melez yolda zincir uzar, çünkü
artık hem özel anahtarın gizliliği hem de simetrik zincirin dört kalemi aynı anda doğru olmak
zorundadır.

## Anahtar Uzunlukları Neden Karşılaştırılamaz

Simetrik anahtar 256 bit, buradaki asimetrik anahtar 2048 bitti. Sayılar aynı ölçekte
okunamaz, çünkü iki düzenin güvenliği farklı yerden gelir. Simetrik anahtarda tek yol anahtarı
tek tek denemektir ve maliyet 2^256'dır. Asimetrik anahtarda ise açık anahtar, özel anahtarla
matematiksel olarak bağlıdır ve o bağı çözmenin tek tek denemekten ucuz yolları vardır; anahtar
uzunluğu bu ucuz yolları karşılamak için büyütülür.

| Düzen | Anahtar biti | Eşdeğer simetrik güvenlik | Anahtar/çıktı boyu |
|---|---|---|---|
| simetrik | 128 | 128 bit | 16 bayt |
| simetrik | 256 | 256 bit | 32 bayt |
| çarpanlara ayırmaya dayalı | 2048 | yaklaşık 112 bit | 256 bayt |
| çarpanlara ayırmaya dayalı | 3072 | yaklaşık 128 bit | 384 bayt |
| eliptik eğriye dayalı | 256 | yaklaşık 128 bit | 32 bayt |

Tablonun okunuşu şudur: 2048 bitlik bir asimetrik anahtar, 256 bitlik bir simetrik anahtarın
sağladığı güvenliğe yaklaşmaz; yaklaşık 112 bitlik bir simetrik anahtara denktir. Eşdeğerliği
yükseltmek için asimetrik tarafta anahtarı 3072 bite çıkarmak gerekir ve bu, her işlemin
çıktısını 384 bayta taşır.

Son satır ayrı bir seçenektir. Eliptik eğriye dayalı düzende aynı eşdeğerlik 256 bitlik bir
anahtarla, yani 32 baytla elde edilir. Kurgu ölçüm ağında bu fark doğrudan kaleme çevrilir:
12.400 uç her mesajda 256 baytlık bir zarf taşırsa günlük yük, 32 baytlık zarfa göre sekiz
katıdır. Kısıtlı uçlarda seçimi belirleyen şey algoritmanın adı değil, bu boyut aritmetiğidir.

## Kökün Adı ve Kanıtlanmayan Kalem

Güven kökü burada tek bir kalemdir: özel anahtarın yalnızca sahibinde bulunması. Bu kalem
anahtarın üretildiği anda doğar ve üretimin nerede yapıldığı kökün ilk kalemidir. Anahtar çifti
merkezde üretilip uçlara dağıtılırsa, özel anahtar en az bir kez taşınmış olur ve önceki dersin
taşıma sorunu geri gelir; her uç kendi çiftini kendi üretirse taşınan gizli kalem sıfır kalır.
Kendi üretimin kendi koşulu vardır: uçtaki rastgele sayı üretecinin öngörülemez olması. Öngörülebilir
bir üreteçle üretilmiş bir çiftte özel anahtar hiç sızmasa bile yeniden üretilebilir. Kök kırıldığında
düşen kalem sayısı simetrik düzenden farklıdır. Bir özel anahtar sızarsa, o anahtar sahibine
gönderilmiş bütün geçmiş ve gelecek mesajlar düşer; 12.401 katılımcılı ağda merkeze gelen bütün
trafiktir bu. Yenileme ise ucuzdur — yeni bir çift üretilir ve **açık** anahtar dağıtılır; gizli
bir kalem taşınmaz.

Kökün nerede durduğu ayrı bir kalem sayısıdır. Özel anahtar merkezde bir dosyada duruyorsa, ona
erişebilen kalemler tek tek sayılabilir: dosyanın izin kaydı, dosyayı okuyan sürecin belleği,
yedek kopyası, yedeğin taşındığı ortam ve dağıtımı yapan otomasyonun eriştiği kopya — beş kalem.
Beşinin beşi aynı anda doğru tutulmalıdır ve herhangi birindeki kusur kökü açar.

Anahtarın hiç dışarı çıkmadığı bir **donanım güvenlik birimi** içinde üretilip orada tutulması
bu sayıyı değiştirir. Anahtar birimin dışına çıkmadığı için okunacak bir dosya, alınacak bir
yedek ve taşınacak bir kopya yoktur; geriye tek bir kalem kalır — birimi kullanma yetkisi. Kalem
sayısı beşten bire iner. Bedeli de sayılabilir: anahtar dışarı çıkarılamadığı için yedeği de
alınamaz ve birim kaybolursa anahtar kalıcı olarak kaybolur, yani yenileme 12.401 uçta açık
anahtar dağıtımı demektir.

Ama zincirde adı konmamış bir kalem daha vardır ve bu ders onu kapatmaz. Bir sayaç ucu merkeze
şifreli okuma göndermek için merkezin açık anahtarını kullanır. O açık anahtarın gerçekten
merkeze ait olduğunu kanıtlayan hiçbir şey yoktur. Açık anahtar gizli olmadığı için açık
kanaldan gelir ve açık kanaldan gelen her şey değiştirilebilir. Yanlış bir açık anahtarla
şifrelenen okuma, o anahtarın özel eşini elinde tutan tarafça okunur.

Bu kalem, kursun ikinci konusunun tamamının konusudur. Bu derste yalnızca sayılabilir: dört
birleşimden ikisi çalışıyor, gizli kalem sayısı doğrusala iniyor, taşınan gizli kalem sıfır —
ve **açık anahtarın sahibi hâlâ doğrulanmamış** durumda.

## Özet

- Açık ve özel anahtar birlikte üretilir; dört anahtar-işlem birleşiminden ikisi çalışır ve bir
  anahtarla yapılan işlem aynı anahtarla geri alınmaz.
- Açık anahtarla şifrelemek gizlilik verir; özel anahtarla şifrelemek gizlilik vermez, kaynak
  iddiası taşır.
- 2048 bitlik modülde taşınabilecek en büyük düz metin 190 bayttır ve çıktı girdi ne olursa
  olsun 256 bayttır.
- Asimetrik düzen gizli kalem sayısını 12.401 katılımcıda 7,69×10^7'den 12.401'e indirir;
  taşınan gizli kalem sayısı sıfırdır.
- Melez kullanımda asimetrik şifreleme anahtarı, simetrik şifreleme veriyi taşır: 4096 baytlık
  yığında işlem sayısı 22'den 1'e, şişme yüzde 38'den yüzde 7'ye iner.
- Güven kökü özel anahtarın gizliliğidir; açık anahtarın kime ait olduğu bu düzende
  kanıtlanmaz.

## Sonraki Adım

Melez yol anahtarı taşıdı ama taşınan anahtarı gönderen taraf **seçti**. Bunun iki sonucu var.
Birincisi, oturum anahtarının kalitesi tümüyle o tarafın üretecine bağlı. İkincisi ve daha
ağırı: kaydedilmiş şifreli trafik saklanır ve merkezin özel anahtarı yıllar sonra sızarsa,
o güne kadarki bütün oturum anahtarları zarflardan geri çıkarılır ve geçmiş trafiğin tamamı
açılır. Sonraki ders bu iki sonucu birden ortadan kaldıran bir yöntemi küçük parametrelerle
gerçekten koşturuyor: iki tarafın da katkı verdiği, kanaldan hiç geçmeyen ve hiçbir tarafın tek
başına belirlemediği bir ortak sır. Dinleyicinin elinde kalan kalemler tek tek sayılacak.
