Memahami Proses Koneksi dan Enkripsi SSH

Pengantar

SSH atau secure shell, adalah suatu secure protocol atau protokol yang aman dan merupakan cara yang paling lazim mengadministrasi server yang berada di tempat yang jauh/remote, dengan aman. Dengan menggunakan sejumlah teknologi enkripsi, SSH menyediakan suatu mekanisme untuk mendirikan koneksi yang diamankan secara kriptografi antara dua pihak, melakukan otentikasi di satu sisi dengan yang lainnya, dan menyampaikan perintah serta output/keluarannya secara bolak-balik.

Di dalam panduan ini, kita akan mempelajari teknik enkripsi yang digunakan oleh SSH dan metode yang digunakannya untuk mendirikan koneksi yang aman. Informasi ini dapat berguna untuk memahami bermacam-macam lapisan enkripsi dan langkah-langkah yang berbeda yang diperlukan untuk membentuk suatu koneksi dan mengotentikasi dua pihak.

Enkripsi Simetrik, Enkripsi Asimetrik, dan Hash

Supaya dapat memindahkan informasi dengan aman, SSH menggunakan sejumlah teknik manipulasi data yang berbeda pada bermacam poin di dalam transaksi pertukaran data tersebut. Hal ini meliputi bentuk-bentuk enkripsi simetrik, enkripsi asimetrik, dan hash.

Enkripsi Simetrik

Hubungan dari komponen yang mengenkripsi dan mendekripsi data menentukan apakah suatu skema enkripsi adalah simetrik atau asimetrik.

Enkripsi simetrik adalah suatu tipe enkripsi di mana satu kunci dapat digunakan untuk mengenkripsi pesan-pesan bagi pihak yang berlawanan, dan juga untuk apa mendekripsi pesan-pesan yang diterima dari partisipan lain. Ini bermakna bahwa siapa pun yang memegang kuncinya dapat mengenkripsi dan mendekripsi pesan bagi siapa pun yang lain yang juga memegang kuncinya.

Skema enkripsi tipe ini sering disebut enkripsi “shared secret” atau ‘rahasia yang dibagikan’, atau “secret key” atau ‘kunci rahasia’. Sebetulnya hanya ada satu kunci yang digunakan untuk semua operasi, atau sepasang kunci di mana hubungan mudah ditemukan dan hal-hal lainnya untuk menghasilkan kunci yang berlawanan.

Kunci simetrik digunakan oleh SSH untuk mengenkripsi keseluruhan koneksi. Berlawanan dengan yang diasumsikan oleh beberapa pengguna, pasangan kunci asimetrik publik/privat yang dapat diciptakan hanya digunakan untuk otentikasi, bukan mengenkripsi koneksi. Enkripsi asimetrik membolehkan bahkan otentikasi password untuk dilindungi terhadap kegiatan snooping.

Klien dan server keduanya menyumbang terhadap pembuatan kunci ini, dan rahasia yang dihasilkan tidak pernah diketahui oleh pihak luar. Kunci rahasia diciptakan melalui suatu proses yang dikenal sebagai algoritma pertukaran kunci. Pertukaran ini dihasilkan di server dan di klien. Server dan klien menghasilkan kunci yang sama yang terbebas dari membagikan potongan tertentu dari data publik dan memanipulasi data-data itu dengan data rahasia tertentu. Proses ini dijelaskan di dalam rincian yang lebih banyak nanti.

Kunci enkripsi simetrik yang diciptakan oleh prosedur ini adalah berbasis sesi dan merupakan enkripsi yang sesungguhnya untuk data yang dikirim antara server dan klien. Pada saat hal ini dilakukan, semua data yang selebihnya dienkripsi dengan rahasia yang dibagikan ini. Hal ini dilakukan sebelum mengotentikasi suatu klien.

