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:
- Meningkatkan ketangkasan kriptografi: Pengguna harus dapat mengubah kunci dan algoritma dengan cara yang mudah.
- 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:
- 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.
- 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.
- 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:
- Kode ini menyampaikan bahwa
IdEncrypter
dapat melakukan tugasnya dan memerlukan skema enkripsi dengan properti keamanan yang disediakanAead
. 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 dariAead
) sebagai parameter akan terlalu ketat: Aead apa pun cukup bagiIdEncrypter
untuk melakukan tugasnya, dan tidak harus berupa satu algoritma tertentu. - 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 denganIdEncrypter
. 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.