Bagaimana saya menjadikan diri saya sebagai pengelola kata sandi

Kata sandi adalah metode otentikasi tertua dalam teknologi informasi, masih banyak digunakan hingga saat ini. Sayangnya, sangat tidak mungkin untuk menyimpan kata sandi memori untuk semua sumber daya Internet, asalkan semuanya berbeda dan rumit! Di sini pengelola kata sandi datang untuk menyelamatkan seseorang, melakukan tugas ini sendiri: seseorang hanya mengingat satu kata sandi utama, yang memberikan akses ke semua yang lainnya.



Saya tidak suka dengan pengelola kata sandi yang ada: tidak nyaman untuk menyinkronkan basis data kata sandi antara perangkat dan sistem operasi yang berbeda; selain itu, program pengelola sering kali tidak terlindungi dengan baik secara terbuka . Suatu ketika saya membaca artikel tentang kriptografi, dan pikiran muncul di benak saya: mengapa tidak membuat pengelola kata sandi yang, alih-alih menyimpan kata sandi, akan menghitungnya?



Cara pertama untuk mengimplementasikan ide yang muncul dalam pikiran ini adalah fungsi hash kriptografi. Sekilas, semuanya keren: kami memilih fungsi persisten (katakanlah, SHA-3 dalam versi 224-bit), berikan kata sandi master qwerty dan tipe akun vk sebagai input, dan langsung mendapatkan 56 karakter dari set 0123456789abcdef. Saya segera menemukan dua proyek serupa: diretas dan berpotensi diretas.... Ada masalah besar dengan pendekatan ini: fungsi hash kriptografi dirancang, antara lain, dengan tujuan agar secepat dan tidak menuntut sumber daya, dan oleh karena itu dimungkinkan untuk menyusun kamus atau serangan brute-force penuh dari kata sandi utama menggunakan kata sandi yang dicegat untuk satu situs di CPU (relatif lambat), GPU , FPGA (jauh lebih cepat), ASIC (sangat cepat). Untuk melakukan serangan seperti itu pada algoritme hashing populer tanpa menggunakan salting, tabel pelangi juga dapat digunakan, yang sangat mempercepat proses peretasan pada CPU.



Untungnya, ada opsi implementasi lain - fungsi untuk mendapatkan kunci. Singkatnya, mereka melakukan hashing, tetapi relatif lambat (katakanlah, satu detik pada prosesor normal) dan konsumsi sumber daya yang relatif tinggi (katakanlah, 16 megabyte RAM) untuk membuat serangan brute-force dan brute-force sesulit mungkin. Di antara fungsi modern yang saya kenal PBKDF2 , bcrypt dan scrypt, scrypt terlihat paling baik: dibuat berdasarkan pengalaman dua yang pertama, berhasil melawan komputasi pada GPU dan sirkuit mikro (baik FPGA dan ASIC) dan dirancang untuk fleksibilitas dalam penyesuaian untuk tugas apa pun. Saya berpikir tentang implementasi proyek ini, tetapi untuk beberapa alasan saya mendorongnya ke pembakar belakang. Dan sia-sia.



Kriptografer Nadim Kobeissimembuat password manager seperti npwd di JavaScript (berfungsi sebagai aplikasi desktop melalui Node.JS). Saya menginstal utilitas ini di komputer Linux dan Windows, serta laptop Linux, mulai menggunakannya, dan saya sangat menyukainya. Anda memasukkan satu-satunya kata sandi utama dan jenis akun (misalnya, "twitter") ke dalam aplikasi, dan setelah beberapa detik clipboard Anda sudah berisi kata sandi kompleks yang dihitung khusus untuk akun ini, dan meretas kata sandi utama Anda (baca: semua kata sandi Anda) dengan kata sandi untuk satu akun akan sangat, sangat sulit.



Tapi ada juga masalah. Versi Windows benar-benar memberikan kata sandi setelah beberapa detik, tetapi di Linux (termasuk di komputer yang sama!) Butuh waktu 15 detik untuk kalkulasi, yang menjengkelkan. Pada awalnya saya hanya mengurangi satu konstanta, membuat kata sandi utama kurang aman, tetapi kemudian saya berpikir - mengapa tidak menulis ulang aplikasi dalam C, karena mungkin akan bekerja lebih cepat! Saya terutama didorong oleh pemikiran bahwa saya memiliki rencana untuk proyek ini sejak lama, tetapi saya lambat, dan seseorang telah menerapkannya sebelum saya.



Setelah beberapa hari bekerja dengan santai, saya membuat pengelola kata sandi saya sendiri cpwdsepenuhnya kompatibel dengan aslinya. Itu menyenangkan! Setelah sedikit pengoptimalan, saya berhasil mencapai kecepatan tinggi yang diinginkan. Saya belum mencoba mem-porting cpwd ke Windows, tetapi seharusnya mudah. Di halaman GitHub proyek, saya telah mengumpulkan kumpulan tautan ke proyek serupa di dunia akademis dan seterusnya - ternyata idenya sebenarnya sudah cukup lama.



Tentu saja, ini bukan peluru perak, tapi berhasil untuk saya. Dalam proses penggunaan, saya menemukan masalah: beberapa situs memiliki persyaratan menarik untuk kata sandi seperti "tidak lebih dari 20 karakter", "harus ada huruf besar, huruf kecil, angka dan karakter khusus", akibatnya, kata sandi npwd / cpwd yang dihasilkan terkadang memerlukan pekerjaan manual sebelum memasukkan ... Untungnya, tidak banyak situs seperti itu.



Asli diterbitkan di blog saya pada 7.08.15. 5 tahun telah berlalu, dan saya masih menggunakan utilitas ini.



All Articles