Apa itu Tink?

Tink adalah library kriptografi open source yang ditulis oleh kriptografer dan engineer keamanan di Google. API Tink yang aman dan sederhana mengurangi masalah umum melalui desain yang berfokus pada pengguna, penerapan yang cermat dan peninjauan kode, serta pengujian yang ekstensif. Lihat bagian Sasaran di halaman ini untuk mengetahui lebih banyak tujuan apa yang harus dipenuhi oleh Tink.

Tink membantu pengguna tanpa latar belakang kriptografi untuk menerapkan tugas kriptografi umum dengan aman. Di Google, Tink telah di-deploy di ratusan produk dan sistem.

Mengapa saya harus menggunakan Tink?

Alasan terpenting untuk menggunakan Tink adalah:

  • Mudah digunakan

    Kriptografi sulit untuk dianggap benar. Dengan Tink, Anda dapat mengenkripsi atau menandatangani data dengan jaminan keamanan bawaan hanya menggunakan beberapa baris kode. Tink juga dapat membantu Anda merotasi kunci atau mengamankan kunci menggunakan Sistem Pengelolaan Kunci (KMS) eksternal.

  • Aman

    Tink menambahkan perlindungan keamanan pada library terkenal seperti BoringSSL dan Java Cryptography Architecture, serta menampilkannya langsung di antarmuka, sehingga auditor dan alat dapat menemukan celah dengan cepat. Tink juga memisahkan API yang berpotensi berbahaya, sehingga Anda dapat memantaunya.

  • Kompatibel

    Teks tersandi Tink kompatibel dengan library kriptografi yang ada. Tink juga mendukung enkripsi atau penyimpanan kunci di Amazon KMS, Google Cloud KMS, Android Keystore, dan iOS Keychain.

Siapa yang menggunakan Tink?

Tink banyak digunakan oleh banyak perusahaan, termasuk Google, Square, dan Citadel, serta ratusan pelanggan Google Cloud dan partner Google Pay. Tink juga mendukung library Jetpack Security, yang mengamankan banyak aplikasi Android populer seperti Slack, Adidas, AirBnb, dan Nextdoor.

Tink Goal

Apa tujuan utama Tink dibandingkan dengan library kriptografis lainnya, dan mekanisme utama apa yang digunakan Tink untuk mencapai tujuan ini?

Singkatnya, Tink memiliki dua tujuan:

  1. Meningkatkan ketangkasan kriptografi: Pengguna harus dapat mengubah kunci dan algoritma dengan cara yang mudah.
  2. Aktifkan peninjauan keamanan: Tink bertujuan untuk memungkinkan pengguna menulis kode yang keamanannya dapat ditinjau secara lokal, dengan menyediakan antarmuka yang memberikan jaminan keamanan yang jelas.

Mekanisme utama yang digunakan Tink untuk mencapai tujuan ini adalah sebagai berikut:

  1. Tink menyediakan primitif dan antarmuka sebagai abstraksi penting. Abstraksi ini memungkinkan pengguna menulis kode yang tidak menentukan algoritma yang akan digunakan, tetapi menentukan gagasan keamanan yang diharapkan.
  2. Tink menggunakan konsep "keyset", yang merupakan kumpulan kunci yang terkait dengan primitif tertentu. Hal ini menyebabkan pengguna menulis kode yang dapat digunakan dengan beberapa kunci.
  3. Di Tink, kunci tidak hanya ditentukan oleh materi kunci yang mendasarinya, tetapi juga algoritme kriptografis, serta semua parameter. Artinya, kunci Tink selalu memilih fungsi kriptografis unik dari semua kemungkinan fungsi yang ada, dan tidak memberikan ruang untuk penafsiran.

Bagian berikut menjelaskan konsep ini secara lebih mendetail.

Ketangkasan kriptografi

Pertimbangkan Software Engineering di Google, buku tentang pelajaran yang diperoleh di bidang software engineering, dengan subjudul "pelajaran yang dipelajari dari pemrograman dari waktu ke waktu". Di dalamnya, penulis berupaya keras untuk memohon dampak dari fakta bahwa keadaan berubah. Fakta ini juga memengaruhi sebagian besar desain Tink. Dalam kriptografi, penting bahwa seseorang mempersiapkan diri untuk perubahan. Kunci akan bocor, dan algoritma akan rusak. Kemampuan untuk mengganti kunci dan algoritma sangat penting bagi banyak pengguna, dan menjadikan mereka lebih hati-hati.

Peninjauan keamanan dan properti lokal

Tink mempromosikan penggunaan antarmuka, seperti antarmuka AEAD, yang memungkinkan pengguna mengenkripsi data. Di antara jaminan keamanan lainnya, AEAD menjamin bahwa beberapa enkripsi dari string yang sama akan menghasilkan teks cipher yang berbeda.

Untuk melihat bagaimana ID ini dapat digunakan, misalkan seorang engineer ingin menyimpan beberapa ID sensitif dalam cookie pengguna. Mereka mungkin menyediakan class seperti ini:

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

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

Meneruskan Aead akan memperoleh properti berikut:

  1. Kode ini menyampaikan bahwa IdEncrypter dapat melakukan tugasnya dan memerlukan skema enkripsi dengan properti keamanan yang disediakan Aead. Atau, DeterministicAead tidak akan cukup -- IdEncrypter memerlukan dua enkripsi dari ID yang sama berbeda. Di sisi lain, mengambil instance pengenkripsi AES GCM (satu instance tertentu dari Aead) sebagai parameter akan terlalu ketat: Aead apa pun cukup bagi IdEncrypter untuk melakukan tugasnya, dan tidak harus berupa satu algoritma tertentu.
  2. Peninjauan keamanan dapat mempertimbangkan hal ini. Peninjau keamanan tidak perlu memeriksa semua repositori kode untuk memeriksa apakah seseorang membuat subclass Aead yang tidak aman untuk digunakan dengan IdEncrypter. Sebagai gantinya, Tink menyediakan properti keamanan yang dimiliki semua objek Aead, dan peninjau dapat memeriksa apakah properti tersebut sudah memadai.

Secara khusus, poin kedua memerlukan banyak perhatian. Pengguna sering meminta untuk menambahkan algoritma yang 'tidak benar' Aead. Poin sebelumnya menggambarkan alasan hal ini berbahaya: jika implementasi Aead yang tersedia tidak memberikan jaminan keamanan yang diperlukan, IdEncrypter dapat menjadi tidak aman, dan engineer yang melakukan peninjauan keamanan perlu memeriksa kode tambahan untuk memeriksa apakah instance objek dibuat dengan benar.