İçeriğe geç
academia.sh

Ders 17 / 20

Kimlik Doğrulama Yöntemleri

Kişisel ve kurumsal mod güven kökü cinsinden ayrılır: tek paylaşılan sır bir ağda on iki kalemin tamamına erişim veriyor ve değiştirilmesi dört bin beş yüz kırk aygıta dokunmak demek, kişi başına kimlik ortalama iki buçuk kaleme iniyor ve iptal tek adım. Kurumsal mod yedi iddianın altısını kanıta bağlıyor ama bir iddia ekliyor ve onu varsayılan yapılandırmada doğrulamıyor.

İçindekiler

Bir önceki ders ortak sırrın uzunluğunu ölçtü ve çevrimdışı denemeye karşı direncini hesapladı. Sırrın kime ait olduğu hiç sorulmadı. Dört kuşağın hepsinde tek bir dizi vardı; o dizi sayaç uçlarında, şube dizüstülerinde ve saha terminallerinde aynıydı.

Bu ayrım kablosuz kimlik doğrulamanın iki modunu birbirinden ayıran şeydir. Kişisel modda güven kökü tek bir paylaşılan sırdır: onu bilen ağdadır. Kurumsal modda güven kökü özne başına ayrı bir kimliktir ve doğrulamayı merkezî bir kimlik doğrulama sunucusu yapar. Bu ders ikisini üç sütunda ölçer: bir güven kökü ele geçtiğinde kaç kaleme erişiliyor, iptal etmek kaç adım sürüyor, ayrımın bedeli kaç altyapı kalemi.

  • KG7. Kalem, kablosuz ağa bağlandıktan sonra ulaşılabilen bir kaynaktır: bir servis, bir depo, bir yönetim arayüzü. Kurgu bölgesel ölçüm ağında on iki kalem tanımlıdır.
  • KG8. Kişisel modda bir ağın tek ortak sırrı vardır. O ağa giren her özne ağın bütün kalemlerine ulaşır; kalem ayrımı ancak ağı bölerek, yani ayrı ağ ve ayrı sır açarak yapılır.
  • KG9. Kurumsal modda yetki kimliğe bağlanır; bir özne yalnız rolünün meşru kalemlerine ulaşır. Rollerin kalem eşlemesi model kararıdır.
  • KG10. Aygıt başına elle yapılandırma dört dakikadır ve yıllık personel devri yüzde on dörttür; ikisi de kurgu model sabitidir.
  • KG11. Ek altyapı kalemlerinin yıllık bakım dokunuşu model değeridir: o kalemin yılda kaç kez elle değiştirildiği ya da yenilendiği.
  • KG12. Kimlik doğrulama sunucusunun iç işleyişi, belirteç mekaniği ve kimlik federasyonu bu dersin dışındadır; ölçülen şey yalnız güven kökünün nerede durduğudur.

Bir Sırrın Açtığı Kalem

Kişisel modun ölçüsü tek sayıdır: bir sır ele geçtiğinde kaç kaleme ulaşılıyor. O sayıyı küçültmenin tek yolu ağı bölmektir, ve her bölme yeni bir sır demektir.

// mod.mjs — kisisel ve kurumsal modun guven koku modeli. Kurgu bolgesel olcum agi;
// gercek ag adi, gercek konum ve gercek kimlik yazilmiyor.
export const KALEM = ['olcum-deposu', 'toplayici-girisi', 'is-emri-servisi', 'abone-kayit',
  'fatura-vt', 'yapilandirma', 'yonetim-arayuzu', 'pano-yayini', 'yazici-kuyrugu',
  'sube-dosya', 'saha-harita', 'guncelleme-deposu'];
