コンテンツにスキップ

MACSEC_PROFILE テーブル

概要

IEEE 802.1AE MACsec のセキュリティプロファイルを定義するテーブル1PORT.macsec (port 側の leaf) から名前参照され、macsecmgrd / wpa_supplicant ベースの MKA (MACsec Key Agreement) 実装が CAK/CKN を読んで MACsec SA を確立する。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>MACSEC_PROFILE")]
  DM["macsecmgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_DB")]
  DM --> APPDB
  SYNCD["syncd"]
  APPDB --> SYNCD
  SAI["SAI<br/>sai_macsec_api"]
  SYNCD --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

MACSEC_PROFILE|<name>

<name>: 1–128 文字。

フィールド

フィールド 既定 説明
priority uint8 255 MKA アクター優先度。小さいほど key server になりやすい
cipher_suite enum GCM-AES-128 / GCM-AES-256 / GCM-AES-XPN-128 / GCM-AES-XPN-256 GCM-AES-128 データ暗号化アルゴリズム
primary_cak hex 66 文字 (128-bit + KCK) または 130 文字 (256-bit) — (mandatory) プライマリ CAK
primary_ckn hex 32 / 64 文字 — (mandatory) プライマリ CKN
fallback_cak hex 66 / 130 文字 プライマリ失敗時のフォールバック CAK
fallback_ckn hex 32 / 64 文字 フォールバック CKN
policy integrity_only / security security 認証のみか暗号化込みか
enable_replay_protect boolean false リプレイ保護の有効化
replay_window uint32 enable_replay_protect = true 時のみ意味を持つ
send_sci boolean true 送信フレームに SCI を含める
rekey_period uint32 0 能動的 SAK 再生成周期 [秒]。0 で再生成しない

制約 (YANG must)

  • fallback_cak を設定する場合は primary_cak と同じ長さ
  • fallback_ckn != primary_ckn

購読者

  • macsecmgrd (sonic-swss の MacSecMgr)、macsecorch
  • 配下で wpa_supplicant が MKA セッションを実行

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: PORT (macsec フィールドでプロファイル名参照)
  • 関連 YANG: sonic-macsec

関連リファレンス

引用元

関連ページ

運用ヒント

典型値

  • key 形式: MACSEC_PROFILE|<profile-name>
  • cipher_suite: GCM-AES-XPN-256priority: 64、policy: securityrekey_period: 0(手動)。

よくある誤設定

  • 鍵 (primary_cak/fallback_cak) を 16/32B 以外で入れると MKA セッションが上がらない。

確認コマンド

sonic-db-cli CONFIG_DB keys 'MACSEC_PROFILE|*'
show macsec

値依存挙動マトリクス

policy

挙動
security(デフォルト) MKA SA 確立 + データ暗号化
integrity_only MKA SA 確立のみ。実データは平文(認証のみ)
その他 throw std::invalid_argument("Invalid policy : ...")task_invalid_entry(破棄)

cipher_suite(CAK 長と連動)

CAK 長 挙動
GCM-AES-128(デフォルト) 66 hex 文字 128-bit AES 暗号化
GCM-AES-256 130 hex 文字 256-bit AES 暗号化
GCM-AES-XPN-128 66 hex 文字 Extended Packet Numbering 付き 128-bit AES
GCM-AES-XPN-256 130 hex 文字 Extended Packet Numbering 付き 256-bit AES
CAK 長不一致 throw std::invalid_argument("Invalid length for cipher_string : ...")task_invalid_entry
その他 throw std::invalid_argument("Invalid cipher_suite : ...")task_invalid_entry

rekey_period

挙動
0(デフォルト) 能動的 SAK 再生成なし(MKA 自然な鍵更新のみ)
正値 指定秒数ごとに SAK を再生成(mka_rekey_period として wpa_supplicant に設定)

enable_replay_protect

挙動
false(デフォルト) リプレイ保護なし(macsec_replay_protect = 0
true リプレイ保護有効。replay_window の値も wpa_supplicant に渡す(macsec_replay_window = N

send_sci

挙動
true(デフォルト) 送信フレームに SCI を含める
false SCI を含めない(特定機器との相互接続で必要な場合がある)

例外条件・特殊挙動

条件 挙動
policy に不正値 throw std::invalid_argument("Invalid policy : ...")SWSS_LOG_WARNtask_invalid_entry(破棄・再試行なし)
cipher_suite に不正値または CAK 長不正 throw std::invalid_argument("Invalid length for cipher_string : ...") → task_invalid_entry
fallback_cak 設定時に fallback_ckn なし GetValue(ta, fallback_ckn) が false → フォールバックキー設定スキップ。MKA フォールバック機能が動作しない
wpa_supplicant 起動失敗 SWSS_LOG_WARN("Cannot start the wpa_supplicant of the port '%s' : %s") → MACsec 無効のままポート継続動作
フィールド値の型変換失敗 SWSS_LOG_ERROR("Cannot convert value(%s) in field(%s)") → デフォルト / 前回値を使用
MACsec 有効化で例外発生 SWSS_LOG_WARN("Enable MACsec fail : %s") → ポートは非暗号化のまま継続
MACsec 無効化失敗 SWSS_LOG_WARN("Disable MACsec fail : %s") → wpa_supplicant プロセスが残留する可能性