2

ここでスタンフォードのAESの実装を使用したいと思います。

http://crypto.stanford.edu/sjcl/

しかし、彼らが示唆するように私がそれを使うならば、それは本質的に役に立たない

SJCLは簡単に使用できます。sjcl.encrypt( "password"、 "data")を実行してデータを暗号化するか、sjcl.decrypt( "password"、 "encrypted-data")を実行するだけです。

誰でも簡単に私のサイトをロードできるので、Javaスクリプトを見て、パスワードを使用して、私と同じようにデータを復号化します。

このソリューションを便利にするにはどうすればよいですか?

4

1 に答える 1

1

もう少し前後して、私はあなたがあなたに答えを与えるのに十分よく知りたいことを理解していると思います。これがあなたが探していたものであるかどうか私に知らせてください。

一般に、対称鍵の管理は非常に困難です。対称暗号の主な用途は2つあります。

  • 同じ人が後で使用できるように、保存されたデータのプライバシーを保護します。オンラインバックアップサービスを使用する場合は、オンラインサービスにアップロードする前に、クライアントでデータが暗号化されることを強く望んでいます。クライアントがプレーンテキストでデータにアクセスできないようにする必要があります。しかし、将来データを復号化する場合は、キーを提供するのはあなたです。つまり、キーをオフラインメディア(CD-R、USBメモリスティック、SDカード、モニターの横にある小さなノートブック...)またはオンライン(ブラウザCookie、ある種のOS提供のキーチェーン、または標準ファイル)に保存できます。 ..)。

  • 2者間で転送中のデータのプライバシーを保護します。一方の当事者がデータを暗号化し、もう一方の当事者がデータを復号化します。これは、スパイが通信する方法、TLSがHTTPSクライアントからサーバーへのセキュリティを提供する方法、SSHがクライアントからサーバーへのセキュリティを提供する方法です。この場合、両方の当事者が使用される鍵に同意する必要があります。これは、Diffie-Hellman-Merkle Key Exchangeを使用するか、RSAなどの公開鍵暗号化アルゴリズムを使用して一方の当事者がランダムに暗号化できるようにすることで実行できます。相手側のみが復号化できる方法でセッションキーを生成しました。

見つけたライブラリは、最初のケースに合わせて高度に最適化されているように見えます。つまり、ユーザーがデータを暗号化して保存し、後で取得できるようにすることができます。パスワードベースの鍵導出関数を使用しているため、キーボードで入力するだけで利用できる貧弱なパスワードを処理する準備ができています。この関数を使用すると、人間がキーボードで入力できる(または入力する)ものからより安全な鍵を作成できます。 。

もちろん、 2番目のケースにも使用できますが、おそらく、クライアント証明書とサーバー証明書の両方を使用することを選択した場合にエンドツーエンドのセキュリティを提供できる完全なTLSサポートを備えたブラウザーでこれを使用しています。 。

ユーザーがソフトウェアを介して暗号化されたデータを保存できるようにすることを選択した場合は、復号化キーが保存されている場所を明確にする必要があります。ブラウザにCookieを保存してキーを保存するユースケースを見ることができたので、ユーザーはデータが必要なときにCookieを再入力する必要がありません。ただし、マシンやブラウザを変更した場合は、データを再度取得できるようにパスワードを知っている必要があります。

ただし、ユーザーが自分のデータが「安全」であると考える場合は、データを使用するたびにキーを再入力する必要があります。このように、ユーザーだけがキーのセキュリティに責任があります。Cookieデータ(またはローカルで実行されている悪意のあるコード)の公開を可能にするブラウザの欠陥は、単にディスクからキーを読み取ることはできません。

もちろん、これらすべての欠点は、簡単な答えがないことです。パスワードを保存するのが簡単、パスワードを保存しないのが安全かを判断する必要があります。

于 2012-05-13T00:03:06.863 に答える