// [rol, ozne sayisi, aygit sayisi, mesru olarak erisilmesi gereken kalem]
export const ROL = [
  ['saha-teknisyeni', 43, 183, ['is-emri-servisi', 'saha-harita', 'abone-kayit']],
  ['sube-personeli', 210, 210, ['is-emri-servisi', 'abone-kayit', 'fatura-vt', 'sube-dosya',
    'yazici-kuyrugu']],
  ['bakim', 9, 9, ['yapilandirma', 'yonetim-arayuzu', 'guncelleme-deposu', 'olcum-deposu']],
  ['pano', 0, 12, ['pano-yayini']],
  ['barkod-yazicisi', 0, 26, ['yazici-kuyrugu']],
  ['sayac-ucu', 0, 4100, ['toplayici-girisi']],
];
// Kisisel modda bir agin bir tek ortak sirri vardir; o aga giren her ozne agin butun
// kalemlerine ulasir. Ag basina rol dagilimi bir tasarim karari olarak verilir.
export const PLAN = [
  ['tek-ag', [['saha-teknisyeni', 'sube-personeli', 'bakim', 'pano', 'barkod-yazicisi',
    'sayac-ucu']]],
  ['uc-ag', [['saha-teknisyeni', 'sube-personeli'], ['bakim', 'pano', 'barkod-yazicisi'],
    ['sayac-ucu']]],
  ['rol-basina-ag', ROL.map(([r]) => [r])],
];
export const kalemleri = (roller) =>
  [...new Set(roller.flatMap((r) => ROL.find(([a]) => a === r)[3]))];
export const aygitlari = (roller) =>
  roller.reduce((s, r) => s + ROL.find(([a]) => a === r)[2], 0);
// Kurumsal modun ek altyapi kalemleri ve her kalemin yillik bakim dokunusu (model).
export const ALTYAPI = [
  ['kimlik dogrulama sunucusu', 2], ['sunucu kimligi ve guven koku', 1],
  ['kimlik deposu baglantisi', 2], ['istemci profili dagitimi', 6],
  ['erisim noktasi paylasilan gizli degeri', 4], ['kimlik iptal listesi', 12],
  ['yedek dogrulama yolu', 2],
];
// Kurumsal modu destekleyen aygit siniflari (model karari).
export const KURUMSAL_DESTEK = ['saha-teknisyeni', 'sube-personeli', 'bakim'];
// kosum1.mjs — bir sir sizdiginda erisilen kalem ve o sirri degistirmenin adim sayisi
import { KALEM, ROL, PLAN, kalemleri, aygitlari } from './mod.mjs';

const AYGIT = ROL.reduce((s, [, , n]) => s + n, 0);
const ELLE = 4;                       // aygit basina elle yapilandirma dakikasi (model sabiti)
const E = [16, 8, 16, 14, 16, 14];
const yaz = (h) => h.map((d, i) => String(d)[i ? 'padStart' : 'padEnd'](E[i])).join('');
console.log(`kalem ${KALEM.length}, rol ${ROL.length}, aygit ${AYGIT}`);
console.log(yaz(['kisisel mod plani', 'sir', 'en genis kalem', 'ort. kalem', 'en cok aygit',
  'sir degisimi']));
for (const [ad, aglar] of PLAN) {
  const kalem = aglar.map((g) => kalemleri(g).length);
  const aygit = aglar.map((g) => aygitlari(g));
  console.log(yaz([ad, aglar.length, Math.max(...kalem),
    (kalem.reduce((a, b) => a + b, 0) / aglar.length).toFixed(1), Math.max(...aygit),
    `${Math.max(...aygit) * ELLE} dk`]));
}
// Kurumsal mod: kimlik ozne basinadir, yetki kimlige baglidir.
const kurumsal = ROL.map(([r, , , k]) => k.length);
console.log(yaz(['kurumsal mod', ROL.reduce((s, [, o, a]) => s + (o || a), 0),
  Math.max(...kurumsal), (kurumsal.reduce((a, b) => a + b, 0) / ROL.length).toFixed(1), 1,
  `${ELLE} dk`]));
kalem 12, rol 6, aygit 4540
kisisel mod plani     sir  en genis kalem    ort. kalem    en cok aygit  sir degisimi
tek-ag                 1              12          12.0            4540      18160 dk
uc-ag                  3               6           4.3            4100      16400 dk
rol-basina-ag          6               5           2.5            4100      16400 dk
kurumsal mod        4400               5           2.5               1          4 dk

Birinci satır kişisel modun en yalın biçimidir: tek ağ, tek sır, on iki kalem. Ele geçen bir sır ağın tamamını açar; kalemler arasında hiçbir ayrım yoktur, çünkü ayrımı yapacak bir kimlik yoktur.

Ağı bölmek işe yarıyor. Üç ağa çıkıldığında en geniş sır on iki yerine altı kalem açıyor, ortalama dört virgül üçe iniyor. Rol başına ağ açıldığında ortalama iki virgül beş, yani kurumsal modla aynı değer elde ediliyor. Bu satır dersin ilk sürprizidir: kalem ayrımı için kurumsal mod gerekmiyor, ağı yeterince bölmek aynı ayrımı veriyor.

