Vonage Video API の暗号化

OpenTokの暗号化機能を利用すれば、データが暗号化されていない状態で保存されることのないOpenTokアーカイブを作成できます。

OpenTokのアーカイブは、以下の方法で保護することができます:

  • アーカイブ保存のフォールバックを無効にする — デフォルトでは、Vonageは、 指定されたAmazon S3またはMicrosoft Azureサーバーへのファイルのアップロードに 失敗した場合、OpenTokサーバーにアーカイブファイルを保存します。 OpenTok REST APIを使用してアーカイブのアップロード先を設定することで、 このフォールバック保存を防ぐことができます。

  • OpenTokの暗号化機能を使用する — これにより、データが暗号化されていない状態で保存されることのないOpenTok アーカイブを作成できます。 これにより、最高レベルのセキュリティが確保されます。

  • Amazon S3のサーバーサイド暗号化を使用する — これは、暗号化にAmazon S3が管理する暗号化キーを使用します。 詳細については、以下を参照してください。 この開発者ガイド.

OpenTokの暗号化機能により、OpenTok アーカイブ内の映像および音声データは、お客様が Vonageに提供した公開鍵証明書を使用して暗号化されます。

重要だ: OpenTokの暗号化機能は、 アドオン機能. お問い合わせ OpenTokプロジェクトキーでこの機能を有効にするには。

機能概要

OpenTokプラットフォームの暗号化アーカイブ機能を使用すると、 データが暗号化されていない状態で保存されることのないアーカイブを作成できます。

まず、OpenTokアーカイブで使用する公開鍵と秘密鍵のRSA鍵ペアを作成します。 OpenTok REST APIを呼び出して、 公開鍵証明書をVonageと共有します。(同じREST呼び出し内で、 アーカイブに使用するAmazon S3またはMicrosoft Azureのアップロード先に関する 詳細情報を送信します。 暗号化アーカイブ機能を利用するには、 アップロード先を設定する必要があります。)秘密鍵は、ご自身の 非公開 内部利用限定.

その後、Vonageはランダムに生成された パスワードを使用して各アーカイブを暗号化し、証明書を用いて暗号化した上で、 暗号化されたパスワードを当社のサーバーに保存します。アーカイブの準備が整うと、 お客様のサーバーへのコールバックを通じて通知が行われ、 パスワードを照会することができます。 Vonageは、いかなる時点においても暗号化されていないパスワードを保存することはなく、 また、Vonageにはパスワードを復号する手段はありません( 秘密鍵の保有者のみがパスワードを復号できます)。

その後、秘密鍵を使用してパスワードを復号し、 そのパスワードを使って暗号化されたアーカイブを復号することができます。復号されたアーカイブ ファイルはMPEG-TS形式です。

Vonage では、アーカイブの暗号化に AES-256 アルゴリズムを使用しています。生成されたパスワードは、 OAEP パディングを用いた RSA 暗号化によって暗号化されます。 なお、暗号化アーカイブは 複合アーカイブでのみ使用可能であり、個別のストリーム アーカイブでは使用できない点にご注意ください。

この文書には、以下のセクションが含まれています:

暗号化アーカイブ証明書の作成

暗号化されたアーカイブ証明書を Vonage に送信する

アーカイブの復号化

暗号化アーカイブの無効化

既知の問題

暗号化アーカイブ証明書の作成

アーカイブで使用するための X.509 PEM 証明書と、それに対応する秘密鍵を 作成します:

openssl req -new -x509 -days 365 -newkey rsa:2048 -out cert.pem -keyout key.pem

(注: これはOpenSSL 1.0.1でテストされています)。

その証明書をVonageに送信すると、Vonageはそれを用いて、 アーカイブの復号に必要な暗号化されたパスワードを生成します。この パスワードは、あなたの秘密鍵で復号することができ、そのパスワードを使って アーカイブを復号することができます。パスワードは アーカイブごとに異なります。

鍵のサイズは2048ビット以下でなければなりません。 証明書は、アーカイブ先を設定するために、JSONデータとしてOpenTok REST APIに送信します (次のセクションを参照)。証明書は JSONデータに含まれるため、データをbase64エンコードして送信するか、 証明書内の改行文字を「\n」に置き換えてください。

次の例では、証明書をBase64エンコードしています:

openssl enc -base64 -in cert.pem -out cert.pem.encoded -A

Base64エンコードされた証明書文字列は次のようになる:

"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."

改行文字が置換された証明書の文字列は、 次のようになります:

