Insinyur Crypto telah
berteriak tentang kekurangan PGP selama beberapa dekade . Ketika pengembang biasa mendengar ini, mereka sangat terkejut. Bagaimana, PGP tidak bagus? Lalu, mengapa disarankan untuk menggunakannya? Jawabannya adalah, PGP benar-benar tidak baik, dan tidak boleh direkomendasikan kepada siapa pun. Dia harus menghilang.
Seperti yang akan segera Anda lihat, PGP memiliki banyak masalah. Jika Anda tidak merinci, alasan utamanya adalah bahwa program ini dikembangkan pada tahun 90-an, sebelum munculnya kriptografi modern yang serius. Tidak ada insinyur crypto yang kompeten saat ini akan mengembangkan sistem dalam bentuk ini dan tidak akan mentolerir sebagian besar cacatnya dalam sistem lain. Cryptographers yang serius pada dasarnya meninggalkan PGP dan tidak lagi menghabiskan waktu untuk itu (dengan beberapa
pengecualian ). Oleh karena itu, masalah terkenal di PGP tetap belum terselesaikan selama lebih dari sepuluh tahun.
Dua not kecil. Pertama, artikel itu ditulis untuk para insinyur, dan bukan untuk pengacara dan aktivis. Kedua, "PGP" dapat berarti banyak hal, dari standar OpenPGP hingga implementasi referensi di GnuPG. Kami menggunakan istilah "PGP" untuk semua ini.
Masalahnya
Kompleksitas yang absurd
Untuk alasan yang tidak ada yang mengerti sekarang, PGP berbasis paket. Pesan PGP (dalam file .asc) adalah arsip paket yang diketik. Setidaknya ada delapan cara berbeda untuk menyandikan panjang paket, tergantung pada apakah Anda menggunakan paket format "baru" atau "lama". Paket "format baru" seperti BER memiliki panjang variabel (coba tulis implementasi PGP, dan standar pengkodean ASN.1 akan terasa manis untuk Anda). Paket mungkin memiliki sub paket. Beberapa opsi paket saling tumpang tindih. Serangan terakhir pada server kunci adalah karena fakta bahwa karena format yang tidak bertanggung jawab ini, parsing kunci GnuPG
secara tidak sengaja pergi dalam waktu kuadratik .
Dan ini hanya penyandian. Sistem yang sebenarnya jauh lebih rumit. Ada kunci dan colokan. Pengidentifikasi kunci, server kunci, dan tanda tangan kunci. Kunci hanya untuk tanda tangan dan hanya untuk enkripsi. Banyak gantungan kunci. Pencabutan Sertifikat. Tiga format kompresi berbeda. Bahwa kita belum mencapai dukungan kartu pintar.
Desain pisau tentara Swiss
Jika Anda tersesat di hutan dan ... Saya tidak tahu, misalnya, Anda perlu memangkas kerah pada celana jeans - ya, sangat nyaman bahwa Anda memiliki gunting pada pisau Anda. Tetapi untuk pekerjaan serius, tidak ada yang akan secara teratur menggunakan gunting seperti itu.
Pisau tentara Swiss melakukan banyak hal, dan semuanya buruk. PGP adalah alat yang sangat biasa-biasa saja untuk menandatangani dokumen, itu mengenkripsi relatif buruk dengan kata sandi dan bekerja sangat buruk dengan kunci publik. PGP tidak terlalu baik untuk transfer file yang aman. Ini adalah cara canggung untuk menandatangani paket. Ini tidak terlalu baik untuk melindungi cadangan. Ini adalah cara yang sangat berbahaya untuk bertukar pesan aman.
Kembali di era MC Hammer, ketika PGP muncul, "enkripsi" adalah hal yang istimewa; ada satu alat untuk mengirim file, cadangan, untuk mengenkripsi dan menandatangani file. Kriptografi modern tidak berfungsi seperti itu, kami memerlukan alat khusus. Kriptografi untuk pengiriman pesan aman berbeda dengan kriptografi untuk membuat cadangan atau menandatangani paket.
Rawa kompatibilitas mundur
PGP mendahului kriptografi modern dan sangat ketinggalan zaman selama ini. Jika Anda beruntung, GnuPG Anda secara default akan memiliki kunci RSA 2048-bit, cipher CAST5 64-bit dalam CFB dan sebuah checksum OpenPGP MDC (kira-kira nanti). Jika enkripsi dilakukan dengan kata sandi dan bukan kunci publik, protokol OpenPGP akan menetapkan algoritma pembuatan kunci S2K untuk PGP. Singkatnya, ini bukan primitif yang akan dipilih oleh insinyur kripto untuk sistem modern.
Kami telah belajar banyak sejak
kutu buku Steve Urkel menghiasi prime time di ABC. Kami mempelajari bahwa teks yang dienkripsi harus diautentikasi (dan mode CFB dihindari), bahwa sandi blok 64-bit buruk, bahwa RSA tidak sempurna, bahwa kombinasi kompresi dan enkripsi berbahaya, dan bahwa KDF harus benar-benar dihasilkan baik dalam waktu maupun dalam memori.
Tidak peduli apa yang dikatakan OpenPGP RFC, Anda mungkin tidak melakukan apa pun dari daftar ini jika Anda menggunakan PGP, dan tidak mungkin untuk mengetahui kapan rekomendasi akan mulai diterapkan. Ambil cipher AEAD: Sequoia PGP di Rust default ke mode AES-EAX AEAD. Ini bagus. Tapi sekarang tidak ada yang bisa membaca pesan mereka, karena sebagian besar versi PGP tidak tahu apa mode EAX, dan ini tidak terlalu keren. Di setiap cryptosystem yang buruk, hasil akhirnya adalah ekstensi RFC yang mendukung kurva elips atau AEAD, sehingga pendukungnya dapat berteriak di forum bahwa mereka mendukung kriptografi modern. RFC tidak masalah: hanya pengaturan nyata. Kami menemukan enkripsi yang diautentikasi 20 tahun yang lalu, dan PGP akan segera pensiun; alasan yang cukup.
Entah Anda memiliki kompatibilitas ke belakang dengan program tahun 90-an, atau Anda memiliki kriptografi yang baik;
Anda tidak bisa mendapatkan keduanya .
UX jahat
Sulit untuk memformulasikannya lebih baik daripada Ted Unangst:
Beberapa tahun yang lalu, studi kegunaan PGP dilakukan, di mana sekelompok ahli teknis ditempatkan di ruangan dengan komputer dan diminta untuk mengkonfigurasi PGP. Dua jam kemudian, belum ada yang merespons.
Jika Anda memerlukan data empiris Anda sendiri untuk mengonfirmasi hal ini, berikut ini adalah percobaan yang dapat Anda lakukan: cari pengacara yang jauh dari komputer dan bantu dia memasang Sinyal melalui telepon. Dia mungkin akan mengatasi tanpa histeria. Sekarang coba lakukan ini dengan PGP.
Rahasia jangka panjang
PGP meminta pengguna untuk menjaga kunci root terikat pada identitas mereka hampir selamanya. Pembangkitan dan pertukaran kunci tidak praktis dengan "pihak penandatangan kunci" ini dan "jaringan kepercayaan", di mana kunci bergantung pada kunci lainnya.
Kunci jangka panjang hampir selalu tidak nyaman . Jika Anda terus menggunakan kunci, itu akhirnya menjadi publik. Dari sudut pandang desain sistem yang kompeten, perlu untuk meminimalkan kerusakan dan memastikan bahwa pengguna tidak ragu-ragu untuk sesaat ketika berpikir tentang membuat kunci baru, jika setidaknya ada beberapa kekhawatiran tentang keamanan kunci yang sekarang.
Penggemar PGP akan segera menjawab: "Itu sebabnya Anda perlu menjaga kunci pada Yubikey." Tetapi menurut perkiraan kasar yang cepat, hampir tidak ada orang di dunia yang menggunakan Yubikeys yang mahal, dan ini tidak mungkin berubah di masa depan (kita hampir tidak bisa menggunakan U2F, dan kunci-kunci itu dapat dibuang). Kami tidak dapat menerima cryptosystems buruk hanya untuk membuat kutu buku Unix lebih nyaman bermain dengan mainan mereka.
Otentikasi yang rusak
Informasi lebih lanjut tentang primitif purba PGP: kembali pada tahun 2000, kelompok kerja OpenPGP menyadari bahwa perlu untuk mengotentikasi teks terenkripsi dan bahwa tanda tangan PGP tidak. Oleh karena itu, OpenPGP menemukan
sistem MDC : Pesan PGP dengan MDC melampirkan plaintext SHA-1 ke plaintext itu sendiri, yang kemudian dienkripsi (seperti biasa) dalam mode CFB.
Jika Anda bertanya-tanya bagaimana PGP menangani ini ketika sistem modern menggunakan skema AEAD yang relatif kompleks (karena mereka tidak bisa begitu saja melampirkan SHA-1 ke plaintext), maka ini adalah pertanyaan yang bagus. Bagaimana Anda menggambarkan kartun ini? PGP MDC dapat dibersihkan dari pesan - dikodekan sedemikian rupa sehingga cukup sederhana untuk memotong 22 byte terakhir dari ciphertext. Untuk menjaga kompatibilitas ke belakang dengan pesan lama yang tidak aman, PGP memperkenalkan jenis paket baru yang menandakan perlunya verifikasi MDC. Jika Anda menggunakan tipe yang salah, maka MDC tidak dicentang. Bahkan jika Anda melakukannya, format paket SEIP baru cukup dekat dengan format SE yang tidak aman, yang berpotensi menipu penerima untuk menurunkan sandi;
Trevor Perrin telah mengurangi SEIP menjadi hanya 16 bit keamanan .
Akhirnya, bahkan jika semuanya berjalan dengan baik, implementasi referensi PGP akan menghasilkan plaintext yang tidak diautentikasi berdasarkan permintaan,
bahkan jika MDC tidak cocok .
Identitas tidak konsisten
PGP adalah aplikasi, satu set integrasi dengan aplikasi lain, dan format file, dan jaringan sosial, dan subkultur.
PGP mengedepankan konsep identitas kriptografi. Anda membuat kunci, menyimpannya di gantungan kunci, mencetak sidik jarinya pada kartu bisnis dan menerbitkannya di server kunci. Anda menandatangani kunci orang lain. Mereka, pada gilirannya, mungkin atau mungkin tidak bergantung pada tanda tangan Anda untuk memverifikasi kunci lain. Beberapa orang mencoba untuk bertemu dengan pengguna PGP lainnya secara pribadi untuk bertukar kunci dan lebih aman mendaftar di "jaringan kepercayaan" ini. Lainnya mengatur pihak penandatanganan kunci. Jika Anda membayangkan semua aktivitas ini, menjadi jelas betapa sulitnya bagi penggemar PGP yang berdedikasi untuk beralih ke teknologi baru.
Tetapi seluruh sistem ini tidak bekerja dalam praktiknya. Baik jaringan kepercayaan dengan tanda tangan kunci, atau server kunci, atau pihak. Orang-orang biasa akan mempercayai segala sesuatu yang terlihat seperti kunci PGP, tidak peduli dari mana asalnya - bagaimana mereka tidak bisa percaya, bahkan jika sulit bagi seorang ahli untuk merumuskan cara mengevaluasi kunci? Para ahli tidak mempercayai kunci yang tidak mereka terima secara pribadi. Semua orang bergantung pada layanan distribusi utama yang terpusat. Mekanisme distribusi kunci PGP adalah sirkus.
Kebocoran metadata
Untuk sesaat, lupakan bencana email (kami akan kembali ke sini nanti). PGP sendiri dapat membocorkan metadata. Dalam penggunaan normal, pesan secara langsung dikaitkan dengan pengidentifikasi utama yang dikaitkan dengan pengidentifikasi pengguna di seluruh jaringan kepercayaan PGP. Selain itu, sebagian besar pengguna PGP menggunakan server kunci yang dengan sendirinya menerbitkan jaringan yang saling bertukar pesan dengan pengguna PGP.
Tidak ada kerahasiaan langsung
Contoh kasus: kriptografi untuk pengiriman pesan aman memerlukan kerahasiaan maju. Kerahasiaan langsung berarti bahwa jika penyerang menerima kunci Anda, ia masih tidak dapat membaca pesan sebelumnya. Dalam kriptografi modern, kita mengasumsikan bahwa musuh menulis semuanya ke penyimpanan tanpa batas. Penentang PGP termasuk pemerintah dunia. Tentu saja, beberapa dari mereka melakukan ini. Terhadap lawan yang serius, peretasan kriptografi tanpa kerahasiaan langsung hanya masalah waktu.
Untuk memastikan kerahasiaan langsung dalam praktik, Anda biasanya menyimpan dua kunci rahasia: kunci sesi jangka pendek dan kunci tepercaya jangka panjang. Kunci sesi bersifat sementara (biasanya produk pertukaran DH), dan kunci tepercaya menandatanganinya, sehingga orang di tengah tidak dapat menggunakan kunci sendiri. Secara teoritis, kerahasiaan langsung dapat diwujudkan dengan alat PGP. Tentu saja, hampir tidak ada yang melakukan ini.
Tombol kapak
Kunci publik OpenBSD yang menandakan adalah string Base64 yang cukup pendek untuk masuk di tengah kalimat dalam email; kunci pribadi yang bukan format pertukaran hanyalah string atau lebih. Dan kunci publik PGP adalah dokumen Base64 raksasa; jika Anda sering menggunakannya, Anda mungkin sudah terbiasa menempelkannya di lampiran daripada menempelkannya di pesan agar tidak merusaknya. Kunci signify dihasilkan oleh algoritma Ed25519 canggih, dan PGP oleh RSA yang lebih lemah.
Anda mungkin berpikir bahwa itu tidak masalah, tetapi itu penting; pesanan lebih banyak orang menggunakan SSH dan mengelola kunci SSH daripada PGP. Kunci SSH mudah ditangani; PGP - no.
Rekonsiliasi
PGP mendukung ElGamal, RSA, kurva NIST p, Brainpool, Curve25519, SHA-1, SHA-2, RIPEMD160, IDEA, 3DES, CAST5, AES. Ini bukan daftar lengkap apa yang didukung PGP.
Jika dalam 20 tahun terakhir kita telah mempelajari tiga hal penting tentang kriptografi, setidaknya dua di antaranya, rekonsiliasi dan kompatibilitas adalah jahat. Sebagai aturan, kekurangan cryptosystems muncul dalam implementasi, bukan primitif, dan cryptocompatibility yang luas meningkatkan jumlah implementasi. Protokol modern, seperti TLS 1.3, berusaha untuk menyingkirkan kompatibilitas ke belakang dengan arkaisme seperti RSA, daripada menambahkannya. Sistem yang lebih baru
hanya mendukung
satu set primitif dan nomor versi sederhana. Jika salah satu primitif ini gagal, Anda menyingkirkan versi ini dan segera membuang seluruh protokol lama.
Jika kita tidak beruntung dan setelah 20 tahun orang masih akan menggunakan PGP, itu akan menjadi satu-satunya alasan mengapa standar CAST5 diterapkan setidaknya di suatu tempat. Kami tidak dapat mengatakan ini dengan lebih jelas, dan kami harus mengulanginya berkali-kali: apakah Anda memiliki kompatibilitas dengan program tahun 90-an, atau Anda memiliki kriptografi yang baik; Anda tidak bisa mendapatkan keduanya.
Kode sampah
Standar penerapan PGP secara de facto adalah GnuPG. Program ini tidak ditulis dengan sangat rapi. Ada basis kode yang luas dalam bahasa C dengan duplikasi fungsi (misalnya, dalam uraian serangan penolakan layanan baru-baru ini pada penguraian SKS dikatakan memiliki beberapa parser kunci) dengan rekam jejak CVE yang panjang, mulai dari kerusakan memori hingga serangan kriptografi. melalui saluran pihak ketiga. Terkadang dimungkinkan untuk menghapus autentikasi dari pesan, tetapi GnuPG tidak memperhatikan hal ini. Anda bisa memberinya kunci tanpa sidik jari yang benar. Pada tahun 2018, kerentanan Efail disebabkan oleh fakta bahwa GnuPG menyediakan plaintext tanpa otorisasi berdasarkan permintaan. GnuPG tidak bagus.
GnuPG adalah implementasi referensi untuk PGP dan fondasi untuk sebagian besar alat integrasi kriptografi PGP lainnya. Dia tidak ke mana-mana. Mengandalkan PGP berarti mengandalkan GPG.
Jawabannya
Untuk meyakinkan seseorang agar melepaskan PGP, penting untuk menjelaskan kepadanya bahwa PGP tidak perlu diganti,
dan itu normal . Alat alternatif tergantung pada tugas.
Percakapan
Gunakan Sinyal. Atau Wire, atau WhatsApp, atau messenger aman lainnya berdasarkan protokol Signal.
Utusan aman modern dirancang khusus untuk olahpesan. Mereka menggunakan jabat tangan otentikasi rahasia, pembatalan pesan,
ratchet kriptografi yang memberikan kunci untuk setiap pertukaran pesan, dan, tentu saja, primitif enkripsi modern. Utusan sepele mudah digunakan, tidak repot dengan kunci dan subkunci. Jika Anda menggunakan Sinyal, Anda mendapat lebih banyak: Anda mendapatkan sistem yang sangat paranoid tentang menyimpan metadata pribadi dari server sehingga bahkan terowongan permintaan pencarian Giphy untuk menghindari serangan analisis lalu lintas, dan sampai saat ini bahkan tidak mendukung profil pengguna.
Enkripsi Email
Jangan lakukan ini.
Email tidak aman . Bahkan dengan PGP, ini adalah teks biasa secara default, yaitu, bahkan jika Anda melakukan semuanya dengan benar, beberapa penerima surat yang masuk akal, melakukan hal-hal yang benar-benar masuk akal, akan selalu mengutip teks biasa dari pesan terenkripsi Anda kepada orang lain di CC (kami tidak tahu pengguna email Surat PGP, yang tidak menemukan ini). Tidak ada kerahasiaan langsung dalam email PGP. Metadata email, termasuk subjek (yang secara harfiah adalah isi pesan), selalu dikirimkan dalam teks yang jelas.
Jika Anda membutuhkan alasan lain, baca
artikel kerentanan Efail . Komunitas GnuPG, yang
gagal mengungkapkan informasi tentang Efail , mengkritik artikel ini dengan keras, tetapi diterima di Usenix Security (salah satu pusat akademik teratas untuk keamanan perangkat lunak) dan Black Hat USA (konferensi keamanan perangkat lunak terkemuka). Ini adalah salah satu serangan kriptografi terbaik dalam lima tahun terakhir - dan merupakan bom yang sangat merusak terhadap ekosistem PGP. Seperti yang akan Anda lihat dari artikel, S / MIME tidak lebih baik.
Itu tidak akan pernah diperbaiki. Untuk membuat email yang benar-benar aman, Anda harus tunnel protokol lain melalui email (Anda masih akan rentan terhadap serangan dengan analisis lalu lintas). Itulah intinya, mengapa berpura-pura?
Mengenkripsi email adalah masalah mengklik. Mendorong pengguna untuk mengenkripsi email jika sesuatu yang mengancam mereka adalah kelalaian luar biasa. Siapa pun yang memberi tahu Anda tentang keamanan komunikasi email dengan enkripsi PGP menempatkan preferensi aneh mereka di atas keamanan Anda.
Mengirim file
Gunakan
Magic Wormhole . Klien lubang cacing menggunakan otentikasi kunci satu kali dengan otentikasi kata sandi (PAKE) untuk mengenkripsi file. Mudah (setidaknya untuk kutu buku), aman dan menyenangkan: semua orang yang kami tunjukkan "lubang mol" segera mulai melewati semua file dalam satu baris, seperti yang kami lakukan.
Seseorang segera meluncurkan installer untuk Windows on Rust atau Go, ini adalah program yang terlalu keren untuk tidak menggunakannya.
Jika Anda berbicara dengan pengacara, bukan insinyur, Signal melakukan pekerjaan transfer file yang bagus. Untuk pelaporan kesalahan, publikasikan nomor Sinyal, bukan kunci PGP.
Enkripsi cadangan
Gunakan Tarsnap.
Colin akan menjelaskan bagaimana Tarsnap dioptimalkan untuk melindungi cadangan . Atau memang, ambil alat enkripsi cadangan lainnya; itu tidak akan sebagus Tarsnap, tetapi masih akan lebih baik daripada PGP.
Perlu cadangan offline? Gunakan enkripsi gambar disk; itu dibangun ke dalam versi modern Windows, Linux, dan macOS. Enkripsi disk penuh tidak terlalu baik, tetapi ia melakukan tugasnya dengan sangat baik, dan lebih sederhana dan lebih aman daripada PGP.
Tanda tangan paket
Gunakan Signify / Minisign.
Ted Unangst akan menceritakan semuanya . Alat ini digunakan untuk menandatangani paket di OpenBSD. Ini sangat sederhana dan menerapkan tanda tangan modern. Frank Denis
Minisign (salah satu pengembang libsodium) mengimplementasikan desain yang sama pada Windows dan macOS; Ini memiliki binding untuk Go, Rust, Python, Javascript, dan .NET;
Itu bahkan kompatibel dengan Signify.Enkripsi data aplikasi
Gunakan libsodium : ini adalah perpustakaan universal dengan antarmuka di mana sulit untuk membuat kesalahan, dan Anda tidak perlu biner untuk bekerja.Enkripsi file
Ini benar-benar masalah. Jika Anda memiliki / tidak / backup, / tidak / arsip untuk penyimpanan offline jangka panjang, / tidak / enkripsi file untuk transfer dan / tidak / enkripsi disk virtual yang Anda mount / unmount sesuai kebutuhan, maka tidak ada alat yang baik untuk mengenkripsi file. Untuk keperluan lain, Filippo Walsorda sedang mengembangkan alat usia , tampaknya menjanjikan, tetapi belum siap.Semoga ini adalah use case yang cukup sempit. Kami bekerja di bidang keamanan perangkat lunak dan memproses data rahasia, termasuk laporan kesalahan (kasus lain yang sangat umum ketika mereka berteriak "Kami membutuhkan PGP!"), Tetapi hampir tidak pernah menggunakan PGP.