OTP Doğrulama: Tek Kullanımlık Şifreler Nasıl Çalışır?

Tek kullanımlık şifre (OTP), tek bir işlemi bir kez kanıtlayan kısa bir koddur. Dakikalar içinde süresi dolar, tek kullanımda ölür ve authenticator uygulaması hiç kurmayacak kullanıcılar için bile çalışır. Bu rehber OTP doğrulamanın nasıl işlediğini, SMS kodlarıyla uygulama üreten kodların hangi durumda mantıklı olduğunu ve akışın nasıl doğru kurulup test edileceğini anlatır.

OTP doğrulama nedir?

OTP doğrulama, kullanıcıyı statik parola yerine (veya ona ek olarak) kısa ömürlü, tek kullanımlık bir kodla doğrular. Sunucu kodu üretir, kullanıcının kontrol ettiği bir kanaldan iletir ve yalnızca dar bir zaman penceresinde kabul eder. Kod tek kullanımdan sonra değersiz olduğundan, dünkü SMS'i ele geçirmek ya da sızmış bir kodu yeniden kullanmak hiçbir şey kazandırmaz.

OTP ile üç işte karşılaşırsınız: kayıt olan kişinin telefon numarasının veya e-postasının gerçekten ona ait olduğunu kanıtlamak, girişte parolanın üstüne ikinci bir faktör (2FA) eklemek ve ödeme çekimi ya da parola değişikliği gibi hassas işlemleri onaylamak. Mekanik üçünde de aynıdır; değişen, kodun ne zaman istendiğidir.

OTP doğrulama akışı, adım adım

Teslim kanalı ne olursa olsun her OTP uygulaması aynı döngüye iner:

1

Kullanıcı bir kimlik gönderir

Sunucunuza bir telefon numarası, e-posta veya kullanıcı adı gelir. Her şeyden önce normalize edin ki tekrarlar aynı kayda düşsün.

2

Sunucu kodu üretir

Kriptografik olarak rastgele, genellikle altı haneli, o kimliğe bağlı ve birkaç dakikalık geçerlilikte bir kod. Aynı parola gibi yalnızca hash'ini saklayın.

3

Kod kullanıcıya gider

SMS, authenticator uygulaması, e-posta veya push bildirimiyle. Kanal, temel güvenlik ve erişim dengesidir; aşağıdaki tablo en yaygın ikisini karşılaştırır.

4

Kullanıcı kodu geri yazar

Sunucu, geçerlilik penceresini ve sıkı deneme sayacını uygulayarak kodu saklanan hash ile karşılaştırır; böylece kod kaba kuvvetle bulunamaz.

5

Kod yakılır

Başarıda kod anında geçersizleşir ve işlem ilerler. Süre dolarsa kullanıcı yeni kod ister; yenisi eskisinin yerini alır.

Bu döngüde egzotik hiçbir şey yok. Gerçek dünyadaki OTP olaylarının neredeyse hepsi sıkıcı kısımlardan birinin atlanmasına çıkar: deneme limiti yok, kodlar fazla uzun yaşıyor, kodlar düz metin loglanıyor veya sınırsız yeniden gönderim var.

SMS OTP ve TOTP: dürüst karşılaştırma

İki yaygın OTP kanalı, SMS ile iletilen kodlar ve authenticator uygulamasının ürettiği zaman tabanlı kodlardır (TOTP). İkisi de her yerde kazanmaz; olgun ürünler genellikle ikisini birden sunar:

BoyutSMS OTPTOTP (authenticator uygulaması)
Kullanıcıya gerekenSMS alabilen herhangi bir telefonÖnceden kaydedilmiş authenticator uygulamalı bir akıllı telefon
Çevrimdışı çalışır mıHayır, mobil sinyal gerekirEvet, kodlar cihazda hesaplanır
SIM swap riskiHedefli hesaplar için gerçek risk: saldırı numarayı taşır, kodları o alırYok, operatör ağından hiçbir şey geçmez
Başlangıç sürtünmesiYok, SMS herkeste zaten varBelirgin: uygulama kur, QR tara, kurtarma kodlarını sakla
Ayrıca kanıtlarÇalışan bir telefon numarasına sahipliğiYalnızca kayıtlı cihaza sahipliği
Tipik rolKayıt doğrulaması ve herkese ulaşan 2FAKatılan hesaplar için daha güçlü 2FA

Dürüst özet: ikinci faktör işi için TOTP daha güçlüdür; operatör ağından hiçbir şey geçmediğinden SIM swap ve şebeke düzeyinde dinleme geçerli bile değildir. SMS ise erişimde ve TOTP'un hiç yapamadığı tek işte rakipsizdir: kayıt olan kişinin gerçek, çalışan bir telefon numarasına sahip olduğunu kanıtlamak.

Çoğu platformun günlük girişte TOTP veya passkey'e geçmişken yeni hesapları hâlâ SMS ile doğrulamasının nedeni budur. İkisini tamamlayıcı olarak görün; yüksek riskli hesapların SMS'in ötesine geçmesine izin verin.

OTP güvenliği için iyi pratikler

Kodu hangi kanal iletirse iletsin, güvenlik işinin çoğunu sunucu tarafındaki kurallar yapar:

Kısa geçerlilik

Beş ile on dakika fazlasıyla yeter. Bir saat yaşayan kod, ayakta duran bir davetiyedir.

Her zaman tek kullanım

Kod kabul edildiği anda geçersizleştirin; yeni kod üretildiğinde eskisini değiştirin.

Sıkı deneme limiti

Altı haneli bir kod, ancak birkaç yanlış denemeden sonra kilitlerseniz kaba kuvvete dayanır.

