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.