Enkripsi Kunci Publik

0

Inilah cara saya memahami cara kerja kunci publik ... Katakanlah Anda berada di situs web dan Anda mengakses kartu kredit untuk halaman. Anda kemudian mengenkripsi paket dengan kunci publik dari situs itu dan mengirimkannya kepada mereka. Situs kemudian menerjemahkan kode paket menggunakan kunci pribadi yang sesuai. Jadi bagian yang saya mengerti.

Sekarang, bagaimana ketika saya mengakses halaman yang diautentikasi. Katakanlah saya sedang mengakses halaman rekening bank saya. Bagaimana situs web mengenkripsi paket yang diperuntukkan bagi saya. Bagaimana saya membukanya dan bagaimana saya tahu bahwa seseorang di sepanjang jalan belum membacanya.

nhinkle
sumber

Jawaban:

6

Itu pertanyaan yang cukup besar =) Di bawah ini adalah ikhtisar tingkat tinggi HTTPS; berteriak jika ada yang tidak jelas dan saya akan mengisi lebih banyak detail.

Saat Anda menggunakan koneksi HTTPS, crypto kunci publik hanya digunakan selama inisialisasi sesi. Bagian dari inisialisasi itu adalah pertukaran aman dari kunci pribadi yang dibagikan yang kemudian digunakan untuk enkripsi simetris. Alasannya adalah karena enkripsi asimetris (kunci publik) jauh lebih lambat daripada enkripsi kunci simetris, karena matematika yang terlibat.

Jabat tangan SSL

Pada level yang sangat tinggi, protokolnya kira-kira seperti ini:

  1. Klien mengirimkan pesan "HELLO" awal, yang berisi versi ssl yang ingin digunakan, serangkaian bit pseudo-acak (sebut saja B1) dan daftar berbagai cipher yang didukungnya.

  2. Server merespons dengan pesan "HELLO" sendiri, string pseudo-acak bit (sebut B2), cipher yang dipilihnya (biasanya cipher terkuat dari daftar yang dikirim klien yang didukung server), dan servernya sertifikat yang berisi kunci publiknya (sebut saja itu k ).

  3. Klien kemudian menggunakan sertifikat untuk mengotentikasi server (lihat di bawah) dan membuat "rahasia premaster" - string lain bit pseduo-acak yang akan kita sebut S.

  4. Jika klien senang dengan hasil otentikasi server, itu mengenkripsi rahasia premaster S dengan kunci publik server k , dan mengirimkannya ke server (S sendiri dienkripsi, tetapi koneksi masih belum).

  5. Pada titik ini, server dan klien berbagi tiga string bit - B1, B2 dan S. B1 dan B2 dikirim dengan jelas - S dienkripsi, dan dengan demikian, dengan asumsi kunci privat server benar-benar pribadi, hanya diketahui oleh klien dan server.

  6. Baik klien dan server kemudian menggunakan tiga string ini untuk membangun kunci sesi - string yang hanya diketahui oleh mereka, dan dapat digunakan sebagai kunci dalam cipher simetris yang dipilih sebelumnya.

  7. Klien dan server kemudian bertukar pesan yang menunjukkan mereka mengubah protokol, dan semua pesan berikutnya dienkripsi (simetris, dengan kunci dihitung di atas).

Otentikasi server

Ketika klien menerima pesan HELLO server, ia perlu memastikan bahwa itu berbicara ke server yang dianggapnya pesan itu. Sertifikat dan kunci server digunakan untuk membangun kepercayaan ini.

Semua sertifikat digital adalah pihak ketiga yang menyatakan "entitas ini memegang kunci pribadi yang terkait dengan kunci publik ini, yang tertanam dalam sertifikat ini". Organisasi seperti Verisign akan membuat pernyataan ini - dengan harga tertentu. Alasan orang membayar Verisign dan lain-lain untuk sertifikat adalah bahwa Verisign mengalami kesulitan untuk mendapatkan sertifikat perantara mereka tertanam di sebagian besar browser umum.

Jadi, ketika klien menerima server HELLO, ia akan melakukan pemeriksaan berikut:

  • Apakah tanggal hari ini termasuk dalam periode validitas sertifikat?
  • Apakah nama subjek sertifikat cocok dengan nama server yang saya coba hubungi?
  • Apakah nama Penerbit pada sertifikat cocok dengan salah satu CA yang memiliki kunci publik yang saya ketahui?
    • Jika demikian, apakah kunci publik yang saya miliki untuk CA ini memvalidasi sertifikat ini?

Jika semua cek lulus, klien menganggap dapat percaya bahwa server adalah yang diharapkan. Itu kemudian mengambil kunci publik (masih k ) keluar dari sertifikat, dan menggunakannya untuk mentransmisikan S ke server dengan aman. Pada titik ini, idenya adalah bahwa Anda memiliki beberapa pernyataan pihak ketiga (Verisign) bahwa kunci publik adalah milik server; jadi hanya server yang akan dapat mendekripsi hasil E (S, k ), dan karenanya hanya server yang dapat menghasilkan kunci yang cocok yang akan Anda gunakan untuk sandi simetris.

