flowyのセキュリティ

ファイル送信サービスの提供者として、ファイルの機密性確保(ファイルが流出しないこと)は最重要な責務であると私たちは考えています。
このページでは、ファイルの機密性確保のためにflowyが備えている仕組みについて説明します。
はじめに情報漏えいが発生する経路とその経路に対してflowyがとっている対策を概説し、その後に各対策の詳細を説明します。

情報漏えいの経路とその対策

1. アップロード・ダウンロード時の通信傍受

ファイルをアップロードしたりダウンロードしたりするときに、ネットワーク上を通るファイルのデータが傍受(盗聴)されてしまう可能性についてです。
ネットワークでの盗聴と聞いてもピンと来ない方もいらっしゃるかもしれませんが、たとえば喫茶店のWi-Fi通信を盗み見られたり、社内LANで通信内容を読み取られたりする事例は意外とよく聞くものです。

flowyでは、あらゆる通信をすべてSSLにより暗号化することで通信の傍受を防止しています。

2. ダウンロードURL連絡時の通信傍受

送信者から受信者にダウンロードURLを連絡する際に、ネットワーク上を通るダウンロードURLが傍受(盗聴)されてしまう可能性についてです。
前項の「アップロード・ダウンロード時の通信傍受」と似た面がありますが、こちらは連絡するのに送信者がどの経路を使うかによって危険性が大きく変わります。つまり、連絡経路のセキュリティが高ければ漏えいの危険性は低く、逆にセキュリティが低ければ漏えいの危険性は高くなるということです。

flowyでは、セキュリティの低い経路でダウンロードURLを連絡したい方のために、ダウンロードパスワードを設定する機能を用意しています。送信者から受信者へ、ダウンロードURLとは別にダウンロードパスワードを連絡することで、傍受の可能性を低減することができます。

3. ストレージへの不正アクセス

アップロードされたファイルはクラウド上のストレージに保管されますが、そのストレージ上のファイルに直接アクセスされてしまう可能性についてです。

flowyのストレージは基本的にflowyからしかアクセスできず、アップロードやダウンロードの際に一時的かつ限定的なアクセス権をユーザーに付与する仕組みになっていて、ストレージへのアクセスは非常に限定的です。また、ストレージへのアクセス権限はGoogleクラウドインフラのセキュリティフレームワークに則った形で構築されています。

4. 外部からダウンロードURLへの不正アクセス

本来ファイルをダウンロードできないはずの人が「たまたま」あるいは「なんとかして」正しいダウンロードURLを開いてしまう可能性についてです。
flowyでは、ダウンロードパスワードを設定した場合を除き、ダウンロード画面では無条件にファイルをダウンロードすることが出来ますので、正しいダウンロードURLを開くこととファイルへのアクセスは同義です。

flowyの「正しい」ダウンロードURLは、予測が困難でかつ「たまたま合致」する確率も天文学的に低くなるようにすることで、偶発的な不正アクセスを防止しています。さらに、正しいダウンロードURLを探してアクセスが繰り返されるようなケースに備えて「スキャンブロック機能」も持っています。

5. 内部流出

flowyの運営会社(ビビッドカラーズ株式会社)の社内から情報が流出する可能性についてです。昨今では、情報漏えいと聞くと、まずこの経路をイメージする方も多いのではないでしょうか。

flowyでは、皆様からお預かりしたファイルはAES256で暗号化してGoogleのクラウドストレージに保管しています。その際、暗号キー(パスワード)は毎回違うものを用い、これをflowyのサーバーには伝達せずに、ダウンロードURLにのみ埋め込みます。これにより、「暗号化されたファイルを復号できるのは、正しいダウンロードURLを知っている人だけ」という状況を作り出しています(※)。ファイルが運営会社の内部から流出することは、原理的にあり得ません。

※一部のブラウザではこの機能を実現できないため、状況に応じて暗号キーが運営会社からアクセスできる場所に伝達されることがあります。詳細はこちらをご参照ください。

SSL暗号化通信

flowyでは、すべての通信をSSLで暗号化しています。

DLパスワードの設定機能

状況により、ダウンロードURLを安全な経路で連絡するのが難しいことがあります。
たとえば電子メールですが、電子メールは一般に機密性の高さを保証することができませんので、安全性は低いとみなすのが通常です。ですが、電話や郵便はビジネス上好ましくなく、電子メールでダウンロードURLを送らざるを得ないケースは往々にしてあります。

そのような場合、flowyではDLパスワード(ダウンロードパスワード)を設定することができます。
DLパスワードを設定すると、ファイルの受信者は、ファイルをダウンロードする前に正しいパスワードを入力しなければならなくなります。
送信者はDLパスワードをダウンロードURLとは別に伝達することになりますが、これにより、伝達の安全性を高めることができます。

また、この機能ではパスワードを自動生成することもでき、パスワード運用の手間を低減しています。生成されるパスワードは大文字・小文字・数字・記号から構成される8文字となっていて、充分なセキュリティレベルを確保しています。

なお、この機能はパスワードを複数回間違えた場合にはアクセスを拒否するロック機構を備えています。
また、設定したパスワードはflowyのサーバに伝達されますが、パスワードはハッシュ化されて記録されるので原文が漏えいすることはありません。

ストレージへの直接アクセス対策