Yeniden gönderimi frenle

Kimlik başına ve IP başına yeni kod isteme sıklığını sınırlayın. Resend istismarı, SMS-pumping dolandırıcılığının mesaj bütçelerini eritme yoludur.

Kodları hash'leyerek sakla

Kodu değil hash'ini saklayın. Veritabanınızı okuyabilen biri kullanıcılarınız adına giriş yapamamalı.

Kodları loglardan uzak tut

İstek logları, hata izleyiciler ve analitik olaylar query string ve gövde yutmayı sever. Temizleyin.

Kodu bağlama bağla

Bir oturumda giriş için üretilen kod, başka oturumda ödeme onaylamamalı. Kodları, onları isteyen işleme bağlayın.

Yedek yolu tasarla

Cihaz kayboldu, numara değişti, uygulama silindi. Kurtarma akışları tasarımın parçasıdır ve saldırganların ilk yokladığı yer orasıdır.

Kendi uygulamanıza OTP doğrulama ekleyin

Kod üretip kontrol etmek her framework'te birkaç düzine satırdır; kodları kullanıcılarınıza iletmek de mesaj sağlayıcınızın işidir. Ekiplerin sürekli eksik kurduğu taraf öbür yöndür: kod almak. Yani başka platformlarda telefon doğrulamasından geçebilmek ve kendi akışınızı mock yerine gerçek numaralarla test edebilmek.

O alma tarafı tam olarak SMSBulk SMS doğrulama API'si işidir: kodunuz size özel bir numara satın alır, SMS düşene kadar sorgular ve kodu JSON olarak okur. Aşağıdaki parça üretimde doğrulanmış döngüdür; Node.js ve Python rehberleri bunu retry, timeout ve iade yönetimiyle genişletir.

const BASE = 'https://smsbulk.net/api/v1';
const KEY = process.env.SMSBULK_API_KEY; // smsbulk_...

async function api(path, options = {}) {
  const res = await fetch(BASE + path, {
    ...options,
    headers: { 'X-API-Key': KEY, 'Content-Type': 'application/json' },
  });
  if (!res.ok) throw new Error(res.status + ' ' + (await res.text()));
  return res.json();
}

async function main() {
  // 1) Buy a number for Telegram in the United States
  const activation = await api('/activations', {
    method: 'POST',
    body: JSON.stringify({ serviceCode: 'tg', countryIso: 'US' }),
  });
  console.log('Number:', activation.phoneNumber);

  // 2) Poll until the verification code arrives
  let code = null;
  while (!code) {
    await new Promise((r) => setTimeout(r, 5000));
    const a = await api('/activations/' + activation.id);
    if (a.status === 'RECEIVED') code = a.smsCode;
    else if (['CANCELLED', 'EXPIRED', 'REFUNDED'].includes(a.status)) {
      throw new Error('Ended without SMS: ' + a.status);
    }
  }
  console.log('Verification code:', code);

  // 3) Confirm the code was used
  await api('/activations/' + activation.id + '/complete', { method: 'POST' });
}

main();

Hedefiniz özellikle CI ise (test hesapları açmak, OTP e-posta ve SMS'lerinizin gerçekten ulaştığını kontrol etmek, bozuk akışları kullanıcıdan önce yakalamak), SMS doğrulama testi rehberi bunu uçtan uca anlatır; yukarıda kullanılan her endpoint API dokümantasyonu içinde tanımlıdır.

OTP doğrulama SSS

Doğrulamada OTP ne demektir?

OTP, tek kullanımlık şifre demektir: kısa bir zaman penceresinde tek kullanım için geçerli kısa bir kod. Kullanıcının işlem anında bir teslim kanalını (telefon numarası, e-posta veya kayıtlı cihaz) kontrol ettiğini kanıtlar.

OTP ile 2FA aynı şey mi?

Tam değil. 2FA, parolanın üstüne ikinci ve bağımsız bir faktör istemektir. OTP bu ikinci faktörü uygulamanın yaygın bir yoludur; ama OTP tek başına da kullanılır, örneğin daha parola bile yokken kayıtta telefon numarası doğrulamak için.

SMS OTP mi, TOTP mi daha güvenli?

İkinci faktör işi için TOTP: kodlar operatör ağından geçmez, dolayısıyla SIM swap ve dinleme geçerli değildir. SMS OTP ise erişim ve numaranın gerçek olduğunu kanıtlama işi için pratik tercihtir; TOTP bunu yapamaz. Ciddi ürünler ikisini birden kullanır.

Bir OTP ne kadar geçerli olmalı?

Birkaç dakika. Beş ile on dakika, kötü şebekelerde geciken SMS teslimini karşılar ve replay için uzun bir pencere bırakmaz. Geçerliliği tek kullanım ve deneme limitiyle birleştirin; üç kural ancak birlikte çalışır.

Platformlar hesapları neden hâlâ SMS ile doğruluyor?

Çünkü çalışan bir telefon numarası, toplu sahte kayıtları eleyen gerçek dünya maliyetidir ve SMS uygulama da kayıt da gerektirmez. Girişler TOTP ve passkey'e taşınırken SMS doğrulamanın ayakta kalmasının nedeni de budur.

OTP akışını uçtan uca nasıl test ederim?

Mock yerine gerçek numaralarla: SMS doğrulama API'si üzerinden size özel bir numara alın, kayıt akışınızı ona karşı çalıştırın ve kodun gelip doğrulandığını assert edin. Ekiplerin bunu CI'a nasıl bağladığını SMS doğrulama testi rehberi gösterir.

Doğrulama akışınız için gerçek numara mı gerekiyor?