SSH dapat dikonfigurasikan untuk mendayagunakan satu varietas dari sistim cipher simetrik yang berbeda, termasuk AES, Blowfish, 3DES, CAST128, dan Arcfour. Server dan klien dapat menetapkan suatu daftar dari cipher yang mereka dukung, yang diatur urutannya berdasarkan mana yang lebih disukai. Opsi pertama dari daftar klien yang tersedia pada server tersebut digunakan sebagai algoritma cipher dalam kedua arahnya.

Pada Ubuntu 14.04, baik itu klien dan server defaultnya seperti berikut: aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-gcm@openssh.com, aes256-gcm@openssh.com, chacha20-poly1305@openssh.com, aes128-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour.

Ini bermakna bahwa apabila dua mesin Ubuntu 14.04 saling terhubung satu sama lain (tanpa melangkahi cipher default melalui opsi konfigurasi), mereka akan selalu menggunakan cipher aes128-ctr untuk mengenkripsi koneksi mereka.

Enkripsi Asimetrik

Enkripsi asimetrik berbeda dari enkripsi simetrik yang di dalamnya mengirim data dalam satu arah. Pada enkripsi asimetrik, dua kunci yang dipertautkan diperlukan. Salah satu dari kunci ini dikenal sebagai kunci privat, sementara kunci lainnya disebut kunci publik.

Kunci publik dapat dengan bebas dibagikan dengan pihak mana pun. Ia dipertautkan dengan pasangan kuncinya, tetapi kunci privat tidak dapat dihasilkan dari kunci publik. Hubungan matematis antara kunci publik dan kunci privat membolehkan kunci publik untuk mengenkripsi pesan-pesan yang hanya dapat didekripsi oleh kunci privat. Ini adalah kemampuan satu arah, yang bermakna bahwa kunci publik tidak memiliki kemampuan untuk mendekripsi pesan-pesan yang ia tulis, serta tidak dapat mendekripsi apa pun yang dikirimkan oleh kunci privatnya.

Kunci privat seharusnya benar-benar dijaga kerahasiaannya dan seharusnya jangan pernah dibagikan dengan pihak mana pun. Ini adalah kunci yang diminta oleh paradigma kunci publik untuk bekerja. Kunci privat hanyalah komponen yang mampu mendekripsi pesan-pesan yang dienkripsi menggunakan kunci publik yang dipertautkan kepadanya. Berdasarkan hal tersebut, setiap entitas yang mampu mendekripsi pesan-pesan ini, maka dengan sendirinya, entitas itu telah menunjukkan bahwa ia mengendalikan kunci privat.

SSH mendayagunakan enkripsi asimetrik di beberapa tempat yang berbeda. Selama pertukaran kunci yang awal yang digunakan untuk membuat enkripsi simetrik (digunakan untuk mengenkripsi sesi), enkripsi asimetrik digunakan. Di dalam tahap ini, kedua pihak menghasilkan pasangan kunci temporer dan bertukar kunci publik guna menghasilkan rahasia yang dibagikan yang akan digunakan untuk enkripsi simetrik.

Bahasan yang lebih baik mengenai penggunaan enkripsi asimetrik dengan SSH ada pada bahasan mengenai _otentikasi menggunakan kunci SSH_. Kunci pasangan SSH dapat digunakan untuk mengotentikasi suatu klien kepada suatu server. Klien menciptakan suatu pasangan kunci dan kemudian mengunggah kunci publiknya kepada server remote mana pun yang ingin ia akses. Kunci ini ditempatkan di dalam suatu file yang disebut authorized_keys di dalam direktori ~/.ssh di dalam direktori home akun pengguna pada server remote.

Setelah enkripsi simetrik didirikan untuk mengamankan komunikasi antara server dan klien, klien harus melakukan otentikasi agar diizinkan melakukan akses. Server dapat menggunakan kunci publik di dalam file ini untuk mengenkripsi suatu challenge message kepada klien. Apabila klien dapat membuktikan bahwa ia mampu mendekripsi pesan ini, ia menunjukkan bahwa ia memiliki kunci privat yang dipertautkan. Server kemudian dapat mengatur lingkungan untuk kliennya.