flowyにアップロードされたファイルはGoogleのクラウドストレージに保管されます。
このストレージは通常はflowyの運営会社だけがアクセスできるようになっていて、アップロード時・ダウンロード時にのみ、特定の利用者に対して必要なファイルに限定したアクセス権を付与する仕組みになっています。
この仕組みにより、アップロードの際にはアップロードを行っている利用者だけが、ダウンロードの際には正しいダウンロードURLにアクセスした利用者だけがファイルにアクセスできます。

これは「署名付きURL」という一般的な手法で、flowyの場合はGoogleのクラウドインフラが提供する同手法の上に成り立っています。
これに限らずシステムのあらゆる箇所で、flowyはGoogleクラウドインフラが提唱するセキュリティフレームワークに則ってシステムを構築しています。

推測困難なダウンロードURLとスキャンブロック機能

flowyのダウンロードURLは2つのパラメータから構成されています。
1つ目はファイル送信のIDで、これは広範囲で均一に分散されたランダムな数字です。
2つ目はランダムに生成された32文字以上の文字列で、これは後述の「プライベート暗号化」の暗号キー(パスワード)です。
この2つのパラメータが正しくないと受信者はファイルをダウンロードすることが出来ません。
flowyのダウンロードURLは、世間でよく使われる暗号方式であるAES256よりも強固です。

ダウンロードURLが推測困難とは言え、flowyはインターネット上に公開されているサービスですので、継続的な攻撃(総当たり攻撃)にさらされる可能性があります。
これに対抗するため、flowyは、ダウンロードURLのスキャンを検出しこれをブロックする「スキャンブロック機能」を備えています。

プライベート暗号化

プライベート暗号化の概念図

Googleのクラウドストレージに保存されたファイルは必ずAES256方式で暗号化されますが、通常であればストレージの利用者(flowyの運営会社がこれに当たります)はこれを復号することができます。
flowyの「プライベート暗号化」は、flowyの運営会社は復号できず、ダウンロードURLを知っている利用者だけがファイルを復号できるようにする技術です。
万が一、アップロードされたファイルがflowyの運営会社から流出するようなことがあっても、ファイルを取得した者がそれを復号して開くことは原理的に不可能です。これにより、flowyのセキュリティは飛躍的に高くなっています。

なお、これにより、クラウドストレージにファイルを保管している間に、ウイルスが混入したりファイルの中身が改変されるといった事故も起こり得ないことになります。

技術的な詳細

Googleのクラウドストレージには「顧客指定の暗号鍵の使用」という機能があり、これは顧客(flowy)が指定した暗号キーを用いてGoogleにてファイルを暗号化して保存するものです。
「プライベート暗号化」技術ではこの機能を使いますが、重要なことは「flowyのフロントエンドプログラム(ブラウザ上で動くjavascript)がflowyのサーバーを経由せずにGoogleのクラウドストレージと直接ファイルをアップロード・ダウンロードする」ということです。
これにより、フロントエンドプログラムが生成した暗号キーを、flowyのサーバーを経由せずに、Googleに伝達することができます。
こうして、フロントエンドプログラムは、生成した暗号キーをファイルの暗号化・復号に使い、またダウンロードURLにその一部として提供し、そしてそれ以外には伝達せずに破棄することが可能になり、ダウンロードURLを知っている人だけがファイルを復号できる(※1)という状態が実現されます。

※1 暗号キーはGoogleにも伝達され、Googleはファイルを復号することが出来ます。ただし、「顧客指定の暗号鍵の使用」ページに記載があるように、Googleは暗号キーを永続的に保存しないことを明言しています。

Internet Explorer 11の特別対応について

「プライベート暗号化」を実現するために、flowyではブラウザの比較的新しい機能であるService Workerを使っています。
ところが現在国内でよく使われているブラウザのうちIE11(Internet Explorer 11)だけはこのService Workerに対応していません。
そこでflowyでは、ブラウザがIE11の場合にはCloudflareのWorkersという機能を使ってService Workerを代替しています。
この場合、CloudflareのWorkerはブラウザとGoogleクラウドストレージの中間に位置するプロキシーのように振る舞い、暗号キーがCloudflareのアクセスログに記録される(※2)ようになります。
「プライベート暗号化」に重きを置く方は、IE11でflowyを使わないようお願いします。Microsoft Edgeであれば、これはService Workerに対応しているので大丈夫です。iOS Safariも最新版なら大丈夫です。

※2 Cloudflareのブログに記載のあるように、CloudflareではEnterpriseプランのオプション機能としてのみ、利用者にアクセスログが提供されます。flowyはEnterpriseプランには契約していませんので私たちはアクセスログを閲覧できないのですが、それを第三者が確認することは出来ないようです。

フロントエンドプログラムのソース公開について

私たちは「プライベート暗号化」技術を、皆様に安心してご利用いただくためのキーファクターであると位置付けています。
ただ、残念なことに「フロントエンドプログラムが暗号キーを伝達するのはGoogleクラウドストレージとダウンロードURLだけ」という重要な事実を客観的な立場から確認するのは困難です。
この状況を鑑みて、私たちはフロントエンドプログラムのソースコードを公開することに決めました。

フロントエンドプログラムのソースコードは、どなたでもご覧いただくことができます。ITエンジニアでないと難しいかと思いますが、ソースコードを読むことで、「プライベート暗号化」が確かに実行されていることをご確認いただけます。
また、公開されているソースコードとブラウザにロードされるプログラムが同一のものであることもご確認いただけます。

vividcolors/flowy-fe on GitHub

包括的なセキュリティでファイルを保護。
flowyなら、ファイルと一緒に「安心」も届けられます。

\会員登録不要、利用料無料/ flowyでファイルを送信する