暗号化とファイル名の長さ制限

普段、Linuxシステムを運用するときにファイル名の長さというのはあまり意識しないかもしれません。一般的なファイルシステム(例えばLinuxならext4など)では利用できるファイル名の最大長は255バイトです。その他のファイルシステムもほぼ同じです。それだけの長さがあればほとんど問題が起こることはないでしょう。ですから、ほとんどのシステムはファイル名の長さは255バイトまで使えることを前提に開発されています。

しかし、これは暗号化してない場合ということを念頭に置かなければなりません。

透過型の暗号化システムでは、いままでと同じように普通に読み書きできるのですが、ファイル名の最大長は短くなります。
例えばeCryptfsでの暗号化ではファイル名は以下のように暗号化されます。

ECRYPTFS_FNEK_ENCRYPTED.FYYc2.DBV1LG…(略)…peF72R6.eb2EY1
(eCryptfsのファイル名の暗号化の例)

この中には暗号化のメタ情報などが含まれるので実際に利用できるファイル名の長さは144バイトしかありません。これは割合にして暗号化する前の56%となり、システムによっては深刻な減少となります。もし、それ以上の長さのファイル名を持つファイルを作成しようとすると「File name too long(ファイル名が長すぎます)」というエラーになります。

これは長いファイル名を利用するシステムにおいては致命的です。LinuxではUTF-8で漢字のファイル名を扱いますので、極端に4バイト文字だけを使用した場合は36文字しか利用できません。また、システムによっては自動的に長いファイル名を作成する場合もあるでしょうから注意が必要です。

もし、システムの暗号化を検討される場合は、ファイル名の最大長を事前に十分に確認していただければと思います。