---
title: 'Tekrar ve Sahtecilik Saldırıları'
source: 'https://academia.sh/tr/kurslar/ag-guvenligi/tekrar-ve-sahtecilik-saldirilari'
course: 'Ağ Güvenliği'
language: tr
updated: '2026-08-17T18:08:40+00:00'
license: 'CC BY-SA 4.0'
---

# Tekrar ve Sahtecilik Saldırıları

Tekrar ve sahteciliğin tazelik kanıtı cinsinden ölçülmesi: 10 mesaj türünün tazelik kanıtı yokken tekrarı olduğu gibi kabul etmesi, sayacın hacmin %75'ini tam koruyup durum değiştiren tek bir türü bile kapsamaması, zaman damgasının 120 saniyelik pencere kadar açık kalması, ayrı depolu tek kullanımlık değerin 2 alıcı kadar açık kalması ve üç kanıt birlikte açıkken 36.460 isteğin hâlâ sınırsız tekrarlanabilmesi.

Önceki ders bir iddianın **kimden** geldiğini sordu ve yanıtı bir zincirle bağladı. Sabit kök
düzeninde iddiayı üretebilecek taraf sayısı bire indi; kimliğin kanıtı tamdır. Yine de tam bir
kanıt zinciriyle üretilmiş, doğru kaynaktan gelmiş, hiçbir halkası dayanaksız olmayan bir
mesajın bir özelliği hâlâ hiç sorulmadı: **ne zaman** üretildiği.

Aynı mesaj bir kez daha sunulduğunda kimlik kanıtı yine geçerlidir, zincir yine tamdır ve alıcı
onu ilk seferkiyle aynı biçimde kabul eder. Kimlik kanıtı mesajın kimden geldiğini söyler;
hiçbir şey mesajın **yeni** olduğunu söylemez. Bu ders o eksik özelliği sayar ve konuyu
kapatır.

## Tazelik Bir Kanıt İster

Aynı mesajın yeniden sunulmasına **tekrar saldırısı (replay attack)** denir.

**PG22:** **tazelik kanıtı (freshness proof)**, bir mesajın daha önce sunulmadığını alıcının
sınayabilmesidir; kimlik kanıtı tam olsa da tazelik kanıtı yoksa aynı mesaj yeniden kabul
edilir. **PG23:** üç tazelik kanıtı vardır ve güçleri eşit değildir — sayaç tamdır, zaman
damgası pencere kadar açıktır, **tek kullanımlık değer (nonce)** yalnız depo paylaşılıyorsa
tamdır. **PG24:** bir savunma yalnız mesajın taşıdığı alanı sınayabilir; alan yoksa savunma o
mesaj türüne hiç dokunmaz.

PG24 bu dersin kapsamını belirler. Tazelik denetimi bir açma kapama düğmesi değildir: mesaj
biçiminde ilgili alan yoksa denetim koşacak bir şey bulamaz. Bu yüzden ölçüm iki aşamalıdır —
önce hangi mesaj türünün hangi alanı taşıdığı, sonra o alanın hangi koruma düzeyini verdiği.

Aşağıdaki mesaj kümesi bir **modeldir**: kurgu ölçüm ağının mesaj türleri, taşıdıkları alanlar
ve otuz günlük hacimleri veri olarak yazılır; gerçek bir ağ ya da gerçek bir mesaj yoktur. Kod
hiçbir mesaj üretmez ya da yeniden sunmaz; koşan tek şey alıcı tarafındaki tazelik denetiminin
sayımıdır. Bir mesajın sahibi olunmayan bir sistemde yeniden sunulması **yazılı yetki ve
tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır**.

