Berapa ukuran maksimum nama file (dan folder) dengan eCryptfs?

44

Saya adalah pengguna eCryptfs baru dan saya memiliki pertanyaan mendasar yang tidak dapat saya temukan di mana pun. Saya tertarik menggunakan eCryptfs melalui Synology NAS saya yang menggunakan Linux.

Saat mencoba mengenkripsi folder saya (EXT4) melalui aplikasi enkripsi Synology (eCryptfs) saya menemukan kesalahan yang menyatakan bahwa panjang nama file saya tidak boleh melebihi 45 karakter (jadi, tidak ada enkripsi).

Jika batasnya benar-benar 45 karakter, eCryptfs mungkin bukan alat yang dapat digunakan untuk sebagian besar.

Berapa ukuran maksimum nama file yang diizinkan saat mengenkripsi file dan folder dengan eCryptfs? Apakah Linux 255 karakter?

Fabry
sumber
6
Seperti halnya ecryptfs mengenkripsi nama file jelas konyol. Pertama itu memberikan lebih dari 20 byte dengan menambahkan string tetap "ECRYPTFS_FNEK_ENCRYPTED." untuk setiap nama file. Kemudian ia menambahkan terlalu banyak byte acak untuk membuat nama yang identik terlihat berbeda. EncFS melakukan itu dengan cara yang jauh lebih efisien.

Jawaban:

70

Pengungkapan penuh: Saya adalah salah satu penulis dan pengelola saat ini dari utilitas userspace eCryptfs.

Pertanyaan bagus!

Linux memiliki panjang nama file maksimum 255 karakter untuk kebanyakan sistem file (termasuk EXT4), dan jalur maksimum 4096 karakter.

eCryptfs adalah sistem file berlapis. Tumpukan di atas filesystem lain seperti EXT4, yang sebenarnya digunakan untuk menulis data ke disk. eCryptfs selalu mengenkripsi konten file, tetapi secara opsional dapat mengenkripsi (tidak jelas) nama file (atau tidak).

Jika nama file tidak dienkripsi, maka Anda dapat dengan aman menulis nama file hingga 255 karakter dan mengenkripsi isinya, karena nama file yang ditulis ke sistem file yang lebih rendah hanya akan cocok. Sementara penyerang tidak akan bisa membaca konten index.htmlatau budget.xls, mereka akan tahu nama file apa yang ada. Itu mungkin (atau mungkin tidak) membocorkan informasi sensitif tergantung pada kasus penggunaan Anda.

Jika nama file dienkripsi, segalanya menjadi sedikit lebih rumit. eCryptfs menambahkan sedikit data di bagian depan nama file terenkripsi, sehingga dapat mengidentifikasi nama file terenkripsi secara definitif. Juga, enkripsi itu sendiri melibatkan "melapisi" nama file.

Misalnya, saya punya file yang dienkripsi ~/.bashrc,. Nama file ini dienkripsi menggunakan kunci saya untuk:

/home/kirkland/.Private/ECRYPTFS_FNEK_ENCRYPTED.dWek2i3.WxXtwxzQdkM23hiYK757lNI7Ydf0xqZ1LpDovrdnruDb1-5l67.EU--

Jelas, bahwa nama file 7 karakter sekarang membutuhkan lebih dari 7 karakter untuk dienkripsi. Secara empiris, kami telah menemukan bahwa nama file karakter yang lebih panjang dari 143 karakter mulai membutuhkan> 255 karakter untuk mengenkripsi. Jadi kami (sebagai pengembang hulu eCryptfs) biasanya menyarankan Anda membatasi nama file Anda hingga ~ 140 karakter.

Sekarang, semua yang dikatakan, Synology NAS adalah produk komersial yang menanamkan dan menggunakan eCryptfs dan Linux untuk mengenkripsi dan mengamankan data pada perangkat. Kami (pengembang hulu dari eCryptfs) tidak ada hubungannya dengan Synology atau produk mereka, meskipun kami umumnya senang melihat eCryptfs digunakan di alam liar . Menurut saya rekomendasi mereka untuk 45 karakter adalah kesalahan tipografi (dari 140 karakter rekomendasi kami), atau hanya perkiraan yang jauh lebih konservatif.

Dustin Kirkland
sumber
Saya benar-benar ingin melihat, FUSE overlay filesystem yang menyelesaikan sendiri "terlalu panjang nama file" dan sisanya hanya proxy 1: 1 dengan underlaying filesystem. FUSE seperti fs akan berguna untuk sistem file yang berbeda (ecryptfs, EncFS), sedangkan untuk nama file yang saat ini didukung tidak akan mengubah apa pun. Dan lagi, akan menjadi opsional. - Keinginan saya: unix.stackexchange.com/q/283149/9689
Grzegorz Wierzowiecki
17
Jawaban ini tidak sepenuhnya benar. Ukuran maksimal nama file adalah 255 Bytes atau tipe char C / C ++. Tetapi karakter maks dalam nama file bervariasi. Saat menggunakan UTF-8 yang merupakan default untuk sebagian besar sistem, nama file bisa antara 63-255 karakter (alias Poin Poin), jika menggunakan UTF-16, 63-127. Penting untuk dicatat, bahwa 1 karakter dapat satu atau lebih byte dalam ruang penyimpanan dan tergantung pada set kode yang digunakan oleh pengguna sistem.
Rahly
Saran untuk pengembang: Pisahkan nama terenkripsi di seluruh subdirektori yang disembunyikan dari pengguna akhir untuk mendapatkan panjang yang diperlukan, bahkan berpotensi melebihi batas panjang nama maksimum linux jika sistem file eksternal membutuhkannya. Satu file atau direktori menjadi "ENCRYPTFS-01-OF-04 [.....] / ENCRYPTFS-02-OF-04 [.....] / ENCRYPTFS-03-OF-04 [..... ] / ENCRYPTFS-04-OF-04 [.....] "- Linux btrfs, ext1-4, dan lainnya tidak memiliki kedalaman direktori yang ditentukan secara maksimal sehingga sistem file dapat menangani perluasan file dan nama dir di beberapa subdirektori yang tidak terpapar seperti ini .
Dale Mahalko
1
Saran saya adalah untuk menyimpan metadata apa pun yang Anda simpan di xattrs, bukan dalam nama file. : |
Trejkaz
1
Anda mengatakan eCryptfs "secara opsional dapat mengenkripsi (tidak jelas) nama file (atau tidak)." Bagaimana cara menonaktifkan enkripsi nama file sehingga saya bisa mendapatkan kembali nama file 255-char penuh saya alih-alih terbatas pada 143 karakter? Saya percaya cara saya menginstal eCryptfs, dengan cara, adalah dengan mencentang kotak atau apa pun untuk "Direktori rumah terenkripsi" selama proses instalasi Ubuntu saya.
Gabriel Staples
11

