Alat pembangun · Pengekod & penyahkod Base64
Base64 bukan penyulitan: mengapa rahsia yang dikodkan boleh dibaca oleh sesiapa sahaja
· Mengapa ia penting
asas64 keselamatan pengekodan
Base64 tidak menyembunyikan apa-apa: sesiapa sahaja yang mempunyai rentetan boleh menyahkodnya serta-merta, tanpa kunci. Siaran ini menerangkan perbezaan antara pengekodan, penyulitan dan pencincangan dan perkara yang perlu dilakukan apabila anda menemui rahsia Base64 dalam repositori.
Nilai konfigurasi yang kelihatan bergegas dan dinyahkodkan kepada kata laluan pangkalan data — penemuan konkrit dan seberapa cepat ia terbalik
Mencari Base64 dalam fail konfigurasi mewujudkan rasa selamat yang palsu. Seorang pembangun menemui kata laluan pangkalan data yang muncul sebagai urutan terkucar-kacir seperti dGlnZXJfZGF0YWJhc2VfYWRtaW4, menganggap kata laluan itu disulitkan dan memasukkannya ke repositori bersama kod aplikasi. Beberapa minggu kemudian semakan keselamatan mendedahkan plaintext sebenar: tiger_database_admin.
Base64 tidak menyembunyikan apa-apa; ia adalah pengekodan, bukan penyulitan. Kata laluan yang sama diterbalikkan menjadi mentah semula serta-merta dalam pelayar, tanpa kunci, tiada pengiraan, tiada kelewatan. Siaran ini menerangkan sebab pengekodan wujud sama sekali, bagaimana ia berbeza secara asas daripada penyulitan dan pencincangan, dan apa yang sebenarnya berlaku apabila seseorang menemui rahsia Base64 dalam sejarah yang komited.
Pengekodan, penyulitan dan pencincangan: tiga kerja berbeza — apa yang dijamin oleh setiap satu, dan yang mana satu memerlukan kunci
Kekeliruan timbul kerana Base64 kelihatan seperti perlindungan. Manusia tidak boleh melihat dGlnZXJfZGF0YWJhc2VfYWRtaW4dan membaca tiger_database_admin. Ia kelihatan tidak jelas sehingga anda menjalankannya melalui penyahkod. Kekeliruan tahap permukaan itu terasa seperti keselamatan, tetapi tidak. Base64 direka untuk menyelesaikan masalah yang berbeza sepenuhnya: memindahkan data binari sewenang-wenangnya melalui saluran teks sahaja. E-mel, borang web lama dan sistem protokol talian tidak dapat membawa bait mentah. Base64 menukarkan bait kepada ASCII aksara yang boleh dicetak supaya data boleh melalui saluran tersebut secara utuh.
Selepas data tiba, penerima menyahkodnya kembali kepada bait. Pengekodan dan penyahkodan adalah sama mudah; mereka tidak memerlukan kunci, tiada entropi, tiada perpustakaan kriptografi. Pengekodan, penyulitan dan pencincangan menyediakan tiga tujuan berasingan dan menawarkan tiga jaminan berbeza. Pengekodan mengubah data menjadi perwakilan yang berbeza supaya ia boleh melalui saluran tertentu atau digunakan dalam konteks tertentu. Base64, URL-pengekodan, perwakilan hex dan juga petikan pelepasan aksara dalam JSON semuanya pengekodan. Mereka boleh diterbalikkan oleh sesiapa sahaja dan tidak memerlukan kunci rahsia.
Mengapa Base64 wujud sama sekali — pengangkutan bait yang selamat melalui saluran teks, tidak pernah kerahsiaan
Matlamatnya ialah keserasian format, bukan kerahsiaan. Penyulitan, sebaliknya, memerlukan kunci yang sahaja diketahui oleh pihak yang diberi kuasa. Sahaja seseorang yang mempunyai kunci yang betul boleh menukar teks sifir kembali kepada teks biasa. Tanpa kunci mesej tetap legap walaupun kepada seseorang yang cukup canggih untuk menyerangnya. Hashing adalah sehala mengikut reka bentuk: cincangan kriptografi kata laluan tidak boleh diterbalikkan sama sekali. Ia digunakan untuk mengesahkan bahawa kata laluan sepadan dengan cincang yang disimpan tanpa menyimpan kata laluan itu sendiri.
Rahsia Kubernetes bernama kata laluan pangkalan data yang mengandungi base64: dGlnZXJfZGF0YWJhc2VfYWRtaW4 sebenarnya bukan rahsia. Base64 ialah pengekodan lalai yang digunakan Kubernetes untuk storan, bukan perlindungan. Sesiapa sahaja yang mempunyai akses kepada YAML atau pangkalan data etcd boleh menyahkod nilai dalam beberapa saat. Pembolehubah persekitaran dengan kunci API berkod base64 dalam skrip permulaan menghadapi masalah yang sama. Pengepala Pengesahan Asas yang menghantar Kebenaran: Asas base64_username:kata laluan kepada pelayan boleh dinyahkod oleh mana-mana proksi, alat pemantauan atau pemerhati rangkaian antara klien dan pelayan.
Contoh yang berfungsi: menyahkod rentetan 'rahsia' dalam pelayar — tampal, nyahkod dan teks biasa, tanpa pelayan yang terlibat
Jika saluran adalah HTTP dan bukannya HTTPS, pendedahan adalah lebih besar. Base64 dalam konteks ini ialah herring merah: rahsia sebenar telah dikompromi dengan disimpan atau dihantar dalam bentuk yang boleh dipulihkan sama sekali. Contoh yang dikerjakan menjadikan masalah itu konkrit. Katakan kunci API untuk perkhidmatan pihak ketiga muncul dalam fail konfigurasi sebagai YXBpa2V5XzEyMzQ1Njc4OTAx. Salin rentetan ini ke dalam pengekod & penyahkod Base64 dalam pelayar anda, tampalkannya ke dalam medan input dan klik Nyahkod.
Alat ini mengembalikan apikey_1234567890. Ini berlaku serta-merta, dalam pelayar anda, tanpa pelayan dihubungi, tiada kunci diperlukan dan tiada pengesahan dilakukan. Keseluruhan operasi mengambil masa kurang dari satu saat. Sekarang andaikan kunci yang sama ini ditemui dalam repositori GitHub awam oleh pelakon yang berniat jahat. Mereka menyahkodnya dengan mudah, dalam apa jua alat yang mereka suka, dan menggunakannya untuk mengakses perkhidmatan. Sama ada rentetan itu kekal dikaburkan dalam repositori, bergerak melalui rangkaian atau muncul dalam log aplikasi, ia boleh didedahkan dengan operasi remeh yang tersedia dalam setiap bahasa pengaturcaraan dan dalam alat pelayar seperti ini.
Di mana kesilapan ini muncul — Rahsia Kubernetes, fail .env, pengepala pengesahan asas dan sumber apl mudah alih
Kesilapan muncul di mana-mana kerana Base64 adalah sangat biasa sehingga ia dikaitkan dengan kekeliruan mengikut kedekatan. Pembangun melihat data berkod Base64, membuat kesimpulan bahawa seseorang menganggapnya penting dan meninggalkan rahsia dalam bentuk itu. Fail .env yang mengandungi API_KEY=VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0 kelihatan kepada jurutera muda sebagai lebih selamat daripada API_KEY=Ini bukan rahsia walaupun penyahkodan mengambil satu operasi. Aplikasi mudah alih menggabungkan token berkod Base64 dalam sumber yang mana-mana penyahkompilasi boleh mengekstrak dan menyahkod. Sandaran pangkalan data mengandungi kata laluan berkod Base64 dalam medan yang dimaksudkan untuk dicari, bukan dilindungi.
Dalam setiap kes seseorang telah tersilap pengekodan untuk penyulitan dan mencipta arkib rahsia teks biasa yang kebetulan diformatkan dengan cara yang memerlukan satu langkah tambahan untuk membaca. Perkara yang perlu dilakukan apabila rahsia Base64 ditemui bergantung pada konteks.
Perkara yang perlu dilakukan sebaliknya — pengurus rahsia, penyulitan sebenar dalam keadaan rehat, dan memutarkan apa sahaja yang telah dilakukan
Jika rahsia itu ialah token, kunci API atau kata laluan dan ia telah pun komited kepada kawalan versi, anggap ia telah terjejas. Batalkannya, jana yang baharu dan kemas kini setiap tempat ia digunakan. Komit sejarah adalah sebahagian daripada rekod kekal repositori walaupun rahsia itu kemudiannya dialih keluar dalam komit baharu; sesiapa sahaja yang mempunyai akses kepada sejarah repositori boleh menemuinya.
Mencari repositori untuk nilai berkod Base64 kini merupakan taktik peninjauan standard, jadi fakta bahawa sesuatu adalah Base64 tidak menjadikannya rahsia. Untuk sebarang operasi yang sedang berjalan, jangan sekali-kali mengekod rahsia dengan Base64 dan anggap ia dilindungi. Gunakan pengurus rahsia yang menyimpan nilai yang disulitkan, dikawal akses dan boleh diaudit. Simpan sahaja rujukan atau terbitan, bukan rahsia itu sendiri, dalam kod dan konfigurasi aplikasi. Penyulitan sebenar dalam keadaan rehat bermakna data disulitkan dengan kunci yang disimpan secara berasingan dan tidak berguna kepada sesiapa sahaja yang tidak mempunyai kunci itu.
Perkara ini tidak meliputi — memilih algoritma penyulitan atau reka bentuk pengurusan kunci
Pangkalan data yang menyulitkan lajur sensitif, pengurus rahsia yang menggunakan penyulitan sampul surat dengan kunci dalam modul keselamatan perkakasan, atau pengurus kata laluan yang memperoleh kunci penyulitan daripada kata laluan pengguna semuanya menawarkan kerahsiaan yang tulen. Penyulitan peringkat aplikasi pada titik rahsia dicipta, sebelum ia disimpan di mana-mana, masih lebih kukuh. Rahsia berputar yang telah didedahkan, walaupun ia sahaja dikodkan Base64, mengalih keluar tetingkap peluang untuk penyalahgunaan. Jika rahsia berada dalam repositori, semak log untuk melihat apabila ia diakses dan untuk apa ia digunakan semasa tetingkap pendedahan.
Untuk keselamatan berterusan, gunakan token jangka pendek yang dikeluarkan oleh perkhidmatan kebenaran, bukan rahsia statik yang disimpan dalam konfigurasi. Token yang tamat tempoh dalam masa sejam adalah kurang bernilai kepada penyerang walaupun jika dikompromi. Artikel ini tidak meliputi memilih algoritma penyulitan, reka bentuk pengurusan kunci atau seni bina pengesahan. Itu adalah soalan kejuruteraan yang lebih mendalam dengan piawaian dan pertukaran mereka sendiri. Intinya lebih mudah: Base64 bukanlah salah satu alat untuk mana-mana masalah tersebut. Ia adalah penukaran format untuk pengangkutan dan storan.
Bawa pulang: layan Base64 sebagai plaintext — cara pengekod & penyahkod Base64 membuat titik dalam satu klik, tanpa rahsia yang pernah meninggalkan tab anda
Jangan biarkan penampilan Base64 dalam repositori, fail konfigurasi atau log keselesaan anda bahawa data dilindungi. Mana-mana alat yang boleh membaca teks boleh menyahkod Base64, dan operasi adalah segera dan deterministik. Membaca rentetan berkod Base64 sebagai teks sifir adalah salah faham yang biasa, dan ia meninggalkan rahsia sebenar di hadapan mata. Pemaju sering menyedari perkara ini sahaja selepas menemui rahsia Base64 dalam pengeluaran atau dalam audit. Perspektif baharu datang apabila jurutera menyahkod rentetan sampel secara setempat dan melihat plaintext asal muncul serta-merta.
Alat ini menjadikan perkara itu tidak dapat dielakkan: pengekodan bukan penyulitan. Selepas perbezaan itu jelas, tindakan susulan adalah automatik. Setiap rahsia Base64 dalam pangkalan kod mesti diputar. Setiap tempat yang rahsia digunakan mesti dikemas kini. Tetingkap pendedahan mesti dinilai. Untuk masa hadapan, pengurus rahsia dan penyulitan sebenar mesti menggantikan pengekodan dalam peranan ini. Pengekod & penyahkod Base64 menunjukkan dengan tepat betapa cepat dan mudah pembalikan itu, tanpa rahsia anda meninggalkan pelayar. Anggap kemudahan itu sebagai postur keselamatan sebenar: jika anda boleh menyahkodnya dalam satu saat, begitu juga dengan orang lain.