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

このトピックでは、Vonage Video macOS Client SDK におけるエンドツーエンド暗号化の使用方法について詳しく説明しています:

エンドツーエンド暗号化の概要については、以下を参照してください。 本題.

暗号化シークレットの設定

エンドツーエンド暗号化されたセッションは、サーバーAPIを使用して作成されます(参照: REST APIを使用して暗号化を有効にする).

クライアントがパブリッシュまたはサブスクライブする前に otc_session_set_encryption_secret() 関数である:

otc_session_set_encryption_secret(session, secret);	
otc_session_connect(session, TOKEN);

有効な秘密は8文字以上256文字以下の文字列である。シークレットを変更するには otc_session_set_encryption_secret() 関数を再び使用する。

無効なシークレットを渡すと OTC_SESSION_INVALID_ENCRYPTION_SECRET エラー。

イベントとエラー

イベントとエラーは、ユーザー主導の暗号化の動作を管理するために不可欠である。エンドツーエンドの暗号化は、共有秘密モデルを使用します。セッション内の全員が、自分のメディアを暗号化し、他の全員のメディアを復号化するために、同じ秘密を使用することが期待されています。

新しいエラーコードは「OTC_SESSION_INVALID_ENCRYPTION_SECRET」であり、これは `set_encryption_secret` メソッドの結果コードとして返され、`on_error` コールバック内では返されません。

クライアントがセッションに無効な暗号化シークレットを設定しようとすると otc_session_callbacks.on_error() に設定されたエラーコードを返す。 OTC_SESSION_INVALID_ENCRYPTION_SECRET.以下の例では、セッションは空の(つまり無効な)暗号化シークレットで初期化される:

int result = otc_session_set_encryption_secret(session, "");
if (result == OTC_SESSION_INVALID_ENCRYPTION_SECRET) {
  // Report error...
}

暗号化シークレットを指定せずにエンドツーエンドで暗号化されたセッションを公開しようとした場合、次のように呼び出す。 otc_session_publish() 関数の結果は otc_publisher_callbacks.on_error() エラーで呼び出された関数は、コードに OTC_SESSION_ENCRYPTION_SECRET_MISSING.最高のユーザーエクスペリエンスを得るためには、アプリケーションは otc_session_publish() 関数である:

static void on_publisher_error(otc_publisher *publisher,
                               void *user_data,
                               const char* error_string,
                               enum otc_publisher_error_code error_code) {
  if (otc_publisher_error_code == "OTC_SESSION_ENCRYPTION_SECRET_MISSING") {
    // The application should communicate that the secret was not set.
  }
}

struct otc_publisher_callbacks publisher_callbacks = {0};
publisher_callbacks.on_error = on_publisher_error;

session = otc_session_new(API_KEY, SESSION_ID, &session_callbacks);

otc_publisher *publisher = otc_publisher_new("Joe",
                                  nullptr,
                                  &publisher_callbacks);
otc_session_publish(session, publisher);

不正確な暗号化シークレットのために、加入者がストリームのメディアをデコードできない場合は subscriber_callbacks.on_error() 関数が呼び出されたとき、エラーコードは次のように設定されている。 OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH.メディアを受信できないのは、暗号化の不一致によるものであり、接続障害やオーディオ/ビデオの問題ではないことをユーザーに伝えることが重要です:

static void on_subscriber_error(otc_subscriber *subscriber,
                               void *user_data,
                               const char* error_string,
                               enum otc_subscriber_error_code error_code) {
  if (otc_subscriber_error_code == "OTC_SUBSCRIBER_ENCRYPTION_SECRET_MISMATCH") {
  // Activate a UI element communicating that there's been an encryption secret mismatch.
  }
}

struct otc_subscriber_callbacks subscriber_callbacks = {0};
subscriber_callbacks.on_error = on_subscriber_error;

otc_subscriber *subscriber = otc_subscriber_new(stream,
                                                &subscriber_callbacks);
otc_session_subscribe(session, subscriber);

サブスクライバーがパケットを復号化する際に内部エラーが発生した場合 subscriber_callbacks.on_error() 関数が呼び出されたとき、エラーコードは次のように設定されている。 OTC_SUBSCRIBER_DECRYPTION_INTERNAL_ERROR.