Çoğu iki faktörlü kimlik doğrulama sistemi tehlikeli bir varsayıma dayanır:
Sunucu ihlal edilirse, kimlik doğrulama sırları korunabilir.
TOTP, bu varsayımı kırar.
TOTP ile sunucu, paylaşılan bir sır tutar. Veritabanınız sızdığında, saldırganlar geçerli OTP kodları üretebilir.
İşte tam da bu sorun PulseProof Sentinel Protocol (PPS) çözmeye çalışır.
PPS, paylaşılan gizli TOTP kodlarını, imzalı, zaman sınırlı, asimetrik kanıtlar olan Pulses ile değiştiren deneysel bir açık kimlik doğrulama protokolüdür.
Bunun yerine:
TOTP:
code = HMAC(shared_secret, time)
PPS bunu kullanır:
PPS:
Pulse = Sign(private_key, time + rp + nonce + counter + context + policy)
Sunucu, paylaşılan bir OTP sırrını asla saklamaz.
Sadece kamu anahtarlarını saklar.
PPS Nedir?
PulseProof Sentinel Protocol (PPS), geleneksel OTP, push kimlik doğrulama ve hatta WebAuthn’nin yetersiz kaldığı senaryolar için tasarlanmış bir asimetrik kimlik doğrulama protokolüdür.
Özellikle şunlar için faydalıdır:
- çevrimdışı kimlik doğrulama
- legacy OTP giriş formları
- QR kodu ve derin bağlantı ile giriş
- kısıtlı donanım terminalleri
- satış noktası ve IoT cihazları
- insan görünebilir onay ile işlem imzalama
- sosyal zorlama sinyal verme
- çevrimdışı çoklu cihaz eşiği onayı
PPS, WebAuthn/FIDO2’yi değiştirmeye çalışmıyor.
WebAuthn, tarayıcı tabanlı parolasız kimlik doğrulama için tercih edilen standarttır.
PPS, WebAuthn’nin mevcut olmadığı veya uygulanabilir olmadığı operasyonel boşlukları doldurmak için tasarlanmıştır.
Neden Sadece WebAuthn Kullanmayalım?
WebAuthn mükemmel.
Tarayıcı tabanlı parolasız kimlik doğrulama geliştiriyorsanız, WebAuthn kullanın.
Ama birçok gerçek sistem hala şu ihtiyaçları gözetiyor:
- OTP tarzı giriş alanları
- Çevrimdışı doğrulama
- Tarayıcı desteği olmayan donanım terminalleri
- işlem tutarı onayı
- sosyal zorlama kodları
- çoklu cihaz onayı
- QR/derin bağlantı kimlik doğrulama akışları
İşte burada PPS devreye giriyor.
Temel Özellikler
PPS, küçük bir temel protokol ve isteğe bağlı gelişmiş modüller içerir.
Temel
- Ed25519 imzaları
- belirleyici CBOR kodlama
- zaman sınırlı Pulses
- nonce bağlama
- monotonik sayaç tekrar koruma
- relying-party bağlama
- sona erme uygulaması
İsteğe Bağlı Gelişmiş Modüller
- ileri güvenli anahtar rayçetinleme
- sosyal zorlama / Honey-Pulse sinyal verme
- çevrimdışı n-of-m eşik onayı
- işlem Tutar Markası doğrulaması
- dinamik politika bağlama
- çevresel bağlama
Protokol spesifikasyonu burada bulunmaktadır.
PHP Uygulaması: pps-php
Temel PHP uygulaması, framework bağımsız bir paket olarak mevcuttur:
pps-protocol/pps-phpLinkler:
Composer ile kurulum:
composer require pps-protocol/pps-phpŞunları destekler:
- Pulse oluşturma
- Pulse doğrulama
- kayıt akışları
- Güven Kodu oluşturma
- Tutar Markası işlem kodları
- sosyal zorlama anahtarları
- eşik imzaları
- çevrimdışı mod
- hafıza, dosya, PDO ve Redis depolama arka uçları
Hızlı Örnek: Pulse Oluşturma
İşte basit bir istemci tarafı örneği:
use Pps\Client\AuthenticatorClient;
$client = new AuthenticatorClient($clientState);
$pulse = $client
->rpId('example.com')
->nonce($nonceFromServer)
->createPulse();
echo $pulse['token'];
echo $pulse['trust_code'];
Sunucu, Pulse’ı yalnızca saklanan kamu anahtarı ile doğrular.
Paylaşılan bir sır gereksizdir.
Laravel Entegrasyonu: laravel-pps
Eğer Laravel kullanıyorsanız, özel bir entegrasyon paketi mevcuttur:
pps-protocol/laravel-ppsLinkler:
Kurulum:
composer require pps-protocol/laravel-ppsSonrasında çalıştırın:
php artisan pps:installBu, PPS yapılandırmasını ve migration’ları yayımlar.
Paket, şunları sağlar:
- hizmet sağlayıcı
- yayınlanabilir yapılandırma
- API rotaları
- HTTP denetleyicisi
- facade
- Artisan komutları
- depolama arka uç entegrasyonu
- işlem meydan okuma uç noktaları
- sosyal zorlama işleme desteği
Varsayılan rotalar:
| Yöntem | Uç Nokta | Açıklama |
|---|---|---|
| GET | /pps/health | Sağlık kontrolü |
| GET | /pps/challenge | Kimlik doğrulama meydan okuması oluştur |
| POST | /pps/register | Bir cihaz kaydet |
| POST | /pps/verify | Bir Pulse Token’ı doğrula |
| POST | /pps/transaction/challenge | İşlem meydan okuması oluştur |
| POST | /pps/transaction/verify | İşlem bağlantılı Pulse’ı doğrula |
Sağlık uç noktasını test edin:
curl http://localhost:8000/pps/healthÖrnek cevap:
{
"status": "ok",
"protocol": "PulseProof Sentinel Protocol",
"version": 1,
"algorithm": "PPS-ED25519-CBOR30",
"epoch_seconds": 30,
"rp_id": "localhost"
}İşlem İmzalama ile Tutar Markası
PPS’nin en faydalı özelliklerinden biri işlem imzalamadır.
Bir para çekme işlemi düşünün:
Tutar: 2,500,067 IRR
Güven Kodu: 49371867Son iki rakam, 67, işlem tutarından türetilmiştir.
Bu, kullanıcının imzalı işlemin görüntülenen tutarla eşleştiğini görsel olarak onaylamasını sağlar.
Müşteri, işlem hash’ini ve tutarını Pulse’a bağlar:
use Pps\Crypto\Base64Url;
use Pps\Payload\ContextObject;
$context = new ContextObject();
$context->sessionId = Base64Url::decode($sessionId);
$context->txHash = Base64Url::decode($txHash);
$pulse = $client
->rpId('example.com')
->nonce($nonce)
->context($context)
->amountMinor(2500067)
->createPulse();
Sunucu, şunları doğrular:
- imza
- nonce
- sayac
- işlem hash’i
- tutar markası
- Güven Kodu
Bu, bir işlem onayı için düz bir OTP göndermekten çok daha güçlüdür.
Sessiz Zorlama Kimlik Doğrulama
PPS ayrıca sessiz zorlama sinyalini destekler.
Eğer bir kullanıcı kimlik doğrulamaya zorlanırsa, istemci gizli bir zorlama anahtarı ile imza atar.
Sunucu bunu içsel olarak algılar fakat normal görünümlü bir başarı yanıtı döner.
if ($result->honey) {
// Normal yanıt döndür.
// Hesabı dahili olarak kısıtla, güvenliği uyar, yerleştirmeyi geciktir, vb.
}Bu, fintech, bankacılık, kripto borsaları ve yüksek riskli hesaplar için faydalıdır.
Dış görünüm yanıtı, normal bir oturum açma işleminden ayırt edilemez olmalıdır.
PPS, TOTP ile Nasıl Karşılaştırılır?
| Özellik | TOTP | PPS |
|---|---|---|
| Sunucuda paylaşılan sır | Evet | Hayır |
| Asimetrik kanıt | Hayır | Evet |
| Çevrimdışı yetenek | Evet | Evet |
| Legacy OTP form desteği | Evet | Evet |
| İşlem bağlama | Zayıf | Güçlü |
| Tutar onayı | Hayır | Evet |
| Sessiz zorlama | Hayır | İsteğe bağlı |
| Eşik onayı | Hayır | İsteğe bağlı |
| Politika bağlama | Hayır | İsteğe bağlı |
| Context bağlama | Hayır | İsteğe bağlı |
Önemli Linkler
PPS’yi keşfetmek istiyorsanız en önemli bağlantılar:
Deneyin
İnşa ediyorsanız:
- fintech kimlik doğrulama
- kripto para çekme onayı
- çevrimdışı cihaz kimlik doğrulama
- POS veya IoT giriş
- yüksek güvenlikli yönetici onayı
- duress-farkında hesaplar
- çok cihazlı yetkilendirme
PPS’yi incelemek faydalı olabilir.
Web sitesinden başlayın:
https://pps-protocol.github.io
Sonra spesifikasyonu okuyun:
https://pps-protocol.github.io/pulseproof-sentinel/SPEC.html
PHP veya Laravel kullanıyorsanız, paketleri kurun:
composer require pps-protocol/pps-php
composer require pps-protocol/laravel-ppsPPS deneysel olduğu için, üretimde kullanmadan önce güvenlik incelemesi yapılması önerilir. Ancak kimlik doğrulama protokolleri, asimetrik OTP alternatifleri veya işlem imzalama ile ilgileniyorsanız kesinlikle göz atmaya değer.
Fikri yararlı bulursanız, havuzları yıldızlayın, paketleri test edin ve geri bildirimde bulunun.
GitHub organizasyonu:
Kaynak: Orijinal Makale