Hashing

Bentuk lain dari manipulasi data yang digunakan oleh SSH adalah kriptografi hash. Fungsi kriptografi hash adalah metode menciptakan suatu “tanda-tangan” ringkas atau ringkasan dari seperangkat informasi. Atribut yang membedakan mereka adalah bahwa mereka tidak pernah dimaksudkan untuk dibalik, mereka secara virtual tidak mungkin untuk mempengaruhi, dan secara praktis mereka adalah unik.

Dengan menggunakan fungsi dan pesan hash yang sama maka seharusnya menghasilkan hash yang sama; merubah porsi apa pun dari data tersebut seharusnya menghasilkan suatu hash yang berbeda secara keseluruhan. Seorang pengguna seharusnya tidak mampu menghasilkan pesan asli dari suatu hash yang diberikan, tetapi seharusnya mampu mengatakan apabila suatu pesan yang diberikan menghasilkan suatu hash yang diberikan.

Meskipun begitu, hash utamanya digunakan untuk keperluan integritas data dan untuk memverifikasi otentisitas dari komunikasi. Kegunaan utama di dalam SSH adalah dengan HMAC, atau kode otentikasi pesan berdasarkan hash. Ini digunakan untuk memastikan bahwa pesan teks yang diterima adalah utuh dan tidak dirubah.

Sebagai bagian dari negosiasi enkripsi simetrik yang diuraikan di atas, suatu algoritma kode otentikasi pesan atau message authentication code (MAC), dipilih. Algoritma tersebut dipilih oleh suatu pekerjaan melalui daftar yang dimiliki klien atas pilihan MAC yang dapat diterima. Yang pertama dari daftar ini, yang didukung oleh server, akan digunakan sesuai dengan urutannya.

Setiap pesan yang dikirim setelah enkripsi tersebut, yang dinegosiasikan, harus mengandung suatu MAC sehingga pihak lain dapat memverifikasi integritas paket. MAC tersebut dikalkulasikan dari rahasia simetrik yang dibagikan tersebut, urutan jumlah paket dari pesan tersebut, dan isi dari pesan yang sesungguhnya.

MAC itu sendiri dikirim keluar dari area terenkripsi secara simetri sebagai bagian akhir dari paket. Para peneliti secara umum merekomendasikan terlebih dahulu metode pengenkripsian data ini, dan kemudian mengkalkulasikan MAC.

Bagaimana Cara SSH Bekerja?

Anda mungkin telah memiliki suatu pemahaman dasar dari bagaimana SSH bekerja. Protokol SSH menggunakan suatu model klien server untuk mengotentikasi kegiatan dua pihak dan mengenkripsi data antara mereka.

Komponen server mendengarkan pada suatu port yang dirancang untuk koneksi. Ia bertanggung jawab untuk menegosiasikan koneksi yang aman, mengotentikasi pihak yang menghubungi, dan menghasilkan lingkungan yang tepat apabila kredensialnya diterima.

Klien bertanggung jawab untuk memulai TCP handshake awal dengan server tersebut, menegosiasikan koneksi aman, memverifikasi bahwa identitas server cocok dengan informasi yang sebelumnya disimpan, dan menyediakan kredensial untuk mengotentikasi.

Suatu sesi SSH didirikan di dalam dua tahap yang terpisah. Pertama, menyetujui dan membuat enkripsi untuk melindungi komunikasi di masa depan. Tahap kedua adalah mengotentikasi pengguna tersebut dan menemukan apakah akses kepada server tersebut perlu diizinkan atau tidak.

Menegosiasikan Enkripsi untuk suatu Sesi