Setelah jabat tangan, kepercayaan diri Anda bahwa paket tidak dapat dibaca oleh pihak ketiga harus sama dengan keyakinan Anda pada algoritma simetris yang digunakan.

(Ada tikungan-tikungan bagus lainnya - misalnya alasan penggunaan tiga senar bit adalah untuk mencegah serangan replay. Jika hanya S yang digunakan, penyerang dapat merekam seluruh sesi dan memutarnya kembali pada waktu luang - misalnya, mengulangi instruksi transfer uang berulang dan Dengan klien dan server menghasilkan string pseduo-random tambahan, Anda sangat mengurangi kemungkinan dua jabat tangan SSL independen menghasilkan S. yang sama)

Andy
sumber
1

Sebenarnya lebih sederhana dari itu.

Kunci publik adalah publik. Siapa pun dapat melihatnya, siapa pun dapat menggunakannya ... Tapi itu hanya satu cara. Sesuatu yang dienkripsi dengan kunci publik Anda hanya dapat dienkripsi dengan kunci pribadi ANDA.

Jadi, dalam contoh Anda, yang terjadi adalah Anda mengirim paket ke bank yang dienkripsi dengan kunci publik milik bank, dan bank mengirim kembali paket yang dienkripsi dengan kunci publik ANDA. Hanya Anda yang dapat membaca apa yang dikirim bank kepada Anda, dan hanya bank yang dapat membaca apa yang Anda kirim bank. Bahkan jika kamu mengenkripsi itu menggunakan kunci publik mereka, Anda tidak bisa membacanya. Kamu bisa hanya baca paket jika Anda memiliki kunci pribadi yang sesuai.

Dengan asumsi bahwa kunci pribadi memang pribadi, tidak ada yang bisa membaca paket Anda tanpa memecahkan kunci pribadi.

Sekarang, peringatannya adalah serangan "Manusia di Tengah". Di sinilah tempat proxy atau relai mengatur di antara Anda dan orang yang Anda pikir sedang berbicara dengan Anda, dan menipu Anda agar menerima kunci publik mereka sebagai pengganti kunci situs yang Anda pikir Anda kunjungi. Jadi Anda mengirim paket kepada mereka, dienkripsi dengan kunci publik mereka, yang kemudian mereka baca, masukkan kembali menggunakan mereka kunci publik, dan teruskan ke situs, yang kemudian mengirimkan paket yang mereka baca, dan kemudian meneruskan kepada Anda.

Satanicpuppy
sumber
1
Yang sebaliknya adalah benar: sesuatu yang dienkripsi dengan kunci privat dapat didekripsi dengan kunci publik. Ini disebut "penandatanganan" (hanya Anda yang bisa melakukan ini tetapi siapa pun dapat memberi tahu Anda melakukannya) dan biasanya ketika Anda melakukan hal-hal kunci publik, Anda akan mengenkripsi dan tanda.
Broam
Itu bukan cara kerjanya. Biasanya, ketika mengakses situs web bank aman, pengguna tidak memiliki kunci publik / pribadi. Semua informasi bank yang sensitif dienkripsi dengan enkripsi simetris. 'Kata sandi' untuk enkripsi simetris itu dinegosiasikan dengan bantuan pasangan kunci publik / pribadi bank.
Jon-Eric
0

Pertanyaan Anda agak umum. Apa sebenarnya yang kamu cari?

  • implementasi protokol (bagaimana cara membuka paket terenkripsi)
  • rincian matematis (bagaimana situs web mengenkripsi paket yang diperuntukkan bagi saya)
  • masalah keamanan (serangan 'orang di tengah')

Sudahkah Anda membaca yang terkait wikipedia masuk?

lorenzog
sumber
0

Dalam kedua kasus, Anda menggunakan kunci publik situs web (situs belanja atau bank) untuk menegosiasikan kunci enkripsi untuk sesi saat ini. Kunci enkripsi ini digunakan untuk mengenkripsi semua komunikasi setelah itu. Ini bukan kunci asimetris (bukan kunci publik-kunci-privat-pasangan), ini adalah kunci rahasia "biasa" yang dibagi antara browser Anda dan situs (dan akan dimusnahkan ketika Anda menutup jendela).

Alasan untuk menggunakan enkripsi kunci publik hanya untuk mengirimkan kunci rahasia adalah bahwa jauh lebih cepat untuk melakukan enkripsi simetris. Ini juga sama-sama aman. Dan, seperti yang telah Anda tunjukkan, hanya satu sisi yang perlu memiliki kunci publik.

Bahkan, satu-satunya alasan bahwa situs web perlu memiliki kunci publik sama sekali, adalah agar Anda dapat yakin dengan siapa Anda berbicara. Ini mencegah serangan man-in-the-middle. Untuk tujuan menjaga koneksi aman dari penyadap, itu tidak sepenuhnya diperlukan. Bahkan, banyak situs web menggunakan kunci publik yang ditandatangani sendiri (bukan disertifikasi oleh otoritas registrasi) untuk SSL. Dalam hal ini, Anda tidak dapat benar-benar yakin bahwa pihak lain benar-benar seperti yang mereka klaim, tetapi Anda dapat yakin bahwa tidak ada pihak ketiga yang dapat mendengarkan.

