Gesaan dan konteks
Rantai sijil TLS menggunakan bait jabat tangan; rantai yang besar boleh menambah pemecahan (fragmentation), kehilangan paket, dan kos pusingan awal QUIC. RFC 8879 mentakrifkan sambungan compress_certificate supaya titik akhir dapat merundingkan algoritma dan menghantar mesej Certificate yang dimampatkan. Reka bentuk pelayan yang boleh digunakan dengan had penyahmampatan, pengendalian ketidakpadanan algoritma, dan sandaran keserasian.
Perkara yang diuji oleh penemu duga
Isyarat yang dinilai ialah membezakan pemampatan mesej sijil daripada pemampatan data aplikasi, memahami arah sambungan, pendaftaran algoritma, pemeriksaan panjang dinyahmampat, dan semantik rantai sijil yang tidak berubah. Jawapan yang mantap menimbang pertimbangan CPU/jalur lebar Brotli dan Zstandard serta kehabisan sumber daripada input termampat yang berniat jahat.
Soalan penjelasan untuk ditanya terlebih dahulu
Skop protokol dan klien
Sahkan bahagian TLS 1.3, DTLS, dan QUIC, sama ada klien boleh dinaik taraf, dan sama ada kotak tengah (middlebox) menggugurkan sambungan yang tidak diketahui. Laluan sambungan TLS 1.3 tidak boleh diandaikan untuk TLS 1.2.
Bentuk rantai sijil
Tanya tentang panjang rantai, sijil pendua, sambungan pasca-kuantum atau perusahaan, dan rantai khusus penyewa. Kestabilan menentukan nilai cache pemampatan dan pra-pengiraan.
Belanjawan risiko
Jelaskan sama ada matlamatnya adalah untuk mengurangkan bait jabat tangan, mengurangkan serpihan awal, atau merendahkan penggunaan kuasa peranti mudah alih. Tetapkan belanjawan untuk CPU penyahmampatan, memori, dan saiz mesej mampat maksimum.
Rangka kerja jawapan 30 saat
"Klien mengiklankan algoritma dalam ClientHello; pelayan hanya memilih persilangan dan menghantar mesej Certificate yang dimampatkan. Klien menyahmampat dan melakukan pengesahan rantai biasa; tandatangan, nama, dan jangka hayat tidak dilangkau. Hadkan input termampat, output dinyahmampat, dan masa CPU untuk mengelakkan bom mampatan. Kuncikan cache mengikut rantai dan versi algoritma, dan kembali kepada Certificate biasa apabila tidak disokong atau apabila tiada persilangan. Perhatikan kegagalan, sandaran, kos penyahmampatan, dan saiz paket awal; perubahan algoritma mestilah boleh diterbalikkan."
Langkah-langkah jawapan mendalam
Langkah 1: Tentukan perundingan
Klien menyenaraikan ID algoritma yang boleh diterima dalam sambungan dan pelayan memilih satu algoritma yang sama. Tanpa persilangan, hantar Certificate biasa. Gunakan ID dan semantik yang didaftarkan oleh IANA; jangan sekali-kali menggunakan semula ID yang tidak diketahui.
Langkah 2: Jana dan simpan rantai termampat dalam cache
Mampatkan rantai lengkap bagi setiap algoritma dan simpankannya dalam cache dengan kunci yang mengandungi ringkasan rantai, ID algoritma, dan versi pelaksanaan. Batalkan nilai cache semasa penggiliran sijil, perubahan susunan rantai, atau peningkatan algoritma; jangan sekali-kali menggunakan hasil lama pada rantai baharu.
Langkah 3: Tetapkan pertahanan penyahmampatan
Sebelum membaca input, memperuntukkan output, atau menghuraikan sijil, kuat kuasakan panjang termampat maksimum, panjang dinyahmampat maksimum, kiraan sijil maksimum, dan belanjawan CPU/masa. Batalkan jabat tangan jika berlaku pelanggaran; pengiklanan algoritma bukan lesen untuk mempercayai penyahmampatan tanpa had.
Langkah 4: Kekalkan pengesahan sijil tanpa perubahan
Penyahmampatan hanya mengubah perwakilan. Klien masih mengesahkan tandatangan rantai, nama hos, jangka hayat, penggunaan kunci, sauh amanah (trust anchor), dan ikatan TLS. Ralat penghuraian atau ketidakpadanan rantai mesti digagalkan; jangan secara senyap menggunakan sijil lapuk dalam cache.
Langkah 5: Kendalikan sandaran dan kotak tengah
Asingkan klien yang tidak disokong, ketiadaan persilangan algoritma, data termampat yang rosak, dan pelanggaran had penyahmampatan. Dua yang pertama boleh menggunakan Certificate biasa; kerosakan dan pelanggaran had harus dilog dan digagalkan supaya penyerang tidak boleh memaksa penurunan taraf secara senyap. Laksanakan secara berperingkat mengikut rantau, versi klien, dan protokol.
Langkah 6: Imbangi CPU dan jalur lebar
Pramampatan rantai yang stabil memindahkan kos CPU kepada masa keluaran; rantai penyewa dinamik memerlukan dasar capaian cache dan tamat tempoh. Bandingkan nisbah, kelajuan penyahmampatan, ketersediaan pelaksanaan, dan sokongan klien berbanding memaksimumkan nisbah semata-mata.
Langkah 7: Perhatikan dan buat latihan praktikal
Catat perundingan, sandaran biasa, penolakan penyahmampatan, masa jabat tangan, saiz paket awal, dan CPU tanpa melog kunci peribadi. Latih penggiliran sijil, pembatalan cache, output bersaiz lebih, penyingkiran algoritma, dan sandaran penuh sambil mengesahkan bahawa klien yang tidak disokong masih boleh menyambung.
Contoh jawapan berkualiti tinggi
Saya akan meminta klien mengiklankan algoritma dalam ClientHello dan pelayan hanya memilih persilangan, menghantar rantai biasa apabila tiada persilangan wujud. Simpan output termampat dalam cache mengikut ringkasan rantai, algoritma, dan versi pelaksanaan, membatalkannya semasa penggiliran. Hadkan input, saiz dinyahmampat, kiraan sijil, dan CPU sebelum penghuraian, kemudian lakukan pengesahan normal X.509 dan TLS. Gagalkan mesej yang rosak atau bersaiz lebih daripada menurunkannya secara senyap. Laksanakan pelancaran berperingkat dan pantau sandaran, kos penyahmampatan, serta penjimatan paket awal QUIC; kekalkan suis henti segera algoritma.
Kesilapan biasa
- Kesilapan: Menganggap pemampatan mengurangkan pengesahan sijil. → Sebab: Ia hanya mengubah perwakilan. → Penambahbaikan: Lakukan pengesahan rantai penuh selepas penyahmampatan.
- Kesilapan: Hanya mengehadkan input termampat. → Sebab: Input yang kecil boleh berkembang menjadi output yang sangat besar. → Penambahbaikan: Hadkan output, bilangan sijil, dan CPU juga.
- Kesilapan: Bersandar secara senyap pada setiap kegagalan. → Sebab: Keserasian dan kerosakan berniat jahat adalah berbeza. → Penambahbaikan: Sandarkan hanya untuk situasi tidak disokong/tiada persilangan; log dan gagalkan untuk kerosakan atau had.
- Kesilapan: Mengunci cache hanya mengikut nama hos. → Sebab: Penggiliran, algoritma, dan penyewa boleh mengubah rantai. → Penambahbaikan: Sertakan ringkasan rantai, algoritma, dan versi.
Soalan dan jawapan susulan
Susulan 1: Bolehkah pemampatan sijil digunakan dengan TLS 1.2?
RFC 8879 menyasarkan TLS 1.3, DTLS 1.3, dan konteks yang berkaitan; medan perundingan TLS 1.3 miliknya tidak boleh digunakan begitu sahaja pada TLS 1.2. Sahkan versi protokol yang tepat terhadap pelaksanaan dan spesifikasi.
Susulan 2: Mengapa perlu mengehadkan panjang dinyahmampat?
Nisbah yang tinggi membolehkan penyerang menyebabkan peruntukan memori yang besar atau beban kerja CPU daripada input yang kecil. Had output adalah penting terhadap bom penyahmampatan dan kehabisan sumber.
Susulan 3: Apakah yang perlu dilakukan oleh pelayan apabila algoritma tidak bersilang?
Hantar Certificate biasa dan kekalkan jabat tangan standard, sambil mengukur keupayaan klien. Pelayan tidak boleh memilih algoritma yang tidak diiklankan oleh klien.
Susulan 4: Mengapakah QUIC lebih mengambil berat tentang pemampatan sijil?
Jabat tangan awal QUIC sensitif terhadap kiraan paket dan kehilangan laluan; bait sijil yang lebih sedikit boleh menjadikan mesej pelayan awal dimuatkan dengan lebih padat. Nilaikan keuntungan itu bersama-sama dengan CPU penyahmampatan, sokongan klien, dan saiz rantai.