```js
// aglar/tazelik.mjs — kurgu bolgesel olcum agindaki mesaj turlerinin tazelik kaniti
// (model): gercek bir ag, gercek bir mesaj ya da gercek bir hacim yok. Rastgelelik yok.

// PG22: tazelik kaniti, bir mesajin daha once sunulmadigini alicinin sinayabilmesidir;
// kimlik kaniti tam olsa da tazelik kaniti yoksa ayni mesaj yeniden kabul edilir.
// PG23: uc tazelik kaniti vardir ve gucleri esit degildir. Sayac tamdir; zaman damgasi
// pencere kadar aciktir; tek kullanimlik deger yalnizca depo paylasiliyorsa tamdir.
export const PENCERE = 120;      // zaman damgasi penceresi (sn)
export const ALICI = 3;          // ayni mesaji kabul eden alici sayisi
export const UC = 224;           // sayac ya da saat tutulacak uc sayisi
export const KAYIT = 24;         // tek kullanimlik deger kaydinin boyutu (bayt)
export const AY = 2592000;       // 30 gun (sn)
export const SIRASIZ = 0.003;    // sayac denetiminde sirasiz gelen mesru mesaj orani
export const GEC = 0.008;        // pencereden gec gelen mesru mesaj orani

// Sutunlar: mesaj turu, sayac tasiyor mu, zaman damgasi tasiyor mu, tek kullanimlik deger
// tasiyor mu, tekrari durum degistiriyor mu (etkili), 30 gunluk hacim.
export const MESAJ = `
  okuma-bildirimi      e e h h 89400    yapilandirma-komutu  h e e e   140
  kira-yenileme        h h h e  1860    gunluk-kaydi         e e h h 43200
  is-emri-onayi        h e h e   420    oturum-acma          h h e e   870
  toplu-aktarim        e h h h  8640    durum-sorgusu        h h h h 34600
  sayac-okuma-talebi   h e h h  9240    guncelleme-onayi     h e e e    36`
  .trim().split(/\s+/).reduce((l, _, i, a) => (i % 6 ? l : [...l, {
    tur: a[i], sayac: a[i + 1] === "e", zaman: a[i + 2] === "e",
    tekil: a[i + 3] === "e", etkili: a[i + 4] === "e", hacim: +a[i + 5],
  }]), []);

// PG24: bir savunma yalnizca mesajin tasidigi alani sinayabilir; alan yoksa savunma o
// mesaj turune hic dokunmaz.
// Koruma duzeyi: tam = her tekrar yakalanir; kismi = bir pencere ya da bir alici kadar
// acik kalir; yok = tekrar oldugu gibi kabul edilir.
export function duzey(m, savunma = [], paylasik = false) {
  if (savunma.includes("sayac") && m.sayac) return { d: "tam", acik: "-" };
  if (savunma.includes("tekil") && m.tekil)
    return paylasik ? { d: "tam", acik: "-" } : { d: "kismi", acik: `${ALICI - 1} alici` };
  if (savunma.includes("zaman") && m.zaman) return { d: "kismi", acik: `${PENCERE} sn` };
  return { d: "yok", acik: "sinirsiz" };
}

export const hacim = (l) => l.reduce((t, m) => t + m.hacim, 0);
export function bedel(savunma = [], paylasik = false) {
  const korunan = (f) => hacim(MESAJ.filter(f));
  const tekilHacim = korunan((m) => savunma.includes("tekil") && m.tekil);
  return {
    durum: savunma.includes("sayac") ? UC : 0,
    saat: savunma.includes("zaman") ? UC : 0,
    depoPencere: Math.ceil(PENCERE * tekilHacim / AY) * KAYIT * (paylasik ? 1 : ALICI),
    depoSinirsiz: tekilHacim * KAYIT * (paylasik ? 1 : ALICI),
    red: Math.round(SIRASIZ * korunan((m) => savunma.includes("sayac") && m.sayac)) +
      Math.round(GEC * korunan((m) => savunma.includes("zaman") && m.zaman && !m.sayac)),
  };
}
```