Thilo
sumber
Tidak, enkripsi kunci publik tidak hanya untuk otentikasi, tetapi untuk mengirim kunci biasa. Komunikasi menggunakan cipher reguler tidak aman kecuali kuncinya aman, dan kuncinya tidak aman kecuali dibagikan dengan cara aman. Serangan man-in-the-middle digagalkan oleh otentikasi non-crypto (beberapa bank memungkinkan Anda mengatur latar belakang khusus) atau sertifikat.
David Thornley
@ David: Saya bilang itu digunakan untuk negosiasi kunci.
Thilo
@ David: dan ada cara lain negosiasi kunci yang tidak bergantung pada infrastruktur kunci publik.
Thilo
0

Ada dua jenis sandi yang digunakan di sini. Ada tipe kunci publik (asimetris), dan tipe kunci-kunci (simetris) yang lebih umum. Cipher simetris jauh lebih efisien, karena tidak ada banyak cara untuk mengatur cipher kunci publik.

Karena itu, Anda menggunakan kunci publik untuk melakukan kontak. Browser Anda kemudian dapat mengenkripsi kunci bersama dengan kunci publik situs, dan hanya situs yang dapat menerima kunci bersama. Kemudian browser Anda dan situs web berkomunikasi dengan cipher standar. Kunci biasanya dibuang di akhir sesi. Karena itu, selama semuanya berjalan dengan benar, komunikasi Anda aman.

Ada juga pertanyaan untuk memastikan dengan siapa Anda berbicara. Untuk tujuan ini, situs web memiliki sertifikat, yang merupakan pengesahan dari otoritas sertifikat yang Anda ajak bicara kepada siapa pun yang meminta sertifikat. Otoritas sertifikat dimuat ke browser Anda saat Anda mendapatkannya, dan sertifikat apa pun yang ditandatangani oleh salah satu dari mereka akan diterima oleh browser Anda. Beberapa otoritas menawarkan sertifikat dengan harga lebih tinggi yang akan ditampilkan di peramban Anda sebagai hijau, dan sertifikat itu telah lebih hati-hati diverifikasi oleh otoritas sertifikat yang bersangkutan.

Saya tidak mengatakan ini adalah cara terbaik untuk melakukan ini. Misalnya, saya ingin melihat peringatan ketika Anda mendapatkan sertifikat berbeda untuk situs web yang sama, peringatan yang sering digunakan dalam aplikasi crypto kunci publik lainnya. Saya tidak berpikir peringatan Firefox untuk sertifikat yang ditandatangani sendiri adalah tepat (yang menunjukkan situs yang menggunakan kunci publik kripto tanpa membeli sertifikat), karena itu membuat situs tersebut terlihat kurang dapat dipercaya daripada koneksi yang tidak terenkripsi.

(Saya tidak akan membahas perincian teknis di sini, tetapi ini adalah aplikasi cipher kunci publik dan hash kriptografi yang cukup mudah. ​​Hash adalah metode untuk mengurangi file atau sesuatu menjadi pengidentifikasi lengh tetap, sehingga dua file tidak mungkin untuk memiliki nilai yang sama. Hash kriptografi adalah salah satu di mana sangat sulit untuk membuat dua file dengan nilai hash yang sama.)

David Thornley
sumber
0

Jawaban sederhana: Cara yang persis sama.

Misalkan A dapat mengirim data dengan aman ke B tetapi B hanya dapat mengirim data secara tidak aman ke A. Yang harus Anda lakukan adalah memiliki A membuat kunci acak dan mengirimkannya dengan aman ke B. Sekarang B dapat mengenkripsi data dengan kunci acak itu, kirimkan ke A, dan itu aman.

Jadi, jika Anda memiliki tautan dua arah yang hanya aman dalam satu arah, itu mudah untuk membuatnya aman di kedua arah.

David Schwartz
sumber
0

Anda tahu siapa bank itu karena browser Anda mengakui sertifikatnya sebagai valid. Tapi bagaimana bank tahu itu kamu? Jawabannya adalah tidak, setidaknya bukan dari SSL. Browser Anda MEMBUAT kunci pribadi PER SESI. Kunci pribadi ini tidak ada artinya bagi bank, karena Anda masih bisa menjadi siapa saja. Namun, kunci privat itu tidak memberi Anda koneksi aman. Karena Anda mempercayai situs web bank, Anda masuk menggunakan koneksi aman, dan pada saat itu ia tahu bahwa Anda adalah Anda, dan bahwa sesi tersebut aman untuk data tentang Anda.

Bank mengenkripsi data untuk browser Anda menggunakan kunci publik yang diberikan browser saat sesi dimulai, dan Anda mengenkripsi hal-hal untuk bank menggunakan kunci publik mereka. Prosesnya sama di kedua arah, pada dasarnya, begitu Anda menetapkan identitas.

Dan Rosenstark
sumber