スノーデンの啓示を読んだ後、私たちは少し働くことにしました。 実装の経験、結果、ユーザーの反応について説明します。
ステップ1.登録なし
ユーザーがアカウントを持っていない場合、アカウントが破損したり盗まれたりすることはありません。 サイトの主な機能は、登録なしで利用できるはずです。 何らかの理由で一部のユーザーに登録が必要な場合、OAuthを最大限に使用します。 vkontakteでGoogleを同じパスワードで悩ませるのではなく、あなたに悩ませるようにします。 指示に従って数時間で完了します ( 多数あります )。
このステップの結果:より「ワンタイム」プロファイル。
ステップ2. SSLのみ、ハードコアのみ
総ログの時代では、ユーザーは、閲覧したページの種類、検索エンジンで探したもの、読んだ記事、残したフォーラムの投稿を誰かに知られたくないので、サイトを使用することを恐れます。 さまざまな (当社のような)コンテンツがある場合は特に重要です。 解決策は簡単です- 全員のhttpsをオンにします。
たとえば、 ここで無料の証明書を取得します 。
公式サイトから新しいnginxを取得し、設定を行い、設定を編集します。
設定例:
server { listen 80; listen 443 ssl; ssl_certificate _.pem; ssl_certificate_key _.key.decr; location /socket.io/ { proxy_pass :___signalmaster; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { # https if ($ssl_protocol = "") { rewrite ^ https://$server_name$request_uri? permanent; } proxy_pass http://rp_ups; } server_name rospravosudie.com www.rospravosudie.com; } upstream rp_ups { # - }
すべてが機能するかどうかを確認します。
アクセスプロトコルの表示とともにあなた(またはユーザー)が投稿したサードパーティのリソース、YouTubeビデオ、その他の画像は失われます。 これは非常に単純に扱われます-テキスト内のhttpをhttpsにオートコレクトします。 サードパーティのリソースが「SSLの方法がわからない」場合、写真は表示されなくなりますので、事前にキャッシュすることをお勧めします。 便利なヒントは、プロトコルを指定せずに//リンクを常に使用することです。デフォルトでは、ブラウザは現在のプロトコル(https)を使用してリンクを開こうとします。
また、統計カウンターコードを更新する必要があります-Google Analytics、Liveinternet、Yandex.Metricaはsslでうまく機能します。 Yandexや他のシステムについて、AdSenseコードに問題はありません-試していません。
検索エンジンによるインデックス付けに異常な結果はありません-以前のようにGoogleとYandexの両方のインデックス。
結果:プロバイダーは、訪問者が見ているコンテンツを見ることができません(プロバイダーだけでなく)。 上級ユーザーは静かに満足していますが、他のユーザーは何も気付きません。
注:サーバー負荷は、エラーのレベルでパーセント単位でわずかに増加します。
ステップ3.暗号化
ユーザーメッセージを保存しないと、盗まれることはありません。 読むことができない場合、ほとんどの攻撃者は読むことができません。
ユーザー間の通信の機密性を維持するために、クライアントに(ブラウザーで)p2p暗号化を実装し、暗号化されたテキストを保存しません(理想的には、直接実行する必要があります)。
チャットでは、RSAを使用してユーザー間のメッセージを暗号化します。 このために、たとえばcrypticoライブラリ( github.com/wwwtyro/cryptico githubにあります)を使用して、各通信セッションでキーを更新します。
チャットはnode.jsおよびsocket.ioで動作します(チャットの例はHabréにあります)。 シグナルサーバーは、nginxの背後に隠れています(新鮮なnginxはWebソケットをプロキシできます)。
副作用は、メッセージ履歴の不足です。 ユーザーが何を言っているかを知ることは不可能です。 メッセージはオンラインでのみ送信できます。
ステップ4. i2pでミラーを上げる
一部のユーザーは、(個人的な理由で)サイトにアクセスした事実を隠したい場合があります。 タスクを複雑にしないでください。
RuNetにはTORとI2Pのユーザーがほぼ同数(毎日15,000人から2万人)いますが、TORユーザーは自分で対処できます。
これは、指示(http://habrahabr.ru/post/158559/およびhabrahabr.ru/post/97996/ )に従って非常に迅速に行われます。
注:訪問者を誤って侵害しないように、「ミラーバージョン」コードから不要なjavascript、統計コード、他の人のサービスの呼び出し、写真などをすべて削除することを忘れないでください。 もちろん、I2Pユーザーごとにnoscriptをインストールする必要があります。また、外部サイトへのアクセスをブロックする必要がありますが、実践が示すように、逆の状況は非常に一般的です。
結果:これらの人々が誰なのか理解できませんか?
一般的に、 暗号化は簡単で快適です!
一般に、 Runetをもう少しプライベートゾーンにすることをお勧めします 。 DPIの実装、12時間のトラフィックストレージ、著作権の争いで試行錯誤のないロックアップの実装の最新の傾向を考慮すると、役に立つかもしれません(私はそうは思わない)。
プロフィールのサイトでチャットを試すことができます 。
PS建設的な妄想的な提案、批判、および「ホイルキャップの人々」からの質問は大歓迎です。
PPSクリプティコのより信頼性の高い類似物を知っているなら-コメントに書いてください。
更新しました。 無からの復活、驚かないでください:)
upd2。 削除されたコメントからの情報:
スタリウス :
ユーザーのプロファイルに「 torchat 」フィールドを入力して 、通信の暗号化を刺激するだけでなく(サイトはすでにこれを許可しています)、通信の事実をすべてのサイト(サイトを含む)から隠します。
symbix :
if($ ssl_protocol = ""){rewrite ^ https:// $ server_name $ request_uri? 永久; }
これは悪い方法です。 そうです-このようなもの:
サーバー{リッスン80; location / {return 301 rospravosudie.com $ uri $ is_args $ args; }}
ホスト名は、たとえばIPアドレスを入力するユーザーが赤いゴミを恐れないように、明示的に明示的に記述されています。 server_nameは常に適用できるわけではありません(この構成に適合することが保証されている場合は、使用することもできます)。
Hello1 :
301リダイレクトも正しい方法ではありません。 HSTSと組み合わせる必要があります。
add_header Strict-Transport-Security max-age = 31536000;
その後、最新のブラウザ自体が、サイトの内部リンクのすべてのhttpをhttpsに置き換えます。
ivlad :
RSA1024は現在の標準では十分ではありません。 RSA2048を使用する必要があります。 さらに、最新バージョンのTLSは使用せず、1.0(およびSSLv3)のみを使用します。 nginxとopensslをアップグレードする必要があります。
Lockal :
どのくらい繰り返すことができますか?特に暗号を理解している場合は、独自のアルゴリズムの発明を止めて見知らぬ人をやり直してください! これが、Crypticoにあるこのような真珠です。
if(navigator.appName == "Netscape" && navigator.appVersion <"5" && window.crypto){
実際、navigator.appVersion <"5"の場合、誰が通常のRNGエントロピープールを必要としますか? Firefox、Chrome、およびIEの最新バージョンのすべてのユーザーが、ミリ秒タイマーからサイクルによって生成されたエントロピープールを受信できるようにします。