```js
// aglar/tazelik-denetimi.mjs — mesaj kumesinin kaci tekrar edildiginde kabul ediliyor,
// sayac, zaman damgasi ve tek kullanimlik deger kacini yakaliyor, kaci aciksa bedeli ne.
import { MESAJ, PENCERE, ALICI, UC, KAYIT, duzey, hacim, bedel } from "./tazelik.mjs";

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 = (s, p, d) => MESAJ.filter((m) => duzey(m, s, p).d === d);
// [savunma kumesi, tek kullanimlik deger deposu aliciar arasinda paylasik mi]
const KUR = [[[], false], [["sayac"], false], [["zaman"], false], [["tekil"], false],
  [["sayac", "zaman", "tekil"], false], [["sayac", "zaman", "tekil"], true]];
const ad = (s, p) => (s.join(" + ") || "hicbiri") + (p ? " (paylasik depo)" : "");

console.log(`${MESAJ.length} mesaj turu, 30 gunluk hacim ${hacim(MESAJ)}; ` +
  `tazelik kaniti yokken tekrar edildiginde kabul edilen tur ${MESAJ.length}, ` +
  `tekrari durum degistiren tur ${MESAJ.filter((m) => m.etkili).length}`);

const A = [-12, 7, 12, 12, 12];
console.log("\n1. hangi alan kac turde var");
yaz(A, "alan", "tur", "30g hacim", "hacim %", "etkili tur");
for (const [k, f] of [["sayac", (m) => m.sayac], ["zaman", (m) => m.zaman],
  ["tekil", (m) => m.tekil], ["hicbiri", (m) => !m.sayac && !m.zaman && !m.tekil]]) {
  const l = MESAJ.filter(f);
  yaz(A, k, l.length, hacim(l), ((hacim(l) / hacim(MESAJ)) * 100).toFixed(1),
    l.filter((m) => m.etkili).length);
}

const B = [-38, 6, 7, 6, 13, 17];
console.log("\n2. savunmalarin yakaladigi tur ve hacim");
yaz(B, "savunma", "tam", "kismi", "yok", "acik hacim", "etkili acik tur");
for (const [s, p] of KUR) {
  const acik = say(s, p, "yok");
  yaz(B, ad(s, p), say(s, p, "tam").length, say(s, p, "kismi").length, acik.length,
    hacim(acik), acik.filter((m) => m.etkili).length);
}

const C = [-38, 8, 8, 16, 14, 11];
console.log("\n3. ayni savunmalarin bedeli");
yaz(C, "savunma", "durum", "saat", "depo (pencere)", "depo (30g)", "red mesru");
for (const [s, p] of KUR) {
  const b = bedel(s, p);
  yaz(C, ad(s, p), b.durum, b.saat, b.depoPencere + " B", b.depoSinirsiz + " B", b.red);
}

const D = [-22, 8, 8, 10, 12];
console.log("\n4. uc kanit birlikte acikken kalan aciklik");
yaz(D, "tur", "duzey", "etkili", "30g hacim", "acik kalan");
for (const m of MESAJ) {
  const z = duzey(m, ["sayac", "zaman", "tekil"], false);
  if (z.d !== "tam") yaz(D, m.tur, z.d, m.etkili ? "evet" : "hayir", m.hacim, z.acik);
}
console.log(`pencere ${PENCERE} sn, alici ${ALICI}, uc ${UC}, kayit ${KAYIT} bayt`);
```

```
10 mesaj turu, 30 gunluk hacim 188406; tazelik kaniti yokken tekrar edildiginde kabul edilen tur 10, tekrari durum degistiren tur 5

1. hangi alan kac turde var
alan            tur   30g hacim     hacim %  etkili tur
sayac             3      141240        75.0           0
zaman             6      142436        75.6           3
tekil             3        1046         0.6           3
hicbiri           2       36460        19.4           1

2. savunmalarin yakaladigi tur ve hacim
savunma                                  tam  kismi   yok   acik hacim  etkili acik tur
hicbiri                                    0      0    10       188406                5
sayac                                      3      0     7        47166                5
zaman                                      0      6     4        45970                2
tekil                                      0      3     7       187360                2
sayac + zaman + tekil                      3      5     2        36460                1
sayac + zaman + tekil (paylasik depo)      6      2     2        36460                1

3. ayni savunmalarin bedeli
savunma                                  durum    saat  depo (pencere)    depo (30g)  red mesru
hicbiri                                      0       0             0 B           0 B          0
sayac                                      224       0             0 B           0 B        424
zaman                                        0     224             0 B           0 B         79
tekil                                        0       0            72 B       75312 B          0
sayac + zaman + tekil                      224     224            72 B       75312 B        503
sayac + zaman + tekil (paylasik depo)      224     224            24 B       25104 B        503

4. uc kanit birlikte acikken kalan aciklik
tur                      duzey  etkili 30g hacim  acik kalan
yapilandirma-komutu      kismi    evet       140     2 alici
kira-yenileme              yok    evet      1860    sinirsiz
is-emri-onayi            kismi    evet       420      120 sn
oturum-acma              kismi    evet       870     2 alici
durum-sorgusu              yok   hayir     34600    sinirsiz
sayac-okuma-talebi       kismi   hayir      9240      120 sn
guncelleme-onayi         kismi    evet        36     2 alici
pencere 120 sn, alici 3, uc 224, kayit 24 bayt
```
Sayılar **ölçüm** sınıfındadır; girdileri PG22–PG24'tür.

