Bagaimana cara kerja Kunci API dan Kunci Rahasia? Apakah aman jika saya harus meneruskan API dan kunci rahasia saya ke aplikasi lain?

139

Saya baru saja mulai memikirkan tentang cara kerja kunci api dan kunci rahasia. Hanya 2 hari yang lalu saya mendaftar ke Amazon S3 dan menginstal Plugin S3Fox . Mereka meminta saya untuk Kunci Akses dan Kunci Akses Rahasia, keduanya mengharuskan saya masuk untuk mengakses.

Jadi saya bertanya-tanya, jika mereka meminta saya untuk kunci rahasia saya, mereka pasti menyimpannya di suatu tempat, bukan? Bukankah itu pada dasarnya sama dengan menanyakan nomor kartu kredit atau kata sandi saya dan menyimpannya di database mereka sendiri?

Bagaimana cara kerja kunci rahasia dan kunci api? Seberapa rahasia mereka harus menjadi? Apakah aplikasi yang menggunakan kunci rahasia ini entah bagaimana menyimpannya?

Lance Pollard
sumber

Jawaban:

92

Pada dasarnya menguraikan apa yang diuraikan di sini .

Begini cara kerjanya: katakanlah kita memiliki fungsi yang mengambil angka dari nol sampai sembilan, menambahkan tiga dan, jika hasilnya lebih besar dari sepuluh, dikurangi sepuluh. Jadi f (2) = 5, f (8) = 1, dll. Sekarang, kita bisa membuat fungsi lain, sebut saja f ', yang mundur, dengan menambahkan tujuh, bukan tiga. f '(5) = 2, f' (1) = 8, dll.

Itu adalah contoh dari fungsi dua arah dan kebalikannya. Secara teoritis, fungsi matematika apa pun yang memetakan satu hal ke hal lain dapat dibalik. Namun, dalam praktiknya, Anda dapat membuat fungsi yang mengacak inputnya dengan sangat baik sehingga sangat sulit untuk dibalik.

Mengambil input dan menerapkan fungsi satu arah disebut "hashing" input, dan apa yang disimpan Amazon di sistem mereka adalah "hash" dari kunci rahasia Anda. SHA1 adalah contoh dari jenis fungsi "satu arah", ini juga diperkuat terhadap serangan.

Fungsi HMAC dibangun di atas fungsi hash yang sudah mapan untuk menggunakan kunci yang dikenal untuk mengautentikasi string teks. Ini bekerja seperti ini:

  • Anda mengambil teks permintaan dan kunci rahasia Anda dan menerapkan fungsi HMAC.
  • Anda menambahkan header otentikasi itu ke permintaan Anda dan mengirimkannya ke Amazon.
  • Amazon mencari salinan kunci rahasia mereka, dan teks yang baru saja Anda kirim dan menerapkan fungsi HMAC.
  • Jika hasilnya cocok, mereka tahu bahwa Anda memiliki kunci rahasia yang sama.

Perbedaan antara ini dan PKI adalah bahwa metode ini RESTful , memungkinkan jumlah minimum pertukaran antara sistem Anda dan server Amazon.

Bukankah itu pada dasarnya sama dengan menanyakan nomor kartu kredit atau kata sandi saya dan menyimpannya di database mereka sendiri?

Ya, meskipun kerusakan yang dapat dilakukan seseorang dengan S3 tampaknya terbatas pada menguras akun Anda.

Seberapa rahasia mereka harus menjadi? Apakah aplikasi yang menggunakan kunci rahasia ini entah bagaimana menyimpannya?

Pada titik tertentu, Anda harus memuat kunci rahasia, dan dengan sebagian besar sistem berbasis Unix, jika penyerang bisa mendapatkan akses root, mereka bisa mendapatkan kuncinya. Jika Anda mengenkripsi kunci, Anda harus memiliki kode untuk mendekripsinya, dan pada titik tertentu kode dekripsi harus berupa teks biasa agar dapat dieksekusi. Ini adalah masalah yang sama dengan yang dimiliki DRM, kecuali bahwa komputer Anda adalah milik Anda.

Dalam banyak kasus, saya hanya memasukkan kunci rahasia ke dalam file dengan izin terbatas, dan melakukan tindakan pencegahan biasa untuk mencegah sistem saya di-root. Ada beberapa trik untuk membuatnya berfungsi dengan baik dengan sistem multipengguna, seperti menghindari file sementara dan semacamnya.

