IDとパスワード以上にセキュアに保存する方法はありますか?
InfiniCLOUDの経路はSSLで暗号化され、IDとパスワードは、暗号化された経路を用いてサーバーと接続されます。
サーバー内のパスワードデータベースは、OSのもつ一方向関数(ハッシュ化)により暗号化されているため、一定の強度は存在します。
ただしユーザーIDは、公開機能などを使って人と交換することがあったり、TwitterなどのメジャーなSNSと同じにしたり、よく知られた名前になることが多くあります。
そのため実際は、パスワードの強度のみに頼る状態になってしまうため、保存するデータを保護するのに十分ではないと考えられるケースも数多く存在します。
一般的には、データを暗号化を行うにあたり次の3つの方法が考えられます。
※ただし様々な理由で、結果的にInfiniCLOUDで利用できる方法は(3)のみとなります。
パスワードは大文字、小文字、数字、記号を組み合わせ、複雑で推測しづらいものにしてください。
(1) お客様が入力したパスワードをサーバーに渡し、それを元にサーバーに保存した鍵を暗号化する方法
この方法は、データの暗号化・復号化用の鍵をサーバー上に保存する方法です。
パスワードは定期的(お客様が必要と考えたタイミング)に変更されるものですし、鍵として使うには強度が低すぎるため、パスワードそのものでデータを暗号化するのではなく、ランダムで生成された鍵でデータを暗号化・復号化し、さらにその鍵をお客様のパスワードで暗号化してサーバーに保存します。
この方式では、暗号化されたデータはクライアントから送られたパスワードで「サーバ側に保存された鍵を復号化」し、その鍵を使ってデータを復号化しますので、お客様がパスワードを変更した際にも、サーバーに保存しているデータを再暗号化する必要がありません。
ただしこの方法には以下のような問題が考えられます。
- お客様が入力する数文字~十数文字程度の英数字・記号で構成されたパスワードで「鍵自体を復号化」できてしまうため、十分な強度とは言えないこと
- お客様のパスワードで暗号化したとはいえ、サーバーに復号化用の鍵が保存されていること
- パスワードが漏洩してしまった場合は対応ができず、また、パスワード漏洩が可能性として一番高いこと
したがって、この方式ではお客様が設定したパスワードの強度にのみに頼っている状態に変化がなく、何らかの事故で暗号化された鍵とデータが漏洩してしまうと、データは復号化されてしまいます。
また、InfiniCLOUDで多くご利用いただいている「共有機能」とは相性が悪く、パスワードなしの共有フォルダを作る際に共有データの複合処理が行われるため、そのフォルダのサイズによっては、関係するユーザーが操作できなくなる時間が発生することになります。
※InfiniCLOUDでは、データの破損を防ぐため処理を一つ一つ順番に行います。暗号化・復号化の処理は重い処理となるため、ユーザーが操作できない時間が発生します。
(2) 鍵ファイルを毎回送信する方法
この方法は(1)の方法と異なり、クライアントで生成した鍵をサーバーに送る方法です。
先述の通り、経路はSSLで暗号化されているため鍵の送信自体は堅牢になりますが、独自のプロトコルを利用することになるため標準的なクライアントソフトは使うことができず、ウェブブラウザーからのアクセスのみとなってしまいます。
InfiniCLOUDでは、できるだけ標準的なクライアントソフトでご利用いただけることを重視しているため、堅牢ではありますが、本サービスとは相性が悪い方式となります。
(3) 暗号化エンジンをクライアントに持ち、暗号化データをそのまま送信する方法
この方法は(2)に加えて、さらに暗号化エンジンをお客様コンピューター側で持つことで、暗号化されたデータのみをサーバーに保存する方法です。
この方法のメリットは、何らかの事故(パスワードが漏洩するなど)でデータが漏洩してしまっても、そのデータが何を含んでいるかもわからず、暗号化されたデータであると判明しても、複合化はほぼ不可能に近いことが挙げられます。
また、ファイル単位ではなくボリューム単位の暗号化を行えば、そこにどのようなファイルが入っているかもわかりません。
上記に加え、共有したいファイルだけ別途アップロードすることもできるため、堅牢性と利便性を比較的保つことが可能となります。
結果として、InfiniCLOUDでできる方法は、(3)のみとなります(2019年6月現在)。
お客様コンピューター側で暗号化する方法には様々なものがありますが、例として「VeraCrypt」のようなソフトウェアが挙げられます。
2019年6月25日 更新