Cara Menggunakan Ekstensi Sodium PHP di ServBay
Sebagai lingkungan pengembangan web lokal yang tangguh, ServBay telah membawakan dan mengaktifkan ekstensi Sodium PHP secara default. Sodium adalah perpustakaan kriptografi modern dan mudah digunakan yang lazim diaplikasikan untuk enkripsi data dan komunikasi aman. Dengan memanfaatkan ServBay, pengembang dapat langsung menggunakan ekstensi Sodium dalam aplikasi PHP untuk mengenkripsi dan mendekripsi data—tanpa perlu meng-compile atau melakukan konfigurasi tambahan—sehingga keamanan data aplikasi Anda tetap terjaga.
Pengenalan Ekstensi Sodium
Sodium (libsodium) adalah pustaka kriptografi modern yang dirancang untuk menyediakan fitur enkripsi yang sederhana, mudah digunakan, dan aman. Sodium mendukung berbagai algoritma dan operasi kriptografi, seperti enkripsi simetrik, enkripsi asimetrik, tanda tangan digital, hash, pertukaran kunci, dan banyak lagi. Sejak PHP versi 7.2, pustaka Sodium sudah terintegrasi sebagai ekstensi inti—menjadikannya pengganti modern dan lebih aman untuk pustaka mcrypt yang sudah usang.
Fitur Utama
- Mudah Digunakan: Menyediakan API yang sederhana dan intuitif agar pengembang dapat melakukan proses enkripsi dan dekripsi dengan mudah.
- Keamanan Tinggi: Memanfaatkan algoritma kriptografi modern dan praktik terbaik untuk memastikan perlindungan data.
- Multifungsi: Mendukung enkripsi simetrik, enkripsi asimetrik, tanda tangan digital, hash, pertukaran kunci, dan lainnya.
- Lintas Platform: Dapat digunakan pada berbagai sistem operasi dan bahasa pemrograman.
- Performa Efisien: Memiliki performa enkripsi dan dekripsi yang tinggi, cocok untuk aplikasi yang membutuhkan efisiensi.
Sodium Sebagai Pengganti mcrypt
Pustaka mcrypt sebelumnya digunakan secara luas sebagai pustaka enkripsi di PHP, namun telah tidak lagi dipelihara dan berpotensi menyimpan celah keamanan. Karena itu, mcrypt tidak lagi didukung sejak PHP 7.1, serta dihapus pada PHP 7.2. Sodium diperkenalkan sebagai pengganti modern yang lebih aman. Sodium menawarkan keamanan, kemudahan penggunaan, dan performa yang lebih baik dibanding mcrypt. Untuk proyek pengembangan baru, sangat disarankan menggunakan Sodium sebagai solusi enkripsi utama di PHP.
Ketersediaan dan Aktivasi Sodium di ServBay
ServBay telah meng-compile dan mengaktifkan Sodium secara default untuk PHP versi 7.2 ke atas yang disediakan di dalamnya. Artinya, sebagai pengguna ServBay Anda tidak perlu melakukan instalasi atau konfigurasi apa pun untuk Sodium. Cukup jalankan ServBay dan pilih versi PHP yang diinginkan—fungsi Sodium sudah siap digunakan langsung dalam kode Anda.
Untuk memverifikasi apakah Sodium sudah aktif, gunakan fitur phpinfo() di ServBay. Pilih versi PHP yang Anda gunakan di antarmuka ServBay, cari opsi phpinfo()
, lalu pada halaman hasil pencarian, cari “sodium” dan Anda akan melihat detail modul tersebut.
Menggunakan Sodium di Kode PHP
Setelah memastikan bahwa ekstensi Sodium sudah aktif, Anda dapat memakai semua fungsi yang disediakan pada proyek PHP Anda. Simpan file kode PHP Anda pada subdirektori situs dalam root web ServBay (default di /Applications/ServBay/www
), lalu akses melalui browser untuk menjalankannya. Berikut beberapa contoh penggunaan dasar:
Contoh Kode (Enkripsi Simetrik)
Enkripsi simetrik memakai satu kunci yang sama untuk proses enkripsi dan dekripsi.
php
<?php
// Pesan yang akan dienkripsi
$message = "This is a secret message from servbay.demo";
// Membuat kunci acak (panjang kunci harus SODIUM_CRYPTO_SECRETBOX_KEYBYTES)
$key = sodium_crypto_secretbox_keygen();
// Membuat Nonce acak (Number used once), harus sama saat enkripsi dan dekripsi
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
// Enkripsi menggunakan kunci dan Nonce
$ciphertext = sodium_crypto_secretbox($message, $nonce, $key);
echo "Pesan asli: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce biasanya disimpan atau dikirim bersama ciphertext
echo "Ciphertext (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Proses Dekripsi ---
// Misalkan kita sudah memperoleh ciphertext, Nonce, dan kunci
$retrieved_ciphertext = $ciphertext; // Ciphertext yang diterima atau disimpan
$retrieved_nonce = $nonce; // Nonce yang diterima atau disimpan
$retrieved_key = $key; // Kunci yang diterima atau disimpan
// Dekripsi menggunakan kunci dan Nonce
$decrypted = sodium_crypto_secretbox_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_key);
// Cek apakah dekripsi berhasil
if ($decrypted === false) {
echo "Dekripsi gagal!\n";
} else {
echo "Pesan setelah dekripsi: " . $decrypted . "\n";
}
// Bersihkan data sensitif untuk mencegah kebocoran memori
sodium_memzero($key);
sodium_memzero($retrieved_key);
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Contoh Kode (Enkripsi Asimetrik)
Enkripsi asimetrik melibatkan pasangan kunci publik dan privat. Kunci publik untuk mengenkripsi, kunci privat untuk mendekripsi.
php
<?php
// Pesan yang akan dienkripsi
$message = "This is another secret message for servbay-demo user";
// Membuat pasangan kunci (kunci publik untuk enkripsi, kunci privat untuk dekripsi)
$keypair = sodium_crypto_box_keypair();
$publicKey = sodium_crypto_box_publickey($keypair); // Diberikan ke pihak lain
$secretKey = sodium_crypto_box_secretkey($keypair); // Disimpan sendiri dan jangan pernah dibagikan
echo "Kunci publik (Base64): " . base64_encode($publicKey) . "\n";
echo "Kunci privat (Base64): [Kunci privat bersifat sensitif, jangan ditampilkan atau dibagikan]\n\n";
// --- Proses Enkripsi (menggunakan kunci publik penerima) ---
// Misal pengirim memiliki $publicKey penerima
// Membuat Nonce acak, harus sama saat enkripsi dan dekripsi
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
// Enkripsi dengan kunci publik penerima dan kunci privat pengirim (untuk contoh ini, gunakan keypair tunggal)
// Catatan: Dalam praktik nyata, Anda harus menggunakan kunci privat pengirim + kunci publik penerima
// Sodium crypto_box berbasis Diffie-Hellman Curve25519, jadi memerlukan kunci publik/privat dari kedua belah pihak
// Untuk contoh ini, diasumsikan pengirim dan penerima adalah pengguna sama
$ciphertext = sodium_crypto_box($message, $nonce, $keypair); // Dalam contoh ini, keypair sudah mencakup kedua kunci
echo "Pesan asli: " . $message . "\n";
echo "Nonce (Base64): " . base64_encode($nonce) . "\n"; // Nonce harus disimpan/dikirim bersama ciphertext
echo "Ciphertext (Base64): " . base64_encode($ciphertext) . "\n\n";
// --- Proses Dekripsi (menggunakan kunci privat penerima) ---
// Diasumsikan penerima sudah memiliki ciphertext, Nonce, kunci privat ($secretKey), dan kunci publik pengirim ($publicKey)
// Dalam contoh ini, langsung memakai $keypair
$retrieved_ciphertext = $ciphertext;
$retrieved_nonce = $nonce;
$retrieved_keypair = $keypair; // Dekripsi dengan keypair yang menyimpan kunci privat
// Dekripsi menggunakan keypair
$decrypted = sodium_crypto_box_open($retrieved_ciphertext, $retrieved_nonce, $retrieved_keypair);
// Cek apakah dekripsi berhasil
if ($decrypted === false) {
echo "Dekripsi gagal!\n";
} else {
echo "Pesan setelah dekripsi: " . $decrypted . "\n";
}
// Bersihkan data sensitif
sodium_memzero($secretKey); // Bersihkan kunci privat
sodium_memzero($keypair); // Bersihkan pasangan kunci
if ($decrypted !== false) {
sodium_memzero($decrypted);
}
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Contoh Kode (Tanda Tangan Digital)
Tanda tangan digital digunakan untuk memverifikasi integritas pesan serta identitas pengirim. Proses tanda tangan menggunakan kunci privat, sedangkan verifikasi menggunakan kunci publik.
php
<?php
// Pesan yang akan ditandatangani
$message = "This message needs to be signed by servbay.demo";
// Membuat pasangan kunci tanda tangan (kunci privat untuk tanda tangan, kunci publik untuk verifikasi)
$keypair = sodium_crypto_sign_keypair();
$publicKey = sodium_crypto_sign_publickey($keypair); // Diberikan ke pihak verifikasi
$secretKey = sodium_crypto_sign_secretkey($keypair); // Disimpan sendiri dan jangan pernah dibagikan
echo "Kunci publik (Base64): " . base64_encode($publicKey) . "\n";
echo "Kunci privat (Base64): [Kunci privat bersifat sensitif, jangan ditampilkan atau dibagikan]\n\n";
// --- Proses Penandatanganan (menggunakan kunci privat pengirim) ---
$signature = sodium_crypto_sign_detached($message, $secretKey);
echo "Pesan asli: " . $message . "\n";
echo "Tanda tangan (Base64): " . base64_encode($signature) . "\n\n";
// --- Proses Verifikasi (menggunakan kunci publik pengirim) ---
// Diasumsikan pihak verifikator memiliki pesan, tanda tangan, dan kunci publik pengirim ($publicKey)
$retrieved_message = $message;
$retrieved_signature = $signature;
$retrieved_publicKey = $publicKey;
// Verifikasi tanda tangan dengan kunci publik
if (sodium_crypto_sign_verify_detached($retrieved_signature, $retrieved_message, $retrieved_publicKey)) {
echo "Tanda tangan valid! Pesan belum diubah dan benar dari pemilik kunci privat.\n";
} else {
echo "Tanda tangan tidak valid! Pesan mungkin telah diubah, atau tanda tangan bukan dari kunci privat terkait.\n";
}
// Bersihkan data sensitif
sodium_memzero($secretKey); // Bersihkan kunci privat
sodium_memzero($keypair); // Bersihkan pasangan kunci
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Kesimpulan
Lewat ServBay, pengembang dapat menggunakan ekstensi Sodium PHP yang sudah terpasang dan aktif secara default dengan sangat mudah. Hal ini menghilangkan kerumitan instalasi ataupun konfigurasi manual di lingkungan lokal, sehingga Anda dapat langsung memanfaatkan fitur-fitur enkripsi canggih Sodium untuk meningkatkan keamanan aplikasi Anda. Sebagai pengganti modern untuk mcrypt, Sodium merupakan alat kunci untuk membangun aplikasi web yang aman dan terpercaya. ServBay menyederhanakan proses implementasi ini, membantu pengembang menciptakan lingkungan kerja lokal yang efisien dan aman.