Dropboxの有料プランを契約しているが、ストレージ容量がかなり余っている。
これをどのように有効活用しようか考えていたのだが、今までは自宅に設置したNASに保存していた過去の個人的なデータのバックアップ先として活用したいと思った。
しかし、長期にわたる個人的なデータがかなり含まれるので、プライバシー的にそのまま生の状態でオンラインストレージにアップロードするのは気が引ける。
というわけで、Cyberduckを利用してエンドツーエンド暗号化の環境を構築し、こちら側で完全に暗号化してからDropboxに送信してデータをバックアップすることにします。
■動作確認環境
Windows10 Pro バージョン1903
オンラインストレージのデータを自分で暗号化することの重要性
基本的に、DropboxやOneDrive、Googleドライブ等の有名なオンラインストレージでは、同期などの通信中はもちろん、保存しているデータに関しても当然のように強固な暗号アルゴリズムやプロトコルによって暗号化され保護されています。
しかし、重要なのは「暗号化を行ったのは誰で、誰がその暗号化されたデータを復号できるのか?」ということであり、ほとんどのメジャーな大手オンラインストレージサービスでは、「データの暗号化を行うのも、復号を行うのもオンラインストレージ側」という現状です。
暗号化の肝は「自分自身で暗号化し、自分以外は復号できない」という状況をつくり出すことであり、そこで「エンドツーエンド暗号化」というキーワードが重要になってきます。
エンドツーエンド暗号化とは、ユーザー側がデータを送信する前に自分しか知り得ない秘密鍵・パスフレーズやパスワード等でデータを暗号化し、自分以外の第三者(サービスの管理者を含む)は通信内容や保存したデータやファイルの中身が一切わからないようにする技術です。
万が一クラウドストレージのアカウント情報が洩れて勝手にログインされてデータを盗まれたとしても、エンドツーエンド暗号化をしてあれば、暗号化した自分以外は誰もデータを復号することが出来ません。
このエンドツーエンド暗号化を、CyberduckとCryptomatorというアプリを利用すれば簡単に実現することが出来ます。
CyberduckとCryptomatorについて
Cyberduck

Cyberduckとは各種サーバーやオンラインストレージと接続してファイルのやりとりをするためのオープンソースのアプリです。FTPS、SFTP(SSH)、WebDAV等のさまざまなプロトコルでデータを安全に送受信できます。MicrosoftストアやMac APP Storeからインストールすると有料ですが、デスクトップアプリは無料で利用できます。
Cryptomator