"-----BEGIN CERTIFICATE-----\n...\n...\n
-----END CERTIFICATE-----"

暗号化されたアーカイブ証明書をVonageに送る

証明書を設定し、アーカイブの暗号化を有効にするには、以下の URLに対して HTTP PUTリクエストを送信してください:

https://api.opentok.com/v2/project/<apiKey>/archive/storage

交換 <apiKey> OpenTokプロジェクトのAPIキーを指定してください。

カスタム HTTP ヘッダーを使用して、REST API リクエストを認証します: X-OPENTOK-AUTH. これをJSON Webトークンに設定してください(OpenTok REST APIの ドキュメントを参照してください):

X-OPENTOK-AUTH: <JSON_web_token>

以下のクレームでJSONウェブトークンを作成する:

{
    "iss": "your_api_key",
    "ist": "project",
    "iat": current_timestamp_in_seconds,
    "exp": expire_timestamp_in_seconds,
    "jti": "jwt_nonce"
}
  • セット iss OpenTok API キー(以下で提供されたもの)に Vonage Account プロジェクトページ)。

  • セット ist を「プロジェクト」に変更した。

  • セット iat 現在のUnixエポックタイムスタンプ(トークンが作成された時点)からの 秒数。

  • セット exp トークンの有効期限まで。セキュリティ上の理由から、 有効期限はトークン作成時刻に近いもの( たとえば、作成から3分後など)に設定し、REST APIを呼び出すたびに 新しいトークンを作成することをお勧めします。有効期限として設定できる最大範囲は 5分です。

  • セット jti をJWTの一意な識別子に変換する。これはオプションである。JWTの JSON Webトークン仕様 詳細はこちら。

