暗号化によってプロトコルを保護できますか?
-
07-07-2019 - |
質問
これは私がずっと学びたかったことです。複数のコンポーネントが相互に通信するシステム(ソフトウェアまたはハードウェア)を設計するとき、基本的なセキュリティのためにプロトコルに単純な暗号化またはその他の機能を実装するにはどうすればよいですか?
プロトコルを変更できます。送信/受信される一連のバイトまでの低レベルのアクセスがあるためです。
編集:埋め込みプログラミングに興味があります。プロトコルセキュリティのためのシンプルな有線暗号化です。
解決
「基本的なセキュリティ」と言いますしかし、それはあまり意味がありません。あなたの脅威モデルは何ですか?どのような攻撃に対して防御していますか?クレジットカードデータを送信する場合は、RSAなどの堅牢な暗号化を使用する必要があります。しかし、「少ない」を必要とする例は考えられません。保護。ハッカーがコードを分解することを心配しているなら、それはすでにゲームオーバーです-それが面白いか価値があるなら、彼らはそれをハッキングします。そうでない場合は、実装に時間を無駄にします。
他のヒント
これまでで最も簡単な解決策は、通常のHTTPS / FTPSスタイルの代わりにSSLソケットを使用することです。
HTTPとHTTPSのプロトコルにまったく違いはありません。唯一の違いは、異なるポート(通常80と443)で動作することです。1つは通常のソケットを使用し、もう1つはSSL暗号化ソケットを使用します。
OAuth は、さまざまなAPI間のアクセス制御を許可するために興味深い場合があります。
純粋に暗号化されたデータのチャネルが必要な場合は、プロトコルの上に重ねるだけの方が良いでしょう。 SSLまたはSSHを使用します。
組み込みプログラミングを行う場合、暗号化の問題はどこにありますか?
たとえば、同じプロセッサを使用している限り、暗号化は役に立ちません。
デバイスのプロセッサ間で懸念がある場合、暗号化は困難になる可能性があります。dspには、複雑な暗号化のためのスペアスペースが必ずしもないためです。
高速にしたい場合は、対称アルゴリズムが最善の策であり、BlowfishやIDEAなど、それを行うことができる多くの方法があります。一意の対称キーを保存できるため、デバイスを分解できる場合、1つのキーのみが検出されますが、各デバイスには独自のキーが必要です。
各キーをシリアル番号につなぐだけで、サーバーと通信している場合、パケットでシリアル番号を渡すと、ウェブサーバーは正しい対称キーを検索して、すばやく復号化できます。
高速ハードウェア暗号化を行いたい場合、私のMSEE論文のために、任意の順序計算を使用する暗号化ファミリを開発しました。処理は行われず、アンテナの直前に接続され、アンテナを通過するすべてのものが暗号化されます。
安全なシステムを設計する際に考慮すべき多くのことがあります。ほんの数例を挙げると:
- 対称/非対称暗号化スキームの選択
- 暗号化アルゴリズム(AES、Blowfish、DES)
- 既知のプロトコル(SSLなど)の選択
- 鍵の管理と配布
- 単一のマスターキー(ハッキングされた場合、システム全体が危険にさらされる)
- デバイスごとのキー(キーの配布はより困難な場合があります)
- 主要な流通チャネルの保護
- 潜在的なハッカーはサンプルデバイスに簡単にアクセスできますか?例えば。 X-boxなどの消費者向け製品と電話交換でロックされたボックス。ハッカーが物理的にアクセスできる場合、ハッキングに対する保護は難しくなります。
- 人的要因—ソーシャルエンジニアリングなど
- システムは、その最も弱いリンクと同じくらい安全です。
初心者向けに Bruce Schneierの資料を読むことをお勧めします。
OAuthは間違いなく考慮事項です。それに加えて、 WS-Security を検討することもできます。 Webサービスを介して送信することにより、プラットフォームと言語にとらわれないすべてを維持し、WS-Securityを追加すると、暗号化と復号化がアプリケーション層(エンドツーエンド)で行われます。したがって、メッセージが送信者を離れると安全であると信頼している限り、クライアントが実際にメッセージを受信するまでメッセージが安全であることがわかります(これは、サーバーによって解読されず、クライアントに渡されることを意味します) / receiver、ただし受信側アプリケーションにメッセージが送信された後)。
したがって、基本的には、OAuthでさまざまなアプリケーションを保護/認証し、WS-Securityでアプリケーション間でやり取りされるメッセージを保護します。