Fark son iki sütunda. Rol başına ağ altı ayrı yayın, altı ayrı sır ve her erişim noktasında altı ayrı yapılandırma demektir; bunların hiçbiri kalem sayısında görünmez. Asıl fark ise sır değişimi sütunudur. Kişisel modda bir sır değiştiğinde o ağdaki her aygıta dokunulur: en kalabalık ağ dört bin yüz aygıt taşıdığı için on altı bin dört yüz dakika, yaklaşık iki yüz yetmiş üç saat. Kurumsal modda değişen şey tek bir kimliktir ve dokunulan aygıt sayısı birdir.

Kurumsal modun sütununda görünen dört bin dört yüz sayısı bedelin kendisidir: yönetilecek kimlik sayısı bir sırdan dört bin dört yüze çıkıyor. Kalem ayrımı bedava değil; ayrımın bedeli kimlik yönetiminin ölçeğidir.

İptalin Adım Sayısı ve Eklenen İddia

İki modun asıl ayrıldığı yer bir öznenin çıkışıdır. Aşağıdaki koşum önce iddia tablosunu kuruyor, sonra ayrılan bir öznenin bedelini sayıyor.

// kosum2.mjs — iki modun iddia tablosu ve kurumsal modun bedeli
import { ROL, ALTYAPI, KURUMSAL_DESTEK, kalemleri, aygitlari } from './mod.mjs';

const G = ['yok', 'zayif', 'var'];
const IDDIA = [
  ['baglanan taraf gizli degeri biliyor', [2, 2, 2]],
  ['baglanan taraf belirli bir oznedir', [0, 2, 2]],
  ['bu kimlik hala gecerli', [0, 2, 2]],
  ['erisim oznenin kalemiyle sinirli', [0, 2, 2]],
  ['karsi taraf kurumun kimlik sunucusu', [1, 0, 2]],
  ['ayrilan ozne kendiliginden disarida', [0, 2, 2]],
  ['oturum anahtari ozne basina ayri', [0, 2, 2]],
];
const BASLIK = ['kisisel', 'kurumsal (sunucu dogrulanmiyor)', 'kurumsal (guven koku sabit)'];
const E = [38, 10, 34, 30];
const yaz = (h) => h.map((d, i) => String(d)[i ? 'padStart' : 'padEnd'](E[i])).join('');
console.log(yaz(['iddia', ...BASLIK]));
for (const [ad, d] of IDDIA) console.log(yaz([ad, ...d.map((v) => G[v])]));
const say = (i, v) => IDDIA.filter(([, d]) => d[i] === v).length;
console.log(yaz(['kanitlanan / acik', ...BASLIK.map((_, i) =>
  `${say(i, 2)} / ${say(i, 1) + say(i, 0)}`)]));

// Ayrilan bir ozne: kisisel modda ag sirri, kurumsal modda tek kimlik degisir.
const ELLE = 4, DEVIR = 0.14;         // aygit basina dakika ve yillik personel devri (model)
const OZNE = ROL.reduce((s, [, o]) => s + o, 0);
const AG = [['saha-teknisyeni', 'sube-personeli'], ['bakim', 'pano', 'barkod-yazicisi'],
  ['sayac-ucu']];
const g = AG.find((x) => x.includes('saha-teknisyeni'));
const dokunulan = aygitlari(g);
console.log(`\nozne ${OZNE}, yillik ayrilma ${Math.round(OZNE * DEVIR)}`);
console.log(`kisisel: 1 sir degisir -> ${dokunulan} aygit, ${dokunulan * ELLE} dk, ` +
  `${kalemleri(g).length} kalem yeniden acilir`);
console.log(`kurumsal: 1 kimlik iptal -> 0 aygit, 0 dk, 0 kalem`);
console.log(`yillik: kisisel ${Math.round(OZNE * DEVIR) * dokunulan * ELLE} dk, kurumsal 0 dk`);

// Bedel: ek altyapi kalemi ve kurumsal modu destekleyemeyen aygitlar.
const disarida = ROL.filter(([r]) => !KURUMSAL_DESTEK.includes(r));
console.log(`\nek altyapi kalemi ${ALTYAPI.length}, yillik bakim dokunusu ` +
  `${ALTYAPI.reduce((s, [, n]) => s + n, 0)}`);