## Alan Yoksa Denetim Yok

Başlık satırı tabanı verir: on mesaj türünün **onu da** tazelik kanıtı yokken tekrar
edildiğinde kabul edilir ve bunların **beşinin** tekrarı durumu değiştirir. Hacim otuz günde
188.406 istektir.

Birinci tablo alanların dağılımını gösterir ve bu dersin ters orantısını kurar. Sayaç alanı üç
türde vardır ve hacmin **%75'ini** taşır; bu üç türün **hiçbiri** durum değiştirmez. Tek
kullanımlık değer alanı da üç türdedir, ama hacmin yalnız **%0,6'sını** taşır; buna karşılık üç
türün **üçü de** durum değiştirir. Zaman damgası altı türde ve hacmin %75,6'sındadır.

İki uçtaki bu dağılım rastlantı değildir. Sayaç, sürekli akan ve sırası zaten anlamlı olan
mesajlarda bulunur — okuma bildirimi, günlük kaydı, toplu aktarım. Tek kullanımlık değer,
seyrek ve tekil işlemlerde bulunur — yapılandırma komutu, oturum açma, güncelleme onayı. **En
güçlü tazelik kanıtı en yüksek hacimli ve en zararsız mesajlarda, en pahalı kanıt en düşük
hacimli ve en etkili mesajlardadır.**

Son satır boşluğu verir: iki tür hiçbir alan taşımaz, hacmin **%19,4'ünü** tutar ve biri durum
değiştirir. Bu iki tür hiçbir savunmayla korunamaz, çünkü korunacak alan mesajda yoktur.

## Üç Kanıtın Üç Ayrı Açıklığı

İkinci tablo savunmaları ayrı ayrı koşturur. Sayaç üç türü **tam** korur ve açık hacmi
188.406'dan 47.166'ya indirir — hacim ölçüsünde en büyük düşüş. Durum değiştiren açık tür
sayısı ise **beşte kalır**; sayaç hiçbirine dokunmaz.

Zaman damgası altı türü korur, ama koruma düzeyi **kısmi**dir: pencere 120 saniyedir ve bu süre
içinde sunulan bir tekrar geçerli sayılır. Açık hacim 45.970'e iner ve durum değiştiren açık
tür beşten **ikiye** düşer. Pencereyi daraltmak açıklığı kısaltır ve reddedilen meşru mesaj
sayısını artırır; sıfır yapmak, saatleri tam eşitlenmemiş her ucu dışarıda bırakır.

Tek kullanımlık değer üç türü korur, ama ayrı depolarla koruma yine **kısmi**dir: bir alıcının
kabul ettiği değer öteki iki alıcının deposunda yoktur ve aynı mesaj onlara sunulduğunda geçer.
Açıklık **iki alıcı** kadardır. Açık hacim 187.360'ta kalır, çünkü korunan üç tür hacmin yalnız
%0,6'sıdır.

Üçü birlikte açıkken üç tür tam, beş tür kısmi korunur ve **iki tür açık kalır**. Depo alıcılar
arasında paylaşıldığında tam korunan tür sayısı üçten **altıya** çıkar, kısmi ikiye iner ve
açık tür yine ikidir. Paylaşılan depo hiçbir yeni türü kapsamaz; yalnız kapsadıklarının
düzeyini yükseltir.

## Kalan Açıklığın Bedeli

Dördüncü tablo üç kanıt açıkken kalan yedi kalemi ve her birinin ne kadar açık olduğunu verir.
Üçü **iki alıcı** kadar, ikisi **120 saniye** kadar, ikisi **sınırsız** açıktır. Sınırsız
olanlardan biri kira yenilemedir ve durumu değiştirir: hiçbir alan taşımadığı için hiçbir
denetim ona dokunamaz. Öteki durum sorgusudur ve 34.600 istekle kalan açık hacmin büyük payını
tutar.

