---
title: 'Parola Saldırıları'
source: 'https://academia.sh/tr/kurslar/saldiri-teknikleri/parola-saldirilari'
course: 'Saldırı Teknikleri ve Tehdit Ortamı'
language: tr
updated: '2026-08-17T18:08:33+00:00'
license: 'CC BY-SA 4.0'
---

# Parola Saldırıları

Üç parola saldırısı biçiminin maliyet ve eşik ekseninde ayrılması: dört yüz kurgu hesapta kaba kuvvetin yüz doksan, sözlüğün yüz seksen, püskürtmenin on sekiz hesabı düşürmesi, hesap kilitlemenin üç biçimin ikisini durdurup düşen hesabı yüzde seksen yedi azaltması, püskürtmenin hesap başına üç deneme ile kilitleme eşiğini hiç tetiklememesi ve üç biçimi de gören iki eşiğin toplam meşru bedelinin dört olması.

Önceki dersin zincirinde bir alanın sınırı yoktu ve savunma o sınırı koymakla ilgiliydi. Bu
dersin sınıfında sınır zaten vardır: bir kimlik denemesi kabul edilir ya da edilmez, deneme
sayısı sayılır ve bir eşiğe bağlanır. Saldıran sınırı aşmaya değil, **altında kalmaya** çalışır.

Üç biçim ayrılır. **Kaba kuvvet** tek bir hesaba çok sayıda aday dener. **Sözlük** aynı şeyi
daha kısa ve daha olası bir aday dizisiyle yapar. **Püskürtme** ise tersine döner: çok sayıda
hesaba, her birine yalnız birkaç aday dener. Üçü de aynı zinciri kullanır, ama eşik karşısındaki
davranışları farklıdır ve bu ders o farkı sayar. Hiçbir parola, aday listesi ya da deneme
betiği yazılmaz; her hesabın parolası yalnız **sıralı bir aday dizisinde kaçıncı sırada olduğu**
sayısıyla temsil edilir.

## Zincirin Altı Adımı

1. **Geçerli kullanıcı adı kümesi.** Önkoşul: hesap adları biliniyor ya da öğrenilebiliyor.
2. **Deneme kanalı açık.** Önkoşul: uç kimlik denemesi kabul ediyor.
3. **Deneme bütçesi eşiğin altında kalıyor.** Önkoşul: kullanılan ölçekte sayan bir eşik bu
   hızı görmüyor.
4. **Doğru eşleşme bulunuyor.** Önkoşul: parola, bütçenin kapsadığı aday aralığında.
5. **İkinci etmen istenmiyor.** Önkoşul: hesapta ikinci bir doğrulama etmeni tanımlı değil.
6. **Oturum kuruluyor ve kullanılıyor.** Önkoşul: oturum davranışı üzerinde bir denetim yok.

Üçüncü adım bu dersin ölçtüğü adımdır ve tek bir eşiğe değil, eşiğin **ölçeğine** bağlıdır.
Aynı eşik değeri, hesap başına sayıldığında bir biçimi durdurur, kaynak başına sayıldığında
başkasını.

Beşinci ve altıncı adımlar ölçümün dışında tutulur ama zincirin parçasıdır. İkinci bir
doğrulama etmeni tanımlıysa dördüncü adım tamamlansa bile zincir beşinci adımda kırılır:
doğru parola bulunmuştur ve hiçbir işe yaramaz. Oturum davranışı üzerindeki bir denetim ise
altıncı adımı kırar; orada zincir tamamlanmıştır ve ölçü tespite kaymıştır. Bu iki adım,
üçüncü adımın hiç kırılamadığı durumlarda geriye kalan tek savunmadır — ve bu dersin bütün
sayıları onlar yokmuş gibi hesaplanır, çünkü ölçülen şey eşiğin kendisidir.

**TS26:** hesap kümesi kurgudur; `sira`, parolanın sıralı aday dizisindeki yeridir. **TS27:** üç
eşik üç ayrı ölçekte sayar. **TS28:** üç biçim yalnızca iki sayıyla ayrılır — kaç hesaba
dokunduğu ve hesap başına kaç deneme yaptığı. **TS29:** süre, hız sınırının izin verdiği azami
hızda hesaplanır.

