あなたのシステムは非常に安全ではありませんが、私はあなたや誰かがこのようなもので遊んでいるのを思いとどまらせようとはしていません。続行する必要があります。ただし、作成したものはすべて「おもちゃ」のシステムであり、「安全」と見なしたり宣伝したりしてはならないものと見なすことが重要です。
セキュリティの質問を2つの部分に分けてみましょう。
- 鍵交換はどの程度安全ですか?
- 共有キーを取得した後、使用する暗号化はどの程度安全ですか?
(2)が最も簡単なので、最初に答えさせてください。何年にもわたってTLSに取り組み、研究してきたすべての人々よりも賢くない限り、それはひどく安全ではありません。バージョン1.2より前のTLS(ほとんどのサイトでは使用されていません)は、原則として選択暗号文攻撃(CCA)に対して脆弱であり、暗号スーツの選択に応じて実際にはBEAST攻撃に対して脆弱です。そしてSSL2.0はもっとひどく壊れています。
重要なのは、何年にもわたってこれらのプロトコルに取り組んでいる非常に賢い人々が、いくつかの間違いを犯したということです。あなたが私自身でこの種のことに取り組んでいると信じる理由はたくさんありますが、大きな間違いを犯します。基本的な暗号化アルゴリズムは問題ありません。彼らは壊れていません。しかし、プロトコルはそうです。
したがって、SSLの詳細のすべて、なぜそこにあるのか、場合によってはどのように間違っているのかをすべて研究して完全に理解していない場合は、考案したプロトコルがひどいものになることはほぼ間違いありません。
次に質問(2)します。これには2つの問題があります。(a)Diffie-Hellmanは、おそらく必要な種類のセキュリティを提供するようには設計されていません。(b)DHを正しく実装したとは思いません。
2.a:
Diffie-Hellman鍵交換は、正しく行われると、鍵交換に対して安全ですが、認証には何もしません。これが、「安全か」という質問がしばしば間違った質問である理由です。一部の目的では安全ですが、他の目的では設計されていないため、他の目的では非常に安全ではありません。
Josh3737が指摘したように、クライアントとサーバーが適切な相手と話していることを知る方法はありません。サムがサーバーでチャーリーがクライアントの場合、マロリーがサムになりすました独自のサーバーをセットアップするのを妨げるものは何もありません。したがって、キャシーは、サムと話していると思って、マロリーとの鍵交換を行うことができます。マロリーは、サムと話すときにチャーリーのふりをすることができます。
このように設定すると、マロリーはサムとチャーリーの中間者として機能できます。チャーリーがサム宛てのデータを送信すると、マロリーはCとMの間の共有キーを使用してデータを復号化し、読み取り(場合によっては変更)してから、MとSの間の共有キーを再暗号化してSに送信します。 。
認証の問題を解決するには、ある種の公開鍵インフラストラクチャ(PKI)が必要であり、これらは本当に苦痛です。SSL / TLSで使用している認証局などのシステムには問題がありますが、それでも最高のシステムです。
2.b:
512ビットの公開モジュラスと512ビットの秘密鍵は十分に強力ではありません。DHキーは大きくする必要があります。2048ビット未満のものは使いません。5年後に誰かが今日の秘密を破ることができることを心配していない1024ビットで逃げることができるかもしれません。
素数がどのように選択されたかについて十分な情報を提供していませんでした。すべてのプライムが機能するわけではありません。モジュラスには「安全素数」を使用する必要があります。そうしないと、攻撃者が離散対数を計算するためのショートカットを利用できます。