Passphrase adalah shared secret. Siapa pun yang tahu passphrase itu bisa mendekripsi file-nya. Key pair punya public key untuk enkripsi dan secret key untuk dekripsi.
Perbedaan ini berguna waktu seseorang harus mengirim file privat ke kamu. Kamu memberikan public key kamu ke orang itu. Orang itu bisa mengenkripsi file tanpa secret key kamu atau passphrase bersama.
Contoh ini pakai key X25519. X25519 adalah algoritma key agreement kriptografis. age mendukung tipe recipient lain yang nggak dibahas di contoh ini.
Membuat key pair
Command-command ini pakai age 1.3.1. Post pertama memberikan command instalasi untuk macOS.
-
Bikin direktori baru untuk contoh ini:
mkdir age-key-demo -
Pindah ke direktori itu:
cd age-key-demo -
Generate key pair-nya:
age-keygen -o key.txt -
Tampilkan public key-nya aja:
age-keygen -y key.txt
Public key dimulai dengan age1. Nilai yang kamu generate bakal berbeda dari nilai di contoh lain. Identity file, key.txt, berisi secret key dan komentar.
Secret key dimulai dengan AGE-SECRET-KEY-1. Identity adalah informasi rahasia yang dipakai age untuk dekripsi. Recipient adalah informasi publik yang dipakai age untuk enkripsi.
Jaga key.txt tetap privat. Simpan backup yang aman dari file itu. Tanpa secret key yang bisa dipakai atau identity recipient lain, kamu nggak bisa mendekripsi file yang dibuat untuk public key ini.
Enkripsi dengan public key kamu
Variabel di bawah ini menyimpan public key dari identity file kamu sendiri. Cara ini menghindari kesalahan yang umum di contoh: enkripsi ke sample key yang dipublikasikan, yang nggak bisa kamu dekripsi.
-
Simpan public key kamu di shell variable:
AGE_DEMO_RECIPIENT=$(age-keygen -y key.txt) -
Bikin file teks contohnya:
printf '%s\n' 'Anyone can encrypt to my public key.' > note.txt -
Enkripsi catatannya:
age -r "$AGE_DEMO_RECIPIENT" -o note.age note.txt -
Dekripsi catatannya dengan identity file kamu:
age -d -i key.txt note.age
Opsi -r menentukan recipient. Opsi -i menentukan identity file untuk dekripsi. Output-nya:
Anyone can encrypt to my public key.
Enkripsi nggak memakai prompt passphrase di contoh ini. Script backup bisa cuma menyimpan public key. Secret key bisa tetap di komputer yang dipakai untuk me-restore backup.
Public key nggak harus rahasia. Kamu harus mendapatkan public key yang benar untuk recipient yang dimaksud. Kalau kamu pakai public key yang udah diganti, orang lain bisa mendekripsi file itu.
Apa yang berubah di header
Post header menunjukkan scrypt stanza untuk passphrase. Recipient X25519 pakai stanza yang berbeda. Contoh awal mencatat header ini:
age-encryption.org/v1
-> X25519 FtU1s5d9k32gVivtjqvPX8rzlFO0Us90/nBclSGBnmk
UjnBxWgCapXFCE96yIVgtR2L9xhWnSixZsA8qREIBZg
--- CJaG+8hCydCZNsY5fLWDQtFPXBLoTxs7UdDtgjvNZgM
File kamu bakal punya nilai acak yang berbeda. Nilai setelah X25519 adalah ephemeral public key. Di sini, ephemeral artinya age meng-generate key baru untuk stanza dan file ini.
age menggabungkan ephemeral secret key dengan public key milik recipient lewat X25519. Kalkulasi ini menghasilkan shared secret. Lalu age menurunkan wrapping key dari secret itu dengan HKDF-SHA-256.
Recipient memakai ephemeral public key yang tersimpan dan secret key miliknya sendiri untuk menghitung shared secret yang sama. Jadi, recipient bisa menurunkan wrapping key yang sama. Kedua pihak nggak menyimpan shared secret di header.
Pseudocode ini menunjukkan kalkulasi enkripsinya. Simbol || artinya menyambung urutan byte:
shared secret = X25519(ephemeral secret key, recipient public key)
wrapping key = HKDF-SHA-256(
input key material = shared secret,
salt = ephemeral public key || recipient public key,
info = "age-encryption.org/v1/X25519"
)
stanza body = ChaCha20-Poly1305(wrapping key, file key)
Operasi wrapping pakai nonce dua belas byte nol dan associated data yang kosong. Spesifikasi format age mendefinisikan operasi lengkapnya.
File key dan payload tetap punya tugas yang dijelaskan di post cipher. Cuma metode untuk menurunkan wrapping key yang berubah.
Mengenkripsi satu file untuk dua recipient
-
Generate identity file kedua:
age-keygen -o key2.txt -
Simpan public key-nya:
AGE_DEMO_RECIPIENT_TWO=$(age-keygen -y key2.txt) -
Enkripsi catatannya untuk kedua recipient:
age -r "$AGE_DEMO_RECIPIENT" -r "$AGE_DEMO_RECIPIENT_TWO" -o two.age note.txt -
Dekripsi dengan identity pertama:
age -d -i key.txt two.age -
Dekripsi dengan identity kedua:
age -d -i key2.txt two.age
Kedua command itu mengembalikan catatan yang sama. Setiap identity bekerja secara independen. Kedua orang itu nggak perlu menyetujui dekripsi bersama-sama.
age mengenkripsi isi file sekali. age mengenkripsi file key yang sama secara terpisah untuk setiap recipient. File hasilnya punya beberapa stanza dan satu payload.
Mode passphrase cuma mengizinkan satu scrypt stanza. age menolak command yang menggabungkan -p dengan -r. age nggak bisa menggabungkan metode passphrase dan public key ini dalam satu operasi enkripsi.
Pilih rahasia yang bisa kamu kelola
| Pertanyaan | Passphrase | Key pair X25519 |
|---|---|---|
| Apa yang memungkinkan enkripsi? | Passphrase yang dipilih | Public key milik recipient |
| Apa yang memungkinkan dekripsi? | Passphrase yang sama | Secret key yang cocok |
| Apa yang harus tetap rahasia? | Passphrase-nya | Identity file |
| Apa yang diberikan user? | Passphrase di prompt | Public key atau identity file |
| Apa contoh pemakaian yang berguna? | File yang kamu dekripsi dengan passphrase yang tersimpan | Backup otomatis atau file dari orang lain |
Key pair menghilangkan passphrase buatan manusia dari jalur enkripsi ini. Pencurian secret key tetap bisa memungkinkan penyerang mendekripsi file.
Passphrase juga bisa aman kalau berasal dari pemilihan acak dan kamu menjaganya tetap rahasia. Post terakhir menunjukkan kenapa metode pemilihan lebih penting daripada jumlah karakter aja.

Memuat komentar...