```js
// ps/model.mjs — parola saldirisi maliyet modeli. Hicbir parola, sozluk ya da deneme
// betigi yok; her hesabin parolasi yalnizca "sirali bir aday dizisinde kacinci sirada
// oldugu" sayisiyla temsil edilir.
export const HESAP_SAYISI = 400;

// Kendi yazilan uretec; tohum gorunur, kosumdan kosuma ayni sonucu verir.
function uretec(tohum) {
  let s = tohum >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296;
}

export const KOVA = [[24, 1, 5], [60, 6, 500], [96, 501, 50000], [40, 50001, 5000000]];

export function hesaplar(tohum = 20260802) {
  const r = uretec(tohum);
  const h = [];
  for (const [adet, alt, ust] of KOVA)
    for (let i = 0; i < adet; i++) h.push({ sira: alt + Math.floor(r() * (ust - alt + 1)) });
  while (h.length < HESAP_SAYISI) h.push({ sira: Infinity });
  return h;
}

// mesru = kurgu gunluk yanlis kalma (dogru kullanicinin engellenmesi).
export const ESIK = [
  { ad: "hesap-kilitleme", olcek: "hesap", limit: 5, mesru: 30 },
  { ad: "kaynak-hiz-siniri", olcek: "kaynak", limit: 60, mesru: 4 },
  { ad: "genel-oran-esigi", olcek: "sistem", limit: 200, mesru: 0 },
];

export const BICIM = [
  { ad: "kaba-kuvvet", hesap: 1, butce: 1000000 },
  { ad: "sozluk", hesap: 1, butce: 50000 },
  { ad: "puskurtme", hesap: HESAP_SAYISI, butce: 3 },
];

export const sure = (deneme) => {
  const dk = deneme / ESIK[1].limit;
  return dk < 1 ? `${(dk * 60).toFixed(0)} sn` : dk < 60 ? `${dk.toFixed(0)} dk`
    : dk < 1440 ? `${(dk / 60).toFixed(1)} sa`
    : `${(dk / 1440).toFixed(1)} gun`;
};

export const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
```

```js
// ps/olcum.mjs — uc bicim uc esik altinda kosturulur: hesap basina kac deneme, hangi esik
// kacinci denemede devreye giriyor, kac hesap dusuyor ve ne kadar surede. Rastgelelik
// uretecten gelir, tohum gorunurdur; kosumdan kosuma ayni sonuc cikar.
import { HESAP_SAYISI, hesaplar, ESIK, BICIM, sure, yaz } from "./model.mjs";

const H = hesaplar();
const kova = (h) => h.sira <= 5 ? "ilk 5" : h.sira <= 500 ? "ilk 500"
  : h.sira <= 50000 ? "ilk 50.000" : h.sira <= 5000000 ? "ilk 5.000.000" : "butce disi";
const KOVALAR = ["ilk 5", "ilk 500", "ilk 50.000", "ilk 5.000.000", "butce disi"];

console.log(`${HESAP_SAYISI} kurgu hesap, ${BICIM.length} bicim, ${ESIK.length} esik\n`);

const A = [-16, 9, 9];
console.log("1. hesaplarin aday dizisindeki dagilimi");
yaz(A, "kova", "hesap", "pay");
for (const k of KOVALAR) {
  const n = H.filter((h) => kova(h) === k).length;
  yaz(A, k, n, `%${((n / HESAP_SAYISI) * 100).toFixed(1)}`);
}

// Bir esik bicimi gorur mu: hesap olcegi hesap basina, kaynak ve sistem olcegi toplam
// deneme uzerinden sayar.
const gorur = (b, e) => (e.olcek === "hesap" ? b.butce : b.hesap * b.butce) > e.limit;

const B = [-13, 8, 15, 16, 16, 20];
console.log("\n2. bicim basina esik davranisi");
yaz(B, "bicim", "hesap", "hesap basina", "toplam deneme", "kilitleme", "ilk goren esik");
for (const b of BICIM) {
  const goren = ESIK.filter((e) => gorur(b, e));
  yaz(B, b.ad, b.hesap, b.butce, b.hesap * b.butce,
    gorur(b, ESIK[0]) ? `${ESIK[0].limit}. denemede` : "tetiklenmiyor",
    goren.length ? goren[0].ad : "yok");
}

// Her bicim her hesabi sirayla hedef alsaydi kac hesap duserdi.
const dusen = (b, kilitVar) => {
  const butce = kilitVar ? Math.min(b.butce, ESIK[0].limit) : b.butce;
  return H.filter((h) => h.sira <= butce).length;
};

const C = [-13, 14, 15, 20, 8, 20];
console.log("\n3. hedef alinan hesaplardan kaci duser");
yaz(C, "bicim", "kilitleme yok", "kilitleme var", "kilitlemenin farki", "fark", "hesap basina sure");
for (const b of BICIM) {
  const y = dusen(b, false), v = dusen(b, true);
  yaz(C, b.ad, `${y}/${HESAP_SAYISI}`, `${v}/${HESAP_SAYISI}`, y - v,
    `%${(((y - v) / Math.max(y, 1)) * 100).toFixed(0)}`, sure(b.butce));
}
console.log(`kilitlemenin dusen hesap sayisini azalttigi bicim: ` +
  `${BICIM.filter((b) => dusen(b, false) > dusen(b, true)).length}/${BICIM.length}`);

const p = BICIM[2];
const D = [-18, 10, 10, 18];
console.log("\n4. puskurtmeyi hangi esik gorur");
yaz(D, "esik", "olcek", "limit", "gorur mu");
for (const e of ESIK)
  yaz(D, e.ad, e.olcek, e.limit, gorur(p, e) ? `${e.limit}. denemede` : "gormuyor");
console.log(`puskurtme hesap basina ${p.butce} deneme yapar; kilitleme esigi ${ESIK[0].limit} ` +
  `oldugu icin hicbir hesapta tetiklenmez. Toplam ${p.hesap * p.butce} deneme oran esigini ` +
  `${(p.hesap * p.butce / ESIK[2].limit).toFixed(1)} kat asar, suresi ${sure(p.hesap * p.butce)}`);

const E = [-18, 9, 12, 34];
console.log("\n5. esiklerin mesru bedeli");
yaz(E, "esik", "mesru", "goren bicim", "gordugu bicimler");
for (const e of ESIK) {
  const g = BICIM.filter((b) => gorur(b, e));
  yaz(E, e.ad, e.mesru, `${g.length}/${BICIM.length}`, g.map((b) => b.ad).join(",") || "-");
}
console.log(`toplam mesru bedel ${ESIK.reduce((t, e) => t + e.mesru, 0)} kurgu kalem/gun; ` +
  `uc bicimi de goren iki esigin toplam bedeli ${ESIK[1].mesru + ESIK[2].mesru}`);
```