Utas ini sangat menarik karena saya ingin tahu hal yang persis sama. Saya dapat hidup dengan harus mengubah nama 20 file dari 50.000 jika nama file harus 140 karakter atau kurang, tetapi 45 atau kurang tidak layak (dalam situasi saya) karena akan mengharuskan saya untuk mengubah nama terlalu banyak file.

Saya mengajukan pertanyaan yang persis sama langsung ke Synology (bahkan mengarahkan mereka ke artikel ini), dan jawaban mereka menarik: "Batas nama file saham terenkripsi adalah 143 byte. Bisa hingga 140 karakter Latin murni atau 45 CJK (China , Jepang, dan Korea) karakter. "

Mengikuti jawaban ini, saya melakukan lebih banyak pengujian sendiri, pengujian dengan file yang 45, 46, 140, 143 dan 144 karakter. Pengujian saya menunjukkan bahwa file hingga 143 karakter (bukan byte, bertentangan dengan apa yang dikatakan Synology) akan dienkripsi, tetapi file dengan 144 karakter akan MENCEGAH folder untuk dienkripsi. Namun, PESAN KESALAHAN yang saya dapatkan dari NAS saya adalah bahwa nama file harus kurang dari 45 karakter (padahal kenyataannya harus kurang dari 144 karakter).

Saya tidak melakukan tes dengan karakter CJK ... Tapi, bagi siapa pun yang membaca ini, tampaknya Anda baik-baik saja hingga 143 karakter, terlepas dari apa yang sistem katakan kepada Anda.

sdasdrewr
sumber
7

Saya ingin mengklarifikasi, bahwa linux memiliki batas 255 byte per nama file, bukan 255 karakter. Ini adalah perbedaan yang signifikan dan jika Anda menggunakan misalnya pengkodean UTF-8, Anda mungkin berakhir dengan nama file maksimal 100 karakter.

Richard Jelinek
sumber
1
63 adalah maks jika setiap karakter menggunakan penyandian maks 4 byte per titik kode. Ini sama untuk skema UTF mana pun (UTF-16 dan UTF-32)
Rahly
@Rahly Itu mungkin akhirnya berubah. Sebelum titik kode Unicode maksimum yang valid dikurangi untuk U+10FFFFmemenuhi batasan UCS-2 (pada dasarnya UTF-16 tanpa pasangan pengganti), UTF-8 dapat memerlukan hingga 6 byte untuk mewakili titik kode 32-bit karena cara menyandikannya "mulai dari karakter" dan "kelanjutan dari karakter" untuk memastikan bahwa sinkronisasi parser dapat diperoleh kembali di mana pun Anda mulai parsing dalam aliran byte. Selalu ada kemungkinan bahwa mereka akhirnya akan memutuskan untuk membalikkan keputusan itu karena mereka kehabisan poin kode yang belum ditetapkan.
ssokolow
1
Tapi sangat tidak mungkin, kecuali mereka mulai menambahkan karakter seperti orang gila. Pada U8.0, hanya 120k yang ditugaskan. Mereka menambahkan ~ 8k karakter dalam iterasi ini. Jika mereka terus melakukannya, itu perlu diperluas pada versi ~ 106.
Rahly
Dan saya pikir mereka juga harus mematikan JavaScript dan Windows, karena mereka berdua mengandalkan UTF-16. (Namun, mungkin untuk memperbaiki ini dalam kasus JavaScript?)
SamB
1

Panjang nama file ecrypt hanya masalah bagi saya karena saya memerlukan subtree tertentu dari direktori home saya untuk mendukung nama file yang panjang, dan akhirnya saya menyadari bahwa saya bisa membuat sistem file di dalam file dan me-mount bahwa:

dd if=/dev/zero of=/home/me/.some.img bs=1024 count=1024
mkfs.ext3 /home/me/.some.img
chmod 777 /home/me/longfilenames
sudo mount /home/me/.some.img /home/me/longfilenames

Mungkin ada segala macam masalah efisiensi dengan ini, tapi itu cukup untuk kasus saya di mana file hanya hasil pengujian yang dibuat secara berkala untuk keperluan lokal saya sendiri.

Rekan saya telah meletakkan gambar mereka di / tmp - data pengujian tidak terlalu rahasia: kami terutama ingin mengamankan kode sumber kami, bukan hasil pengujian kami.

android.weasel
sumber