Üçüncü tablo bedeli üç ayrı kalemde yazar. Sayaç **224 durum kalemi** ister — her uç için bir
sayaç — ve sırasız gelen 424 meşru mesajı reddeder. Zaman damgası **224 saat eşitleme kalemi**
ister ve pencereden geç gelen 79 meşru mesajı reddeder. İkisi birlikte 503 meşru mesajın
reddedilmesi demektir; otuz günlük hacmin binde 2,7'si.

Tek kullanımlık değerin bedeli depolamadır ve iki sayı arasındaki fark bu tablonun en büyük
oranıdır. Zaman damgası penceresiyle sınırlandığında depo **72 bayttır**; pencere olmadan, yani
tekrarın ne zamana kadar mümkün olduğu bilinmediğinde, otuz günlük depo **75.312 bayttır** —
bin katın üstünde. Paylaşılan tek depoyla bu sayılar 24 ve 25.104 bayta iner. **Tek kullanımlık
değer tek başına sınırsız depolama ister; sınırlı hâle gelmesi zaman damgasına bağlıdır ve iki
kanıt ancak birlikte kullanılabilir.**

## Özet

- Tazelik kanıtı olmadan 10 mesaj türünün 10'u da tekrarı olduğu gibi kabul eder; 5'inin
  tekrarı durumu değiştirir ve toplam hacim 30 günde 188.406 istektir.
- Alan dağılımı terstir: sayaç hacmin %75'ini taşıyan 3 türdedir ve **hiçbiri** durum
  değiştirmez; tek kullanımlık değer hacmin %0,6'sını taşıyan 3 türdedir ve **üçü de** durum
  değiştirir. İki tür hiçbir alan taşımaz ve hacmin %19,4'ünü tutar.
- Üç kanıtın açıklıkları farklı büyüklüktedir: sayaç tam korur, zaman damgası **120 saniye**,
  ayrı depolu tek kullanımlık değer **2 alıcı** kadar açık kalır.
- Üçü birlikte açıkken 3 tür tam, 5 tür kısmi korunur ve 2 tür açık kalır; paylaşılan depo tam
  korunan türü 6'ya çıkarır ama hiçbir yeni türü kapsamaz.
- Bedel 224 durum kalemi, 224 saat eşitleme kalemi, 503 reddedilen meşru mesaj ve 72 baytlık
  bir depodur; pencere olmadan aynı depo 75.312 bayta çıkar.

## Sonraki Adım

Bu konu ağın ölçü birimini kurdu ve sekiz derste aynı üç sütunu yazdı. Bir okumanın taşıdığı on
sekiz iddia sayıldı ve savunma yokken hiçbirinin kanıtı olmadığı görüldü; açık bir bağlantı
noktasının bir kabul bildirimi olduğu ve kırk dokuz kabul noktasının yirmi birinin kanıtsız
olduğu ölçüldü; adres ve ad çözümleme önbelleklerinde doğrulanmayan yanıtın kaç kaydı ve kaç
bağımlı servisi bozduğu, adres dağıtımında tek bir kabulün beş iddiayı birden bağladığı, kaynak
adresi kanıtsız olan isteklerin kapasiteyi ve durum tablosunu nasıl tükettiği, kanıt zincirinin
kaç tarafça üretilebildiği ve tazelik kanıtının kaç türde hiç bulunmadığı sayıldı.

Bütün bu ölçümlerin ortak bir varsayımı vardı ve bu ders de dâhil hiçbir yerde sorgulanmadı:
her iddia **aynı düz ağda** dolaşıyordu. Doğrulanmayan bir yanıtın önbelleğe ulaşabildiği, bir
dağıtım yanıtının uca varabildiği, kanıtsız bir kaynağın alım ucuna istek gönderebildiği,
tekrarlanan bir mesajın alıcıya erişebildiği varsayıldı. Ağın kendisine bir sınır çizilirse bu
iddiaların kaçı karşıya bile geçemez, o sınır kaç kural ister ve kaç meşru akışı durdurur?
Sonraki konu — **Çevre Savunması** — aynı iddia kümesini bu kez ağın çizilmiş sınırları
üzerinde ölçer.