```
400 kurgu hesap, 3 bicim, 3 esik

1. hesaplarin aday dizisindeki dagilimi
kova                hesap      pay
ilk 5                  24     %6.0
ilk 500                60    %15.0
ilk 50.000             96    %24.0
ilk 5.000.000          40    %10.0
butce disi            180    %45.0

2. bicim basina esik davranisi
bicim           hesap   hesap basina   toplam deneme       kilitleme      ilk goren esik
kaba-kuvvet         1        1000000         1000000     5. denemede     hesap-kilitleme
sozluk              1          50000           50000     5. denemede     hesap-kilitleme
puskurtme         400              3            1200   tetiklenmiyor   kaynak-hiz-siniri

3. hedef alinan hesaplardan kaci duser
bicim         kilitleme yok  kilitleme var  kilitlemenin farki    fark   hesap basina sure
kaba-kuvvet         190/400         24/400                 166     %87            11.6 gun
sozluk              180/400         24/400                 156     %87             13.9 sa
puskurtme            18/400         18/400                   0      %0                3 sn
kilitlemenin dusen hesap sayisini azalttigi bicim: 2/3

4. puskurtmeyi hangi esik gorur
esik                   olcek     limit          gorur mu
hesap-kilitleme        hesap         5          gormuyor
kaynak-hiz-siniri     kaynak        60      60. denemede
genel-oran-esigi      sistem       200     200. denemede
puskurtme hesap basina 3 deneme yapar; kilitleme esigi 5 oldugu icin hicbir hesapta tetiklenmez. Toplam 1200 deneme oran esigini 6.0 kat asar, suresi 20 dk

5. esiklerin mesru bedeli
esik                  mesru goren bicim                  gordugu bicimler
hesap-kilitleme          30         2/3                kaba-kuvvet,sozluk
kaynak-hiz-siniri         4         3/3      kaba-kuvvet,sozluk,puskurtme
genel-oran-esigi          0         3/3      kaba-kuvvet,sozluk,puskurtme
toplam mesru bedel 34 kurgu kalem/gun; uc bicimi de goren iki esigin toplam bedeli 4
```

