HDMI Intel® FPGA IPユーザーガイド

ID 683798
日付 12/04/2023
Public
ドキュメント目次

5.1.10. HDCP 2.3 TXのアーキテクチャー

HDCP 2.3トランスミッター・ブロックでは、ビデオおよび補助データを暗号化してから、HDCP 2.3デバイスに接続しているシリアルリンクで伝送します。
HDCP 2.3 TXコアは、次のエンティティーで構成されます。
  • コントロールおよびステータスレジスター・レイヤー
  • 認証と暗号化レイヤー
  • ビデオストリームおよび補助レイヤー
図 28. HDCP 2.3 TX IPのアーキテクチャー・ブロック図

通常、Nios IIプロセッサーによりHDCP 2.3 TXコアを駆動します。プロセッサーは認証プロトコルを実装します。プロセッサーは、Avalon Memory Mapped (Avalon-MM) インターフェイスを使用して、コントロールおよびステータスポートを介してIPにアクセスします。

HDCP仕様の要件により、HDCP 2.3 TXコアはDCP発行のプロダクション・キー、つまりグローバル定数 (lc128) でプログラムする必要があります。IPは、HDCP Keyポートを介してコアの外部にあるオンチップメモリーからキーを取得します。オンチップメモリーでは、次の表に示す配置でキーデータを格納する必要があります。

表 34.  HDCP 2.3 TX Keyポートのアドレス指定
アドレス コンテンツ
2'h3 lc128[127:96]
2'h2 lc128[95:64]
2'h1 lc128[63:32]
2'h0 lc128[31:0]

ビデオストリームおよび補助レイヤーでは、ビデオおよび補助データ入力ポートを介してオーディオおよびビデオコンテンツを受信し、暗号化操作を実行します。ビデオストリームおよび補助レイヤーでは、HDMI TXコアによって提供される暗号化ステータス信号 (ESS) を検出し、フレームを暗号化するタイミングを決定します。

HDCP 2.3のレジスターを使用して、認証を実行することができます。HDCP 2.3 TXコアは、認証に向けて完全なハンドシェイク・メカニズムをサポートしています。発行されるすべてのコマンドでは、対応するステータスビットのアサートがポーリングされ、その後次のコマンドの発行が開始します。CRYPTO_CMD の値は、一度に1ビットしか設定できないワンホット形式にする必要があります。

表 35.  HDCP 2.3 TXレジスターのマッピング
アドレス レジスター R/W リセット ビット ビット名 詳細
0x00 CRPYTO_CMD (ワンホット) WO 0x00000000 31:11 Reserved 予約済み
10 GO_HMAC_M 1に設定すると、Mを計算してM’と照合します。動作がビジー状態になるとセルフクリアされます。
9 GO_HMAC_V 1に設定すると、Vを計算してV’と照合します。動作がビジー状態になるとセルフクリアされます。
8 GEN_RIV 1に設定すると、新しいランダムrivを生成して受信します。動作がビジー状態になるとセルフクリアされます。
7 GEN_EDKEYKS 1に設定すると、新しいランダムEdkey (ks) を生成して受信します。動作がビジー状態になるとセルフクリアされます。
6 GO_HMAC_L 1に設定すると、Lを計算してL’と照合します。動作がビジー状態になるとセルフクリアされます。
5 GEN_RN 1に設定すると、新しいランダムrnを生成して受信します。動作がビジー状態になるとセルフクリアされます。
4 GO_HMAC_H 1に設定すると、Hを計算してH’と照合します。動作がビジー状態になるとセルフクリアされます。
3 GO_KD 1に設定すると、kd (dkey0、dkey1) を計算します。動作がビジー状態になるとセルフクリアされます。
2 GEN_EKPUBKM 1に設定すると、新しいランダムEkpub (km) を生成して受信します。動作がビジー状態になるとセルフクリアされます。
1 GO_SIG 1に設定すると、署名が検証されます (certrxまたはSRM)。動作がビジー状態になるとセルフクリアされます。
0 GEN_RTX 1に設定すると、新しいランダムrtxを生成して受信します。動作がビジー状態になるとセルフクリアされます。
0x01 CRYPTO_MSGDATAIN WO 0x00000000 31:8 Reserved 予約済み
7:0 MSGDATAIN

