Menggunakan passwordstore.org - pengelola kata sandi gaya KISS

Halo semuanya. Dalam artikel ini, saya ingin berbagi pengalaman saya dalam mengatur dan menggunakan pass -password manager untuk Linux, dan tidak hanya yang terkenal karena kesederhanaannya, menggunakan alat yang sudah ada dalam sistem, dan kemampuan untuk bekerja secara eksklusif dari konsol. Lebih khusus lagi, masalah yang berkaitan dengan pembuatan dan penyimpanan kunci rahasia gpg, serta pengaturan kolaborasi antara pass, gpg, git, github dan browser, akan terpengaruh. Semuanya ada di bawah Linux, Windows dan Android.


Apa itu dan bagaimana cara kerjanya


Secara teknis, pass adalah pengikatan yang sangat sederhana atas GnuPG dan git yang ditulis dalam bash. Setiap kata sandi (dan informasi terkait, seperti login) disimpan dalam file yang dienkripsi. Pencarian kata sandi yang diinginkan dilakukan oleh nama file, enkripsi - menggunakan GnuPG, sinkronisasi antar perangkat - menggunakan git.


Selain pass asli, ada dua proyek populer yang kompatibel dengannya, berjalan di Windows:


  1. QtPass . Aplikasi GUI ditulis, seperti yang Anda duga, dalam Qt.
  2. Gopass . Aplikasi baris perintah yang ditulis dalam go. Di bawah Windows, saya menggunakannya. Namun, menurut saya, para pengembang mulai menambahkan terlalu banyak fitur tambahan di sana, sambil mengabaikan intuisi mereka.

Pengembang pass adalah Jason Donenfeld, yang juga penulis WireGuard (implementasi VPN berdasarkan standar kriptografi modern, "karya seni dibandingkan dengan OpenVPN dan IPSec" menurut Linus Torvalds, yang kemungkinan akan muncul di kernel Linux 5.6).

Pembuatan kunci rahasia


GnuPG - sistem untuk enkripsi dan tanda tangan elektronik. Terlepas dari kekurangannya (misalnya, artikel yang mengkritik gpg), ini telah menjadi standar de facto selama lebih dari 20 tahun. Bahkan artikel di tautan itu kesulitan menyebutkan nama alat alternatif untuk mengenkripsi file.


Proses membuat kunci rahasia di konsol dijelaskan misalnya pada habr , tetapi mengapa tidak melakukannya di GUI? Dalam proyek KDE, mereka membuat garis depan untuk GPG yang disebut Kleopatra . Pengguna Linux akan menemukannya di repositori, dan di gpg4win Kleopatra berada di luar kotak.


Di menu, pilih File - New Key Pair - Create a personal OpenPGP key pair .


Masukkan nama dan email. Tidak perlu khawatir bahwa Anda akan mengubahnya di masa depan. GPG memungkinkan Anda untuk secara bebas menambahkan cairan baru ke kunci dan menghapus yang sudah ada. Jika Anda ingin menandatangani komit git dengan kunci yang dibuat dan melihat kotak centang "Terverifikasi" di sebelahnya, maka Anda perlu menentukan email asli yang berstatus "dikonfirmasi" di akun github Anda.


Selanjutnya, klik Advanced Settings untuk mengonfigurasi pengaturan kunci.



Di bagian Key Material , pilih ECDSA/EdDSA + ECDH . Saya lebih suka menggunakan bukan algoritma RSA klasik, tetapi berdasarkan pada kurva eliptik ed25519 / cv25519. Keuntungan utama mereka dibandingkan RSA dari sudut pandang pengguna akhir adalah ukuran kunci yang lebih kecil dengan kekuatan kriptografi yang sama. Dikatakan bahwa kunci 256-bit ed25519 adalah sekuat kunci RSA 3072-bit. Satu-satunya keuntungan dari yang terakhir adalah prevalensi yang tinggi, terutama dalam sistem perangkat keras.


Anda juga dapat memilih keluarga kurva Brainpool dan NIST dari menu. Namun, yang terakhir diduga memiliki backdoor NSA, dan yang pertama juga memiliki keluhan kecil. Oleh karena itu, ed25519 dan cv25519 yang diusulkan oleh ahli kriptografi terkenal Daniel Bernstein adalah pilihan terbaik.


Fakta menarik: dalam standar autentikasi yang dipromosikan secara aktif FIDO U2F (yang mana Google secara aktif berpartisipasi dalam pengembangan), adalah kurva NIST yang digunakan. Juga, misalnya, Android Keystore memiliki dukungan mereka, tetapi tidak ada dukungan untuk ed25519. Mengapa ini terjadi?

