GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Network-Security.html ・ emacs-doc.conao3.com

38 ネットワークセキュリティ

Emacsがネットワーク接続を確立するたびに、その接続をNetwork Security Manager (NSM) に渡します。NSMは、ユーザーが管理するネットワークセキュリティの適用を担います。現在は、トランスポート層セキュリティ (TLS) 機能を用いてこれが実現されています。

network-security-level 変数は、NSM が適用するセキュリティレベルを決定します。値が low の場合、セキュリティチェックは行われません。これは推奨されず、実質的にネットワーク接続が信頼できないことを意味します。ただし、ネットワークの問題をテストする場合など、限定的な状況ではこの設定が有用な場合があります。

この変数が medium(デフォルト値)の場合、複数のチェックが実行されます。その結果、NSM がネットワーク接続の信頼性に疑問があると判断した場合、その旨を通知し、ネットワーク接続に対してどのような対応を取るべきかを尋ねます。

未検証の接続に対して、恒久的なセキュリティ例外を登録するか、一時的な例外を設定するか、あるいは接続を完全に拒否するかを選択できます。

基本的な証明書の正当性チェックに加え、いくつかのTLSアルゴリズムチェックが利用可能です。以前は安全と考えられていた一部の暗号化技術に脆弱性があることが判明したため、Emacsでは(デフォルトで)こうした問題の一部について警告を表示します。

プロトコルネットワークのチェックは、network-security-protocol-checks変数で制御されます。

各関連付けの第1要素がチェック名、第2要素がそのチェックを適用すべきセキュリティレベルとなるリストです。

(rc4 medium) のような要素がある場合、関数 nsm-protocol-check--rc4 は (nsm-protocol-check--rc4 host port status settings) のように呼び出されます。この関数は、接続を進める場合は non-nil を、そうでない場合は nil を返す必要があります。

以下は、デフォルトの medium レベルで実施されたチェックの一覧です。

TLS証明書の検証ができません

接続がTLS、SSL、またはSTARTTLS接続である場合、NSMは、接続先サーバーの身元を立証するために使用される証明書が検証可能かどうかを確認します。

無効な証明書は懸念材料となることが多いですが(中間者攻撃によってネットワーク接続を乗っ取られ、パスワードを盗まれる可能性があります)、それでも接続を続行すべき正当な理由がある場合もあります。例えば、サーバーが自己署名証明書を使用していたり、証明書の有効期限が切れていたりする場合などです。接続を続行しても差し支えないかの判断は、ご自身に委ねられています。

自己署名証明書が変更されました

以前に自己署名証明書を受理していたものの、現在それが変更されている場合、サーバーが証明書を変更しただけである可能性もありますが、ネットワーク接続が乗っ取られた可能性もあります。

以前は暗号化されていた接続が、現在は暗号化されていない

接続が暗号化されていないものの、以前のセッションでは暗号化されていた場合、クライアントとサーバーの間にSTARTTLS通知を除去するプロキシが存在し、接続が暗号化されていない状態になっている可能性があります。これは通常、非常に不審な状況です。

パスワード送信時に暗号化されていないサービスと通信すること

IMAPまたはPOP3サーバーに接続する場合、これらの接続ではパスワードを送信することが一般的であるため、通常は暗号化する必要があります。同様に、パスワードを必要とするSMTP経由でメールを送信する場合も、通常はその接続を暗号化することが望ましいです。接続が暗号化されていない場合、NSMが警告を表示します。

ディフィー・ヘルマン低素数ビット

公開鍵交換を行う際、チャネルが第三者に盗聴されないことを確実にするため、素数ビット数は十分に多く設定する必要があります。この数値が低すぎる場合、Emacsが警告を表示します。(これはnetwork-security-protocol-checksにおけるdiffie-hellman-prime-bitsのチェックです)。

RC4ストリーム暗号

RC4ストリーム暗号は品質が低く、第三者による盗聴を許してしまう可能性があると考えられています。 (これはnetwork-security-protocol-checksにおけるrc4のチェックです)。

ホスト証明書または中間証明書内のSHA1

中間証明書にSHA1ハッシュアルゴリズムが使用されている場合、第三者がその発行機関を装った証明書を発行できると考えられています。そのため、これらの接続は中間者攻撃に対して脆弱です。(これらはnetwork-security-protocol-checksにおけるsignature-sha1およびintermediate-sha1のチェックです)。

SSL1、SSL2、SSL3

TLS1.0より古いプロトコルは、さまざまな攻撃に対して脆弱であると考えられており、より高いセキュリティが求められる用途では、これらの使用を避けるのがよいでしょう。(これがnetwork-security-protocol-checksにおけるversionのチェックです)。

トリプルDES(または3DES)暗号

3DESストリーム暗号が提供する実効セキュリティは最大112ビットであり、2016年には重大なセキュリティ脆弱性が公表されました(CVE-2016-2183)。NISTは2023年後半以降、すべてのアプリケーションにおいて同暗号を非推奨としています。(これはnetwork-security-protocol-checksにおける3des-cipherのチェックです)。

network-security-level が high の場合、上記に加えて以下のチェックが行われます。

検証済み証明書は公開鍵を変更する。

サーバーは時折キーを変更しますが、通常は特に気にする必要はありません。ただし、サードパーティサービス向けの新規証明書を発行する、操作可能な認証局にアクセスできる機関によってネットワーク接続が乗っ取られることを懸念される場合は、こうした変更を追跡しておくとよいでしょう。

最後に、network-security-level が paranoid である場合、NSM が初めて新しい証明書を検知した際にも通知が届きます。これにより、Emacs が行うすべての接続から得られるすべての証明書を確認できるようになります。

NSMの動作の詳細を制御するには、以下の追加変数を使用できます。

nsm-settings-file

これは、NSMが接続に関する詳細情報を格納するファイルです。デフォルト値は~/.emacs.d/network-security.dataです。

nsm-save-host-names

デフォルトでは、STARTTLS 以外の接続についてはホスト名が保存されません。代わりに、ホスト/ポートハッシュを用いて接続を識別します。つまり、設定ファイルを気軽に読み取って、ユーザーがどのサーバーに接続したかを確認することはできません。この変数が t の場合、NSM は nsm-settings-file にもホスト名を保存します。