アプリケーション間のメッセージング層として zeromq を使用することを検討しています。少なくとも場合によっては、通信を安全にしたいので、SSL について考えています。
zeromq を ssl で有効にする標準的な方法はありますか? 私が理解している限り、そのままではサポートされていません。
ソケットに接続するときにパラメーターがあればいいのですが (bool: useSsl) :)
何か案は?
これは実際にはあなたの質問に対する答えではないことを理解して、メッセージを 0mq で送信する前に RSA で直接暗号化します。
完全にテストされ、選択したプラットフォームで実装されている、より統合された暗号化方法がない場合、それが私が行っていることです. 0mq は最近、暗号化が組み込まれたバージョン 4 をリリースしましたが、まだ実験的なものと見なされており、言語バインディングによって完全にはサポートされていません。
接続ではなくメッセージを暗号化することは、最も簡単なアップグレード パスを提供するように思われます。現在の暗号化をどのように実装する必要があるかを考えると、私たちの目的との違いはセマンティクスにすぎません。
編集:これを書いたときよりも暗号化についてよく知っています.RSAはメッセージデータを暗号化するための適切な選択ではありません. キーを手動で共有するか (これは短期的なアプローチです)、AES を使用するか、Jim Miller の回答のようにキー共有スキームを実装します... ただし、後者のアプローチを採用し、キー共有スキームを安全に設計および実装する場合は注意してくださいは難しい。あなたが思っているよりずっと難しい。SSL/TLS を (メッセージ BIO を使用して) 直接実装することも、他の人が実装したこともあります。これも単純ではありませんが、少なくとも SSL スキームが業界標準であり、したがって最低限のセキュリティ要件を満たしていることを知っています。
要するに、ZMQ 4 に焼き付けられた楕円曲線暗号が信頼できると見なされ、標準になる前に、「受け入れられた解決策」は、接続を介して SSL/TLS を手動で実装することであり、それが失敗した場合は、安全なキー共有で AES 128 または 256 を使用します。メカニズム (キー共有は、RSA が適切に使用される場所です)。
現在、0mq を使用して事前共有鍵ソリューションを実装しています。これは、TLS/SSL に大まかに基づいた鍵交換プロトコルを実装しています。
基本的に、マルチキャスト 0mq パブリッシャーを介して暗号化された健康データの状態を公開するデータ アグリゲーター サービスがあります。対称キー (AES128) を使用してデータを暗号化し、0mq を介したより単純な要求/応答モデルとして実行されている 2 番目のサービスから取得できます。
対称キー (PSK) を取得するために、次のプロトコルを実装しています。
クライアントが PSK を取得すると、マルチキャストで取得したメッセージを復号化できます。
また、マルチキャスト サービスで 2 つのエンベロープ キーを使用するセッション期限切れアルゴリズムの実装も検討しています。1 つのキーは現在のセッション キーで、2 つ目は期限切れの古いキーです。こうすることで、クライアントは、新しいキーを取得する前に暗号化されたメッセージをバッファリングする必要なく、新しいキーを取得するための時間が少し増えます。
zeromq.orgによると、まだサポートされていませんが、調査中です。Google SummerofCodeのプロジェクトとして提案されているようです。