Ketika suatu koneksi TCP dibuat oleh suatu klien, server merespon dengan versi protokol yang didukungnya. Apabila klien cocok dengan salah satu dari versi protokol yang dapat diterima, koneksi tersebut berlanjut. Server tersebut juga menyediakan kunci host publiknya, yang mana dapat digunakan oleh klien untuk memeriksa apakah ini adalah host yang dimaksud.

Pada poin ini, kedua pihak menegosiasikan suatu kunci sesi menggunakan suatu versi dari sesuatu yang disebut algoritma Diffie-Hellman. Algoritma ini (dan variannya) membuatnya mungkin bagi setiap pihak untuk mengkombinasikan data privat mereka sendiri dengan data publik dari sistim lain untuk tiba pada suatu kunci sesi rahasia yang identik.

Kunci sesi akan digunakan untuk mengenkripsi keseluruhan sesi. Pasangan kunci privat dan publik yang digunakan untuk bagian dari prosedur ini benar-benar terpisah dari kunci SSH yang digunakan untuk mengotentikasi suatu klien kepada servernya.

Dasar dari prosedur ini untuk Diffie-Hellman klasik adalah:

  • Kedua pihak menyetujui suatu bilangan prima yang besar, yang akan melayani sebagai suatu nilai benih.
  • Kedua pihak menyetujui suatu generator enkripsi (biasanya AES), yang akan digunakan untuk memanipulasi nilai di dalam suatu cara yang sudah didefinisikan sebelumnya.
  • Secara independen, setiap pihak datang dengan bilangan prima lain yang dirahasiakan dari pihak lain. Bilangan ini digunakan sebagai kunci privat untuk interaksi ini (berbeda dari kunci SSH privat yang digunakan untuk otentikasi).
  • Kunci privat yang dihasilkan, generator enkripsi, dan bilangan prima yang dibagikan, digunakan untuk menghasilkan suatu kunci publik yang berasal dari kunci privat, tetapi yang dapat dibagikan dengan pihak lain.
  • Kedua partisipan kemudian merubah kunci publik mereka yang dihasilkan dari proses di atas.
  • Entitas yang menerima, menggunakan kunci privat mereka sendiri, kunci publik pihak lain, dan bilangan prima yang asli yang dibagikan, untuk mengkomputasi suatu kunci rahasia yang dibagikan. Walaupun hal ini secara independen dikomputasi oleh setiap pihak, menggunakan kunci publik dan kunci privat yang berlawanan, ia menghasilkan kunci rahasia yang dibagikan, yang sama.
  • Rahasia yang dibagikan tersebut kemudian digunakan untuk mengenkripsi semua komunikasi yang datang setelah itu.

Enkripsi rahasia yang dibagikan yang digunakan untuk koneksi yang selebihnya disebut protokol paket biner. Proses di atas membolehkan setiap pihak untuk berpartisipasi secara sama dalam menghasilkan rahasia yang dibagi, yang tidak membolehkan satu pihak untuk mengendalikan rahasia. Ia juga menyelesaikan tugas menghasilkan suatu rahasia yang dibagikan yang identik, tanpa mengirim informasi tersebut melalui saluran/channel yang tidak aman.

Rahasia yang dihasilkan adalah suatu kunci simetrik, yang bermakna bahwa kunci yang sama yang digunakan untuk mengenkripsi suatu pesan dapat digunakan untuk mendekripsinya pada sisi lain. Keperluan dari hal ini untuk membungkus semua komunikasi lebih jauh lagi, di dalam suatu terowongan terenkripsi yang tidak dapat di-decipher oleh pihak luar.

Setelah enkripsi dari sesi tersebut didirikan, tahap otentikasi dari pengguna tersebut dimulai.

Mengotentikasi Akses Pengguna ke Server

Tahap berikutnya melibatkan pengotentikasian pengguna tersebut dan menetapkan akses. Ada beberapa metode yang berbeda yang dapat digunakan untuk mengotentikasi, berdasarkan pada apa yang server tersebut terima.

