rcloneの懸念点の一つにリモート接続ができなくなりマウントやコピーなどができなくなった場合にどうするかと言う事
今回はそんな緊急事態に暗号化ファイルをローカルで復号化する方法を書く
クラウドの暗号化ファイルをローカルに保存
クラウドストレージには暗号化ファイル自体は残っているはずなのでこれらを直接PCなどのローカルドライブに保存
まあ方法はブラウザかアプリになるだろう
復号化ファイルのコピー先ドライブも必要になるのを忘れずに
お目当てのファイルだけを復号化したい?ならリスト化がおすすめ
暗号化ファイルを全て復号化するのは骨が折れるので重要なファイルだけ先に保存し直したいなら事前に暗号化名と復号化名をリストを作成できる
rclone lsf remote: --format "pste" --separator " " --recursive > filelist.txt
※lsfコマンドのオプション --format を指定することで復号化名を出力
“pste” は p=ファイルパス s=サイズ t=更新日時 e=暗号化名 となっている--separator は各項目の区切り文字で上記例ではタブ空白--recursive は指定したパス以降のファイル・フォルダを全て再帰的に取得する
このリスト出力コマンドを事前に実行しテキストファイルを控えておくともしものときに暗号化ファイルを特定しやすくなる
ローカル復号化用のrclone設定を追加
rcloneの仕様としてconfファイルには暗号化ファイルを置くフォルダを明示する必要がある
rclone confコマンドからも設定は可能だがpasswordなどをコピーする都合上confファイルを直接編集したほうが早いので以下記述例
[localcrypt]
type = crypt
remote = Z:\DL\crypt
password = <リモート側と同じ物を使用>
password2 = < 〃 >
filename_encryption = standard
directory_name_encryption = true
# filename_encryption = obfuscate
# filename_encoding = base64
※remote = の部分にローカルのフォルダパスを指定
passwordはもちろん暗号化に使用したリモートのものと同じ
その他ファイル名暗号化の有無やエンコーディング法式も同じ設定に
行頭に # を付加することでその行はコメント扱いになる
指定したローカルフォルダをマウントして復号化
上述の設定で指定したフォルダに暗号化ファイルを置くことでマウントドライブ側から復号化されたファイルが閲覧できるようになるはず
通常のマウントと同じようにマウントコマンドを打てば良い
rclone mount localcrypt: Y:
Y: のドライブから復号化ファイルが見れるのでこれを保存したいフォルダにコピーすれば復号化されたものが保存できる
マウント時に復号化エラーが出る場合は設定がおかしい場合が多いが・・・
復号化エラーが出る場合は設定がおかしい場合が多い
passwordはともかくfilename_encryptionやfilename_encodingも確認
あと復号化だからと type = crypt を省いて設定してもだめだよw
注意:もっと単純に復号化できない理由それはファイル名の字数制限!
rcloneに限らずファイル名暗号化にはbase32などの英数字エンコードが使われる仕様上ファイル名が長くなりがちなのだが
特に日本語を含むファイル名の場合は暗号化で下手すると3倍程度の字数になる
Windowsの字数制限は255文字程度なのだがこれは半角全角に関わらずだけど
暗号化で日本語を英数字に置き換えるとなると簡単にこの制限を突破するのだ
※しかも字数制限を突破しても何等エラーが出ずにリモート側で保存できてしまう場合が多い
ファイル名の字数制限を突破すると何が問題なの?
ファイル名文字数が長いとどうなるかというとブラウザなどで暗号化ファイルを保存する時に保存ファイル名の字数が255文字以下になるように切り詰められる
そうなるとrcloneで復号化する時にファイルが認識されずエラーが出る
ローカル保存後に正しいファイル名にリネームすれば良いのでは?
ローカル保存後に255文字以上でリネームする方法を色々探したのだけれどどううやら現状存在しない模様
つまりうっかり255文字以上のファイル名で保存してしまったらローカルには正しく保存することはできなくなってしまうのだ
rcloneでは暗号化ファイル名も復号化に必要な要素の一部である
つまり正しいファイル名で暗号化ファイルを保存できない限り復号化することは不可能である
これはcppcryptfsのように別のファイルの暗号化名を割り当てて無理やり復号化したりなどの裏技もできない(セキュリティ面では◎)
ちなみに文字エンコードをbase64にすると約20%程度短縮することができるがそれでも全然足りない
※リモートがファイル名の大小文字の英字を別名として認識するか要確認!
対策:短いファイル名にするか filename_encryption = obfuscate を使用
字数制限を何とかするには転送前にファイル名を短くリネームするのが最良
と言っても暗号化後の文字数がわからないので大体日本語だと60~80文字程度が安全な範囲かなと思う
リネームするのがいやなら filename_encryption = obfuscate を使うのも有り
obfuscate はファイル名暗号化ではなく飽くまで難読化なので注意
obfuscate を使えばファイル名字数自体は変わらないので制限には引っかからないが注意点もある
obfuscate は難読化という意味らしいが内容的にはシーザー暗号化に近い文字の順序を入れ替えただけのような割と単純なものなので解読は容易
※IBMの文字をずらしてHALにするのを更に複雑化させたような感じ
ただファイル名でクローリングなどをすることはできなくなるのである程度は効果はあるんじゃないかなと思う






コメントを残す