Saya perlu beberapa ide tentang cara melindungi kunci API pribadi dalam suatu aplikasi, khususnya dalam aplikasi ac # .NET.
Pertama, saya mengerti bahwa secara teori tidak mungkin menyembunyikan apapun dalam kode sumber, jadi saya datang dengan ide lain, tapi saya tidak yakin seberapa masuk akal itu. Bagaimanapun, apakah mungkin untuk berkomunikasi entah bagaimana dengan server web untuk memverifikasi kunci pribadi dan kemudian berbicara kembali ke aplikasi untuk mengkonfirmasi bahwa itu adalah jabat tangan yang sah?
Saya memiliki dua kunci untuk dikerjakan: kunci publik (seperti namanya, itu tidak harus diperlakukan dengan hati-hati sama dengan kunci privat), dan kunci privat, yang perlu diamankan dari orang lain.
Setiap ide tentang bagaimana saya bisa melakukan ini akan sangat dihargai.
sumber
Jawaban:
Untuk meringkas:
Cara terbaik untuk mencegah kompromi kunci ini adalah dengan tetap mengendalikannya. Ini berarti itu tidak boleh digunakan pada server di mana siapa pun selain Anda bisa membaca biner, dan tidak pernah pergi melalui tautan komunikasi yang tidak Anda kontrol.
Pada akhirnya, jika binari berada di luar kendali Anda, semua yang ada di dalamnya berada di luar kendali Anda. Demikian juga, jika seseorang dapat mencegat lalu lintas, mereka dapat menangkap kunci API ( berpotensi bahkan jika Anda menggunakan SSL ).
Saya dapat melihat dua cara utama untuk mencapai ini, keduanya tidak termasuk kunci API pribadi Anda dalam aplikasi yang Anda gunakan:
Dapatkan kunci API unik untuk setiap penerapan
Ini akan memerlukan beberapa hubungan tambahan dengan vendor, di mana Anda dapat memperoleh kunci atau meminta pelanggan Anda mendapatkan kunci.
Ini sebenarnya sangat umum dengan, misalnya, produk yang menggunakan Google Maps API. Pembuat perangkat lunak memiliki kunci sendiri yang mereka gunakan saat mengembangkan / menjalankan salinan mereka, tetapi mereka tidak memasukkannya dalam perangkat lunak, dan sebaliknya, mengharuskan Anda, sebagai pengguna yang menginstal perangkat lunak tersebut, untuk pergi ke Google dan mendapatkan API Anda sendiri kunci. Perangkat lunak hanya memiliki opsi konfigurasi untuk mengatur kunci Google Maps API untuk digunakan.
Faktanya, banyak vendor yang mengeluarkan kunci API secara kontrak mengharuskan Anda melakukan hal-hal seperti ini, jadi Anda mungkin berada di jalur yang salah, dan ini mungkin satu-satunya solusi yang diizinkan untuk digunakan sesuai dengan Ketentuan Layanan vendor dan / atau kontrak hukum apa pun yang mungkin Anda miliki dengannya.
Gunakan Proxy
Siapkan API proxy, tempat aplikasi Anda memanggil API Anda (di server Anda), dan pada gilirannya, API Anda memanggil API vendor menggunakan kunci tersebut.
Anda mungkin memerlukan perlindungan tambahan pada API Anda, misalnya, sesuatu untuk memastikan hanya aplikasi Anda yang menggunakannya. Ini dapat dilakukan dengan:
Yang perlu diingat di sini adalah bahwa Anda mungkin tidak diizinkan untuk melakukan ini. Vendor Anda mungkin memiliki Ketentuan Layanan atau kontrak hukum yang mencegah Anda membangun "layanan agregasi" atau proksi, jadi Anda perlu memeriksanya.
Menangani Kelakuan Buruk
Bahkan jika kunci Anda tidak dikompromikan, jika salah satu pelanggan Anda melakukan sesuatu yang menyebabkan vendor memblokir kunci Anda, tiba-tiba SEMUA pelanggan Anda dinonaktifkan, dan satu-satunya perbaikan Anda adalah memperbarui semua orang lain.
Demikian pula, jika Anda ingin memblokir salah satu pelanggan Anda (misalnya, mereka berhenti membayar, telah membajak perangkat lunak, dll) maka Anda tidak dapat melakukannya tanpa mengeluarkan pembaruan kepada orang lain, dan kemudian menonaktifkan kunci.
Logistik ini untuk apa pun di luar segelintir klien akan dengan cepat menjadi tidak bisa dipertahankan.
Apakah Anda bertindak sebagai proxy atau memiliki kunci unik untuk setiap instalasi, Anda dapat menangani situasi ini dengan relatif mudah (dan dengan sedikit atau tanpa dampak kepada orang lain).
Mencoba untuk melindungi kuncinya saat tertanam di dalam perangkat lunak Anda pada akhirnya merupakan upaya yang sia-sia. Apa pun yang Anda lakukan, penyerang apa pun yang memiliki akses ke binari, sumber, dan / atau saluran komunikasi dan cukup bertekad untuk mendapatkannya pada kunci mereka akan dapat melakukannya.
Jadi jangan menanamkannya. "Satu-satunya langkah yang menang bukanlah bermain."
sumber
Jika Anda memiliki kunci dalam kode objek, itu publik untuk definisi. Ada hack di sekitar obfuscator yang dengan cepat mendekompilasi kode objek. Kunci pribadi akan berada di luar kode objek dan di file lain. Bagian yang sulit adalah menyediakan kunci pribadi ini kepada pengguna. Setelah disediakan, Anda dapat menggunakan tanda tangan kunci pribadi, ditempelkan di akhir file, dan kunci publik dalam aplikasi, untuk memverifikasi integritas kunci pribadi. Server web juga dapat melakukan verifikasi ini, jika Anda memiliki saluran komunikasi yang aman.
sumber