Yang paling sederhana mungkin otentikasi password, di mana server tersebut sekedar menanyai klien password dari akun yang sedang dicoba untuk dihubungi. Password tersebut dikirim melalui enkripsi yang dinegosiasikan, sehingga aman dari pihak luar.

Walaupun password tersebut dienkripsi, metode ini tidak secara umum direkomendasikan karena batasan kompleksitas dari password tersebut. Skrip yang diotomatisasi dapat menjebol password yang panjangnya normal dengan sangat mudah dibandingkan dengan metode otentikasi lain.

Alternatif yang direkomendasikan yang paling populer adalah dengan menggunakan pasangan kunci SSH. Pasangan kunci SSH adalah kunci asimetrik, yang bermakna bahwa dua kunci yang dipertautkan melayani fungsi-fungsi yang berbeda.

Kunci publiknya digunakan untuk mengenkripsi data yang hanya dapat didekripsi oleh kunci privat. Kunci publik dapat dengan bebas dibagikan, karena, walaupun ia dapat melakukan enkripsi untuk keperluan digunakan oleh kunci privat, tidak ada metode menghasilkan kunci privat dari kunci publik.

Otentikasi menggunakan pasangan kunci SSH dimulai setelah enkripsi simetrik telah didirikan seperti digambarkan di bagian terakhir. Prosedurnya terjadi seperti berikut:

  • Klien mulai mengirim suatu ID/identitas untuk pasangan kuncinya yang hendak ia otentikasi kepada server.
  • Server memeriksa file authorized_keys atau kunci otoritasi untuk akun yang klien sedang coba untuk masuki untuk ID kuncinya.
  • Apabila suatu kunci publik dengan ID yang cocok ditemukan di dalam file tersebut, server menghasilkan suatu bilangan acak dan menggunakan kunci publik tersebut untuk mengenkripsi bilangan tersebut.
  • Server tersebut mengirimkan kepada klien pesan yang dienkripsi ini.
  • Apabila klien memiliki kunci privat yang dipertautkan, ia akan mampu mendekripsi pesan tersebut menggunakan kunci tersebut, mengungkapkan bilangan aslinya.
  • Klien mengkombinasikan bilangan yang telah didekripsi dengan kunci sesi yang dibagikan tersebut yang digunakan untuk mengenkripsi komunikasi tersebut, dan mengkalkulasi hash MD5 dari nilai ini.
  • Klien kemudian mengirimkan hash MD5 ini kembali kepada server sebagai suatu jawaban bagi pesan bilangan terenkripsi.
  • Server menggunakan kunci sesi yang dibagikan, yang sama, dan bilangannya yang asli, yang ia kirimkan kepada klien untuk mengkalkulasi nilai MD5 miliknya sendiri. Ia membandingkan kalkulasinya sendiri dengan kalkulasi yang dikirimkan oleh klien. Apabila dua nilai ini cocok, maka itu membuktikan bahwa klien memiliki kunci privatnya dan klien diotentikasi.

Seperti dapat Anda lihat, asimetri dari kunci tersebut membolehkan server untuk mengenkripsi pesan kepada klien menggunakan kunci publik. Kemudian klien dapat membuktikan bahwa ia memegang kunci privat dengan cara mendekripsi pesan dengan benar. Dua tipe enkripsi yang digunakan (rahasia yang dibagikan yang simetrik, dan kunci privat-publik asimetrik) masing-masingnya mampu meningkatkan kekuatan kerahasiaan secara khusus di dalam model ini.

Kesimpulan

Mempelajari mengenai langkah negosiasi koneksi dan lapisan enkripsi yang bekerja dalam SSH dapat membantu Anda memahami dengan lebih baik apa yang terjadi ketika Anda login kepada suatu server remote atau server yang berada di tempat yang jauh. Harapannya, sekarang Anda memiliki ide yang lebih baik mengenai hubungan antara bermacam komponen dan algoritma, dan memahami bagaimana semua potongan ini menyusun diri bersama-sama.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top