ben
sumber
15
"Mengambil input dan menerapkan fungsi satu arah disebut" hashing "input, dan apa yang disimpan Amazon di sistem mereka adalah" hash "dari kunci rahasia Anda" - Jika Amazon menyimpan HASH dari kunci rahasia Anda, bagaimana caranya mungkinkah bagi Amazon untuk HASH teks yang dikirimkan kepada mereka?
Franklin
22
Pertama Anda mengatakan "apa yang disimpan Amazon di sistem mereka adalah" hash "dari kunci rahasia Anda" dan kemudian "Amazon mencari salinan kunci rahasia mereka". Ini tampaknya saling bertentangan. Saya yakin pernyataan pertama salah.
Sean
3
Url ini memberi tahu detail selengkapnya tentang implementasi Amazon S3 Auth - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait
10
"Secara teoritis, fungsi matematika apa pun yang memetakan satu hal ke hal lainnya dapat dibalik" - Itu tidak benar, fungsi hash adalah contohnya. sangat mudah untuk ditampilkan. Katakanlah kita memiliki fungsi yang mengubah kata menjadi angka, berdasarkan jumlah nilai (a = 1, b = 2, c = 3 dll). Misalnya "SO" akan menjadi 18 + 14 = 32. Jadi kita telah mengubah SO menjadi 32 tetapi jika saya mengungkapkan fungsi ini kepada seseorang, dan memberinya nomor 32, tidak mungkin dia dapat mengetahui apakah kata dasar kita adalah "SO" atau "ZF" (26 + 6) atau salah satu dari lusinan kemungkinan lainnya
Leo
1
Menurut dokumen yang ditautkan oleh @asyncwait, amazon pasti menyimpan kunci rahasia Anda, bukan hanya hashnya. Faktanya, tampaknya satu-satunya hashing yang terjadi adalah apa pun yang terjadi di dalam fungsi HMAC
cowlinator
7

Kriptografi Kunci Publik digunakan untuk bertahan dari serangan yang sangat spesifik, beberapa di antaranya biasa terjadi. Singkatnya, ini adalah matematika yang kompleks yang memungkinkan seseorang untuk memverifikasi bahwa pada individu memiliki pasangan Kunci Publik dan Pribadi sementara hanya mengetahui kunci publik. Ini sangat berbeda dengan kartu kredit atau kata sandi statis. Sebagai contoh jika Anda mengautentikasi dengan server OpenSSH maka server tidak memerlukan kunci pribadi .

Idealnya jika database API Amazon di mana akan disusupi, penyerang akan memiliki daftar kunci publik dan tidak dapat mengakses API pengguna menggunakan informasi ini. Namun sistem yang ideal tidak selalu dipraktikkan dan saya tidak tahu pasti apakah Amazon melindungi dari vektor serangan ini, tetapi seharusnya begitu.

Dalam otentikasi kunci publik secara statistik kebal terhadap kekerasan. Kata sandi sering kali merupakan kata-kata kamus yang dapat mematahkan relativitas dengan cepat. Namun kunci pribadi adalah angka yang sangat besar yang tidak mudah ditebak. Jika penyerang memiliki kunci publik maka mereka dapat melakukan banyak tebakan secara "offline" di komputer super, tetapi meskipun demikian akan membutuhkan banyak waktu dan uang untuk memecahkan kunci tersebut.

benteng
sumber
2
yang tidak perlu kunci pribadi link rusak sekarang.
setzamora
@Joset memperbarui tautan yang menunjuk ke salinan di mesin
wayback
1

AWS telah merancang algoritme autentikasi kustomnya sendiri. v4 dirilis pada 2014. Detail diuraikan di sini: Permintaan Autentikasi (AWS Signature Version 4) . Poin utamanya adalah bahwa permintaan tidak ditandatangani dengan rahasia itu sendiri, tetapi dengan kunci penandatanganan yang dibuat menggunakan rahasia itu. Ini juga menggunakan HMAC-SHA256 untuk penandatanganan.

Pembuatan Tanda Tangan

Menggunakan kunci asimetris akan lebih aman karena AWS hanya akan menyimpan kunci publik, bukan rahasia, yang disimpan oleh pengguna dan AWS.

JBaczuk
sumber