Alat pembangun · SHA kalkulator cincang
Mengapa Anda Tidak Mesti Menyimpan Kata Laluan sebagai Biasa SHA-256 Hashes
· Mengapa ia penting
kata laluan keselamatan kriptografi
SHA-256 direka untuk menjadi pantas, iaitu perkara yang anda tidak mahu untuk kata laluan. Siaran ini menerangkan sebab kelajuan menjadi masalah dan fungsi pencincangan kata laluan yang dilakukan secara berbeza.
SHA-256 bukan storan kata laluan; ia adalah pencincangan pantas. Biasa SHA-256 memberikan penyerang kelajuan yang sama untuk meneka, menjadikannya tidak sesuai walaupun merupakan algoritma yang kuat dari segi kriptografi.
Pembangun melaksanakan sistem log masuk dan menyimpan kata laluan sebagai cincang SHA-256. Algoritma adalah kuat dari segi kriptografi, dan aplikasi tidak menggunakan garam, mengekalkan kod yang mudah. Apabila pengguna log masuk, aplikasi mencincang penyerahan dan membandingkannya dengan nilai yang disimpan. Reka bentuk ini elegan dalam kesederhanaannya, dan ia sama sekali tidak sesuai untuk storan kata laluan. Ini bukan kebimbangan teori; ia adalah satu-satunya kesilapan serius yang paling biasa dalam sistem pengesahan. Reka bentuk kelihatan boleh dipertahankan sehingga anda mempertimbangkan perkara yang boleh dilakukan oleh penyerang dengan data yang dicuri.
Kelemahannya bukan kerana SHA-256 lemah. SHA-256 ialah algoritma kriptografi yang mantap, dipercayai oleh komuniti keselamatan dan digunakan di seluruh industri untuk semakan integriti dan menangani kandungan. Kelemahannya ialah SHA-256 adalah pantas dan pantas adalah bertentangan dengan keperluan kata laluan. Cincang kata laluan bukan sebarang primitif kriptografi; ia adalah sejenis alat khusus yang direka untuk masalah tertentu: pertahanan terhadap meneka. Kelajuan adalah ciri dalam checksum; dalam kata laluan, ia adalah malapetaka.
Pantas adalah tujuan SHA-256 — pemeriksaan integriti memerlukan kelajuan dan penyerang mendapat kelajuan yang sama untuk meneka
Apabila pangkalan data cincang kata laluan SHA-256 terjejas, penyerang tidak perlu membalikkan cincangan tersebut. Penyerang membina kamus: kata laluan biasa seperti "kata laluan," "123456," "hello," dan berjuta-juta lagi. Setiap calon dicincang dengan SHA-256—operasi yang tidak penting dari segi pengiraan—dan disemak terhadap pangkalan data yang dicuri. Penyerang boleh mengira nilai SHA-256 calon dengan primitif pantas yang sama digunakan oleh perkhidmatan log masuk, kemudian membandingkan setiap hasil di luar talian tanpa had kadar. Kadar yang tepat bergantung pada perkakasan dan pelaksanaan, jadi artikel ini sengaja tidak membuat tekaan-sesaat atau tuntutan masa pelanggaran.
Kelajuan adalah keseluruhan masalah. SHA-256 dimaksudkan untuk menjadi pantas. Itulah niat reka bentuknya. Ia membolehkan anda mengesahkan jumlah semak muat turun, mengira alamat kandungan dan membina pepohon Merkle tanpa menunggu. Dalam aplikasi tersebut, kelajuan adalah ciri. Untuk kata laluan, kelajuan adalah malapetaka. Apabila pangkalan data kata laluan dicuri dan dicincang dengan SHA-256, penyerang mempunyai kelajuan yang sama untuk meneka seperti pelayan yang sah lakukan untuk pengesahan. Simetri itulah yang merosakkan keselamatan kata laluan. Pelayan dan penyerang yang sah kedua-duanya menerima manfaat ringkasan tujuan am yang pantas; sahaja penyerang boleh mengulanginya di luar talian tanpa kawalan log masuk aplikasi.
Kamus dan jadual pelangi — prapengiraan terhadap cincang tanpa garam, dan perubahan garam
Di sinilah kamus prakiraan menjadi praktikal. Penyerang boleh menghabiskan masa sehari dan mengira cincangan SHA-256 untuk ribuan kata laluan yang paling biasa, untuk corak biasa seperti Name1990 atau untuk keseluruhan kamus dalam berbilang bahasa. Jadual yang terhasil dipanggil jadual pelangi. Mencari cincangan SHA-256 yang dicuri terhadap jadual prakiraan adalah serta-merta. Walaupun tanpa jadual prakiraan, mengira satu bilion tekaan adalah remeh dengan pencincangan dipercepatkan GPU. Kos pengiraan kepada penyerang adalah sangat rendah sehingga kata laluan yang lemah jatuh dalam beberapa minit.
Kalkulator cincang ToolAcre SHA menunjukkan kelajuan ini secara langsung. Tampalkan teks pendek, klik butang SHA-256 dan hasilnya adalah serta-merta. Hasil segera itu—sifat yang anda kagumi dalam kalkulator cincang—adalah sifat tepat yang menjadikan SHA-256 tidak dapat dipertahankan untuk kata laluan. Penyerang mendapat hasil segera yang sama untuk setiap tekaan. Untuk checksum dan semakan integriti, kelajuan itu adalah sempurna. Untuk kata laluan, ia membawa maut kepada keselamatan.
Fungsi pencincangan kata laluan yang ditambahkan — faktor kerja, kekerasan memori dan garam setiap pengguna dalam bcrypt, scrypt, Argon2 dan PBKDF2
Garam ialah nilai rawak yang ditambahkan pada kata laluan sebelum pencincangan, jadi garam setiap pengguna adalah berbeza. Walaupun dua pengguna mempunyai kata laluan yang sama, mereka mencincang kepada nilai yang berbeza. Ini memecahkan jadual pelangi prakiraan; penyerang mesti mengira jadual secara bebas untuk setiap garam. Dengan garam setiap pengguna yang dijana secara bebas, satu jadual prakiraan tidak lagi digunakan tidak berubah pada setiap akaun. Walau bagaimanapun, garam sahaja menolak penyerang untuk mengira jadual semasa serangan dan bukannya sebelumnya. Jika pencincangan masih pantas, penyerang sahaja mengira lebih banyak jadual secara selari dan terus meneka setiap akaun dengan primitif yang pantas. Garam perlu tetapi tidak mencukupi. Ia menghalang penggunaan semula kamus merentas mangsa, tetapi ia tidak melambatkan operasi teras penyerang: meneka. Kelajuan pencincangan masih kelajuan meneka.
Contoh yang berkesan — seberapa cepat SHA-256 kata laluan biasa dikenali berbanding cincang kata laluan yang ditala, diterangkan secara kualitatif
Fungsi pencincangan kata laluan mengambil pendekatan yang berbeza. Bcrypt, scrypt, Argon2id dan PBKDF2 dibina khas untuk pengesahan kata laluan. Kesemuanya termasuk faktor kerja: parameter yang menjadikan pencincangan sengaja mahal. Argon2 adalah yang paling moden; ia melaraskan kedua-dua CPU masa dan penggunaan memori. Bcrypt menggunakan faktor kos boleh laras yang menggandakan kerja dengan setiap kenaikan. Kesemuanya termasuk penjanaan garam terbina dalam. Alat ini direka bentuk dengan mengambil kira model penyerang. Faktor kerja adalah penting.
Fungsi pencincangan kata laluan menjadikan kos yang dikonfigurasikan sebahagian daripada setiap pengesahan. Penyerang yang ingin menguji calon juga mesti membayar kos itu untuk setiap tekaan. Pemasaan konkrit tidak boleh disalin dengan selamat antara penggunaan, itulah sebabnya bahagian pada parameter memerlukan penanda aras pada kelas pengeluaran sebenar perkakasan. Asimetri itulah yang menjadikan pencincangan kata laluan berfungsi. Faktor kerja beralih daripada "kelebihan penyerang" kepada "kelebihan pertahanan".
Memindahkan jadual SHA-256 warisan — membalut cincang sedia ada dan mencantum semula pada log masuk seterusnya
Perbandingan yang berfungsi kekal kualitatif kerana repositori ini tidak mengandungi penanda aras untuk fungsi kata laluan atau penyerang tertentu. Kata laluan biasa menghasilkan SHA-256 biasa yang sama dengan serta-merta setiap kali, jadi entri kamus sedia ada boleh mengenal pastinya melalui kesamarataan. Rekod kata laluan yang ditala termasuk parameter garam dan kosnya sendiri dan memerlukan kerja yang dikonfigurasikan untuk setiap calon.
Kontras itu mewujudkan ralat reka bentuk tanpa menjanjikan tekaan sesaat. Perkakasan, pelaksanaan dan parameter terpilih menentukan masa. Kesimpulan yang boleh dipertahankan adalah invarian: ringkasan tujuan umum tidak mempunyai faktor kerja boleh laras atau kos ingatan, manakala fungsi pencincangan kata laluan dipilih secara khusus untuk mengenakan kos tersebut.
Perkara ini tidak meliputi — memilih parameter untuk cincang kata laluan tertentu, yang bergantung pada perkakasan dan model ancaman anda
Pemilihan parameter sengaja di luar kalkulator ini dan artikel ini. Tetapan yang betul bergantung pada belanjawan kependaman pelayan, memori yang tersedia, konkurensi dan model ancaman semasa, jadi menyalin nilai tetap daripada penggunaan yang tidak berkaitan akan menukar kawalan keselamatan menjadi cerita rakyat. Tanda aras fungsi kata laluan yang dipilih pada perkakasan kelas pengeluaran dan lawati semula apabila kapasiti berubah.
ToolAcre tidak boleh melakukan latihan itu: panelnya menerima teks dan pengecam SHA, kemudian mengembalikan ringkasan biasa. Ia tidak mendedahkan medan garam, tetapan memori, kawalan lelaran atau format rekod kata laluan. Ketiadaan itu adalah isyarat sempadan yang berguna, bukan ciri yang hilang untuk diatasi dengan mencincang kata laluan berulang kali dalam kotak teks.
Bawa pulang: hasil segera ialah amaran — kalkulator cincang ToolAcre SHA menunjukkan betapa pantas SHA-256, itulah sebabnya ia tidak boleh menyimpan kata laluan pengguna anda
Sistem warisan yang telah menyimpan kata laluan sebagai SHA-256 biasa boleh dipindahkan ke hadapan tanpa memerlukan semua pengguna menetapkan semula dengan segera. Tekniknya adalah untuk "membalut" cincang lama: ambil nilai SHA-256 dan cincang sekali lagi dengan Argon2. Pada log masuk pengguna seterusnya, sistem menyemak sama ada SHA-256 lama sepadan; jika ya, ia mengira Argon2 atas hasil itu dan menyimpan versi yang dibalut. Pada kali berikutnya pengguna log masuk, sistem akan mengesahkan secara langsung terhadap Argon2. Penghijrahan berlaku secara telus semasa aliran log masuk biasa.
Pendekatan yang dibungkus ini memastikan bahawa kata laluan lama yang telah terjejas kini dilindungi oleh faktor kerja. Penyerang dengan pangkalan data lama cincang SHA-256 tidak boleh memecahkannya lagi; mereka mesti menyerang versi yang dibalut, yang termasuk kos Argon2. Penghijrahan berlaku secara telus kepada pengguna semasa aliran log masuk biasa mereka. Setiap log masuk mencipta peluang untuk mengukuhkan cincangan tanpa mengganggu pengalaman pengguna. Memilih faktor kerja yang betul bergantung pada perkakasan anda dan model ancaman anda. Lalai Argon2 adalah wajar: 19 lelaran, 512 MB memori dan 1 selari untuk perkhidmatan web.