Tink nedir?

Tink, Google'daki kriptograflar ve güvenlik mühendisleri tarafından yazılmış açık kaynak bir kriptografi kitaplığıdır. Tink'in güvenli ve basit API'leri; kullanıcı odaklı tasarım, dikkatli uygulama, kod incelemeleri ve kapsamlı testler yoluyla yaygın sorunları azaltır. Tink'in hangi hedefleri yerine getirmek için tasarlandığıyla ilgili daha fazla bilgi edinmek için bu sayfadaki Hedefler bölümüne bakın.

Tink, kriptografi arka planı olmayan kullanıcıların yaygın şifreleme görevlerini güvenli bir şekilde uygulamasına yardımcı olur. Tink, Google'da yüzlerce ürün ve sistemde kullanılıyor.

Neden Tink'i kullanmalıyım?

Tink'i kullanmak için en önemli nedenler şunlardır:

  • Kullanımı basit

    Kriptografiyi doğru kullanmak zordur. Tink sayesinde sadece birkaç satır kod kullanarak yerleşik güvenlik garantileriyle verileri şifreleyebilir veya imzalayabilirsiniz. Tink, harici Anahtar Yönetim Sistemleri (KMS'ler) kullanarak anahtarları veya anahtarları güvenli hale getirmenize de yardımcı olabilir.

  • Güvenlidir

    Tink, BoringSSL ve Java Cryptography Architecture gibi iyi bilinen kitaplıkların üzerine güvenlik korumaları ekler ve bunları arayüzlerde gösterir. Böylece denetçiler ve araçlar boşlukları hızla bulabilir. Tink ayrıca tehlikeli olabilecek API'leri ayırarak bunları izleyebilirsiniz.

  • Uyumlu

    Tink şifrelenmiş metinleri, mevcut şifreleme kitaplıklarıyla uyumludur. Tink, Amazon KMS, Google Cloud KMS, Android Anahtar Deposu ve iOS Anahtar Zinciri'nde anahtarların şifrelenmesini veya depolanmasını da destekler.

Tink'i kim kullanıyor?

Tink; Google, Square ve Citadel gibi birçok şirketin yanı sıra yüzlerce Google Cloud müşterisi ve Google Pay iş ortağı tarafından da yaygın bir şekilde kullanılmaktadır. Tink ayrıca Slack, Adidas, AirBnb ve Nextdoor gibi birçok popüler Android uygulamasının güvenliğini sağlayan Jetpack Security kitaplığını da destekliyor.

Tink golleri

Diğer şifreleme kitaplıklarına kıyasla Tink'in ana hedefleri ve bu hedeflere ulaşmak için kullandığı ana mekanizmalar nelerdir?

Kısacası, Tink'in iki hedefi vardır:

  1. Şifreleme çevikliğini teşvik edin: Kullanıcılar, anahtarları ve algoritmaları basit bir şekilde değiştirebilmelidir.
  2. Güvenlik incelemelerini etkinleştirme: Tink, net güvenlik garantileri veren arayüzler sunarak kullanıcıların güvenliği yerel olarak incelenebilecek kodlar yazmasını sağlamayı amaçlıyor.

Tink'in bu hedeflere ulaşmak için kullandığı ana mekanizmalar şunlardır:

  1. Tink, önemli soyutlamalar olarak temel öğeleri ve arayüzleri sağlar. Bu soyutlamalar, kullanıcıların tam olarak kullanılacak algoritmayı belirtmeyen, bunun yerine beklenen güvenlik kavramını belirten kod yazmalarına imkan tanır.
  2. Tink, belirli bir temel öğeyle ilişkilendirilen anahtarlar kümesi olan "anahtar kümesi" kavramını kullanır. Bu da kullanıcıların birden fazla anahtarla çalışan kod yazmasına neden olur.
  3. Tink'te anahtarlar yalnızca temel anahtar materyali tarafından değil, aynı zamanda kriptografik algoritma ve tüm parametreler tarafından da belirtilir. Bu, Tink anahtarının var olabilecek tüm olası işlevler arasından her zaman benzersiz bir şifreleme işlevi seçtiği ve yoruma yer bırakmadığı anlamına gelir.

Aşağıdaki bölümlerde bu kavramlar daha ayrıntılı olarak açıklanmaktadır.

Kriptografik çeviklik

Yazılım mühendisliği alanında alınan derslerle ilgili bir kitap olan Google'da Yazılım Mühendisliği'ni düşünün. Kitabın başlığı "zaman içinde programlamadan alınan dersler"dir. Yazarlar bu yazıda her şeyin değişmesinin sonuçlarını ima etmek için ellerinden geleni yapıyor. Bu durum, Tink'in tasarımının da büyük bir kısmını etkiledi. Kriptografide değişime hazırlanması önemlidir. Anahtarlar sızdırılacak ve algoritmalar bozulacak. Anahtarların ve algoritmaların değiştirilmesi, birçok kullanıcı için son derece önemlidir. Bu nedenle, hazırlıklı olmak sağduyulu bir yaklaşımdır.

Güvenlik incelemeleri ve yerel mülkler

Tink, kullanıcıların verileri şifrelemesine olanak tanıyan AEAD arayüzümüz gibi arayüzlerin kullanımını teşvik eder. AEAD, diğer güvenlik garantilerinin yanı sıra aynı dizenin birden fazla şifrelenmesinin farklı şifrelenmiş metinlerle sonuçlanacağını garanti eder.

Bunun nasıl kullanılabileceğini görmek için bir mühendisin bazı hassas kimlikleri kullanıcı çerezinde depolamak istediğini varsayalım. Bu şirket, aşağıdaki gibi bir sınıf sağlayabilir:

class IdEncrypter {
  public static IdEncrypter createFromAead(Aead aead);

  public String encrypt(long id) throws GeneralSecurityException;
  public long decrypt(String encrypted) throws GeneralSecurityException;
};

Aead geçirildiğinde aşağıdaki özellikler elde edilir:

  1. Kod, IdEncrypter ürününün işini yapabilmesi için Aead tarafından sağlanan güvenlik özelliklerine sahip bir şifreleme şeması gerektirdiğini bildirir. Alternatif olarak DeterministicAead yeterli olmaz. IdEncrypter, aynı kimliğe sahip iki şifrelemenin farklı olmasını gerektirir. Diğer yandan, bir AES GCM şifreleyicisinin bir örneğini (belirli bir Aead örneği) parametre olarak almak aşırı katı olur: Herhangi bir Aead, IdEncrypter ürününün işini yapması için yeterlidir ve tek bir algoritma olması gerekmez.
  2. Bir güvenlik incelemesi bu noktayı dikkate alabilir. Bir güvenlik incelemecinin, bir yerlerde birisinin IdEncrypter ile kullanımı güvenli olmayan bir Aead alt sınıfı oluşturup oluşturmadığını kontrol etmek için kod deposunun tamamını incelemesine gerek yoktur. Bunun yerine, Tink, tüm Aead nesnelerinin sahip olduğu güvenlik özelliklerini sağlar ve incelemeci, bunların yeterli olup olmadığını kontrol edebilir.

Özellikle ikinci nokta çok dikkatli olmayı gerektiriyor. Kullanıcılar genellikle Aead için "doğru olmayan" algoritmalar eklemek isterler. Önceki nokta, bunun neden tehlikeli olduğunu göstermektedir: Gerekli güvenlik garantilerini sağlamayan bir Aead uygulaması varsa IdEncrypter güvensiz hale gelebilir ve güvenlik incelemesi yapan mühendisin, nesnenin doğru şekilde somutlaştırıldığını kontrol etmek için ek kodu incelemesi gerekir.