## İki Sayı, Üç Biçim

İkinci çıktı üç biçimi yalnız iki sayıyla ayırır: kaç hesaba dokunuyor, hesap başına kaç
deneme yapıyor. Kaba kuvvet 1 hesap ve 1.000.000 deneme; sözlük 1 hesap ve 50.000; püskürtme
400 hesap ve **3** deneme.

Toplam deneme sayısı sıralamayı tersine çevirmez ama yanıltıcıdır: püskürtmenin toplamı
1.200'dür ve kaba kuvvetin binde birinden azdır. Buna karşılık kaba kuvvet tek bir hesabı
hedefler, püskürtme dört yüzünü. **Bir saldırı biçimini toplam deneme sayısıyla anmak, hangi
eşiğin onu göreceğini söylemez.**

Kilitleme sütunu farkı doğrudan verir. Kaba kuvvet ve sözlük beşinci denemede kilitlemeye
takılır; püskürtme hiç takılmaz. Nedeni tek bir karşılaştırmadır: kilitleme **hesap başına**
sayar ve püskürtmenin hesap başına deneme sayısı eşiğin altındadır. Eşiği 5'ten 3'e indirmek
de yetmez; püskürtme bütçesini 2'ye indirir ve yine altta kalır. **Hesap ölçeğinde sayan bir
eşik, hesap ölçeğinde küçük kalan bir biçimi tanım gereği görmez.**

## Kaç Hesap Düşüyor

Üçüncü çıktı her biçimin bütün hesapları sırayla hedef alması durumunu ölçer. Kilitleme
yokken kaba kuvvet 400 hesabın 190'ını, sözlük 180'ini, püskürtme 18'ini düşürür. Kilitleme
varken üç biçimin de hesap başına bütçesi 5'e iner: kaba kuvvet ve sözlük **24 hesaba** düşer,
püskürtme **18'de kalır**.

Kilitlemenin farkı ilk iki biçimde 166 ve 156 hesaptır — düşen hesap sayısının **%87'si**.
Püskürtmede fark sıfırdır. Bu iki sayının yan yana durması bu dersin sonucudur: aynı eşik, iki
biçimde savunmanın en güçlü kalemi, üçüncüde hiçbir şeydir.

Kilitleme altında üç biçimin de aynı sayıya yaklaşması ayrıca dikkat çekicidir: 24, 24 ve 18.
Hesap başına bütçe beşe indiğinde biçimler arasındaki bütün fark silinir, çünkü fark bütçenin
kendisinden geliyordu. Kilitleme bir saldırı biçimini değil, **bütçeyi** hedefler; bu yüzden
bütçesi zaten küçük olan biçim üzerinde hiçbir etkisi olmaz.

Süre sütunu maliyetin öteki yüzünü verir. Hız sınırının izin verdiği azami hızda kaba kuvvet
tek bir hesap için **11,6 gün**, sözlük **13,9 saat**, püskürtme **3 saniye** sürer. Püskürtme
yalnız kilitlemeden kaçmakla kalmaz; on sekiz hesabı, kaba kuvvetin bir hesap için harcadığı
sürenin milyonda birinde düşürür.

Sürenin kendisi de bir savunma değildir, bir **bütçe kısıtıdır**. On bir günlük bir koşum
boyunca hiçbir eşik devreye girmese bile, o süre boyunca denemenin sürdürülebilir olması
gerekir: bağlantının açık kalması, kaynağın engellenmemesi, hesabın silinmemesi. Hız
sınırının asıl işlevi bu bütçeyi büyütmektir; düşen hesap sayısını doğrudan azaltmaz, düşme
için gereken süreyi uzatır ve bu süre boyunca tespitin çalışması için yer açar.

Birinci çıktı bu farkın nereden geldiğini söyler. Hesapların %6'sı ilk beş adayın içindedir,
%45'i hiçbir bütçede bulunamaz. Bütçeyi 50.000'den 1.000.000'a çıkarmak düşen hesabı 180'den
yalnız 190'a taşır — **yirmi kat bütçe, on hesap**. Aday dizisinin başındaki birkaç kalem, geri
kalan her şeyden fazlasını verir; püskürtmenin dayandığı gözlem budur.

## Eşiğin Ölçeği ve Bedeli