バーストモードでレシーバーからメッセージを書き込みます (バイト単位)。

  1. 署名検証 (certrx): GO_SIG を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. 署名の384バイト、最下位バイト (LSB) が先頭
    2. レシーバーIDの5バイト、最上位バイト (MSB) が先頭
    3. レシーバー公開鍵モジュラス (n) の128バイト、MSBが先頭
    4. レシーバー公開鍵指数 (e) の3バイト、MSBが先頭
    5. 予約済みの2バイト、MSBが先頭
  2. 署名検証 (SRM): GO_SIG を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. 署名の384バイト、LSBが先頭
    2. SRMの先行するすべてのフィールド (署名を除く)、MSBが先頭
  3. マスター鍵の暗号化: GEN_EKPUBKM を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. レシーバー公開鍵モジュラス (n) の128バイト、MSBが先頭
    2. レシーバー公開鍵指数 (e) の3バイト、MSBが先頭
  4. HMACのkdの計算: GO_KD を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. rrxの8バイト、MSBが先頭
    2. RxCapsの3バイト、MSBが先頭
  5. HとH’の比較: GO_HMAC_H を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. H’の32バイト、MSBが先頭
  6. LとL’の比較: GO_HMAC_L を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. L’の32バイト、MSBが先頭
  7. VとV’の比較: GO_HMAC_V を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. V’の16バイト、MSBが先頭
    2. ReceiverID_Listの可変長、MSBが先頭
    3. RxInfoの2バイト、MSBが先頭
    4. seq_num_Vの3バイト、MSBが先頭
  8. MとM’の比較: GO_HMAC_M を1に設定する前に、次のメッセージを次の順序で書き込む必要があります。
    1. M’の32バイト、MSBが先頭
    2. StreamID_Typeの2バイト、MSBが先頭
    3. seq_num_Mの3バイト、MSBが先頭
0x02 CRYPTO_STATUS RO 0x00000000 31 SIG_OK コアによってアサートされ、署名検証が合格したことを示します。SIG_OK を読み出す前に、SIG_DONE が設定されるまでポーリングします。
30 H_OK コアによってアサートされ、HとH’の比較が合格したことを示します。H_OK を読み出す前に、H_DONE が設定されるまでポーリングします。
29 L_OK コアによってアサートされ、LとL’の比較が合格したことを示します。L_OK を読み出す前に、L_DONE が設定されるまでポーリングします。
28 V_OK コアによってアサートされ、VとV’の比較が合格したことを示します。V_OK を読み出す前に、V_DONE が設定されるまでポーリングします。
27 M_OK コアによってアサートされ、MとM’の比較が合格したことを示します。M_OK を読み出す前に、M_DONE が設定されるまでポーリングします。
26:11 Reserved 予約済み
10 M_DONE MとM’の比較が完了するとコアによってアサートされます。次の GO_HMAC_M が設定されるとセルフクリアされます。
9 V_DONE VとV’の比較が完了するとコアによってアサートされます。次の GO_HMAC_V が設定されるとセルフクリアされます。
8 RIV_DONE rivが生成され、MSGDATAOUT から読み出す準備ができるとコアによってアサートされます。次の GEN_RIV が設定されるとセルフクリアされます。
7 EDKEYKS_DONE Edkey(ks) が生成され、MSGDATAOUT から読み出す準備ができるとコアによってアサートされます。次の GEN_EDKEYKS が設定されるとセルフクリアされます。
6 L_DONE LとL’の比較が完了するとコアによってアサートされます。次の GO_HMAC_L が設定されるとセルフクリアされます。
5 RN_DONE rnが生成され、MSGDATAOUT から読み出す準備ができるとコアによってアサートされます。次の GEN_RN が設定されるとセルフクリアされます。
4 H_DONE HとH’の比較が完了するとコアによってアサートされます。次の GO_HMAC_H が設定されるとセルフクリアされます。
3 KD_DONE kdが生成されるとコアによってアサートされます。次の GO_KD が設定されるとセルフクリアされます。
2 EKPUBKM_DONE Ekpub (km) が生成され、MSGDATAOUT から読み出す準備ができるとコアによってアサートされます。次の GEN_EKPUBKM が設定されるとセルフクリアされます。
1 SIG_DONE 署名検証が完了するとコアによってアサートされます。次の GO_SIG が設定されるとセルフクリアされます。
0 RTX_DONE rtxが生成され、MSGDATAOUT から読み出す準備ができるとコアによってアサートされます。次の GEN_RTX が設定されるとセルフクリアされます。
0x03 CRYPTO_MSGDATAOUT RO 0x00000000 31:8 Reserved 予約済み
7:0 MSGDATAOUT

バーストモードでIPコアからメッセージを読み出します (バイト単位)。

  1. Rtxの生成: RTX_DONE が1に設定されると、このオフセットを8回読み出しrtxを取得します。MSBが先頭です。
  2. マスター鍵の生成: EKPUBKM_DONE が1に設定されると、このオフセットを128回読み出しEkpub (km) を取得します。MSBが先頭です。
  3. Rnの生成: RN_DONE が1に設定されると、このオフセットを8回読み出しrnを取得します。MSBが先頭です。
  4. セッションキーの生成: EDKEYKS_DONE が1に設定されると、このオフセットを16回読み出しEdkey (ks) を取得します。MSBが先頭です。
  5. Rivの生成: RIV_DONE が1に設定されると、このオフセットを8回読み出しrivを取得します。MSBが先頭です。
0x04 VID_CTL RW 0x00000000 31:1 Reserved 予約済み
0 HDCP_ENABLE 1に設定すると、HDCP 2.3暗号化が有効になります。HDCP 2.3暗号化が必要ない場合、特に認証されていない状態の場合は0に設定します。