Sequoia Stagg di Alder Creek, California
Pada tahun 2018, tiga mantan pengembang GnuPG mulai mengerjakan proyek Sequoia , sebuah implementasi OpenPGP di Rust. Seperti yang Anda ketahui, OpenPGP adalah standar enkripsi data terbuka yang sering digunakan untuk email aman; dan GnuPG adalah implementasi acuan dari standar ini.
Pengembang sendiri menyatakan motivasi untuk membuat perpustakaan OpenPGP baru:
- GnuPG sulit untuk dimodifikasi. Kode dan API telah terakumulasi selama 21 tahun. Tidak ada tes unit. Komponen-komponen tersebut berkaitan erat satu sama lain. Arsitekturnya meninggalkan banyak hal yang diinginkan, dan refactoring sederhana tidak akan membantu.
- Banyak developer yang tidak senang dengan GnuPG API. Alat baris perintah GnuPG dan pustaka pemrograman yang sesuai memiliki fungsi yang berbeda, dengan beberapa perintah hanya tersedia dari baris perintah.
- Rust adalah bahasa yang aman untuk memori yang secara otomatis menghilangkan seluruh kelas bug.
- GnuPG tidak dapat digunakan di iOS karena batasan GPL.
Pustaka Sequoia berlisensi GPLv2 sekarang mendekati versi 1.0 , meskipun masih ada beberapa masalah yang harus ditangani .
Kritik GnuPG
Perpustakaan baru harus bebas dari kekurangan GnuPG. Meskipun perlu dicatat bahwa selain implementasi "referensi" dari OpenPGP, ada yang lain, termasuk OpenKeychain , OpenPGP.js dan RNP .
GnuPG telah dikritik selama bertahun-tahun . Ini telah dikritik karena kerumitannya yang tidak masuk akal, desain pisau Swiss universal: GnuPG melakukan segalanya tetapi tidak buruk, termasuk tanda tangan digital, perlindungan kata sandi, enkripsi kunci publik, transfer file yang aman, penandatanganan paket, perlindungan cadangan, pesan obrolan, dll. .d. Dipercaya bahwa di era modern, alat khusus diperlukan: pustaka terpisah untuk perpesanan aman, pustaka terpisah untuk menandatangani paket, pustaka terpisah untuk mengenkripsi file (sebagai utilitaskemarahan yang ditulis dengan Rust) dan sebagainya. Dan tidak semua utilitas ini harus sepenuhnya sesuai dengan PGP.
Pencarian OpenPGP untuk kompatibilitas mundur dengan cipher tahun 90-an telah dikritik, yang berarti bahwa pengaturan default tidak sesuai dengan praktik terbaik saat ini untuk kriptografi yang kuat dan keamanan selalu dapat dikompromikan melalui protokol negosiasi. Masalahnya adalah tidak mungkin untuk secara bersamaan menjaga kompatibilitas ke belakang dan mematuhi kriptografi aman modern.
Kami telah menyebutkan kode sampah: “Penerapan PGP standar de facto adalah GnuPG. Program ini tidak ditulis dengan sangat rapi. Ada basis kode C yang luas - bahasa dengan fungsi duplikat (misalnya, serangan penolakan layanan baru-baru ini pada penguraian SKS mengatakan ia memiliki beberapa pengurai kunci) dengan rekam jejak CVE yang panjang, mulai dari kerusakan memori hingga serangan kriptografi melalui saluran samping. Terkadang dimungkinkan untuk menghapus otentikasi dari pesan tanpa GnuPG menyadarinya. Anda bisa memberinya kunci tanpa sidik jari yang benar. Pada tahun 2018, kerentanan Efail disebabkan oleh GnuPG menyajikan teks biasa yang tidak diautentikasi atas permintaan, ”tulis Latacora.
Masalah lainnya adalah (dalam) kegunaan.
Beberapa tahun yang lalu, studi kegunaan PGP dilakukan, di mana sekelompok teknisi ditempatkan di sebuah ruangan dengan komputer dan diminta untuk mengkonfigurasi PGP. Dua jam kemudian, belum ada yang keluar. - Ted Unangst , OpenBSD dan LibreSSL Developer
Keluhan lainnya adalah ketidakamanan penyimpanan jangka panjang dari kunci yang sama, sistem otentikasi ciphertext MDC yang sepenuhnya lemah , kurangnya kerahasiaan ke depan, dan kunci raksasa yang kikuk.
Proyek Sequoia
Sequoia adalah toolkit OpenPGP modern yang memecahkan banyak masalah ini, tulis LWN. Sequoia telah diadopsi oleh beberapa proyek lain, termasuk keys.openpgp.org , OpenPGP CA , koverto , Pijul dan KIPA .
Proyek ini didanai oleh p≡p (pep) dan yayasan Wau Holland , dengan semua pengembangan bersifat open source .
Pustaka baru difokuskan pada keamanan dan ketepatan, sambil menggunakan kriptografi modern yang paling andal. Pengembang menjanjikan perkakas yang kuat, termasuk program baris perintah dan subperintah gaya Git.
$ echo hi | sq encrypt --recipient neal
-----BEGIN PGP MESSAGE-----
wcBMA8K4GQVsZSWYAQgAllrQ+9490eoFdB/jLrVvGl+IVtGJWPFDg9uhcl0D8k05
AWz8ZU2sd6GzoCH1nRpwASJWHxloNbPgvxhNRRVReg3GgfFwMkcoNJ2Xb4zocvx+
niH7ZlP9Py6kseuqtjhQZEyvtIfWc58TK9DRdPp5suzS3Y9Zbew9vC2N2u+8YsKL
BbbminTZqLYbt/00ZT/ZuDbtHhoDUxlnCK2Y2R6NZvuvwS1ujI0EOfdOagZO0z5k
hs8U9Xgk1/BWpQtKn3ygMDO0401nBBbwNgialcu/8yFS+wXoifRaj60Cbxhjv2/G
aTcl9loYpN93BL0a7EbKmcwDl14HwosKdkMj4Px25dI0AZjLxI7TBX18e+hBu5vr
q83G7aEwllpiDU3z+rFXBjsWDOwP2UBf05D/Bl05eSYx4x7UnQ==
=qAvC
-----END PGP MESSAGE-----
Antarmuka yang jelas untuk parser dan inspeksi paket telah diterapkan, serta hex dump, yang sekarang dapat dilihat di demo online .
$ sq packet dump --hex message.pgp
New CTB, 13 bytes: One-Pass Signature Packet
Version: 3
Type: Binary
Pk algo: EdDSA Edwards-curve Digital Signature Algorithm
Hash algo: SHA512
Issuer: 83F8 2E4F E9A5 E098
Last: true
00000000 c4 0d frame
00000002 03 version
00000003 00 sigtype
00000004 0a hash_algo
00000005 16 pk_algo
00000006 83 f8 2e 4f e9 a5 e0 98 issuer
0000000e 01 last
Tidak seperti GnuPG, di mana alat baris perintah gpg lebih kuat daripada perpustakaan, Sequoia pada dasarnya adalah perpustakaan; semua fungsinya tersedia melalui API terbuka. Proyek ini berencana untuk menyediakan dua "tingkatan" API: implementasi tingkat rendah dari spesifikasi OpenPGP dan API tingkat tinggi dengan default yang wajar untuk memudahkan pengguna melakukan tugas-tugas umum seperti menandatangani paket dan memverifikasi tanda tangan:
$ sqv --trace --keyring tails-signing.key \
tails-amd64-3.11.iso.sig tails-amd64-3.11.iso
Will check signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Found key A8B0 F4E4 5B1B 50E2.
Checking signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Signature by A8B0 F4E4 5B1B 50E2 is good.
A490 D0F4 D311 A415 3E2B B7CA DBB8 02B2 58AC D84F
1 of 1 signatures are valid (threshold is: 1).
$ echo "Just check the exit status: $?"
Just check the exit status: 0
Terlepas dari implementasi level rendah dari spesifikasi OpenPGP, para pengembang telah menghilangkan beberapa standar yang ketinggalan zaman dan berbahaya, seperti hash MD5.
Bahkan sebelum dimulainya inisiatif, para pendiri proyek bertemu dengan anggota komunitas OpenPGP dan pengguna akhir terkemuka untuk mendiskusikan rencana proyek dan memastikan bahwa pendekatan mereka benar. Pengembangan aktif sedang berlangsung sekarang. Dilihat dari entri di repositori dan pelacak , ada sekitar 30 peserta, dan tiga rilis telah dibuat sejak pengumuman persiapan versi 1.0 pada April 2020. Rilis terakhir 0.19.0 dirilis pada Agustus 2020 - peningkatan paling menonjol di dalamnya adalah integrasi Windows Cryptography API: Next Generation sebagai backend(CNG) bukan Nettle, yang memiliki masalah di lingkungan non-POSIX.
Untuk keamanan tambahan, Sequoia berencana menggunakan pemisahan proses antara layanan kunci publik dan pribadi (seperti dalam gpg-agent). Di sini, untuk komunikasi antarproses, protokol serialisasi Cap'n Proto diperkenalkan - ini mirip dengan Protocol Buffer, hanya lebih cepat.
Dalam presentasi, pengembang menunjukkan bahwa pemisahan proses tidak selalu memungkinkan, misalnya di lingkungan iOS. Jika tidak tersedia, Sequoia berencana menggunakan database SQLite bersama untuk berkomunikasi antar layanan dalam prosesnya, sebagai semacam colocation.
Sequoia mengambil pendekatan yang berbeda secara konseptual untuk rantai kunci publik: mereka dirancang untuk menjadi "lebih seperti buku alamat daripada gantungan kunci PGP." Kunci disimpan oleh pengenal pengguna ( petname ), dengan kemampuan untuk mengikat data terstruktur arbitrer yang berguna dalam mengimplementasikan model kepercayaan. Para pengembang mengatakan bahwa pendekatan ini lebih sejalan dengan bagaimana pengguna sebenarnya mewakili kunci: mereka dikaitkan dengan nama, daripada sekumpulan pengenal abstrak. Ini adalah satu area di mana Sequoia berbeda dari implementasi OpenPGP lainnya.
Selain itu, semua kunci diberi "dunia" yang menunjukkan tujuan kunci tersebut. Dua ranah saat ini didukung: "Kontak" dan "Kunci pembaruan perangkat lunak".
Rantai kunci secara otomatis diperbarui dari server jarak jauh (mirip dengan parcimonie ) untuk melacak perubahan, subkunci baru, dan pencabutan kunci secara tepat waktu. Dokumentasi menunjukkan bahwa ini dapat dilakukan dengan menggunakan layanan anonim seperti Tor, selain metode enkripsi TLS yang lebih umum.
Penerapan rantai kunci pribadi Sequoia akan mendukung kerahasiaan ke depanmelalui spesifikasi OpenPGP, yang tidak diterapkan di banyak pustaka lainnya. Spesifikasi ini memungkinkan untuk membedakan antara data "diam" (penyimpanan terenkripsi) dan data "yang bergerak" (transmisi terenkripsi). Dari sudut pandang keamanan, adalah baik untuk secara berkala mengubah kunci untuk data "saat bepergian", tetapi tetap memiliki kemampuan untuk mendekripsi data "saat diam". Sebuah presentasi dari salah satu pengembang, Justus Musim Dingin, membandingkan fitur kerahasiaan maju Sequoia untuk implementasi OpenPGP lainnya.
Keuntungan karat
Sequoia memanfaatkan semua manfaat keamanan memori Rust.
Apa keamanan memori dijelaskan secara populer dalam artikel oleh Michael Hicks. Secara sederhana, ini berarti bahwa dalam keadaan apa pun program tidak dapat mengakses memori yang tidak valid. Ini adalah kesalahan berikut:
- buffer overflow;
- mendereferensi pointer nol;
- menyimpan penunjuk setelah mengosongkan memori (gunakan setelah bebas);
- penggunaan memori yang tidak diinisialisasi;
- upaya program untuk membebaskan sel yang sama dua kali (bebas ganda).
Pelanggaran keamanan memori menyebabkan kerentanan seperti kebocoran data dan eksekusi kode jarak jauh. Sementara beberapa bahasa telah pasrah pada penurunan kinerja atas nama keamanan memori, konsep kepemilikan Rust memastikan keamanan dan meminimalkan overhead.
Berdasarkan perkembangan Sequoia saat ini, ada upaya signifikan yang dilakukan untuk menulis pengujian unit untuk mencegah regresi dan meningkatkan kualitas kode.
Sequoia menargetkan “platform modern” termasuk Linux, Windows, macOS, Android dan iOS, memanfaatkan alat kriptografi yang ada; tujuan dari proyek ini adalah integrasi yang erat dengan layanan kriptografi dari platform tertentu. Misalnya, pada perangkat iOS direncanakan menggunakan koprosesor Secure Enclavejika tersedia. Sequoia juga menyediakan antarmuka fungsi eksternal (FFI) untuk mengintegrasikan proyek dengan program yang ditulis dalam bahasa lain. Binding (pengikatan) dengan Python dan C. Saat ini ditawarkan. Namun, perlu dicatat bahwa program dengan pengikatan ini kehilangan keamanan memori built-in Rust, oleh karena itu aturan khusus telah diterbitkan untuk penanganan penggunaan memori yang benar .
Komponen Sequoia
Rencana untuk masa depan
Rilis versi 1.0 mungkin akan segera berlangsung, meskipun pada awalnya hanya API level rendah yang akan dirilis, yaitu peti sequoia-openpgp dan dependensinya. Ini berarti Sequoia belum menjadi pengganti alat seperti GnuPG untuk semua pengguna: rilis utama pertama akan fokus pada pustaka pengembang. Pengembang Sequoia perlu melengkapi alat baris perintah
sqyang tidak akan disertakan dalam versi 1.0. Selain itu, layanan penyimpanan kunci masih dalam pengembangan - bersama dengan alat baris perintah, ini adalah salah satu prioritas utama proyek setelah rilis versi 1.0.
Secara keseluruhan, senang melihat proyek yang mencoba membuat OpenPGP lebih mudah digunakan dan lebih mudah diakses. Terlihat bahwa para pengembang telah membuat kemajuan yang signifikan dalam tiga tahun terakhir. Dokumentasi memungkinkan Anda untuk menggunakan perpustakaan ini dalam aplikasi. Namun, Sequoia masih memiliki jalan panjang sebelum menjadi alat kriptografi yang andal. Yang terpenting, kode tersebut perlu diaudit. Halaman proyek menyatakan bahwa itu belum diaudit, tetapi "segera setelah kami merilis peti Sequoia utama, itu akan diaudit pihak ketiga." Belum ada tanggal rilis untuk versi 1.0 yang diumumkan, namun sepertinya akan segera hadir.
Periklanan
VDS untuk pemrogram dengan perangkat keras terbaru, perlindungan serangan, dan banyak pilihan sistem operasi. Konfigurasi maksimum adalah 128 core CPU, RAM 512 GB, NVMe 4000 GB.