Akibatnya, 2 subkunci pada kurva elips akan dibuat. Satu untuk tanda tangan, yang lain untuk enkripsi, yang kita butuhkan. GPG tidak mengizinkan satu subkunci digunakan untuk keduanya, meskipun faktanya memungkinkan secara algoritmik (ada fungsi yang sesuai, misalnya, di perpustakaan libsodium ).


Jika Anda berencana untuk menggunakan kunci ini untuk bekerja dengan git, maka di bagian Certificate Usage , periksa item Signing dan Authentication .


Pada langkah selanjutnya, diusulkan untuk membuat kata sandi dengan mana kunci akan dilindungi. Karena kunci akan digunakan untuk mengenkripsi semua data dalam penyimpanan, kata sandi ini adalah kata sandi utama. Pantas mendekati pilihannya dengan kesedihan tertentu.


Master Password Generation


Tentu saja, Anda selalu dapat menghasilkan string acak dari jumlah karakter yang cukup (misalnya 20). Namun, hampir tidak mungkin untuk diingat dan sulit untuk masuk tanpa kesalahan, terutama pada smartphone. Karenanya, EFF merekomendasikan penggunaan kata sandi sebagai pengganti dalam panduan Anda.


Metode ini berfungsi seperti ini: ambil kamus yang cukup besar (EFF menawarkan beberapa kamus, misalnya kamus ini ) dan pilih setidaknya 6 kata acak dari kamus tersebut. Anda dapat memilih sesuka Anda, bahkan tanpa komputer sama sekali menggunakan dadu atau koin. Metode ini disebut diceware . Saya belum mencapai dadu dan koin, jadi saya hanya akan menggunakan utilitas shuf yang disertakan dengan GNU coreutils:


 $ shuf --random-source=/dev/random -n 6 ./eff_large_wordlist.txt 51345 rendering 24564 edging 65652 vivacious 31343 footprint 55261 snore 24436 earache 

Kami menyimpan frasa sandi ini di tempat yang aman di luar komputer.


Akibatnya, kunci rahasia akan dibuat. Ketika bekerja di konsol, Anda sering harus menunjukkan sidik jarinya, ada baiknya menuliskan nomor ini.


Sekarang Anda dapat mengkonfigurasi integrasi gpg dan git.


Integrasi gpg, git dan github


Sebenarnya, item ini adalah opsional. Pass penyimpanan kata sandi hanyalah direktori dengan file yang dienkripsi, yang berarti dapat disinkronkan sesuka Anda. Google Drive, Yandex.Disk, dll. dll. Jika Anda tidak ingin menggunakan git, maka saya menyarankan Anda untuk memperhatikan Syncthing . Ini adalah program sumber terbuka yang membutuhkan pengaturan minimum dan mentransfer file secara langsung antara perangkat tanpa menyimpannya di server pihak ketiga.

Sebagai git hosting, tidak ada yang mengganggu untuk meningkatkan server mereka sendiri dengan menempatkan Gitea , misalnya, namun ini berarti biaya dukungannya dan tidak selalu menjamin keamanan dan keandalan yang besar. Oleh karena itu, saya, tidak meremehkan untuk menggunakan produk Microsoft, cukup membuat repositori pribadi di github.


Mekanisme otentikasi standar di git adalah melalui SSH. Biasanya dipahami bahwa ini memerlukan kunci ssh khusus. Namun, dimungkinkan, tanpa menghasilkan entitas yang tidak perlu, untuk menggunakan kunci gpg yang dibuat pada langkah sebelumnya. Agar gpg-key (lebih tepatnya, subkey) untuk digunakan oleh ssh, dua syarat harus dipenuhi:


  1. itu harus memiliki set bendera A - Otentikasi;
  2. keygrip-nya harus ditulis dalam file ~/.gnupg/sshcontrol .

Item pertama telah selesai, dan Anda bisa mendapatkan keygrip dengan perintah


 gpg --list-secret-keys --with-keygrip 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 

Dalam output gpg, kami tertarik pada keygrip dari subkey 05B6641E23D720E87EE6A26020BAB214B842F2B7 ( 05B6641E23D720E87EE6A26020BAB214B842F2B7 ).


Sekarang Anda dapat mengunggah kunci publik ke github. Buka bagian SSH and GPG keys di profil dan pilih New SSH key . Di konsol kita ketik


 $ gpg --export-ssh-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPfj81nennAoujvw1fLzGx9iED34zk5oDMYKuUcBq5wv openpgp:0x54068AC7 