for (const [ad, n] of ALTYAPI) console.log(`  ${ad.padEnd(38)}${String(n).padStart(3)}`);
console.log(`kurumsal modu desteklemeyen sinif ${disarida.length}, aygit ` +
  `${disarida.reduce((s, [, , n]) => s + n, 0)} -> kisisel modda kalir`);
iddia                                    kisisel   kurumsal (sunucu dogrulanmiyor)   kurumsal (guven koku sabit)
baglanan taraf gizli degeri biliyor          var                               var                           var
baglanan taraf belirli bir oznedir           yok                               var                           var
bu kimlik hala gecerli                       yok                               var                           var
erisim oznenin kalemiyle sinirli             yok                               var                           var
karsi taraf kurumun kimlik sunucusu        zayif                               yok                           var
ayrilan ozne kendiliginden disarida          yok                               var                           var
oturum anahtari ozne basina ayri             yok                               var                           var
kanitlanan / acik                          1 / 6                             6 / 1                         7 / 0

ozne 262, yillik ayrilma 37
kisisel: 1 sir degisir -> 393 aygit, 1572 dk, 6 kalem yeniden acilir
kurumsal: 1 kimlik iptal -> 0 aygit, 0 dk, 0 kalem
yillik: kisisel 58164 dk, kurumsal 0 dk

ek altyapi kalemi 7, yillik bakim dokunusu 29
  kimlik dogrulama sunucusu               2
  sunucu kimligi ve guven koku            1
  kimlik deposu baglantisi                2
  istemci profili dagitimi                6
  erisim noktasi paylasilan gizli degeri  4
  kimlik iptal listesi                   12
  yedek dogrulama yolu                    2
kurumsal modu desteklemeyen sinif 3, aygit 4138 -> kisisel modda kalir

Kişisel mod yedi iddiadan birini kanıtlıyor: bağlanan tarafın gizli değeri bildiğini. Geri kalan altısının hiçbir karşılığı yoktur, çünkü sır kişiye değil ağa aittir. “Bu kimlik hâlâ geçerli” sorusunun kişisel modda bir yanıtı yoktur; sırrın geçerliliği vardır, kimliğin geçerliliği diye bir kavram yoktur.

Ayrılma satırı bunu paraya çeviriyor. İki yüz altmış iki öznenin yılda otuz yedisi ayrılıyor. Kişisel modda ayrılan her özne için o ağın sırrı değişmeli; ağdaki üç yüz doksan üç aygıta dokunulur, bin beş yüz yetmiş iki dakika harcanır ve altı kalem yeniden açılır. Yıllık toplam elli sekiz bin yüz altmış dört dakika, yaklaşık dokuz yüz yetmiş saat. Kurumsal modda aynı sayının karşılığı sıfırdır.

Uygulamada bu sayı ödenmez. Bin beş yüz yetmiş iki dakikayı otuz yedi kez harcamak yerine sır değiştirilmez; ayrılan öznenin bildiği dizi ağda kalmaya devam eder. Kişisel modun asıl zayıflığı budur — sır tek olduğu için değil, iptalinin bedeli ödenmeyecek kadar büyük olduğu için.

Model ayrıca bir kaynağı hiç saymıyor. Ayrılan özne yalnız aklında tuttuğu diziyi götürmez; sırrın bir kopyası bıraktığı her aygıtın yapılandırmasında da durur. Kaybolan bir saha terminali, sökülüp alınan bir sayaç ucu ya da elden çıkarılan bir pano ekranı aynı sonucu üretir ve hiçbiri personel devri sayısında görünmez. Kişisel modda aygıt kaybı ile personel ayrılması aynı olaydır, çünkü ikisi de aynı tek güven kökünü dışarı taşır. Kurumsal modda bunlar iki ayrı olaydır ve ikisinin de karşılığı tek bir kaydın iptalidir.

Eklenen İddia ve Ödenen Bedel