Dördüncü çıktı püskürtmeyi üç eşiğe ayrı ayrı sorar. Hesap ölçeğinde sayan eşik görmez.
Kaynak ölçeğinde sayan eşik 60. denemede, sistem ölçeğinde sayan eşik 200. denemede görür.
Toplam 1.200 deneme oran eşiğini altı kat aşar ve azami hızda 20 dakika sürer.

Bu, ölçünün nereye taşındığını gösterir: püskürtme karşısında zincir üçüncü adımda
kırılmayabilir, ama **görülür**. Kırılamayan halkada ölçü tespite kayar ve tespitin birimi
denemedir: eşiğin altında kaç deneme geçtiği, alarm çalana kadar kaç hesabın denendiği.

Beşinci çıktı bedeli yazar. Hesap kilitlemenin meşru işe bedeli günde 30 kurgu kalemdir ve üç
biçimin ikisini görür. Kaynak hız sınırının bedeli 4'tür ve üçünü de görür. Oran eşiğinin
bedeli **0'dır** ve üçünü de görür — çünkü hiçbir isteği reddetmez, yalnız sayar ve bildirir.

Üç eşiğin toplam bedeli 34, üç biçimi de gören iki eşiğin toplam bedeli **4'tür**. Kapsamı en
geniş iki kalem, bedelin sekizde birini taşır. Bu, kilitlemenin gereksiz olduğu anlamına
gelmez: kilitleme düşen hesabı 190'dan 24'e indiren tek kalemdir. Anlamı, kapsamın ve bedelin
**aynı kalemde toplanmadığıdır** — ve bir savunma kümesi ikisini ayrı ayrı yazmadan
değerlendirilemez.

Bedeli sıfır olan eşiğin ayrı bir yeri vardır ve bu kursun ölçüsünde adı konmalıdır: o eşik
hiçbir halkayı **kırmaz**. Hiçbir isteği reddetmediği için üçüncü adımın önkoşulunu ortadan
kaldırmaz; yalnız sayar. Bir savunma listesinde onu "üç biçimi de gören eşik" diye yazmak
doğrudur, "üç biçimi de durduran eşik" diye yazmak değildir. İki cümle arasındaki fark, bu
kursun kırılan halka ile tespit arasında koyduğu ayrımın tam kendisidir: sayan bir kalem
zinciri kısaltmaz, yalnız zincirin görüldüğü noktayı öne çeker.

## Özet

- Üç biçim yalnız iki sayıyla ayrılır: kaç hesaba dokunduğu ve hesap başına kaç deneme
  yaptığı. Kaba kuvvet 1 hesap/1.000.000 deneme, sözlük 1/50.000, püskürtme 400/3.
- Hesap kilitleme kaba kuvvet ve sözlüğü beşinci denemede durdurur; püskürtmeyi hiç görmez,
  çünkü hesap ölçeğinde sayar ve püskürtmenin hesap başına bütçesi eşiğin altındadır.
- Kilitleme düşen hesabı 190'dan ve 180'den 24'e indirir (%87 azalma), püskürtmede farkı 0'dır.
- Azami hızda kaba kuvvet tek hesap için 11,6 gün, sözlük 13,9 saat, püskürtme 18 hesap için
  3 saniye sürer. Bütçeyi 50.000'den 1.000.000'a çıkarmak düşen hesabı yalnız 10 artırır.
- Püskürtmeyi kaynak ölçeğinde sayan eşik 60., sistem ölçeğinde sayan eşik 200. denemede görür;
  toplam 1.200 deneme oran eşiğini 6 kat aşar. Kırılamayan halkada ölçü tespite kayar.
- Üç eşiğin toplam meşru bedeli 34 kurgu kalem/gündür; üç biçimi de gören iki eşiğin toplamı
  4'tür. Kapsam ile bedel aynı kalemde toplanmaz ve bedeli sıfır olan eşik hiçbir halkayı
  kırmaz, yalnız sayar.

## Sonraki Adım

Buraya kadarki altı sınıfta zincir her zaman saldıranın bir isteğiyle başladı: bir alan
dolduruldu, bir bağlantı gönderildi, bir deneme yapıldı. Bir sonraki sınıfta ilk adımı kurban
atar ve yaptığı şey olağandır — bir sayfayı açar. Sonraki ders bu sınıfı **önkoşul zinciri**
olarak sayar: kaç koşulun aynı anda tutması gerektiği, koşullardan biri düştüğünde geriye kaç
bileşimin kaldığı ve hangi tarayıcı ile ağ denetiminin kaç koşulu birden kırdığı ölçülür.
