以下に本発明の最良の形態を説明するが、開示される発明と実施の形態との対応関係を例示すると、次のようになる。明細書中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
さらに、この記載は、明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現し、追加される発明の存在を否定するものではない。
本発明の情報処理装置(例えば、図3のソース31)は、所定の記録媒体へのデータの書き込みを指示するコマンドに含まれる所定の情報か、所定の記録媒体からのデータの読み出しを指示するコマンドに含まれる所定の情報か、または、所定の記録媒体に記録されている所定の情報のうちのいずれか1つの情報を取得する取得手段(例えば、図3のIV生成部72)と、乱数を発生する発生手段(例えば、図3の乱数発生部71)と、取得手段により取得された情報と、発生手段により発生された乱数を用いて初期ベクトルを生成する生成手段(例えば、図3のIB生成部72)と、生成手段により生成された初期ベクトルと所定の鍵を用いてデータを暗号化する暗号化手段と、暗号化手段により暗号化されたデータと、生成手段により生成された初期ベクトルを多重化して出力する出力手段(例えば、図3の多重化部74)とを少なくとも備える。
以下に、本発明の実施の形態について図面を参照して説明する。
図3は、本発明を適用したシステムの一実施の形態の構成を示す図である。
図3に示したシステムは、データを供給するソース31と、データの供給を受けるシンク32から構成されている。図3に示したシステムが、データの再生を行う再生装置に適用された場合、ソース31は、所定の記録媒体からデータを読み出すドライブ側の装置であり、シンク32は、読み出されたデータを処理するホスト側(例えば、パーソナルコンピュータなど)の装置である。
図3に示したシステムが、データの記録を行う記録装置に適用された場合、ソース31は、所定のデータを提供する例えばパーソナルコンピュータなどのホスト側の装置であり、シンク32は、所定の記録媒体がセットされ、そのセットされた記録媒体にソース31側から供給されるデータを書き込むドライブ側の装置である。
データ(セクタデータ52)が読み出される、または、データ(セクタデータ101)が書き込まれる記録媒体(図3においては不図示)は、例えば、CD-ROM ( Compact Disc-ROM )、CD-R(Compact Disc-Recordable)、CD-RW ( Compact Disc-ReWritable )、DVD-ROM ( Digial Versatile Disc-ROM )、DVD-R ( Digial Versatile Disc-Recordable )、DVD-RW (Digital Versatile Disc-Rerecordable )、DVD+R ( DVD+Recordable )、DVD+RW ( DVD+ReWritable )、DVD-RAM(Digital Versatile Disk-Random Access Memory)、Blu-Ray Discなどのディスク状のものが考えられる。また、それらのディスク状のものに本発明を適用範囲は限定されるものではなく、他の形態(記録方式、形状など)の記録媒体でも良い。
また、ソース31とシンク32は、所定のインターフェースによりデータの授受が行えるように接続されている。所定のインターフェースとは、例えば、ATAPI(AT Attachement with Packet Interface)を用いることができる。ATAPIは、IDE(Integrated Drive Electronics)や、ATA(AT Attachement)インタフェースにCD−ROMドライブなどハードディスク以外の周辺機器を接続するためのデータ転送方式に従ったインタフェースであり、例えばSCSIから流用したコマンドをパケット化してIDEインタフェースに渡すことで周辺機器の制御が可能となる。同様のコマンドパケットはUSB ( Universal Serial Bus ) や IEEE1394 などの物理インターフェイスへも適用可能である。
ソース31は、供給するデータに関するセクタアドレス51と、供給するデータそのものであるセクタデータ52を、例えば、所定の記録媒体から読み出すことにより取得する。取得されたセクタアドレス51は、IV生成部72に供給される。IV生成部72は、暗号化や復号に用いられる初期ベクトルIV(Initialization Vector)を生成するために設けられている。
IV生成部72は、乱数発生部71により発生された乱数Rも供給される。IV生成部72により生成された初期ベクトルIVは、暗号化部73と多重化部74に供給される。暗号化部73は、供給されたセクタデータ52を鍵Ks(図3には図示していないが、認証処理部で生成されるセッションキー)と、初期ベクトルIVを用いて暗号化し、暗号文を多重化部74に供給する。多重化部74は、IV生成部72から供給された初期ベクトルIVと、暗号化部73から供給された暗号文を多重化(暗号文に初期ベクトルIVを付加)する。
ソース31側からは、セクタデータ52が暗号化された暗号文と、セクタアドレス51を用いて生成された初期ベクトルIVが多重化されたデータが出力される。
ソース31から出力されたデータは、シンク32の分離部91に供給される。分離部91は、供給されたデータから、初期ベクトルIVと暗号文を分離する。分離された初期ベクトルIVと暗号文は、共に復号部92に供給される。復号部92は、鍵Ksと初期ベクトルIVを用いて復号処理を実行し、セクタデータ101(ソース31側で取得されたセクタデータ52と同一のデータ)を生成する。
図3に示した暗号化部73は、図1に示したように、排他的論理和回路11と暗号化部12とを組み合わせることにより構成される。その説明は既にしたので、ここでは省略する。IV生成部72は、図1における排他的論理和回路11−1に供給される初期ベクトルIVを生成する。また、鍵Ksは、図3においては図示していないが、シンク32との間で認証処理を行う認証処理部から供給され、暗号化部12−1乃至12−Nの各部に供給される。
一方、図3に示した復号部92は、図2に示したように、排他的論理和回路21と暗号化部22とを組み合わせることにより構成される。その説明は既にしたので、ここでは省略する。分離部91は、図2における排他的論理和回路21−1に供給される初期ベクトルIVを、供給されたデータから分離(抽出)する。また、鍵Ksは、図3においては図示していないが、ソース31との間で認証処理を行う認証処理部から供給され、復号部22−1乃至22−Nの各部に供給される。
図3に示した各部は、ハードウェアで構成しても良いし、ソフトウェアで構成しても良い。
以下に、IV生成部72がどのように初期ベクトルIVを生成するかについて説明する。
図4は、IV生成部72における初期ベクトルIVの生成について説明するための図である。初期ベクトルIVは、セクタアドレス51を用いて生成される。セクタアドレス51としては、コマンドパケット121に含まれるLBA(Logical Block Address)、または、ディスク131に含まれる(記録されている)PSN(Physical Sector Number:物理セクタ番号)を用いることができる。
LBAは、論理的なアドレスを示し、例えば、リードコマンドに含まれ、ディスク203上の読み出すべきデータの物理媒体に依存せずにソース31とシンク32間で共通的に扱うことを可能とする論理的なアドレスを示す。LBAに対し、PSNは、物理的なアドレスを示す。コマンドパケット121には、LBAが含まれるが、このLBAは、ディスク131上の論理的なアドレスを示し、実際の物理的なアドレスは示していないため、物理媒体から読み出した物理的なアドレスを示すPSNから共通に扱える論理的なアドレスへ変換するといった処理が、必要に応じ行われる。
LBAとPSNは、論理的なアドレスを示すものと、物理的なアドレスを示すものという点で異なるが、共に、データの記録されている(記録する)アドレスを示す点で共通している。また、LBAとPSNは、読み出すべきセクタデータ毎、または、書き込むべきセクタデータ毎に異なる値となるため、そのような値を用いて初期ベクトルIVを生成すれば、初期ベクトルIVも、セクターデータ毎に更新することが可能となる。
ここで、LBAについて説明を加える。LBAは、コマンドパケット121に含まれる。コマンドパケットの詳細はINCITS T10 WORKING DRAFT “MultiMedia Command Set-4 (MMC-4)” に記述がある。ここでは、以下の説明に必要な部分について説明を加える。
コマンドパケット121は、所定の記録媒体、ここでは、ディスク131に対してデータを書き込む場合に発行されるライトコマンド(Write command)、または、ディスク131からデータを読み出す場合に発行されるリードコマンド(Read command)である。
図4に示したように、コマンドパケット121には、“Operation Code”が含まれる。この“Operation Code”には、リードコマンドであるか、ライトコマンドであるかを示すデータが書き込まれる。よって、この部分に書き込まれているデータを参照することで、コマンドパケット121を受け取った側は、リードコマンドであるか、ライトコマンドであるかを判別することが可能となっている。また、“Operation Code”は、1バイトのデータである
“Logical Block Address(LBA)”には、コマンドパケット121がリードコマンドである場合には、読み出すべきアドレスの開始LBAが書き込まれ、コマンドパケット121がライトコマンドである場合には、書き込むべきアドレスの開始LBAが書き込まれている。また、“Logical Block Address”は、4バイトのデータである。
“Transfer Length”には、コマンドパケット121がリードコマンドである場合には、読み出しセクタ数を指示するデータが書き込まれ、コマンドパケット121がライトコマンド104である場合には、書き込みセクタ数を指示するデータが書き込まれる。また、“Transfer Length”は、4バイトのデータである。
初期ベクトルIVを生成するのに、LBAが用いられる場合、図4に示したようなコマンドパケット121に含まれるLBAが用いられる。
初期ベクトルIVを生成するのに、PSNが用いられる場合、図4に示すように、ディスク131に記録されているPSNが用いられる。ここで、ディスク131に記録されているデータについて説明を加える。図5は、記録媒体がディスク状のものである場合のデータ構造について説明するための図である。図5に示すように、ディスク131は内周からリードインエリア132、ユーザデータエリア133、およびリードアウトエリア134という記録領域を有している。
読出し専用ディスクとして、例えば DVD-ROM disc の物理規格はECMA規格 “ ECMA-267 : 120mm DVD-Read Only Disk ” に定義されており、PSNは2KBの各セクタデータのヘッダに記録される。
書き込み可能ディスクとして、例えば DVD+RW disc の物理規格はECMA規格 “ ECMA-337 : Data Interchange on 120mm and 80mm Optical Disk using +RW format Capacity 4,7 and 1,6 GB per Side ” に定義されており、未記録ディスクにおけるPSNは ADIP (Address in Pre-grove) へ予め記録され、2KBの各セクタデータを書き込む際にADIPへ記録されているものと同じPSNをヘッダへも記録することで DVD-ROM disc とのデータ互換性をとることを可能とする仕組みとなっている。
これらの DVD 規格でのリードインエリア132は PSN=02FFFFhまでであり、ユーザデータエリア133は PSN=030000h から開始され、ここが LBA=000000h と定義される。この変換を行う変換部(不図示)の変換方法に関し、INCITS T10 WORKING DRAFT “MultiMedia Command Set-4 (MMC-4)” において各種光ディスクディスクにおける方法が記述されている。
ユーザデータエリア133には、オーディオデータ、静止画データ、ビデオデータ、ゲームデータなどのコンテンツ自体が記録される。ユーザーが自由に読み出し書き込みできるセクタデータ52は、このユーザデータエリア133内のセクタデータである。リードアウトエリア134は、ユーザデータエリア133の終端であることを示す領域である。
ディスク131のリードインエリア132、ユーザデータエリア133、リードアウトエリア134は、図6に示すように、セクタヘッダ141とセクタデータ142から構成されている。ここでは、セクタヘッダ141は、18バイトのデータであり、セクタデータ142は、2048バイトのデータとする。このような、セクタヘッダ141とセクタデータ142の組み合わせによるデータが複数、各データエリアに記録されている。
このようなデータ構造を有するディスク131に、PSNは書き込まれており、その書き込まれているPSNが用いられて初期ベクトルIVが生成される。
このように、本実施の形態においては、LBAまたはPSNという、データが記録されている位置(またはデータが書き込まれる位置)を示すアドレスの値が用いられて初期ベクトルIVが生成される。以下の説明においては、LBAとPSNを、それぞれ区別する必要がない場合、どちらか一方を指す記載として、セクタアドレスと記述する。
図4を参照するに、セクタアドレス51は、IV生成部72に供給される。IV生成部72に供給されるセクタアドレス51は、4バイトのデータであるが、初期ベクトルIVとして用いられるのは、16バイトのデータである。そこで、IV生成部72は、供給された4バイトのセクタアドレス51を16バイトのデータに変換するデータ拡張部111を備える。
データ拡張部111は、供給された4バイトのセクタアドレス51を、4個連結することにより、16バイトのデータにデータ拡張する。図4においては、4バイトのセクタアドレス51を“ADR”と図示し、データ拡張部111により拡張された結果としての16バイトのデータを[ADR||ADR||ADR||ADR]と図示してある。4個のセクタアドレス51を連結する際、単に、連結するだけでも良いが、奇数番目のビットのみを用いて、または、偶数番目のビットのみを用いて16バイトにデータ拡張するなどの方法で、データ拡張が行われるようにしても良い。
また、Hash関数などを用いてデータ拡張が行われるようにしても良い。
いずれの方法でデータ拡張が行われても良いが、この場合、データ拡張部111からは、16バイトのデータが出力され、排他的論理和回路112に供給される。排他的論理和回路112は、供給された16バイトのデータと、16バイトの乱数Rの排他的論理和を算出し、その値を、16バイトの初期ベクトルIVとして出力する。
このように、本実施の形態においては、パケットコマンド121に含まれるLBA、または、ディスク131に記録されているPSNの、どちらか一方をセクタアドレス51とし、そのセクタアドレス51から初期ベクトルIVが生成される。LBAまたはPSNのどちらを用いて初期ベクトルIVを生成するかについては、以下の説明において明らかにする。
図7は、初期ベクトルIVの生成に関わる他の方法を説明するための図である。図7に示した例では、コマンドパケット121に含まれる“Transfer Length”を用いて初期ベクトルIVが生成される。コマンドパケット121に含まれる“Transfer Length”は、カウンタ161を介してIV生成部72に供給される。
“Transfer Length”は、読み出すまたは書き込むセクタ数を示すものであり、その値は、LBAやPSNと異なり、常に更新されるというものではない。よって、仮に、“Transfer Length”の値をそのまま用いて初期ベクトルIVを生成すると、初期ベクトルIVを生成するためのデータが同じ値となってしまう。
そこで、“Transfer Length”の値が入力される毎に値が更新されるようにする仕組みとして、図7に示したように、IV生成部72の直前にカウンタ161を設ける(IV生成部72の一部として設けても良い)。カウンタ161は、入力された“Transfer Length”の値を、例えば、順次加算し、その累積加算された値を、データ拡張部162に供給する。カウンタ161を設けることにより、“Transfer Length”が入力される毎に、異なる値が、データ拡張部162に供給されるようにすることができる。
データ拡張部162は、図4に示したデータ拡張部111と同様の処理を実行する。すなわち、入力される4バイトのデータ(図7においては、CNTと図示してある)を、例えば、連結処理することにより、16バイトのデータ(図7においては、[CNT||CNT||CNT||CNT]と図示してある)にデータ拡張し、排他的論理和回路163に供給する。
排他的論理和回路163は、供給された16バイトのデータと、16バイトの乱数Rの排他的論理和を算出し、その値を、16バイトの初期ベクトルIVとして出力する。
このようにして、コマンドパケット121に含まれる“Transfer Length”が用いられて初期ベクトルIVが生成される。“Transfer Length”を用いた場合でも、カウンタ161を設け、“Transfer Length”毎に、乱数Rと排他的論理和が演算される値を更新されるようにすることで、生成される初期ベクトルIVの値を“Transfer Length”毎に更新することができる。もって、このような初期ベクトルIVを用いた暗号化は、セキュリティが向上されたものとすることができる。
LBA、PSN、または、“Transfer Length”が用いられて、IV生成部72(図3)により生成される初期ベクトルIVは、暗号化部73と多重化部74(図3)に供給される。次に、図8を参照して、暗号化部73と多重化部74の処理について説明する。なお、図8においては、初期ベクトルIVをセクタアドレス51から生成するとして説明を行う。
まず、4バイトで構成されるセクタアドレス51が、IV生成部72に供給される。IV生成部72は、図4を参照して説明したように、データ拡張部111により、入力された4バイトのセクタアドレス51を、16バイトのデータにデータ拡張し、そのデータ拡張されたデータと、乱数Rの排他的論理和を演算し、初期ベクトルIVを生成する。生成された初期ベクトルIVは、暗号化部73と多重化部74に供給される。
暗号化部73には、鍵Ksと、暗号化すべきデータとして、2048バイトのSector Dataも供給される。暗号化部73により暗号化された2048バイトのSector Dataは、Encrypted Sector Dataとして、多重化部74に供給される。多重化部74には、初期ベクトルIVも供給される。多重化部74は、供給された初期ベクトルIVに、その初期ベクトルIVを用いて暗号化されたEncrypted Sector Dataを多重化(付加)し、出力する。
暗号化部73は、2048バイトのデータが供給され、そして、2048バイトの暗号化されたデータが出力されるとして説明したが、例えば、暗号化部212が行う暗号化が、CBC(Cipher Block Chaining)方式を用いたものである場合、実際には16バイトに分割されたブロック毎に暗号化が行われ、出力される。
図9は、CBC方式に基づき暗号化部73が暗号化を行う場合の、暗号化部73の内部構成例を示すとともに、データの流れを示す図である。内部構成は、上述したように、図1に示したものと同様に、排他的論理和回路と暗号化部の組み合わせにより構成されている。よって、図1と同じ符号を付し、説明を続ける。
図9に示すように、2048バイトのSector Dataは、16バイト(Byte)毎のデータに分割される。16バイト毎に分割されるので、結果的に、128個のブロックに分割されることになる。図1を参照して既に説明したように、各ブロックは、対応する排他的論理和回路11−1乃至11−128に供給される。そして、各排他的論理和回路11−1乃至11−128から出力されたデータは、対応する暗号化部12−1乃至12−128に供給される。
暗号化部12−1乃至12−128により暗号化されたデータは、Encrypted Sector Dataとして出力される。暗号化部12−1乃至12−127から出力されたデータは、後段の排他的論理和回路11−2乃至11−128にも供給される。しかしながら、排他的論理和回路11−1には、前段の暗号化部が存在していないため、前段から供給されるデータはない。そのために、IV生成部72により生成された初期ベクトルIVが、排他的論理和回路11−1に供給される構成とされている。
供給される初期ベクトルIVは、LBA、PSN、または、Transfer Lengthであり、各セクタ毎に、各セクタに対応する初期ベクトルIVが生成されることになる。例えば、ソース31側で発行されるコマンドパケット121のLBAが“#1”であるときに生成される初期ベクトルIVと、LBAが“#4”であるときに生成される初期ベクトルIVは、当然異なるものとなる。
また、初期ベクトルIVは、セクタデータ51などがそのまま流用されるのではなく、ハッシュ関数などが用いられてデータ拡張され、乱数Rとの排他的論理和を用いて加工されて生成される。このようにすることで、同一の初期ベクトルIVが生成される確率を低くすることができる。仮に同一のSector Dataを暗号化したとしても、初期ベクトルIVが異なるために(初期ベクトルIVが同一のものとなる可能性を低くすることができるために)、暗号化されたものは異なるデータとすることができる。もって、暗号化される前のSector Dataが、暗号化されたデータから推測されてしまう(解読されてしまう)ようなことを防ぐことが可能となる。
次に、図10を参照し、シンク32側の処理およびデータの流れについて説明する。まず、シンク32の分離部91に、ソース31側からのデータが供給される。この供給されるデータは、初期ベクトルIVと、その初期ベクトルIVを用いて暗号化されたEncrypted Sector Dataである。
分離部91は、供給されたデータから、初期ベクトルIVとEncrypted Sector Dataを分離し、共に、復号部92に供給する。復号部92には、鍵Ksも供給される。この鍵Ksは、ソース31側の暗号化部73に供給された鍵Ksと同様のものであり、ソース31との間における認証処理の過程で生成された鍵を、鍵Ksとして用いることができる。
このように、復号部92には、初期ベクトルIV、鍵Ks、および、2048バイトのEncrypted Sector Dataが供給される。復号部92は、初期ベクトルIV、鍵Ksを用いてEncrypted Sector Dataを復号し、2048バイトのSector Dataを生成する。生成されたSector Dataは、図示されていないアプリケーションソフトウェアやディスプレイなどに供給される。
復号部92には、2048バイトのデータが供給され、復号され、そして、2048バイトの復号されたデータが出力されるとしたが、暗号化部73と同様に、例えば、復号部92が行う復号が、CBC(Cipher Block Chaining)方式を用いたものである場合、実際には16バイトに分割されたブロック毎に復号が行われ、出力される。
図11は、CBC方式に基づき復号部92が復号を行う場合の、復号部92の内部構成例を示すとともに、データの流れを示す図である。内部構成は、上述したように、図2に示したものと同様に、排他的論理和回路と復号部の組み合わせにより構成されている。よって、図2と同じ符号を付し、説明を続ける。
図11に示すように、2048バイトのEncrypted Sector Dataは、16バイト(Byte)毎のデータに分割される。16バイト毎に分割されるので、結果的に、128個のブロックに分割されることになる。図2を参照して既に説明したように、各ブロックは、対応する復号部22−1乃至22−128に供給される。そして、各復号部22−1乃至22−128から出力されたデータは、対応する排他的論理和回路21−1乃至21−128に供給される。
排他的論理和回路21−1乃至21−128により排他的論理和が演算されたデータは、Sector Dataとして、図示されていないディスプレイなどに出力される。復号部22−1乃至22−127に供給されるデータ(Encrypted Sector Data)は、後段の排他的論理和回路21−2乃至21−128にも供給される。しかしながら、排他的論理和回路21−1には、前段の復号部が存在していないため、前段から供給されるデータはない。そのために、分離部91により分離された初期ベクトルIVが、排他的論理和回路21−1に供給される構成とされている。
この供給される初期ベクトルIVは、ソース31の暗号化部73で暗号化を行う際に用いられた初期ベクトルIVと同一のものであり、多重化部74により対応するEncrypted Sector Dataに多重化されたものである。よって、暗号化部73と復号部92には、同一の初期ベクトルIVが供給されることになる。
次に、ソース31はドライブ装置であるとし、シンク32はホストであるとして、さらに説明を続ける。
図12は、本発明を適用したシステムの構成例を示す図である。図12に示した構成例は、ディスク203からデータを読み出す(再生する)再生装置の構成例である。ドライブ装置201は、認証処理部211を有し、ホスト202は、認証処理部221を有する。認証処理部211と認証処理部221により、相互認証に関わる処理が実行される。
ディスク203からデータを読み出す再生装置は、ドライブ装置201の暗号化部212、多重化部213、IV生成部214、乱数発生部215、および、アクセス処理部216を含み、ホスト202の分離部222と復号部223を含む構成とされている。
暗号化部212には、アクセス処理部216による処理により、ディスク203から読み出されたセクタデータと、認証処理部211から鍵Ksが供給される。また、暗号化部212には、IV生成部214により生成された初期ベクトルIVも供給される。
暗号化部212は、供給されたセクタデータを鍵Ksと初期ベクトルIVを用いて暗号化し、多重化部213に供給する。多重化部213は、暗号化されたセクタデータと、初期ベクトルIVを多重化し、ホスト202の分離部222に供給する。よって、ドライブ装置201からホスト202に供給されるデータは、暗号化されたセクタデータと、初期ベクトルIVである。
IV生成部214は、暗号化部212に供給する初期ベクトルIVを、ディスク203から読み出されるPSNと乱数発生部215により発生される乱数Rを用いて生成する。このPSNを用いた初期ベクトルIVの生成については、図4を参照して既に説明したのでその説明は省略する。アクセス処理部216は、ホスト231から供給されるリードコマンド231に基づき、ディスク203にアクセスし、データを読み出すための処理を実行する。
なお、図示はしないが、ホスト231から供給されるリードコマンド231がIV生成部214にも供給されるように構成し、リードコマンド231に含まれるLBA(図4)を用いて初期ベクトルIVを生成するようにしても良い。
一方、ホスト202の分離部222は、ドライブ装置201からインターフェースを介して暗号化されたセクタデータの供給をうける。この供給されるセクタデータには、初期ベクトルIVが付加されているため、分離部222は、その初期ベクトルIVを、セクタデータから分離する。
復号部223は、認証処理部221から供給される鍵Ksと分離部222により分離された初期ベクトルIVを用いて復号処理を実行し、セクタデータ(ディスク203から読み出されたセクタデータと同一のデータ)を生成する。
図12に示した構成の再生装置における処理について、図13のタイミングチャートを参照して説明する。ホスト202は、ステップS11において、ドライブ装置201は、ステップS31において、それぞれ相互認証(Authentication)を行う。この相互認証が正常に行われた場合のみ、次のステップに処理が進められる。また、この相互認証の結果、ドライブ装置201の認証処理部211とホスト202の認証処理部221との、それぞれにおいて鍵Ksが生成される(共有される)ことになる。
ホスト102は、ステップS12において、リードコマンド231を発行する。発行されるリードコマンド231は、例えば、図4に示したデータ構成のコマンドパケット121で、“Operation Code”がリードコマンドを示す値が記載されているコマンドである。ここでは、その発行されるリードコマンド231に含まれる“LBA”は“#1”であり、“Transfer Length”は“3”であるコマンドが発行されたとする。
ステップS12における処理で発行されたリードコマンド231は、ステップS32において、ドライブ装置201のアクセス処理部216に供給される。アクセス処理部216は供給されたコマンドの“Operation Code”を参照し、リードコマンド231であることを認識し、“Logical Block Address”を参照し、この場合、“LBA”=#1ということを認識し、“Transfer Length”を参照して、この場合、“Transfer Length”=3ということを認識する。
そして、アクセス処理部216は、転送開始LBAを示す“LBA”=#1から、“Transfer Length”で示されるセクタ数(この場合3)だけディスク203からデータが読み出されるように制御する。すなわち、アクセス処理部216は、ディスク203からデータを読み出す処理を制御するわけだが、図12には図示されていないLBA/PSN変換により、リードコマンド231で指定されたLBAに対応するPSNを取得する。
このような変換が行われるのは、ドライブ装置201で行われるのは、光ディスク等のディスク203の記録領域を所定のサイズに分けた物理的な物理セクタが、論理的な論理セクタに割り当てられているからである。そして、外部の装置(この場合、ホスト202)からは、データを読み出すべき論理セクタ(LBA)が指定され、ドライブ装置201では、その論理セクタに割り当てられている物理セクタ(PSN)からデータが読み出されるようになされているからである。
LBAがPSNに変換されると、ステップS33の処理として、その変換されたPSNが指し示すディスク203上の位置が検索される。この検索の結果、ピックアップがディスク203上の、読み出すべき位置に移動されるなどの処理が実行され、ディスク203からデータが読み出される。
ステップS52において、ディスク203からデータが読み出される。この場合、“LBA”=#1に対応するデータである“Physical Sector Data #1”が読み出される。ステップS44において、ディスク203から読み出されたデータ(セクタデータ#1)は、暗号化部212に供給されると同時にそのセクタデータ#1に対応するPSN#1がIV生成部214へ供給される。
IV生成部214は、供給されたPSN#1と、乱数発生部215から供給される乱数Rを用いて初期ベクトルIV#1を生成し、暗号化部212と多重化部213に出力する。暗号化部212には、認証処理部211から鍵Ksが供給され、IV生成部214から初期ベクトルIV#1が供給される。暗号化部212は、これらの鍵Ksと初期ベクトルIV#1を用いて、セクタデータ#1を暗号化する。暗号化されたセクタデータ#1(この場合、Encrypted Sector Data #1)は、多重化部213により、初期ベクトルIV#1と多重化され、ステップS35の処理として、ホスト202に供給される。
ホスト202の分離部222は、供給されたデータから、Encrypted Sector Data #1と、初期ベクトルIV#1を分離し、復号部223に供給する。復号部223は、供給されたEncrypted Sector Data #1を、認証処理部221から供給される鍵Ksと分離部222から供給される初期ベクトルIV#1を用いて復号し、セクタデータ#1を生成する。このようにして生成されたセクタデータ#1は、図示されていないアプリケーションソフトウェアやディスプレイやスピーカに提供される。
このような処理がドライブ装置201、ホスト202、および、ディスク203間で繰り返される。ディスク203側では、ステップS53,S54の各処理で、順次、Physical Sector Data #2,#3が読み出される。すなわち、ディスク203側からは、ドライブ装置201の検索制御に応じて順次、連続的にセクターデータが読み出され、ドライブ装置201に供給される。ドライブ装置201は、ステップS36乃至S39の各ステップの処理において、順次、供給されたセクタデータを受信し、暗号化し、多重化し、ホスト202に供給する。
よって、セクタデータ毎に初期ベクトルIVも生成される。すなわち、この場合、ディスク201からPhysical Sector Data #2,#3がそれぞれ読み出されると、そのPhysical Sector Data #2,#3に対応するPSNを用いて、初期ベクトルIV#2,#3も生成される。このようにして、本実施の形態においては、セクタデータ毎に初期ベクトルIVが生成されるため、かつ、生成される初期ベクトルIVは、セクタデータ毎に異なるため、インタフェースを介して行われるデータの授受をよりセキュリティを高めたものとすることができる。
このようにして、ディスク203からの読み出しの動作(再生処理)が行われる。
次に、ディスク203に対するデータの書き込み(記録)について説明する。図14は、ディスク203にデータを記録する記録装置の構成例を示す図である。ドライブ装置201は、認証処理部211を有し、ホスト202は、認証処理部221を有する。認証処理部211,221は、再生装置と共用できる(同一のものを利用できる)ため、図12に示した再生装置と同様の符号を付す。
ディスク203にデータを書き込む記録装置は、ドライブ装置201の復号部251、分離部252、および、アクセス処理部216を含み、ホスト202の暗号化部261、多重化部262、IV生成部263、乱数発生部264、および、LBA計算部265を含む構成とされている。
ホスト202の暗号化部261には、図示されていない記録媒体などから読み出され、ディスク203に記録されるセクタデータと、認証処理部221から暗号化に用いる鍵Ksが供給される。また、暗号化部261には、IV生成部263により生成された初期ベクトルIVも供給される。
暗号化部261は、供給されたセクタデータを鍵Ksと初期ベクトルIVを用いて暗号化し、多重化部262に供給する。多重化部262は、暗号化されたセクタデータと、初期ベクトルIVを多重化し、ドライブ装置201の分離部262に供給する。よって、ホスト202からドライブ装置201に供給されるデータは、暗号化されたセクタデータと、初期ベクトルIVである。
IV生成部263は、暗号化部261に供給する初期ベクトルIVを、ライトコマンド271に含まれるLBAと乱数発生部264により発生される乱数Rを用いて生成する。IV生成部263に供給されるLBAは、LBA計算部265から供給される。LBA計算部265にはライトコマンド271が供給される。LBA計算部265は、供給されたライトコマンド271からLBAを抽出し、セクタデータ毎に異なる値がIV生成部263に供給されるように計算を行う。
ライトコマンド271には、書き込みの開始位置を示すLBAのみが記述されており、書き込むべきセクタデータ毎のLBAが記述されているわけではない。よって、セクタデータ毎に異なる初期ベクトルIVが用いられて暗号化が行われるようにするために、LBA計算部265が設けられている。LBA計算部265は、ライトコマンド271に含まれるLBAの値を基準とし、その値を、例えば、セクタデータ毎に1づつ増加することにより値を更新するといった処理を行う。
例えば、ライトコマンド271に含まれるLBAの値が“1”の場合、LBA計算部256から出力される値は、セクタデータ毎に、1、2、3、...といったような1づつ値が増加(インクリメント)された値である。
このように処理を行うLBA計算部265を設けることにより、IV生成部263では、セクタデータ毎に異なる初期ベクトルIVを生成することが可能となる。
LBAを用いた初期ベクトルIVの生成については、図4を参照して既に説明したのでその詳細な説明は省略する。
一方、ドライブ装置201の分離部252は、ドライブ装置201からインターフェースを介して暗号化されたセクタデータの供給をうける。この供給されるセクタデータには、初期ベクトルIVが付加されているため、分離部252は、その初期ベクトルIVを、セクタデータから分離する。
復号部251は、認証処理部211から供給される鍵Ksと分離部252により分離された初期ベクトルIVを用いて復号処理を実行し、セクタデータ(ホスト202側でディスク203に記録する対象とされたセクタデータと同一のデータ)を生成する。
アクセス処理部216は、ホスト202から供給されるライトコマンド271に基づき、ディスク203にアクセスし、データを書き込むための処理を実行する。
図14に示した記録装置の構成例は、ライトコマンド271に含まれるLBAを用いて初期ベクトルIVを生成する場合の構成例である。すなわち、図14に示した記録装置の構成例は、図4を参照して説明した初期ベクトルIVの生成の仕方を適用した場合の構成例である。
図15に、図7を参照して説明した初期ベクトルIVの生成の仕方を適用した場合、すなわち、ライトコマンド271に含まれる“Transfer Length”(以下、適宜、TLと略記する)を用いて初期ベクトルIVを生成する場合の記録装置の構成例を示す。
図14に示した再生装置と図15に示した再生装置の構成を比較するに、図15に示した再生装置は、図14に示した再生装置のLBA計算部265を、カウンタ281に置き換えた構成とされる。その他の部分は、図14に示した再生装置と同様の構成であるので、同様の符号を付し、その説明は省略する。
カウンタ281は、図7に示したカウンタ161と同様の機能を有する。すなわち、入力されたライトコマンド271からTLの値を読み出し、所定の数値Nに、1だけインクリメントされた値を順次TLの値の分だけ出力する。
所定の数値Nとは、ライトコマンド271が入力された時点で設定されている値である。また、この所定の数値Nは、例えば、TLの値を累積加算した値である。
カウンタ281からは、例えば、ライトコマンド271に含まれるTLの値が3である場合、3つの値がセクタデータ毎に出力される。その出力される値は、“N+1”、“N+2”、“N+3”という値である。
このように処理を行うカウンタ281を設けることにより、IV生成部263では、セクタデータ毎に異なる初期ベクトルIVを生成することが可能となる。
TL(Transfer Length)を用いた初期ベクトルIVの生成については、図7を参照して既に説明したのでその詳細な説明は省略する。
図14または図15に示した構成の記録装置における処理について、図16のタイミングチャートを参照して説明する。
ホスト202は、ステップS101において、ドライブ装置201は、ステップS121において、それぞれ相互認証(Authentication)を行う。この相互認証が正常に行われた場合のみ、次のステップに処理が進められる。また、この相互認証の結果、ドライブ装置201の認証処理部211とホスト202の認証処理部221との、それぞれにおいて鍵Ksが生成される(共有される)ことになる。
ホスト102は、ステップS102において、ライトコマンド271を発行する。発行されるライトコマンド271は、例えば、図4に示したデータ構成のコマンドパケット121で、“Operation Code”がライトコマンドを示す値が記載されているコマンドである。ここでは、その発行されるライトコマンド271に含まれる“LBA”は“#1”であり、“Transfer Length”は“3”であるコマンドが発行されたとする。
ステップS102における処理で発行されたライトコマンド271は、LBA計算部265(図14)(または、カウンタ281(図15)、以下の説明においては、代表してLBA計算部265を例に挙げて説明を続ける)に供給されると共に、ステップS122において、ドライブ装置201のアクセス処理部216に供給される。
ドライブ装置201のアクセス処理部216は供給されたコマンドの“Operation Code”を参照し、ライトコマンド271であることを認識し、“Logical Block Address”を参照し、この場合、“LBA”=#1ということを認識し、“Transfer Length”を参照して、この場合、“Transfer Length”=3ということを認識する。
そして、アクセス処理部216は、転送開始LBAを示す“LBA”=#1から、“Transfer Length”で示されるセクタ数(この場合3)だけディスク203にデータが書き込まれるように制御する。すなわち、アクセス処理部216は、ディスク203へのデータの書き込み処理を制御するわけだが、図14(図15)には図示されていないLBA/PSN変換により、ライトコマンド271で指定されたLBAに対応するPSNを取得する。
LBAがPSNに変換されると、ステップS123の処理として、その変換されたPSNが指し示すディスク203上の位置が検索される。この検索の結果、ピックアップがディスク203上の、書き込むべき位置に移動されるなどの処理が実行され、ディスク203へのデータの書き込みを行うための準備がされる(ステップS126)。
一方ステップS103において、ホスト202は、ディスク203に書き込むデータを取得する。まず、ステップS103において、Sector Data #1(セクタデータ#1)が取得される。そして、取得されたセクタデータ#1は、暗号化部261に供給されると同時にそのセクタデータ#1に対応するLBA#1が、LBA計算部265からIV生成部263へ供給される。
IV生成部263は、供給されたLBA#1と、乱数発生部264から供給される乱数Rを用いて初期ベクトルIV#1を生成し、暗号化部261と多重化部262に出力する。暗号化部263には、認証処理部221から鍵Ksが供給され、IV生成部263から初期ベクトルIV#1が供給される。暗号化部261は、これらの鍵Ksと初期ベクトルIV#1を用いて、セクタデータ#1を暗号化する。暗号化されたセクタデータ#1(この場合、Encrypted Sector Data #1)は、多重化部262により、初期ベクトルIV#1と多重化され、ステップS103の処理として、ドライブ装置201に供給される。
このような処理が、ホスト202側で繰り返し行われることにより、暗号化されたセクタデータと、そのセクタデータの暗号化に用いられた初期ベクトルIVの組が、順次、ドライブ装置201側に供給される。
一方ドライブ装置201の分離部252は、供給されたデータから、Encrypted Sector Data #1と、初期ベクトルIV#1を分離し、復号部251に供給する。復号部251は、供給されたEncrypted Sector Data #1を、認証処理部211から供給される鍵Ksと分離部252から供給される初期ベクトルIV#1を用いて復号し、セクタデータ#1を生成する。このようにして生成されたセクタデータ#1(Physical Sector Data #1)は、ステップS127の処理として、ドライブ装置201からディスク203に書き込まれる。
このような処理がドライブ装置201側で繰り返し行われることにより、ホスト202側から供給されたセクタデータが、順次、ディスク203に書き込まれる。
このように、ディスク201に対してセクタデータが書き込まれる場合においても、セクタデータ毎に、初期ベクトルIVが生成され、暗号化されるので、インタフェースを介したデータの授受をよりセキュリティを高めた状態で行うことが可能となる。
図17は、一般に先読み動作などと称されるRead Ahead動作について考慮した再生装置の構成例を示す図である。
図12に示した再生装置の構成と、図17に示した再生装置の構成を比較するに、図17に示した再生装置には、先読み動作を実行するために、リードコマンド処理部301とバッファリング・転送処理部302が、図12に示した再生装置に追加された構成とされている。
リードコマンド処理部301は、ホスト202側から供給されるリードコマンド231を処理するために設けられており、処理結果は、バッファリング・転送処理部302とアクセス処理部216に供給される構成とされている。バッファリング・転送処理部302は、多重化部213から出力されたセクタデータと初期ベクトルIVが多重化されたデータを、一旦記憶(バッファリング)し、ホスト202側に転送するための処理を実行する。
その他の部分は、図12に示した再生装置と同様の構成なので、同様の符号を付し、その説明は省略する。
図17に示した再生装置の動作について、図18のタイミングチャートを参照して説明する。
ホスト202は、ステップS201において、ドライブ装置201は、ステップS221において、それぞれ相互認証(Authentication)を行う。この相互認証が正常に行われた場合のみ、次のステップに処理が進められる。また、この相互認証の結果、ドライブ装置201の認証処理部211とホスト202の認証処理部221との、それぞれにおいて鍵Ksが生成される(共有される)ことになる。
ホスト202は、ステップS202において、リードコマンド231を発行する。図4に示したデータ構成のコマンドが発行されるわけだが、ここでは、“LBA”=#1であり、“Transfer Length”=3であるコマンドが発行されたとする。もちろんこの場合、“Operation Code”には、リードコマンド231であることを示すデータが記述されている。
ステップS202における処理で発行されたリードコマンド231は、ステップS222において、ドライブ装置201のリードコマンド処理部301に供給される。リードコマンド処理部301は、供給されたコマンドの“Operation Code”を参照し、リードコマンド231であることを認識し、“Logical Block Address(LBA)”を参照し、この場合、“LBA”=#1ということを認識し、“Transfer Length(TL)”を参照して、この場合、“Transfer Length”=3ということを認識する。
そして、リードコマンド処理部301は、転送開始LBAを示す“LBA”=#1と“Transfer Length”=3というデータをバッファリング・転送処理部302に供給する。バッファリング・転送処理部302は、このようなデータの供給を受けることにより、LBA”=#1からの転送要求があり、転送するセクタ数は、3単位であるということを設定する。
また、リードコマンド処理部301は、“LBA”=#1というデータを、アクセス処理部216に供給する。アクセス処理部216は、ディスク203からデータを読み出す処理を制御するわけだが、ここには明示されないLBA/PSN変換によりリードコマンド231で指定されたLBAに対応するPSNを取得する。
LBAがPSNに変換されると、ステップS223の処理として、その変換されたPSNが指し示すディスク203上の位置が検索される。この検索の結果、ピックアップがディスク203上の、読み出すべき位置に移動されるなどの処理が実行され、ディスク203からデータが読み出される。
ステップS262において、ディスク203から、データが読み出される。この場合、“LBA”=#1に対応するデータである“Physical Sector Data #1”が読み出される。ステップS224において、ディスク203から読み出されたセクタデータ(Physical Sector Data #1)が、暗号化部212に供給されると同時に、そのセクタデータに対応するPSNがIV生成部214に供給される。
IV生成部214は、供給されたPSNと乱数発生部215により発生された乱数Rを用いて初期ベクトルIVを生成する。同時にPSN(PSNに対応するLBA)はバッファリング・転送処理部302へも入力され、バッファリング・転送処理部302は、LBAに対応するセクタデータを暗号化部212から多重化部213を介して受け取る用意をする。
暗号化部212には、認証処理部211から鍵Ksが供給され、IV生成部214から初期ベクトルIVも供給されている。暗号化部212は、これらの鍵Ksと初期ベクトルIVを用いて、セクタデータ(この場合、Physical Sector Data#1)を暗号化する。暗号化されたセクタデータ(この場合、Encrypted Sector Data #1)と、そのセクタデータの暗号化に用いられた初期ベクトルIV(この場合、初期ベクトルIV#1)は、多重部213において多重化され、バッファリング・転送処理部302に供給される。
バッファリング・転送処理部302にバッファリングされたセクタデータと初期ベクトルIVから構成されるデータは、ステップS225の処理として、バッファリング・転送処理部302からホスト202の分離部222に供給される。
分離部222は、供給されたデータから、セクタデータと初期ベクトルIV(この場合、Encrypted Sector Data #1と初期ベクトルIV#1)を分離し、復号部223に供給する。復号部223は、供給されたEncrypted Sector Data #1を、認証処理部221から供給される鍵Ksと、分離部222から供給される初期ベクトルIV#1を用いて復号し、セクタデータ#1を生成する。このようにして生成されたセクタデータ#1は、図示されていないアプリケーションソフトウェアやディスプレイやスピーカに提供される。
このような処理がドライブ装置201、ホスト202、および、ディスク203間で繰り返される。ディスク203側では、ステップS263乃至S273の各処理で、順次、Physical Sector Data #2乃至#12が読み出される。すなわち、ディスク203側からは、ドライブ装置201の検索制御に応じて順次、連続的にセクターデータが読み出され、ドライブ装置201に供給される。ドライブ装置201は、ステップS226乃至S242の各ステップの処理において、順次、供給されたセクタデータを受信し、暗号化し、初期ベクトルIVと多重化し、ホスト202の要求に応じてホスト202に供給する。
ステップS205において、ホスト202がステップS202で要求する最後のセクタデータ“Physical Sector Data #3”がドライブ装置201からホスト202へ供給されると、ドライブ装置201のバッファリング・転送処理部302は、データの転送を停止する。これは、この場合、“Transfer Length”が“3”に設定されおり、ステップS205の処理が行われた時点(ステップS229の処理が行われた時点で)、既に“Encrypted Sector Data”として“#1”乃至“#3”の3つのセクタデータが送信済みの状態であるためである。このような状況のときには、既に要求されたデータは送信(転送)したということで、ドライブ装置201はホスト202へのデータの転送を停止する。
なお、ドライブ装置201は、ホスト202に対してのデータの転送を停止する一方で、ディスク203から読み出されているセクターデータを受信し続けている。そして、その受信し続けられているセクタデータは、順次、暗号化部212による暗号化が施され、多重化部213による多重化が行われ、バッファリング・転送処理部302によりバッファリングされる。
ホスト202は、ステップS206において、新たなリードコマンド231を発行する。ステップS207において発行されるリードコマンド231は、“LBA”=#4であり、“Transfer Length”=3である。このようなリードコマンド231が発行されると、ステップS235において、バッファリング・転送処理部302にバッファリングされている“初期ベクトルIV#4”が多重化された“Encrypted Sector Data #4”が、ホスト202に供給される。
このように、ホスト202においてリードコマンド231が発行されると、ドライブ装置201によりディスク203から読み出されたセクタデータが順次、ホスト202側に供給されるという処理が繰り返される。
このように、先読み動作に対応した再生装置に対しても、本発明を適用することができる。
上述した実施の形態において、初期ベクトルIVは、PSN、LBA、または、Transfer Lengthのいずれかと、乱数Rを用いてセクタデータ毎に生成されるとして説明した。このことを換言すると、1つの初期ベクトルIVを生成するのに、2つの変数を用いていることになる。2つの変数を用いる事により、同一の初期ベクトルIVが生成される可能性を低くすることができ、結果として、そのような初期ベクトルIVを用いて暗号化されるデータの盗用などの不当な利用を防ぐことができ、セキュリティを高めることが可能となる。
乱数Rをセクタデータ毎に発生させるようにしても良いが、所定のセクタ数、例えば、100セクタ毎に乱数Rが発生されるようにしても良い。100セクタ毎に乱数Rが発生される場合、100個のセクタデータに対しては、同一の乱数Rが用いられて初期ベクトルIVが生成され、次の100個のセクタデータに対しては、前記乱数Rとは異なる新たな乱数R’が用いられて初期ベクトルIVが生成される。
このように、乱数Rを所定のセクタ数毎に発生するようにしても、換言すれば、所定数のセクタデータに対しては同一の乱数Rが用いられて初期ベクトルIVが生成されるようにしても、初期ベクトルIVを生成する際に用いられるもう一方の変数であるPSN、LBA、Transfer Lengthは、セクタデータ毎に変更されるので、結果として、セクタデータ毎に異なる初期ベクトルIVが生成されることになる。
このように、乱数Rを所定のセクタ数毎に発生するようにした場合、乱数Rを発生するのに係る処理能力を低減させることができ、かつ、初期ベクトルIVを更新することによるセキュリティの向上も可能となる。
ここで、ドライブ装置201とホスト202との間で授受されるデータのサイズについて説明を加える。
図19は、データのサイズについて説明するための図である。上述したように、ディスク203から読み出される、または、書き込まれるセクタデータは、2048バイトである。また、初期ベクトルIVは、図4などを参照して説明したように16バイトである。よって、多重化部74,213,262(以下、多重化部213を例に挙げて説明を続ける)により多重化された結果出力されるデータは、図19Aに示すように、16バイトの“初期ベクトルIV”と、2048バイトの“Encrypted Sector Data”から構成される2064バイトのデータである。
このような2046バイトのデータが、ドライブ装置201とホスト202との間で授受される。
ところで、ドライブ装置201とホスト202は、所定のインタフェース(バス)により接続されており、そのインタフェースとしては、例えば、ATAPI(AT Attachement with Packet Interface)などが考えられる。
ATAPIなどのインタフェースは、所定の規格に基づき設計されている。例えばインタフェースとしてATAPIが用いられた場合、ATAPIの規格として、2064バイトのデータの授受を行えるようには規格されていない。そのため、2048バイトのデータの授受を行えるようにするには、ATAPIの規格を変更するか、または、ATAPI以外で2048バイトのデータを授受できるインタフェースを新たに設計し、使用するかが考えられる。
もちろん、そのようにしてもよいが、ATAPIなどの既存のインタフェースにおいても、本発明を適用できるようにするために、多重化部213から出力されるデータの構成を、図19Bや図19Cのように構成しても良い。
既存のインタフェースでは、CD(Compact Disk)用のセクタサイズとして例えば、2056バイトや2324バイトなどが扱えるように規格されている。そこで、図19Bに示したように、2048バイトの“Encrypted Sector Data”に、8バイトの“初期ベクトルIV2”を多重化し、2048バイトのデータにする。または、図19Cに示したように、2048バイトの“Encrypted Sector Data”に、16バイトの“初期ベクトルIV”を多重化し、さらに、“00h”などの定数から構成される260バイトのデータを多重化し、2324バイトのデータにする。なお、ここでは、8バイトの初期ベクトルを初期ベクトルIV2と、記述する。
このようにすることで、既存のインタフェースを用いた場合においても、本発明を適用することが可能となる。
さらにデータサイズについて説明を加えるに、図19Aまたは図19Cに示したデータ構造においては、16バイトの初期ベクトルIVが多重化されるが、図19Bに示したデータ構造においては、8バイトの初期ベクトルIV2が多重化される。このように、データ構造により、多重化される初期ベクトルIVのサイズが異なる。
上述した実施の形態においては、例えば、図4を参照して説明したように、生成される初期ベクトルIVは、16バイトである。上述した実施の形態のように、16バイトの初期ベクトルIVを生成し、かつ、図19Bのように授受されるデータを構成する場合、例えば、生成された16バイトの初期ベクトルIVの下位8バイトまたは上位8バイトを、初期ベクトルIV2とすることが考えられる。
または、生成された16バイトの初期ベクトルIVのうちから、8バイト分のデータを抽出し、初期ベクトルIV2を生成するようにしても良い。いずれにしても、図19Bに示したデータ構成のデータを授受するとした場合、生成された16バイトの初期ベクトルIVから、多重化される8バイトの初期ベクトルIV2が生成される。
8バイトの初期ベクトルIV2が多重化されるようにした場合であっても、暗号化や復号には、16バイトで構成される同一の初期ベクトルIVが用いられる。よって、生成された初期ベクトルIVから、一旦8バイトの初期ベクトルIV2を生成し、その8バイトの初期ベクトルIV2を、16バイトに拡張し、暗号化または復号に用いる。
例えば、8バイトの初期ベクトルIV2(IV2とする)を連結し、16バイトの初期ベクトルIV’(IV’=[IV2||IV2])に拡張する。そして、この初期ベクトルIV’を用いてセクタデータを暗号化する。暗号化されたセクタデータに多重化されるのは、8バイトの初期ベクトルIV2である。
そして、復号は、受信されたデータに多重化されている8バイトの初期ベクトルIV2を分離し、その分離された8バイトの初期ベクトルIV2を連結し、16バイトの初期ベクトルIV’(IV’=[IV2||IV2])に拡張する。その拡張された初期ベクトルIV’が用いられて復号が行われる。
多重化される初期ベクトルIVが8バイトであり、生成される初期ベクトルIVが16バイトである場合、上述したように処理が行われる。
多重化される初期ベクトルIVが8バイトであり、生成される初期ベクトルIVも8バイトであるようにすることも可能である。このような場合について、以下に説明する。
図20は、図4に対応する図であり、LBAまたはPSNから初期ベクトルIV2を生成する場合を説明するための図である。図4を参照して説明した初期ベクトルIVの生成の仕方と比較し、図20を参照して説明する初期ベクトルIV2の生成の仕方は、4バイトのセクタアドレス51を、データ拡張部111’により、8バイトのデータに拡張する点と、乱数発生部71により発生される乱数Rが8バイトで構成される点が異なる。
すなわち、コマンドパケット121に含まれる4バイトのLBAまたは、ディスク131に含まれる4バイトのPSNは、セクタアドレス51として、IV生成部72のデータ拡張部111’に供給される。そして、データ拡張部111’は、供給された4バイトのセクタアドレス51を、2個連結することにより、8バイトのデータにデータ拡張する。
図20においては、4バイトのセクタアドレス51を“ADR”と図示し、データ拡張部111’により生成されたデータを[ADR||ADR]と図示してある。2個のセクタアドレス51を連結する際、単に連結するだけでも良いが、奇数番目のビットのみを用いて、または、偶数番目のビットのみを用いて16バイトにデータ拡張するなどの方法で、データ拡張が行われるようにしても良い。また、Hash関数などを用いてデータ拡張が行われるようにしても良い。
いずれの方法でデータ拡張が行われても良いが、この場合、データ拡張部111’からは、8バイトのデータが出力され、排他的論理和回路112に供給される。排他的論理和回路112は、供給された8バイトのデータと、8バイトの乱数Rの排他的論理和を算出し、8バイトの初期ベクトルIV2として出力する。
このようにして生成された8ビットの初期ベクトルIV2は、多重化部74により、暗号化されたセクタデータに、そのまま多重化される。また、このように生成された8ビットの初期ベクトルIV2が、暗号化部73における暗号化に用いられるときには、16ビットの初期ベクトルIVにデータ拡張されて用いられる。このデータ拡張は、上述した場合と同様に、8ビットの初期ベクトルIV2を2つ連結し、16バイトの初期ベクトルIVにすることで行われる。復号部92における復号も、同様に、分離された8ビットの初期ベクトルIV2を16ビットに拡張し、その拡張された初期ベクトルIVが用いられて行われる。
図21は、図7に対応する図であり、Transfer Length(TL)から初期ベクトルIV2を生成する場合を説明するための図である。図7を参照して説明した初期ベクトルIVの生成の仕方と比較し、図21を参照して説明する初期ベクトルIV2の生成の仕方は、カウンタ161の処理が施された後の4バイトのTLを、データ拡張部162’により、8バイトのデータに拡張する点と、乱数発生部71により発生される乱数Rが8バイトで構成される点が異なる。
この場合も、基本的な処理は、図20に示した処理と同様なので、その説明は省略する。
ここで、図3に示したソース31とシンク32間で行われる相互認証の結果、生成されるセッションキーKsと初期ベクトルIVの計算のための発生される乱数Rについて、図22と図23のフローチャートを参照して説明を加える。
ステップS401において、ソース31にディスクが、挿入されたか否かが判断される。ステップS401において、ソース31にディスクが挿入されたと判断された場合、ステップS401に処理が進められ、シンク32において所定のアプリケーションが起動されたか否かが判断される。
所定のアプリケーションとは、ソース31に挿入されたディスクからデータを読み出す、または、書き込むために必要とされるアプリケーションである。
ステップS402において、シンク32において所定のアプリケーションが起動されたと判断された場合、ステップS403に処理が進められる。ステップS403において、ソース31とシンク32との間で相互認証処理が実行され、セッションキーKsが、ソース31とシンク32で、それぞれ生成(共用)される。ステップS404において、セッションキーKsの生成が完了したか否かが判断される。セッションキーKsの生成が完了されるまで、ステップS403とステップS404の処理が繰り返される。
そして、ステップS404において、セッションキーKsの生成が完了したと判断されると、ステップS405に処理が進められ、乱数Rが乱数発生部71により発生される。ステップS405の処理が終了すると、ステップS406(図23)において、シンク32側で起動されていた所定のアプリケーション(PCアプリケーション)(ここでは、シンク32がパーソナルコンピュータであるとする)が終了されたか否かが判断される。ステップS406において、PCアプリケーションは、終了されていないと判断された場合、ステップS407に処理が進められ、ソース31に挿入されていたディスクは排出されたか否かが判断される。
ステップS407において、ディスクは排出されていないと判断されると、ステップS406に処理が戻され、それ以降の処理が繰り返される。一方、ステップS407において、ディスクが排出されたと判断された場合、ステップS408に進み、シンク32で生成されたセッションキーKsが消去される。
さらに、ステップS409において、ソース31で生成されたセッションキーKsが削除され、ステップS410において、ソース31で生成された乱数Rも削除される。
このように、ディスクが排出された場合、ディスクからのデータの読み出しや、ディスクに対するデータの書き込みは実行できなくなるので、そのような処理を実行するために、ソース31とシンク32で、それぞれ生成されたセッションキーKsと、ソース31側で初期ベクトルIVを生成するために発生された乱数Rは消去される。このようなデータが消去されると、ステップS401に処理が戻され、それ以降の処理が繰り返される。
一方、ステップS406において、シンク32側で起動されていたPCアプリケーションが終了されたと判断された場合、ステップS411に処理が進められ、シンク32で生成されたセッションキーKsが消去される。
ステップS412において、シンク32側でPCアプリケーションが起動されたか否かが判断される。この状態では、まだ、ソース31にディスクが挿入されている状態であるので、PCアプリケーションが起動されれば、ディスクからのデータの読み出しや、ディスクに対するデータの書き込みが実行できる状態になるので、ステップS412において、PCアプリケーションが起動されたか否か(結果として、ディスクに対する処理が実行できる状態にされたか否か)が判断される。
ステップS412において、PCアプリケーションが起動されたと判断された場合、ステップS403(図22)に処理が戻され、それ以降の処理が繰り返される。一方、ステップS412において、PCアプリケーションは起動されていないと判断された場合、ステップS413に処理が進められ、ソース31に挿入されているディスクが排出されたか否かが判断される。
ステップS413において、ソース31に挿入されているディスクが排出されたと判断されるまで、ステップS412とステップS413の処理が繰り返され、ソース31に挿入されているディスクが排出されたと判断されると、ステップS409に処理が進められる。ステップS409以降の処理については、既に説明したので、ここではその説明を省略する。
このように、セッションキーKsや乱数Rは、必要に応じ生成され、必要がなくなった時点で、即座に消去されるように構成されている。このようにすることで、セッションキーKsが盗用されたり、乱数Rが盗用されるといった不都合が発生する可能性をできる限り低くする。セッションキーKsや乱数Rは、上述した初期ベクトルIVの生成や暗号化に関わるデータであるが、セッションキーKsや乱数Rが盗用される可能性を低くすることで、初期ベクトルIVが推測される、盗用される可能性も低くすることが可能となる。
このように、本発明を適用することにより、ソース31とシンク32との間で行われるデータの授受に関し、セキュリティを向上させることが可能となる。
なお、上述した実施の形態においては、再生装置と記録装置をそれぞれ別な構成として図示および説明したが、再生装置内と記録装置内において同一の処理を実行する、例えば、IV生成部などは、再生装置と記録装置で共用される構成としても、もちろん良い。
なお、上述した実施の形態においては、暗号化および復号の方式として、CBC方式を例に挙げて説明したが、本発明は、CBC方式にのみ適用できることを示すものではない。例えば、CFB(Cipher Feed Back)方式、OFB(Output Feed Block)方式などに対しても本発明を適用することはできる。
上述した一連の処理は、それぞれの機能を有するハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
記録媒体は、その記録媒体を扱うパーソナルコンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク(MD(Mini-Disc)(登録商標)を含む)、若しくは半導体メモリなどよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記憶されているROMやハードディスクなどで構成される。
なお、本明細書において、媒体により提供されるプログラムを記述するステップは、記載された順序に従って、時系列的に行われる処理は勿論、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
11 排他的論理和回路, 12 暗号化部, 21 排他的論理和回路, 22 復号部, 31 ソース, 32 シンク, 51 セクタアドレス, 52 セクタデータ, 71 乱数発生部, 72 IV生成部, 73 暗号化部, 74 多重化部, 91 分離部, 92 復号部, 101 セクタデータ