この記事では,研究のサーベイをまとめていきたいと思います。ただし,全ての論文が網羅されている訳ではありません。また,分かりやすいように多少意訳した部分もあります。ですので,参考程度におさめていただければ幸いです。
間違えている箇所がございましたらご指摘ください。随時更新予定です。他のサーベイまとめ記事はコチラのページをご覧ください。
実装
こちらのURLよりGitHubのページにアクセスしてください。
概要
今回は「ビット置換法」と「量子化法」についてとりあげていきたいと思います。これらはデータハイディングにおいては最も基本となる古典的な手法です。シンプルなアルゴリズムであるため実装が簡単にできる一方で,攻撃耐性に乏しいという決定的な弱点があります。
電子透かしの要件で「埋め込みが知覚されないこと」は非常に重要であります。しかし,圧縮などを通して埋め込んだ情報を取り出せなくなってしまっては本末転倒です。そのような観点から,埋め込み手法に攻撃耐性を持たせることは必須です。
電子透かしにおける一般的な議論にはなるのですが,「埋め込みが知覚されないこと」と「攻撃耐性をもたせること」はトレードオフの関係にあります。これらの観点を意識しながら,ビット置換法と量子化法において引数として設定できるパラメータを考えていきましょう。
ビット置換法
ビット置換法の発想は非常にシンプルです。これは,埋め込みたい情報(Payload)を対象となる音響信号の「$i$bit目」にそのまま埋め込んでいくという処理になります。透かしを取り出す時は,「$i$bit目」という情報を秘密鍵としてそのまま情報を読み取るだけの単純作業です。
埋め込むビットをMSBに近づければ近づけるほどデータの質は劣化します。逆に,LSBに近づければ近づけるほどデータの質を保ったまま透かしを埋め込むことができます。しかし,LSBに情報を埋め込むとちょっとした攻撃ですぐに情報が変わってしまうため,攻撃耐性が乏しいことになります。
実装では「$i$bit目から$j$ビット目までを置換する」というパラメータと,「データの最大値を$M$とする」というパラメータを設定します。データ最大値の設定は正規化のような処理を施すことで行なっていきます。データの最大値が大きければ大きいほどステップ幅が大きくなるため攻撃耐性が強くなります。一方で,最大値を小さくするとステップ幅も小さくなるためデータの劣化を防ぐことができます。これらはトレードオフの関係にあるのでした。
量子化法
量子化法では,データの取りうる値域を分割していき,それぞれに番号をつけていきます。それぞれの番号を2で割ったあまりを透かしとして抽出するというアイディアになります。つまり,透かしの埋め込みフェーズでは,ある量子化されていないデータを量子化して代表点に置き換えるときに,ペイロードが0のときは偶数の区間に含まれる代表点,ペイロードが1のときは奇数の区間に含まれる代表点に置き換えるという操作を行います。
ちなみに,代表点は各区間の中間に設定します。これは,区間の幅の半分だけ攻撃耐性を持たせることができるからです。区間の端を代表点にしてしまうと,データの値が少し変わっただけで区間が移動してしまい,表す透かし情報も変わってしまいます。
透かしの抽出は簡単で,埋め込み後のデータはすでに代表点に置き換えられていますから,これらが含まれる区間が偶数か奇数かによって透かし情報を抽出すればOKです。秘密鍵は量子化ステップ(分割数)になります。
実際の実装では,データ点が末端の区間にある場合は,値域を飛び越えた代表点に移動させた方が誤差が少なく済む場合が考えられるため,例外的な処理として記述する必要があります。
鵜木祐史, 西村明, 近藤和弘, 薗田光太郎, 西村竜一, 伊藤彰則. 鵜木 2018 音響情報ハイディング技術. 音響情報ハイディング技術. 日本音響学会, 2018.