Cryptomatorはエンドツーエンド暗号化を実現するためにクライアント側でデータを暗号化・復号するためのオープンソースのアプリです。スマホアプリは有料ですが、PCのデスクトップアプリは無料で利用できます。(※スマホアプリは暗号化の部分のみオープンソースとなっています。)
Cryptomatorを利用すると、ファイル単位でファイルの中身(ファイルコンテンツ)がAES 256ビットで暗号化され、更にファイル名やファイルヘッダーも暗号化されることにより、元々がどんな名前のどんな拡張子(ファイルタイプ)だったかさえわからなくすることが出来ます。
【参考URL】Cryptomatorドキュメント(Architecture)
https://docs.cryptomator.org/en/latest/security/architecture/
今現在、CyberduckにCryptomatorが内蔵されており、CyberduckをインストールするとCryptomatorの機能も自動的に使えるようになります。
クラウドストレージと通信する際の流れ
【送信】
- Cyberduckが各種オンラインストレージのサーバーに接続
- Cryptomatorがデータを暗号化
- 暗号化されたデータを送信
【受信】
- Cyberduckが各種オンラインストレージのサーバーに接続
- 暗号化されたデータを受信
- Cryptomatorがデータを復号
Cryptomator単体ではなく、Cyberduckを利用することの利便性
通常のオンラインストレージを利用する際は、「PC(ローカル)にある専用フォルダに入れたファイルが、そのサービスが提供するアプリによりオンラインストレージに転送さて同期される」という流れになります。
しかし、Cyberduckの場合は、直接Cyberduckが独自でクラウドストレージのサーバーと通信してファイルを転送(送受信)します。
暗号化のみであればCryptomatorだけでエンドツーエンド暗号化が実現可能ですが、DropboxのスマートシンクやOneDriveのファイルオンデマンドなどの機能を有効利用するために、PC(ローカル)にある専用フォルダを介さずに直接クラウドストレージのサーバーと通信するCyberduckが非常に役に立ちます。
PCのエクスプローラーからフォルダ名やファイル名が確認できてファイルが存在しているように見えますが、実際の実データはPC内に存在せず、ファイルをクリックして開く際にその都度ダウンロードするという仕組みによりPCのストレージ使用量を節約します。
これにより、ノートパソコンのSSDは256GBしかないけれど、2TBのデータをクラウドストレージに預けておいて、いつでも好きな時にエクスプローラーから好きなファイルを利用できるといったことが可能になります。
それではCyberduckのインストールと設定を始めます。
Cyberduckのインストール
Cyberduckの公式サイト[ https://cyberduck.io/ ]を開き、右上の「Download」をクリックします。

ダウンロードページで「Cyberduck for Windows」をクリックします。

ダウンロードされたファイル(Cyberduck-Installer-[バージョン番号].exe)を実行します。

Windows Defender SmartScreenによる警告が出た場合は、「詳細情報」をクリックしてアプリ名と発行元を確認してます。

アプリ: Cyberduck-Installer-[バージョン番号].exe
発行元: iterate GmbH
となっていることを確認し、「実行」をクリックします。(※この警告は正常なアプリでもアップデート等で新しいバージョンが出た直後でまだインストールした人が少ない場合などに表示されることがあります。)

セットアップウィザードに従ってインストールしていきます。
「Install」をクリックします。(※「Options」をクリックするとインストール先を変更できます。)

インストールが始まります。

インストールが終了したら「Close」をクリックしてウィザードを閉じればCyberduckのインストールは完了です。

オンラインストレージへの接続設定
今回はDropboxで接続テストを行ってみます。
まず、Cyberduckを起動します。

Cyberduckが起動したら左上の「新規接続」をクリックします。

新規接続画面が開きます。

Dropboxを選択し、「接続」ボタンをクリックします。


ブラウザが開かれて、Dropboxの「APIリクエストの承認」というログイン画面が表示されますので、Dropboxのユーザー名とパスワードと二段階認証でログインします。(※既にブラウザでDropboxにログインしている場合はこのログイン画面は出ません。)

「CyberduckがDropbox内のファイルとフォルダへのアクセスをリクエストしています。」と表示されるので「許可」をクリックします。

OAuth 2.0のAuthorization Code(認可コード)が表示されますのでコピーします。

Cyberduckの「OAuth2 Authorization」に認証コードをペーストして「続ける」をクリックします。

Dropboxに接続され、Dropboxに保存してあるデータの覧が表示されました。

暗号化フォルダの作成
「アクション」をクリックし、メニューの「New Encrypted Vault」をクリックします。

作成する暗号化フォルダの名前とパスワードを入力して「作成」をクリックします。(※今回は「encrypted-folder」という名前のフォルダを作成しました。)

暗号化フォルダが作成されました。

作成した暗号化フォルダを開いてみます。
暗号化フォルダをダブルクリックで開こうとするとパスワードを聞かれますので、先ほど設定したパスワードを入力して「続ける」をクリックします。


暗号化フォルダが開きました。(まだ何もアップロードしていないのでフォルダの中身は空です。)

動作確認
暗号化フォルダの動作確認を行います。
アップロードとダウンロードのテスト
ドラッグ&ドロップでファイルをアップロードしてみます。

OKです。正常にアップロードできました。


ちなみに、先ほどアップロードしたファイルをエクスプローラーのDropboxフォルダから見ると、ランダムな文字列のファイル名になっています。

今度はドラッグ&ドロップでファイルのダウンロードのテストをします。

OKです。正常にダウンロードして即時に復号化されました。

ハッシュ値の確認
アップロード前とアップロード後、およびダウンロード後のファイルのそれぞれのハッシュ値の確認をしてみます。
https://onoredekaiketsu.com/check-files-hash-value-on-windows10/
■アップロード前のファイル
・ファイル名:image1.jpg
・ハッシュ値(SHA1):8e9154c133075977b1586431ac72eb6bbc66fdea
■暗号化されてアップロードされたファイル
・ファイル名:A3S4PCEUENKDYHTFWDDHONCVR364SOD64BQWWQAGNZOM3LDN
・ハッシュ値(SHA1):e6d870ad8996af3b93e4739c498fdf9054c57a72
■ダウンロードして復号されたファイル
・ファイル名:image1.jpg
・ハッシュ値(SHA1):8e9154c133075977b1586431ac72eb6bbc66fdea

「暗号化&アップロード」の前と「ダウンロード&復号」後のファイルのハッシュ値が同一なので問題ありません。ちゃんと「暗号化」⇒「復号」の処理ができています。
スマートシンクのテスト
スマートシンクを有効化してみます。

スマートシンクが有効になりました。


スマートシンク有効化状態でのアップロードのテストを行います。

アップロードOKです。

スマートシンク有効化状態でのダウンロードのテストを行います。

ダウンロードOKです。

スマートシンクが有効になっていても、ドラッグ&ドロップだけで暗号化済みファイルのアップロード、および暗号化されたファイルをダウンロードしてリアルタイムで復号が可能です。
ファイル名の変更テスト
ファイル名を変更したいファイルを右クリックして「名前を変更」をクリックします。

選択したファイルを移動しますか?聞いてくるので「名前を変更」をクリックします。(※たぶんサーバー側でmvコマンドを実行しているので移動と直訳されたのだと思います。)

ファイル名が変更されました。

2台のPCで同時にCyberduckを立ち上げて作業したらどうなるか?
2台のPCでCyberduckを同時利用するテストを行ってみます。
以下がテストの内容です。
- 2台のPCにCyberduckをインストールして同じDropboxアカウントに接続
- 双方のPCで暗号化済みフォルダを開く
- 片方(PC-①)で新規ファイルを暗号化してアップロード
- もう一方(PC-②)の挙動を観測
PC-①で新規ファイルをアップロードします。


PC-②の状態を確認します。


通常のDropbox利用時のように、複数デバイスで作業をした際にリアルタイムでファイル一覧の反映はしませんでしたが、「更新」ボタンをクリックすることでファイル一覧が最新の状態に反映します。
VeraCryptやBitLockerを利用した、オンラインストレージ上に作成した仮想ディスクイメージをマウントして仮想ディスク全体を暗号化する方法とは違い、Cyberduckでは一つ一つのファイルごとに暗号化と復号の処理をして個別にサーバーと直接的に送受信を行うので、複数デバイスで同時に作業をしていても排他処理等でのエラーや競合は起こりませんでした。
その他の基本的な操作方法
ブックマーク
一度接続したクラウドストレージは、メニューの「ブックマーク」⇒「新規ブックマーク」をクリックしてブックマークに登録しておきましょう。次に接続する際に便利です。

ブックマークへの登録を忘れてしまった場合は、メニューの「ブックマーク」⇒「履歴」で確認できます。
Cyberduckを終了するには
メニューの「ファイル」⇒「Exit」、または右上の「×」で閉じればOKです。
Cyberduckを終了すると最後に寄付のお願いが出ますが、このアプリに満足したら開発者に寄付を送ることによりもっと色々な便利な機能が追加されるかもしれません。

各種設定の変更
メニューの「編集」⇒「環境設定」で各種設定を変更できます。

OAuth 2.0のアクセストークンに関して
もしCyberduckを利用しなくなりPCから削除した際は、OAuth 2.0のアクセストークンも無効化しておきましょう。
DropboxのWeb版にログインし、アイコンをクリックしてメニューを開き「設定」をクリックします。

個人アカウント画面の「リンク済みアプリ」タブをクリックし、一番下までスクロールすると「Dropbox にアクセスできるアプリ」にCyberduckがいるので、これの「×」をクリックします。

Cyberduckとのリンクを解除するか聞いてくるので、「リンクを解除」をクリックすればアクセストークンが無効化されます。

まとめ
- オンラインストレージで「エンドツーエンド暗号化」をしたいならCyberduckが便利。(Cryptomatorが既に内蔵されている。)
- ドラッグ&ドロップで直感的に暗号化済みファイルのアップロードとダウンロードが可能。
- DropboxのスマートシンクやOneDriveのファイルオンデマンドにも対応。(ローカルのストレージ容量を圧迫しない。)
- 複数デバイスでの同時利用もOK(ファイル一覧を更新するには「更新」ボタンをクリックする。)
以上で解決です。