OpenTokプロジェクトのAPIシークレットをJWTのシークレットキーとして使用し、 HMAC-SHA256暗号化アルゴリズムで署名してください。(APIシークレットは 以下の Video APIアカウント (「プロジェクト」ページにて。)

たとえば、次の Python コードは、 OpenTok REST API の呼び出しで使用できるトークンを作成します:

import jwt # See https://pypi.python.org/pypi/PyJWT
import time
import uuid
print jwt.encode({"iss": "my-OpenTok-project-API-key",
  "iat": int(time.time()),
  "exp": int(time.time()) + 180,
  "ist": "project",
  "jti": str(uuid.uuid4())()},
  'my-OpenTokproject-API-secret',
  algorithm='HS256')

交換 my-OpenTok-project-API-key そして my-OpenTok-project-API-secret OpenTokプロジェクトのAPIキーとシークレットを指定して。

を設定する。 Content-type ヘッダは、REST API呼び出しの application/json:

Content-Type:application/json

証明書の改行文字を "\n", これにより、JSONデータの文字列リテラル内でこれを使用できるようになります。

アーカイブストレージを設定するためのRESTメソッドを呼び出す際、送信するJSONデータのプロパティとして公開鍵証明書を渡してください。

次のセクションをご覧ください。

Amazon S3ターゲットに暗号化アーカイブを設定する

Amazon S3 ターゲットで使用する公開鍵証明書を指定するには、REST API 呼び出しの JSON データを以下の 形式で設定してください:

{
    "type": "s3",
    "config": {
        "bucket": "example.com.archive-bucket",
        "secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
        "accessKey": "AWFS7BAO536E6MXA"
    },
    "fallback": "none",
    "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."
}

セット bucket アーカイブのアップロードに使用するAmazon S3バケットの名前を指定します。以下の設定を secretKey そして accessKey そのバケットのAmazon S3シークレットキーおよびアクセスキーの プロパティ。

フォールバック・プロパティを "none" アップロードに失敗した場合、アーカイブファイルがOpenTokクラウドに保存されないようにするには、 このプロパティを "opentok" アップロードに失敗した場合でも、OpenTokダッシュボードでアーカイブを利用できるようにするため 。

証明書プロパティに、Vonageがアーカイブの暗号化に使用する公開鍵証明書を設定してください。 必ず証明書をBase64エンコードするか、証明書内の改行文字を 以下に置き換えてください。 "\n", これにより、JSONデータの文字列リテラル内でこれを使用できるようになります。

Microsoft Azureターゲットに暗号化アーカイブを設定する

Microsoft Azure ターゲットで使用する公開鍵証明書を指定するには、REST API 呼び出しの JSON データを以下の 形式で設定してください:

{
    "type": "azure",
    "config": {
        "accountName":"myAccountname",
        "accountKey":"myAccountKey",
        "container": "containerName"
    },
    "fallback": "none",
    "certificate" : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0...
}

Microsoft Azureのコンテナ名に合わせてコンテナを設定します。コンテナ名を accountName そして accountKey プロパティをMicrosoft Azureストレージの認証情報と一致させます。

を設定する。 fallback プロパティ "none" アップロードに失敗した場合、アーカイブファイルがOpenTokクラウドに保存されないようにするには、 このプロパティを "opentok" アップロードに失敗した場合でも、OpenTokダッシュボードでアーカイブを利用できるようにするため 。

を設定する。 certificate Vonageがアーカイブの暗号化に使用する公開鍵証明書の プロパティ。証明書をBase64エンコードするか、証明書内の改行 文字を "\n", これにより、JSONデータの文字列リテラル内でこれを使用できるようになります。 Base64エンコードされた証明書の文字列は、次のような形式になります:

"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."

REST APIレスポンス

ステータスコード200のレスポンスは成功を示す。

ステータスコード 400 の応答が表示された場合は、 無効な JSON データが含まれているか、アップロード先が指定されていないことを示しています。

403ステータスコードが返された場合は、 無効なOpenTokプロジェクトのAPIキーまたはAPIシークレットが指定されたことを示しています。

以下のコマンドラインの例は、Amazon S3バケットにアップロードするアーカイブを 暗号化する際にVonageが使用する証明書を、安全に設定するものです: ```

api_key=12345 data='{"type":"s3","config":{"bucket":"your-s3-bucket","secretKey":"your-s3-secret-key","accessKey":"your-s3-access-key"},"certificate" : "...your-cert..."}' curl \ -i \ -H "Content-Type: application/json" \ -X PUT -H "X-OPENTOK-AUTH:$json_web_token" -d '$data' \ https://api.opentok.com/v2/project/$api_key/archive/storage

の値を設定する。 api_key OpenTokプロジェクトのAPIキーに設定してください。次の値を設定してください: json_web_token JSON Webトークンへ。

以下の値を設定してください your-s3-bucket そして your-s3-access-key Amazon S3の認証情報に合わせて ください。証明書の 値を、証明書の文字列に置き換えてください。

以下のコマンドラインの例は、Microsoft Azure バケットにアップロードするアーカイブを 暗号化する際に Vonage が使用する証明書を安全に設定するものです:

api_key=12345 data='{"type":"azure","config":{"accountName":"your-azure-account-name","accountKey":"your-azure-account-key", "container":"your-azure-container"}, "certificate": "...your-cert..."}' curl \ -i \ -H "Content-Type:application/json" \ -X PUT -H "X-OPENTOK-AUTH:$json_web_token" -d "$data" \ https://api.opentok.com/v2/project/$api_key/archive/storage

の値を設定する。 api_key OpenTokプロジェクトのAPIキーに設定します。次の値を設定してください。 json_web_token JSON Webトークンへ。

以下の値を設定してください your-azure-account-name, your-azure-account-name, そして your-azure-container Amazon S3の認証情報に合わせて設定してください。証明書の 値を、証明書の文字列に置き換えてください。

アーカイブの復号化

OpenTokの ダッシュボードを使用して、アーカイブステータスのコールバックを設定できます。詳細は、 OpenTok アーカイブ開発者ガイド.

アーカイブの作成後、コールバックURL宛てに送信されるアーカイブステータスのPOSTリクエストには、 「password」プロパティが含まれます:

{
    "id" : "b40ef09b-3811-4726-b508-e41a0f96c68f",
    "event": "archive",
    "createdAt" : 1384221380000,
    "duration" : 328,
    "name" : "Foo",
    "partnerId" : 123456,
    "reason" : "",
    "sessionId" : "2_MX40NzIwMzJ-flR1ZSBPERUIDIwMTN-MC45NDQ2MzE2NH4",
    "size" : 18023312,
    "status" : "uploaded",
    "password" : "e42c...d23"
}

パスワードは、証明書で暗号化されたAES鍵および初期化 ベクトルであり、Base64エンコードされたバイナリデータの形式をとります。

バイナリデータの最初の3バイトは、バージョン (1バイト)、アルゴリズム(1バイト)、モード(1バイト)を表しています。 この バージョンでは、長さは1に設定され、アルゴリズムは1 (AES-256を示す)に設定され、モードは1(CBCを示す)に設定されています。

次の32バイトが鍵です。 残りの16バイトが初期化ベクトルです。

まず、パスワードをデコードし、 その後、秘密鍵を使って復号します:

openssl enc -base64 -d -A <<< "password-from-tokbox" \ -out password.enc openssl rsautl -decrypt -oaep -inkey key.pem \ -in password.enc -out password.bin

その後、パスワードを使ってアーカイブファイルを復号化する:

openssl enc -d -aes-256-cbc -nopad -in your_archive_file.ts \ -out your_decrypted_file.ts \ -K $(xxd -s 3 -l 32 -c 32 -p password.bin) \ -iv $(xxd -s 35 -l 16 -c 16 -p password.bin)

-K それが鍵です

-iv 初期化ベクトルは

xxd バイナリ形式でデコードおよび復号されたパスワードを16進数に変換し、 OpenSSLに渡せるようにします。オプションの詳細については、xxdのマニュアルページを参照してください。

暗号化アーカイブの無効化

暗号化アーカイブを無効にするには、アーカイブストレージのURLに対してHTTP PUTリクエストを送信してください(参照: 暗号化されたアーカイブ証明書を Vonage に送信する), ただし、リクエストとともに送信するJSONデータ内の証明書はnullに設定してください。

Amazon S3ターゲットの暗号化アーカイブを無効にする

Amazon S3 アーカイブ先に対する公開鍵証明書を削除するには (およびアーカイブからの暗号化を解除するには)、 以下の JSON データを指定して REST API を呼び出します:

{
    "type": "s3",
    "config": {
        "bucket": "example.com.archive-bucket",
        "secretKey": "BvKwyshsmEATx5mngeloHwgKrYMbP+",
        "accessKey": "AWFS7BAO536E6MXA"
    },
    "fallback": "none",
    "certificate" : null
}

セット bucket アーカイブのアップロードに使用するAmazon S3バケットの名前を指定します。以下の設定を secretKey そして accessKey そのバケットのAmazon S3シークレットキーおよびアクセスキーの プロパティ。

を設定する。 fallback プロパティ to "none" アップロードに失敗した場合、アーカイブファイルがOpenTokクラウドに保存されないようにするには、 このプロパティを "opentok" アップロードに失敗した場合でも、OpenTokダッシュボードでアーカイブを利用できるようにするため 。

を設定する。 certificate プロパティをnullに設定する。

Microsoft Azureターゲットの暗号化アーカイブを無効にする

Microsoft Azure アーカイブの ターゲットに対する公開鍵証明書を削除し(アーカイブからの暗号化を解除するには)、以下の JSON データを指定して REST API を呼び出します:

{
    "type": "azure",
    "config": {
        "accountName":"myAccountname",
        "accountKey":"myAccountKey",
        "container": "containerName"
    },
    "certificate" : null
}

セット container Microsoft Azureのコンテナ名に合わせて設定してください。次の設定を行ってください。 accountName そして accountKey プロパティをMicrosoft Azureストレージの認証情報と一致させます。 を設定します。 fallback プロパティ "none" アップロードに失敗した場合、アーカイブファイルがOpenTokクラウドに保存されないようにするには、 このプロパティを "opentok" アップロードに失敗した場合でも、OpenTokダッシュボードでアーカイブを利用できるようにするため。 以下の設定を certificate プロパティ null.

REST APIレスポンス

ステータスコード 200 の応答は、暗号化の無効化が 成功したことを示します。

ステータスコード 400 の応答が表示された場合は、 無効な JSON データが含まれているか、アップロード先が指定されていないことを示しています。

403ステータスコードが返された場合は、 無効なOpenTokプロジェクトのAPIキーまたはパートナーシークレットが指定されたことを示しています。

以下のコマンドラインの例は、S3ターゲットに対する暗号化アーカイブ機能を無効にします:

api_key=12345 data='"type": "s3","config": {"bucket": "your-s3-bucket","secretKey": "your-s3-secret-key","accessKey": "your-s3-access-key"},{"certificate" : null}' curl \ -i \ -H "Content-Type:application/json" \ -X PUT -H "X-OPENTOK-AUTH:$json_web_token" -d "$data" \ https://api.opentok.com/v2/project/$api_key/archive/storage

の値を設定する。 api_key OpenTok API キーに設定します。次の値を設定してください。 json_web_token JSON Webトークンに。以下の値を設定してください。 your-s3-bucket そして your-s3-access-key をAmazon S3の認証情報と一致させる。

既知の問題

暗号化されたアーカイブの有効期間は、 すべての OpenTok REST API 呼び出し、OpenTok サーバー SDK のメソッド、 およびアーカイブのステータス変更コールバックにおいて、常に 0 として報告されます。