Orta sütun bu dersin asıl bulgusudur. Kurumsal mod altı iddiayı kanıta bağlıyor ama yeni bir iddia ekliyor: karşı tarafın kurumun kimlik doğrulama sunucusu olduğu. Kişisel modda bu iddia zayıf bir biçimde karşılanır — ortak sır iki tarafça da bilinir, sırrı bilen ağ ağın kendisi sayılır. Kurumsal modda istemci kimliğini merkezî bir sunucuya sunar ve o sunucunun kim olduğu ayrı bir sorudur.

İstemci, sunucunun kimliğini ve güven kökünü doğrulamıyorsa bu iddianın hiçbir kanıtı olmaz. Tablo bunu açıkça yazıyor: orta sütunda o satır boştur. Kurumsal mod, doğru yapılandırılmadığında kişisel modun tek kanıtını da kaybeder ve karşılığında kimliği sunulacak bir sunucu ekler. Güven kökü sabitlendiğinde yedi iddianın yedisi kanıta bağlanıyor; sabitlenmediğinde açık iddia sayısı bire iniyor ama açık kalan iddia en pahalısıdır. Bir sonraki ders o iddianın açık kalmasının ne demek olduğunu ölçecek.

Son bölüm bedeli sayıyor. Kurumsal mod yedi ek altyapı kalemi getiriyor ve bu kalemler yılda yirmi dokuz kez elle dokunuluyor. En sık dokunulan kalem kimlik iptal listesidir; en kritik olanı ise güven köküdür, çünkü yenilendiğinde her istemci profilinin de yenilenmesi gerekir.

Aygıt tarafı ise kararı sınırlıyor. Altı rolün üçü kurumsal modu destekliyor; kalan üç sınıf, yani dört bin yüz otuz sekiz aygıt, kişisel modda kalmak zorunda. Bunların çoğu sayaç ucu ve her biri tek bir kaleme, toplayıcı girişine bağlanıyor. Bu, kurumsal moda geçişin kısmi bir geçiş olduğu anlamına gelir: özneli roller kurumsal moda, öznesiz aygıtlar rol başına ayrılmış kişisel mod ağlarına gider. Ölçüm bu ayrımı destekliyor — dört bin yüz otuz sekiz aygıtın tamamı için ortalama açılan kalem sayısı zaten birdir.

Özet

  • Kişisel modda tek ağ ve tek sır on iki kalemin tamamını açıyor; ağı rol başına bölmek ortalamayı 2,5 kaleme indiriyor ve kurumsal modla aynı ayrımı veriyor. Kalem ayrımı için kurumsal mod zorunlu değil.
  • Ayrım bedava değil: kişisel modda bir sır değiştiğinde o ağdaki her aygıta dokunulur (en kalabalık ağda 16.400 dakika), kurumsal modda tek kimlik iptal edilir (4 dakika). Yönetilecek güven kökü sayısı 1’den 4.400’e çıkıyor.
  • Ayrılan bir özne kişisel modda 393 aygıta dokunmayı gerektiriyor; yıllık 37 ayrılma 58.164 dakika eder. Bu bedel ödenmediği için sır değiştirilmez ve ayrılan öznenin bildiği dizi ağda kalır.
  • Kurumsal mod yedi iddianın altısını kanıta bağlıyor ama bir iddia ekliyor: karşı tarafın kurumun kimlik doğrulama sunucusu olduğu. Güven kökü sabitlenmemişse o iddianın kanıtı yoktur.
  • Bedel yedi ek altyapı kalemi ve yılda yirmi dokuz elle dokunuştur; altı rolün üçü, yani 4.138 aygıt kurumsal modu destekleyemediği için kişisel modda kalır.

Sonraki Adım

Bu ders güven kökünü yerine oturttu ve tabloda tek bir satırı açık bıraktı: istemcinin karşı tarafın kim olduğunu doğrulayıp doğrulamadığı. O satır boş kaldığında ne olduğu bir yapılandırma ayrıntısı değildir. Bir istemci bir ağa bağlanmaya karar verirken elinde yalnız o ağın kendisi hakkında yaptığı bildirimler vardır — ilk dersin tablosunda dört kuşakta da kanıtsız kalan ağ adı iddiası tam olarak budur. Sonraki dersin sorusu şudur: bir istemci bir ağın kimliğini neye bakarak kabul ediyor, o işaretlerin kaçı kanıt taşıyor, kaydedilmiş bir ağ profili kaç yolu kendiliğinden açıyor ve karşılıklı doğrulama bu yolların kaçını kapatıyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat