Güven Jetonları, bir web sitesinin pasif izleme olmadan sahtekarlıkla mücadeleye yardımcı olmak için bir tarama bağlamından diğerine (örneğin, siteler arasında) sınırlı miktarda bilgi iletmesini sağlayan yeni bir API'dir.
Özet
Güven jetonları, bir kaynağın güvendiği bir kullanıcıya şifreleme jetonları yayınlamasını sağlar. Jetonlar, kullanıcının tarayıcısı tarafından depolanır. Tarayıcı, daha sonra kullanıcının özgünlüğünü değerlendirmek için jetonları başka bağlamlarda kullanabilir.
Trust Token API, kullanıcının bir bağlamdaki güveninin, kullanıcıyı tanımlamadan veya iki kimliği bağlamadan başka bir bağlama aktarılmasını sağlar.
Demo ile API'yi deneyebilir, Chrome Geliştirici Araçları Ağ ve Uygulama sekmelerindeki jetonları inceleyebilirsiniz.
![Chrome Geliştirici Araçları Ağ sekmesindeki Güven Jetonları'nı gösteren ekran görüntüsü.](https://web.dev/static/articles/trust-tokens/image/screenshot-showing-trust-4dce3a304ea6.jpg?authuser=5&hl=tr)
![Chrome Geliştirici Araçları Uygulama sekmesindeki Güven Jetonları'nı gösteren ekran görüntüsü.](https://web.dev/static/articles/trust-tokens/image/screenshot-showing-trust-8569c4b96af8e.jpg?authuser=5&hl=tr)
Güven Jetonlarına neden ihtiyacımız var?
Web'in, bir kullanıcının kim olduğunu gösteren güven sinyalleri oluşturmak için yollara ihtiyacı vardır. Gerçek bir kişiyi veya hizmeti dolandıran kötü amaçlı bir üçüncü taraf veya insan gibi davranan bir bot değil. Sahtekârlıktan koruma, reklamverenler, reklam sağlayıcılar ve CDN'ler için özellikle önemlidir.
Maalesef güvenilirliği ölçen ve yaymaya yönelik birçok mevcut mekanizma (örneğin, bir siteyle etkileşimin gerçek bir insandan olup olmadığını anlamak) dijital parmak izi almada da kullanılabilecek tekniklerden yararlanmaktadır.
API, gizliliği koruyarak güvenin bireysel kullanıcı izleme olmaksızın siteler arasında yayılmasını sağlamalıdır.
Güven Jetonları teklifinde neler var?
Web, sahtekarlığı ve spam'i tespit etmek için güven sinyalleri oluşturmayı temel alır. Bunu yapmanın bir yolu da genel, siteler arası kullanıcı başına tanımlayıcılarla taramayı izlemektir. Gizliliği korumaya yönelik bir API için bu kabul edilemez.
Teklif açıklayıcısından:
Bu API, "Gizlilik Geçişi" stili şifreleme jetonları için üçüncü taraf bağlamlarında erişilebilen yeni bir kaynak başına depolama alanı önerir. Bu jetonlar kişiselleştirilmemiştir ve kullanıcıları izlemek için kullanılamaz ancak taklit edilememeleri için kriptografik olarak imzalanmıştır.
Kaynak, kullanıcıya güvendiği bir bağlamda olduğunda tarayıcıya bir jeton grubu gönderebilir. Bu jeton, kullanıcının başka şekilde bilinmeyeceği veya daha az güveneceği bir bağlamda daha sonra "harcanabilir". Daha önemlisi, jetonlar birbirinden ayırt edilemez olduğundan web siteleri, kullanıcıları bu simgeler üzerinden takip edemez.
Ayrıca tarayıcının, giden istekleri belirli bir jetonun kullanımına bağlı anahtarlarla imzalaması için bir uzantı mekanizması öneriyoruz.
Örnek API kullanımı
Aşağıdaki kod, API açıklayıcısındaki örnek koddan uyarlanmıştır.
Bir kullanıcının, üçüncü taraf reklam ağındaki (foo.example
) reklamları yerleştiren bir haber web sitesini (publisher.example
) ziyaret ettiğini varsayalım. Kullanıcı daha önce güven jetonları veren bir sosyal medya sitesi (issuer.example
) kullanmıştır.
Aşağıdaki sırada güven jetonlarının işleyiş şekli gösterilmektedir.
1.Kullanıcı issuer.example
adresini ziyaret eder ve sitenin gerçek bir insan olduğuna inandırmaya yönelik işlemler (ör. hesap hareketleri veya CAPTCHA'yı geçme) gerçekleştirir.
2.issuer.example
, kullanıcının gerçek bir kişi olduğunu doğrular ve kullanıcının tarayıcısına güven jetonu yayınlamak için aşağıdaki JavaScript'i çalıştırır:
fetch('https://issuer.example/trust-token', {
trustToken: {
type: 'token-request',
issuer: 'https://issuer.example'
}
}).then(...)
3.Kullanıcının tarayıcısı, güven jetonunu depolayarak issuer.example
ile ilişkilendirir.
4.Bir süre sonra kullanıcı publisher.example
adresini ziyaret eder.
5.publisher.example
, kullanıcının gerçek bir insan olup olmadığını bilmek istiyor. publisher.example
, issuer.example
hizmetine güvenir. Bu nedenle, kullanıcının tarayıcısında bu kaynak için geçerli jetonlar olup olmadığını kontrol eder:
document.hasTrustToken('https://issuer.example');
6.Bu işlem true
olarak çözümlenen bir taahhüt döndürürse kullanıcının jetonu issuer.example
olduğu anlamına gelir. Bu durumda publisher.example
, jetonu kullanmayı deneyebilir:
fetch('https://issuer.example/trust-token', {
trustToken: {
type: 'token-redemption',
issuer: 'https://issuer.example',
refreshPolicy: {none, refresh}
}
}).then(...)
Kaldırdığınız kodun yerine aşağıdakini ekleyin:
- Tekliften yararlanan (
publisher.example
) kullanım hakkı talep eder. Teklifi kullanma işlemi başarılı olursa kartı veren kuruluş (
issuer.example
), bir noktada bu tarayıcıya geçerli bir jeton yayınladığını belirten bir kullanım kaydı döndürür.7.
fetch()
tarafından döndürülen taahhüt çözümlendikten sonra, tekliften yararlanma kaydı sonraki kaynak isteklerinde kullanılabilir:
fetch('https://foo.example/get-content', {
trustToken: {
type: 'send-redemption-record',
issuers: ['https://issuer.example', ...]
}
});
Kaldırdığınız kodun yerine aşağıdakini ekleyin:
- Tekliften yararlanma kayıtları, istek başlığı
Sec-Redemption-Record
olarak dahil edilir. foo.example
teklif kullanma kaydını alır ve bu kaydı ayrıştırarakissuer.example
kullanıcının bu kullanıcının bir insan olduğunu düşünüp düşünmediğini belirleyebilir.foo.example
buna uygun şekilde yanıt verir.
Bir e-ticaret sitesiyle ilgili alışveriş geçmişiniz, bir konum platformunda yapılan check-in'leriniz veya bir bankada hesap geçmişiniz olabilir. Sertifika verenler, hesabınızın ne kadar süredir?
Güven jetonu verme
Kullanıcının issuer.example
gibi bir güven jetonu veren kuruluş tarafından güvenilir kabul edildiği durumlarda kartı veren kuruluş, trustToken
parametresiyle fetch()
isteği göndererek kullanıcı için güven jetonlarını getirebilir:
fetch('issuer.example/trust-token', {
trustToken: {
type: 'token-request'
}
}).then(...)
Bu işlem, yeni bir temel şifreleme öğesi kullanarak Gizlilik Kartı verme protokolünün bir uzantısını çağırır:
nonce olarak bilinen bir rastgele sayı kümesi oluşturma.
Noce'ları gizleyin (kartı veren kuruluşun içeriklerini görüntüleyememesi için kodlayın) ve bir
Sec-Trust-Token
üst bilgisindeki isteğe ekleyin.Sağlanan uç noktaya bir POST isteği gönderin.
Uç nokta, kör jetonlar (gizli nonce'lar üzerindeki imzalar) ile yanıt verir. Ardından, jetonlar açık hale getirilir ve tarayıcı tarafından ilişkili nonce'larla birlikte güven jetonları olarak dahili olarak depolanır.
Güven jetonu kullanma
Bir yayıncı sitesi (yukarıdaki örnekte publisher.example
gibi), kullanıcı için kullanılabilir güven jetonları olup olmadığını kontrol edebilir:
const userHasTokens = await document.hasTrustToken('issuer.example/trust-token');
Yayıncı sitesi, kullanılabilir jetonlar varsa teklif kullanma kaydı almak için bunları kullanabilir:
fetch('issuer.example/trust-token', {
...
trustToken: {
type: 'token-redemption',
refreshPolicy: 'none'
}
...
}).then(...)
Yayıncı, aşağıdakine benzer bir fetch()
çağrısı kullanarak güven jetonu gerektiren isteklere (ör. yorum yayınlama, sayfayı beğenme veya bir ankette oy verme) teklifi kullanma kayıtları ekleyebilir:
fetch('https://foo.example/post-comment', {
...
trustToken: {
type: 'send-redemption-record',
issuers: ['issuer.example/trust-token', ...]
}
...
}).then(...);
Tekliften yararlanma kayıtları, Sec-Redemption-Record
istek başlığı olarak dahil edilir.
Gizlilik konusunda dikkat edilmesi gereken noktalar
Jetonlar "bağlanamaz" olacak şekilde tasarlanmıştır. Veren kuruluş, kullanıcılarının hangi siteleri ziyaret ettiğiyle ilgili toplu bilgileri öğrenebilir, ancak verme ile kullanım arasında bağlantı kuramaz: Bir kullanıcı bir jetonu kullandığında kartı veren, jetonu oluşturduğu diğer jetonlardan ayırt edemez. Bununla birlikte, güven jetonları şu anda bir vakumda yer almamaktadır: Şu anda veren bir yayıncı, teoride üçüncü taraf çerezler ve gizli izleme teknikleri gibi sitelerde kullanıcının kimliğine dahil edebilir. Sitelerin, desteklerini planlarken bu ekosistem geçişini anlamaları önemlidir. Bu, birçok Özel Korumalı Alan API'si için geçişin genel bir yönüdür; burada daha ayrıntılı olarak ele alınmamıştır.
Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler
Güven jetonunun tükenmesi: Kötü amaçlı bir site, kullanıcının belirli bir kartı veren kuruluşa verdiği jetonları kasıtlı olarak tüketebilir. Bu tür saldırılara karşı, kartı verenlerin aynı anda birçok jeton sağlamalarını sağlamak gibi çeşitli çözümler mevcuttur. Böylece kullanıcılar, tarayıcıların üst düzey sayfa görüntüleme başına yalnızca bir jeton kullanmasını sağlayacak yeterli miktarda veriye sahip olur.
Çift harcama önleme: Kötü amaçlı yazılım, kullanıcının tüm güven jetonlarına erişmeye çalışabilir. Bununla birlikte, her kullanım, her jetonun yalnızca bir kez kullanıldığını doğrulayabilen aynı jetonu veren kuruluşa gönderildiğinden jetonlar zamanla tükenir. Kartı veren kuruluşlar, riski azaltmak için daha az jeton imzalayabilir.
Talep mekanizmaları
Tekliften yararlanma kayıtlarının fetch()
dışına gönderilmesine (örneğin, gezinme istekleriyle) izin verilebilir. Siteler, sayfa yüklemeye paralel olarak jetonun kullanımını etkinleştirmek için kartı verenin verilerini HTTP yanıt başlıklarına da ekleyebilir.
Bu teklifle ilgili geri bildirimde bulunmanız gerektiğini hatırlatmak isteriz. Yorumlarınız varsa lütfen Güven Jetonu açıklayıcı deposunda sorun oluşturun.
Daha fazla bilgi
- Güven Jetonları demosu
- Chrome'un kaynak denemelerini kullanmaya başlama
- Özel Korumalı Alan hakkında ayrıntılı bilgi
- Trust Token API Açıklayıcısı
- Chromium Projeleri: Trust Token API
- Uygulama Amacı: Trust Token API
- Chrome Platform Durumu
- Gizlilik Kartı
- Gizlilik Kartı Uzantıları
Bu yayının yazılmasına ve incelenmesine yardımcı olan herkese teşekkür ederiz.