dan salin kunci ssh publik yang dihasilkan.


Git dapat menandatangani komit menggunakan gpg, dan github mendukung ini. Saya pikir ini adalah fitur yang berguna untuk keamanan. Ekspor perintah gpg kunci publik


 $ gpg --export --armor 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEXcrHrBYJKwYBBAHaRw8BAQdA9+PzWd6ecCi6O/DV8vMbH2IQPfjOTmgMxgq5 RwGrnC+0G0hlbGxvIEhhYnIgPGZha2VAZW1haWwuY29tPoiQBBMWCAA4BQsJCAcC BhUKCQgLAgQWAgMBAh4BAheAFiEEBgnJ3+8aorON7brcwFRLVVQGiscFAl3WO2wC GyMACgkQwFRLVVQGiscg5AEAkh0a6OQS2CPiXq9bWB+wULHUGT6NYZhwZ3eUQCfH Zq0A/iFBJQkAZIFdqH84ksFbvv6K/LQy72NRJzK0tho6qFwHuDgEXcrHrBIKKwYB BAGXVQEFAQEHQEs6UVOtj5yMGxvRcMU577miH/Bh5kZWMJKHxsDBcXV4AwEIB4h4 BBgWCAAgFiEEBgnJ3+8aorON7brcwFRLVVQGiscFAl3Kx6wCGwwACgkQwFRLVVQG isea8wD/X5JSJW0PMu/KucytUZZo8obHa86/TUwH/8+xQ3+djuEBALugbQRmCIr5 /JYO7x5PNA0QYqhh7LIZ9nKYp0mhqpcO =dc89 -----END PGP PUBLIC KEY BLOCK----- 

dan salin apa yang terjadi pada formulir New GPG key .
Tindakan lebih lanjut khusus untuk sistem operasi Anda.


Integrasi gpg dan git (linux)


Klien OpenSSH yang digunakan oleh git dapat menerima kunci dengan dua cara: dari ~/.ssh dan melalui soket yang dibuat oleh daemon ssh-agent . Yang terakhir mungkin gpg-agent , yang akan kita gunakan. Dalam file ~/.gnupg/gpg-agent.conf Anda harus menulis baris enable-ssh-support .


Mulai ulang gpg-agent dengan perintah


 gpg-connect-agent reloadagent /bye 

