アーカイブの暗号化

Vonage Video暗号化により、データが暗号化されていない状態で静止することのないアーカイブを作成することができます。

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

  • アーカイブストレージのフォールバックをオフにする - デフォルトでは、指定したAmazon S3またはMicrosoft Azureサーバにファイルをアップロードできなかった場合、Vonageはそのサーバにアーカイブファイルを保存します。REST APIを使用してアーカイブのアップロードターゲットを設定することで、このフォールバックストレージを防ぐことができます。
  • Vonageビデオ暗号化を使用する - これにより、データが暗号化されていない状態で静止することのないアーカイブを作成することができます。これは最高レベルのセキュリティを提供します。
  • Use Amazon S3 server-side encryption - これは暗号化にAmazon S3が管理する暗号鍵を使用します。詳細は この開発者ガイド.

Vonageビデオ暗号化では、Vonageアーカイブ内のビデオおよびオーディオデータは、Vonageに提供する公開鍵証明書を使用して暗号化されます。

重要だ: Vonage 暗号化機能は アドオン機能. お問い合わせ をクリックして、プロジェクト・キーでこの機能を有効にしてください。

機能概要

Vonage Videoプラットフォームの暗号化アーカイブ機能により、データが暗号化されていない状態で静止することのないアーカイブを作成することができます。

まず、アーカイブで使用する公開鍵と秘密鍵の RSA 鍵ペアを作成します。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ビット以下でなければならない。アーカイブ・ターゲットを設定するために、Vonage video REST API に証明書を JSON データで送信します(次のセクションを参照)。証明書は 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リクエストを送信します:

/v2/project/archive/storage 

交換 appId をプロジェクトのApp IDに置き換えてください。

を使用して REST API リクエストを認証します。 認証ヘッダー:

Authorization: Basic base64(APP_ID:API_SECRET)

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

{
    "iss": "your_app_id",
    "ist": "project",
    "iat": current_timestamp_in_seconds,
    "exp": expire_timestamp_in_seconds,
    "jti": "jwt_nonce"
}
  • セット iss をあなたのVonage Video App IDに追加します。 Vonageアカウント プロジェクトページ)。
  • セット ist を「プロジェクト」に変更した。
  • セット iat を現在のUnixエポックタイムスタンプ(トークンが作成された時)に秒単位で変換します。
  • セット exp をトークンの有効期限に設定します。セキュリティのため、トークン作成時間に近い有効期限(たとえば、作成後3分)を使用し、REST API呼び出しごとに新しいトークンを作成することをお勧めします。有効期限の最大許容範囲は5分です。
  • セット jti をJWTの一意な識別子に変換する。これはオプションである。JWTの JSONウェブトークン仕様 詳細はこちら。

プロジェクトの秘密鍵をJWT秘密鍵として使用し、HMAC-SHA256暗号化アルゴリズムで署名します。(秘密鍵は、プロジェクトの Video APIアカウント を参照)。例えば、以下のPythonコードはREST APIコールで使用できるトークンを作成します:

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

交換 my-project-API-key そして my-project-API-secret をVonage VideoプロジェクトのアプリIDとシークレットで設定します。 を設定します。 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" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageビデオクラウドに保存されないようにします。プロパティを "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" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageビデオクラウドに保存されないようにします。プロパティを "opentok" アップロードに失敗した場合、ダッシュボードでアーカイブを利用できるようにします。

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

"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0..."

REST APIレスポンス

  • ステータスコード200のレスポンスは成功を示す。
  • ステータスコード400のレスポンスは、無効なJSONデータが含まれているか、アップロード先が指定されていないことを示します。
  • ステータスコード403のレスポンスは、無効なプロジェクトアプリIDまたはプライベートキーを渡したことを示します。

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

app_id=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 "Authorization: Basic base64(app_id:API_secret)" -d '$data' \ https://video.api.vonage.com/v2/project/$app_id/archive/storage

の値を設定する。 app_id をVonage VideoプロジェクトのアプリIDに設定します。 の値を設定します。 your-s3-bucket そして your-s3-access-key をAmazon S3の証明書と一致させます。証明書の値を証明書の文字列で置き換えてください。

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

app_id=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 "Authorization: Basic base64(app_id:API_secret)" -d "$data" \ https://video.api.vonage.com/v2/project/$app_id/archive/storage

の値を設定する。 app_id をVonage VideoプロジェクトのアプリIDに設定します。 の値を設定します。 your-azure-account-name, your-azure-account-nameそして your-azure-container をAmazon S3の証明書と一致させます。証明書の値を証明書の文字列で置き換えてください。

アーカイブの復号化

ダッシュボードを使用してアーカイブステータスのコールバックを設定できます。の「アーカイブステータスの変更」を参照してください。 アーカイブ開発者ガイド.

アーカイブが作成された後、コールバック 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 は、opensslに供給できるように、バイナリ解読され復号化されたパスワードを16進数に変換する。スイッチの詳細については、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" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageクラウドに保存されないようにします。 プロパティを "opentok" を設定し、アップロードに失敗した場合にVonageダッシュボードでアーカイブを利用できるようにします。 を設定します。 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" を使用して、アップロードに失敗した場合にアーカイブファイルがVonageクラウドに保存されないようにします。 プロパティを "opentok" を設定し、アップロードに失敗した場合にVonageダッシュボードでアーカイブを利用できるようにします。 を設定します。 certificate プロパティ null.

REST APIレスポンス

  • ステータスコード200の応答は、暗号化の無効化に成功したことを示す。
  • ステータスコード400のレスポンスは、無効なJSONデータが含まれているか、アップロード先が指定されていないことを示します。
  • ステータスコード403の応答は、無効なプロジェクトApp IDまたはパートナーシークレットを渡したことを示します。

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

app_id=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 "Authorization: Basic base64(app_id:API_secret)" -d "$data" \ https://video.api.vonage.com/v2/project/$app_id/archive/storage

の値を設定する。 app_id をVonage Video App IDに設定します。 の値を設定します。 your-s3-bucket そして your-s3-access-key をAmazon S3の認証情報と一致させる。

既知の問題

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