🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

意見交換

クローズ

4回答

1564閲覧

ローカル間でのソケット通信のセキュリティについて

RC46

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

0グッド

3クリップ

投稿2024/05/24 21:30

0

3

テーマ、知りたいこと

ローカル間でのソケット通信にもセキュリティ対策(暗号化)が必要か?

背景、状況

ローカル間でのソケット通信を行っています
複数台のクライアント(ハンディーターミナル)からサーバーPC(DBはsqlite)に情報問合・返信するシステムを構築運用しています

コード自体はネット情報を元に非同期で動くサーバープログラムを組んでいます

※特段プログラム関連の教育を受けた訳でなく、自己学習で組んでいます

既に運用中ですが、今回、改良をしないといけない部分があり、作業を実施しています
ついでに他の部分でも修正しようかと思って勉強しています

その中で通信のセキュリティが何もしていないので対策をとった方がいいのかと思っています
現在、特段、暗号化などのセキュリティ対策はしていません

まだ勉強中ですが、通常、プロの方ならSSL通信などにするのが普通でしょうか?
ローカル間なら必要無いって感じでしょうか?

サーバーPC(DBはsqlite)といってもこれはインターネットには繋がっていますので
完全なクローズなネットワークではありません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答4

#1

maisumakun

総合スコア145957

投稿2024/05/24 22:50

編集2024/05/24 22:51

その中で通信のセキュリティが何もしていないので対策をとった方がいいのかと思っています

それは、どのような脅威への対策として考えているのでしょうか。

ローカルホスト同士であれば、通信はマシン外には出ません。逆に、ローカルマシンに侵入された場合には、通信経路以外(ローカルで動く両者のプログラムや、保存してあるファイル)への介入すら可能となります。

その状況で、「脅威への対策」として通信経路の暗号化を行ったところで、有意となるパターンはごく限られると考えます。

(もちろん、「いまはたまたまローカルだけど、運用方法によってはリモートにもなりうる」などの場合に暗号化しておくことは、将来的な意味を持ちます)

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

ikedas

総合スコア4443

投稿2024/05/25 00:19

「ローカル間」というのが「ローカルホスト内での通信」という意味なのか「ローカルネットワーク内での通信」という意味なのかわからないのですが、とりあえず両方を想定して回答します。


TLSなどの暗号化を何の目的に利用したいのかによるのではないでしょうか。

  • 通信内容が盗み読まれないという機密性 (confidentiality) を求めることは、ローカルホスト内の通信であればほぼ意味はないでしょう。ローカルネット内の通信でもあまり意味がないことが多いのではないでしょうか。
  • 通信内容が改竄されていないことを保証するという完全性 (integrity) は、ローカルホスト内の通信であれば必要ないでしょう。ローカルネット内の通信でも必要性は薄いと思われます。
  • 許可されたユーザやクライアントからのアクセスだけを認めるという真正性 (authenticity) には役立つと考えられます。つまり、暗号の秘密鍵を知っている主体だけと通信できるようになります。

上記のうち真正性 (「認証」と言ってもいいですが) は他の手段でも実現できるかもしれません。

  • ソケットがUnixドメインソケット (この場合はローカルホスト内の通信のみ可能です) なのであれば、ソケットファイルに特定のユーザやグループへのパーミッションを与えることでアクセスを制限できます。
  • 通信プロトコルにパスワード認証など他の認証機構を持たせることでもアクセス制限は可能です。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

otn

総合スコア85862

投稿2024/05/25 15:06

すでに指摘がありますが、「ローカル」というのは本来は「ネットワークを介さない」とう意味なので、同一OS内の通信を意味します。
(例:Q「通信が接続できない」⇒A「ファイアーウォールのせいかもしれないのでローカルで確認して」)

が、ローカルエリアネットワーク(LAN)という言葉の印象からか、「WANを介さない」という意味で使われることも増えてきましたので、どちらの意味であるのかを明確にする必要があります。まあ、「ローカル」という言葉を単独で使わないのが一番ですが。

サーバーPC(DBはsqlite)といってもこれはインターネットには繋がっていますので

とお書きですので、「WANを介さない(LAN内)」ですかね。
どういうリスク(どういう脅威)に備えるのか、その対策でどういうリスクが残るのかの検討無しにセキュリティー対策は出来ません。LANが有線のみなのか無線もありなのか、出入り制限のあるサーバールーム内に閉じているのか、オフィスなのかなどで、どういうリスクがあるのかが変わってくると思うので、まずそこからでしょうか。
「内部者の計画的な不正」というリスクに備えるのは難しいです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

nururi

総合スコア160

投稿2024/05/27 00:37

編集2024/05/27 00:38

ローカルというのがLANを指していると仮定しますが、通常無線LANは暗号化している筈で、カジュアルに抜き取るのは難しいので、既に運用中であれば特段手を入れるほどのことでもないでしょう。

新規で立ち上げるのであれば、そもそも本当に独自のソケット通信じゃないといけないのか?という点は考慮する余地があり、WebAPIサーバを建てて、HTTPやHTTPSでも利用した方が拡張性・汎用性が高いと思います。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問