Setelah itu, itu akan membuat soket di


 ${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh 

Jalur ini (mungkin tergantung pada distribusi) harus ditulis dalam variabel lingkungan $SSH_AUTH_SOCK , dan ssh akan mengambilnya. Kami mengetik perintah di konsol


 ssh -T git@github.com 

dan jika semuanya berjalan dengan baik, maka setelah memasukkan kata sandi utama, sebuah pesan tentang otentikasi yang berhasil akan muncul.


Integrasi gpg dan git (Windows)


Baru-baru ini, Microsoft menambahkan OpenSSH ke jumlah komponen Windows yang tersedia untuk instalasi, dan juga menerapkan dukungan untuk soket seperti AF_UNIX , seperti SSH_AUTH_SOCK sama. Namun, Win32-OpenSSH tidak dapat berinteraksi dengan gpg4win, karena masih menggunakan hanya pipa bernama.


Karena itu, Anda harus memasang Dempul hijau. Kami menulis di file


 ~/AppData/Roaming/gnupg/gpg-agent.conf 

enable-putty-support dan restart gpg-agent. Setelah itu, ia akan mulai berpura-pura menjadi Pageant - iblis kunci. File sshcontrol harus berada di folder yang sama.


Agar klien git mulai menggunakan dempul, Anda perlu membuat GIT_SSH lingkungan GIT_SSH dengan jalur ke plink.exe . Sebagai contoh, saya punya ini


 C:\ProgramData\chocolatey\bin\PLINK.EXE 

Ngomong-ngomong tentang git. git for windows client yang biasanya diinstal mengandung banyak hal yang tidak perlu (setidaknya gopass tidak berfungsi), misalnya, implementasi OpenSSH sendiri. Namun, pengembangnya membuat versi yang lebih ringan yang dapat diunduh di github . Misalnya, ada MinGit 2 kali lebih kecil, dan orang yang berisiko dapat mencoba MinGit-busybox. Versi busybox muncul karena keinginan pengembang untuk membuat klien git menggunakan api Win32 tanpa lapisan seperti MSYS2. Namun, menurut ulasan mereka sendiri, mingit-busybox masih mengandung banyak bug. Anda dapat membaca lebih lanjut tentang upaya ini di tiket .

Pastikan gpg-agent berjalan ( gpg-connect-agent /bye ) dan periksa koneksi ke github:


 plink git@github.com 

Pengaturan git


Tidak ada yang aneh di sini. Saya pikir perintah dapat diberikan tanpa komentar:


 git config --global user.name "Hello Habr" git config --global user.email fake@email.com git config --global user.signingKey 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 git config --global gpg.program /usr/bin/gpg git config --global commit.gpgSign true 

Item gpg.program diperlukan jika gpg tidak ada dalam PATH .


Pencadangan kunci rahasia


Kunci rahasia harus disimpan dengan aman seperti frasa sandi, yaitu di luar komputer. Anda cukup mencetak urutan angka yang panjang, tetapi mengenalinya atau memasukkannya dari keyboard - ini bukan untuk yang lemah hati. Karena itu, saya lebih suka membuat kode QR yang mudah dipindai dengan smartphone apa pun. Ada program qrencode khusus untuk qrencode . Gambar kode QR dihasilkan sebagai berikut:


 gpg --export-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 | qrencode --8bit --output secret-key.qr.png 

Tentu saja, semakin sedikit informasi yang tidak perlu dalam cadangan, semakin baik. Di sini, ukuran kunci yang sangat kecil adalah ed25519. Terima kasih kepada Daniel Bernstein!


Ada utilitas kunci kertas yang memungkinkan Anda mengurangi jumlah data hingga batasnya. Harga pengurangan adalah bahwa kunci rahasia dari cadangan semacam itu hanya dapat dipulihkan jika ada kunci publik. Ekosistem GPG memiliki server khusus untuk menyimpan kunci publik, Anda dapat membacanya dan tidak hanya di artikel https://eax.me/gpg/ .


Cadangan kunci kertas dibuat sebagai berikut:


 gpg --export-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 > pubkey.asc gpg --export-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 | paperkey --output-type raw | qrencode --8bit --output secret-key.qr.png 

Aturan kedua pencadangan: pencadangan tidak ada sampai kemampuan untuk memulihkan data dari itu dikonfirmasi. Karena itu, kami melakukan tes stres. Hapus kunci rahasia dengan perintah


 gpg --delete-secret-key 0609C9DFEF1AA2B38DEDBADCC0544B5554068AC7 

Lalu kami memindai kode QR dan mengimpor kunci kembali ke GPG. Sebagai pemindai kode QR untuk Android, saya suka BinaryEye , program gratis dengan antarmuka yang ramah pengguna. Pada gambar di bawah ini - cadangan kunci rahasia dari artikel ini.



 paperkey --pubring pubkey.asc --secrets from_qr.asc > secretkey.asc gpg --import ./secretkey.asc 

Saya harap Anda tidak akan menggunakan kunci ini di mana pun. Ini dibuat untuk tujuan ilustrasi saja.


Jika semuanya berfungsi, maka Anda dapat melanjutkan.


Menggunakan pass (go)


Sekarang kita memiliki kunci privat yang disimpan dan diamankan dengan aman, serta integrasi kerja dengan git, kita dapat mulai menggunakan pass itu sendiri. Saya lebih suka gopass, karena pengikatan alternatif ini berfungsi di Windows.
Inisialisasi penyimpanan kata sandi dengan perintah


 gopass init 

dan pilih kunci rahasia yang diinginkan dari daftar.


Bekerja dengan git terjadi dengan cara yang sama seperti dalam kasus dengan repositori biasa, hanya baris perintah yang perlu ditambahkan (go)pass . Kami menginisialisasi repositori dan menambahkan asal yang diinginkan di sana:


 gopass git init gopass git remote add origin git@github.com:xxx/taisho-secrets.git 

Alamatnya dapat ditemukan di halaman repositori di github dengan mengklik tombol Clone or download .


Gopass memiliki perintah khusus


 gopass sync 

melakukan git pull dan git push , mis. sinkronisasi penuh.


Penyimpanan default dibuat di folder ~/.password-store , tetapi Anda juga dapat menentukan jalur Anda sendiri.
Untuk bekerja dengan kata sandi, konsol mendukung perintah ls, cp, mv, cari, buat, dll. Anda bisa mendapatkan daftar lengkap dengan mengetikkan gopass --help , tapi saya pribadi tidak menggunakan konsol, tetapi plugin browser 95% dari waktu.


Integrasi Browser


Pengaya peramban disebut jembatan gopass , dapat ditemukan di toko Chrome dan Firefox (lihat tautan).


Untuk menghubungkan plugin dengan gopass itu sendiri, Anda akan memerlukan skrip bantu dan manifes untuk perpesanan asli. Mereka diciptakan oleh tim.


 gopass jsonapi configure 

yang akan menawarkan kita untuk memilih browser dan lokasi skrip.


Periksa bagaimana semuanya bekerja. Buat kata sandi baru:


 gopass new habr 

Kami menjawab semua pertanyaan dan menyimpan. GPG akan meminta Anda memasukkan kata sandi utama untuk bekerja dengan kunci pribadi.


Sekarang kita membuka menu plugin dengan gopher biru yang khas, dan jika semuanya berjalan dengan baik, kita dapat menemukan kata sandi kita di sana.


Kunci TOTP


Secara pribadi, saya menggunakan FreeOTP , namun, Anda dapat bekerja dengan kunci-kunci ini menggunakan pass. Pengguna pass asli perlu menginstal ekstensi pass-otp , dan di gopass dan APS (lihat di bawah) fungsi yang diperlukan berada di luar kotak.


Untuk menambahkan kunci TOTP ke penyimpanan kata sandi menggunakan pass-otp, kami mendapatkan URL (dimulai dengan otpauth:// ) dan masukkan perintah


 pass otp insert totp-secret 

Apakah otentikasi yang dihasilkan dapat disebut dua faktor adalah titik diperdebatkan. Pengembang KeePassXC merekomendasikan menyimpan kunci TOTP dalam database terpisah yang dilindungi oleh kata sandi yang berbeda. Secara sepintas, ini juga bisa dilakukan.


Integrasi Android


Implementasi GnuPG untuk Android disebut OpenKeychain . Untuk mengkonfigurasinya, buka saja menu "manajemen kunci" dan impor kunci rahasia yang dibuat sebelumnya. Satu-satunya kelemahan OpenKeychain bagi saya secara pribadi adalah tidak ada pembukaan sidik jari.


Implementasi pass untuk Android disebut android-password-store , atau hanya APS.


Instal dan jalankan APS. Sebelum menyinkronkan penyimpanan kata sandi, buka menu "Pengaturan". Di sana kita membutuhkan barang-barang berikut:


  1. git . URL yang dihasilkan harus sama dengan yang ditentukan pada halaman repositori di github. Jenis otorisasi - OpenKeychain .
  2. Git utils . Di bagian ini, tentukan nama pengguna dan email dari kunci gpg.
  3. OpenPGP . Pilih OpenKeychain .
  4. Fitur yang paling baru muncul ini termasuk mengisi kata sandi dalam aplikasi di Android 8.0+.

Catatan untuk pengguna smartphone Huawei, dan semua orang juga: OpenKeychain, APS, BinaryEye, FreeOTP, serta Syncthing, Telegram, Tachiyomi, KDE Connect, dan banyak lagi yang tersedia di F-Droid . Pengguna Google Play harus menghargai ini: katalog perangkat lunak yang tidak memiliki iklan, rootkit, atau hanya perangkat lunak sampah dari artikel terkenal yang terkenal .

Sebelum autocomplete di APS, saya menggunakan keepass2android . Itu bukan di F-Droid karena alasan asli: itu ditulis dalam Xamarin, tetapi pengelola F-Droid belum dapat menginstal kerangka ini pada server build mereka selama 9 bulan sekarang . Seseorang melakukan sesuatu.

Sekarang kamu bisa mengkloning. Pada layar utama, pilih "clone from server", tentukan lokasi repositori yang diinginkan, periksa pengaturan git.


Jika upaya untuk bekerja dengan git mengarah ke kesalahan (ini mungkin dalam rilis APS sebelumnya karena penggunaan versi usang dari perpustakaan jgit dari proyek Eclipse), maka masih ada Syncthing.


Kesimpulan


Tentu saja, pass tidak begitu mudah untuk dikonfigurasi. Namun, untuk harga ini, Anda dapat membeli kepercayaan bahwa alat yang digunakan oleh kami (serta orang-orang seperti Linus Torvalds atau Edward Snowden) tidak akan ketinggalan zaman pada satu titik, tidak akan mengubah format data, dan tidak akan tanpa dukungan. Dan jika mereka melakukannya, arsitektur modular sederhana dari pass mendorong penciptaan klien dan ekstensi alternatif.


Jika Anda memutuskan untuk tidak menggunakan pass, maka saya harap beberapa program yang disebutkan dalam artikel akan bermanfaat bagi Anda sendiri.

Source: https://habr.com/ru/post/id479540/


All Articles