エンド・ツー・エンドの暗号化

エンドツーエンド暗号化APIを使用して、アプリケーションからメディアサーバー経由で送信されるメディアを暗号化します。

重要だ: OpenTok.js 2.27.0+ では、以前のバージョンの OpenTok.js を使用しているクライアントに接続する場合、エンドツーエンドの暗号化は機能しません。アプリをアップグレードして OpenTok.js 2.27.0+ を使用する場合、アプリがエンドツーエンド暗号化を使用している場合は、すべてのクライアントが OpenTok.js 2.27.0+ を使用していることを確認してください。

このトピックには以下のセクションが含まれます:

概要

エンド・ツー・エンド暗号化(E2EE)により、アプリケーション開発者は、以下のメディアを暗号化することができます。 ルーティングセッション クライアント間。中継セッションの場合、メディアはWebRTCプロトコルを介して、すでにクライアント間で暗号化されています。この機能は、クライアント側でメディアペイロードを暗号化することで暗号化レイヤーを追加し、(ルーティングされたセッションにおいて)他のクライアントへメディアをルーティングするOpenTok Media Routerを経由する間も、暗号化された状態を維持します。 エンドツーエンドの暗号化は、セッションの作成時に有効にします。

エンドツーエンド暗号化は、Chromiumベースのブラウザ(Chrome、Opera、Edge、Samsung Internet、Android WebView)およびWebKitベースのブラウザ(例:macOS/iOS上のSafari、iOS上のChrome、iOS上のWebView)上のWebアプリでサポートされています。 Firefox上のWebアプリでは、エンドツーエンド暗号化はサポートされていません。

WebKitベースのブラウザのサポートは、バージョンOpenTok.js 2.30.0以降でのみ利用可能です。

エンドツーエンドの暗号化は、各ネイティブクライアントSDK(Android、iOS、Windows、Linux、macOS用)でサポートされています。

暗号化の秘密は、OpenTok.jsを使ってウェブアプリケーションで設定します。暗号化シークレットは、セッションを初期化するときにウェブクライアントで設定する必要があります。暗号化の秘密は空でない文字列です。すべてのユーザーが同じ秘密を使わなければ、わかりやすいメディアを受信することはできません。暗号化シークレットは、メディアの暗号化と復号化に使われる暗号鍵を生成するための鍵材料である。具体的には、暗号化秘密は256ビットの鍵でAES-CTRアルゴリズムを使用してAES-256暗号化鍵を生成する。

なお、以下の点にご注意ください。 OpenTok メディアルーター エンドツーエンド暗号化を使用している場合、暗号化されていないメディアにアクセスすることはできません。 そのため、メディアのデコードを必要とする機能(アーカイブ、ライブストリーミング 放送、エクスペリエンス・コンポーザー、オーディオ・コネクター、SIP相互接続など)は、 エンドツーエンド暗号化されたセッションではサポートされていません。

OpenTokエンドポイント全体における、コーデックごとのエンドツーエンド暗号化のサポート

コーデック/エンドポイント クローム アンドロイド・クローム iOS版Chrome ファイアフォックス サファリ エッジ iOS SDK アンドロイドSDK Windows SDK macOS SDK Linux SDK
VP8
H.264
VP9

アカウントにエンドツーエンドの暗号化を追加する

エンドツーエンド暗号化は、以下の機能として利用可能です。 アドオン機能. これを お使いの Vonage VideoのAccountページ.

REST APIを使用して暗号化を有効にする

REST APIを使用してセッションを作成するときに、エンドツーエンドの暗号化を有効にします。セッションの e2ee プロパティ true. 参照 セッション作成.

注: セッションのエンドツーエンド暗号化を有効にする前に、Vonage Video アカウントでこの機能を有効にする必要があります。詳しくは、 前節.

以下のNode.jsの例は、エンドツーエンドの暗号化が有効なセッションを作成する:

const opentok = new OpenTok(API_KEY, API_SECRET);
const sessionId;
opentok.createSession({
    mediaMode: 'routed',
    e2ee: true,
  }, function(error, session) {
  if (error) {
    console.log('Error creating session:', error)
  } else {
    sessionId = session.sessionId;
    console.log('Session ID: ' + sessionId);
  }
});