【解決手段】乱数生成装置1は、不確定なデータ100を出力する不確定回路10と、暗号処理装置11とを備えている。暗号処理装置11は、自身の暗号機能を使用して入力データ300を暗号化し、暗号化後のデータを暗号化データ310としてするとともに、自身の暗号機能と不確定回路10から出力されるデータ100とを使用して、当該データ100よりも一様性を有する乱数200を生成して出力する。
【発明を実施するための形態】
【0011】
図1は実施の形態に係る乱数生成装置1の構成を示す図である。本実施の形態に係る乱数生成装置1は、一様性の高い乱数を生成して出力するとともに、入力データを暗号化する暗号機能を有している。
図2に示されるように、乱数生成装置1は、不確定回路10と暗号処理装置11とを備えている。
【0012】
不確定回路10は、不確定なデータ100を生成して出力する。データ100はデジタルデータである。不確定回路10は、例えば、抵抗あるいはダイオードの熱雑音を利用して不確定なデータ100を生成することができる。また不確定回路10は、例えば、水晶発振器の揺らぎを利用して不確定なデータ100を生成することができる。また不確定回路10は、特許文献2に記載されているように、例えば、RSフリップフロップ等の論理回路を利用して不確定なデータ100を生成することができる。論理回路を利用して不確定なデータを生成する不確定回路10は「不確定論路回路」とも呼ばれる。不確定回路10から出力されるデータ100は、再現不可能性を有する、一様性の低い乱数であると見ることができる。一様性の低い乱数については、そのエントロピー(乱雑性)は低くく、エントロピーの低い乱数は真性度が低いことから、データ100は真性度の低い乱数と言える。
【0013】
暗号処理装置11は、暗号機能を有しており、当該暗号機能を使用して、入力データ300を暗号化し、暗号化後の入力データ300を暗号データ310として出力する。さらに、暗号処理装置11は、自身の暗号機能と不確定回路10から出力されるデータ100とを使用して、当該データ100よりも一様性の高い乱数200を生成して出力する。つまり、暗号処理装置11は、自身の暗号機能とデータ100とを使用して、当該データ100よりも“1”と“0”の出現頻度(出現確率)の差が小さい乱数200(当該データ100よりも値の偏りが少ない乱数200)を生成して出力する。暗号処理装置11は、データの一様性を高める一様化回路の機能を有していると言える。暗号処理装置11で生成される乱数200は、再現不可能性を有する、一様性の高いデジタルデータである。一様性の高い乱数については、そのエントロピーは高く、エントロピーの高い乱数は真性度が高いことから、乱数200は、真性度の高い乱数と言える。なお、暗号処理装置11は、自身の暗号機能を使用して、暗号化されたデータを復号化しても良い。
【0014】
このような乱数生成装置1で生成される真性度の高い乱数200は、例えば、機密性の高い情報として使用することができる。機密性の高い情報としては、例えば、暗号で用いられる鍵や、認証で用いられる認証コードがある。乱数200は、DES(Data Encryption Standard)あるいはAES(Advanced Encryption Standard)等の暗号アルゴリズムで使用される鍵として使用することができる。また、乱数200は、例えば、複数の装置間での相互認証において当該複数の装置間で使用される認証コードとして使用することができる。
【0015】
以上のように、本実施の形態に係る乱数生成装置1では、暗号処理装置11の暗号機能と不確定回路10から出力されるデータ100とが使用されて一様性の高い乱数200が生成されることから、不確定回路10から出力されるデータ100のエントロピーを高めるために当該データ100を一様化する一様化回路を暗号処理装置11とは別に設ける必要がなくなる。よって、暗号処理と、真性度の高い乱数の生成とを簡単な構成で実現することができる。その結果、暗号処理と乱数生成とを行う装置の低コスト化が可能となる。なお、一様化回路は、特許文献1に記載されているように「平滑回路」とも呼ばれる。また、本実施の形態のように、乱数200の一様性を暗号処理装置11の一部を使って担保することによって、回路規模のオーバーヘッドを最小限に抑えることができる。
【0016】
<乱数生成装置の使用例>
次に乱数生成装置1の使用例と暗号処理装置11の構成例について説明する。
図2は、乱数生成装置1を搭載した半導体メモリ20を備えるメモリシステム50を示すブロック図である。
【0017】
図2に示されるように、情報処理システムの一種であるメモリシステム50は、乱数生成装置1を有する半導体メモリ20と、当該半導体メモリ20を制御するホスト装置30とを備えている。記憶装置の一種である半導体メモリ20とホスト装置30とは互いに暗号化通信を行う。
【0018】
メモリシステム50は、例えば、ゲーム装置に実装されるコンピュータシステムである。当該ゲーム装置は、ゲーム装置本体と、それに着脱可能なゲームカートリッジとを備えている。半導体メモリ20はゲームカートリッジに内蔵され、ホスト装置30はゲーム装置本体に内蔵される。ホスト装置30は、一種のコンピュータである。ユーザは、ゲーム装置本体に装着するゲームカードリッジを交換することによって、様々な種類のゲームを楽しむことができる。メモリシステム50では、ホスト装置30と半導体メモリ20との間において、暗号で使用される鍵の交換が行われる。
【0019】
半導体メモリ20は、例えばマスクROM(Read Only Memory)である。半導体メモリ20は、乱数生成装置1を構成する不確定回路10及び暗号処理装置11と、コマンドデコーダ12と、記憶部であるメモリアレイ13とを備えている。本例では、暗号処理装置11が使用されて半導体メモリ20のセキュリティが実現されている。また、乱数生成装置1で生成された乱数200は、暗号処理装置11に対して鍵として入力される。
【0020】
図2に示される暗号処理装置11は、例えば、共通鍵暗号方式の一種であるストリーム暗号方式を使用して、データを暗号化及び復号化する。なお、暗号処理装置11は、共通鍵暗号方式の一種であるブロック暗号方式を使用してデータを暗号化及び復号化しても良い。また暗号処理装置11は、公開鍵暗号方式を使用してデータを暗号化及び復号化しても良い。
【0021】
暗号処理装置11は、複数の暗号処理部110,111と、演算回路112と、第1選択回路113と、第2選択回路114と、第3選択回路115とを備えている。暗号処理部110,111のそれぞれは暗号機能を有している。暗号処理部110,111では、使用される暗号アルゴリズムは互いに同じであっても良いし、互いに異なっても良い。暗号処理部110,111で使用される暗号アルゴリズムとしては、例えば、DESあるいはAESなどが考えられる。本例に係る暗号処理装置11では、暗号処理部110が、自身の暗号機能(自身の暗号アルゴリズム)と不確定回路10から出力されるデータ100とを使用して、一様性の高い乱数200を生成する。
【0022】
第1選択回路113は、入力される第1制御信号に基づいて、入力される3つのデータのうちのいずれか一つのデータを選択し、選択したデータをデータ550aとして暗号処理部110に出力する。また第2選択回路114は、入力される第2制御信号に基づいて、入力される3つのデータのうちのいずれか一つのデータを選択し、選択したデータをデータ550bとして暗号処理部110に出力する。
【0023】
本実施の形態では、第1選択回路113から出力されるデータ550aと、第2選択回路114から出力されるデータ550bとで、暗号処理部110で使用される共通鍵550が構成される。暗号処理部110は、この共通鍵550に基づいて、自身の初期化(自身の暗号アルゴリズムの初期化)を行う。以後、共通鍵550を構成するデータ550a,550bを、それぞれ「第1共通鍵550a」及び「第2共通鍵550b」と呼ぶ。第1共通鍵550aは、例えば、共通鍵550の上位データであって、第2共通鍵550bは、例えば、共通鍵550の下位データである。なお、第1共通鍵550aは、共通鍵550の一部であれば良く、共通鍵550の上位データでなくても良い。また、第2共通鍵550bは、共通鍵550における、第1共通鍵550a以外の部分であれば良く、共通鍵550の下位データでなくても良い。
【0024】
第1選択回路113には、暗号処理装置11に予め記憶された固定鍵500の一部である第1固定鍵500aと、不確定回路10から出力されるデータ100の一部である第1データ100aと、暗号処理装置11で生成される乱数200との3つのデータが入力される。第1選択回路113において、例えば第1固定鍵500aが選択される際には、第1固定鍵500aが第1共通鍵550aとして暗号処理部110に入力される。
【0025】
第2選択回路114には、固定鍵500における、第1固定鍵500a以外の部分である第2固定鍵500bと、不確定回路10から出力されるデータ100における、第1データ100a以外の部分である第2データ100bと、ホスト装置30から送られてくる乱数600との3つのデータが入力される。第2選択回路114において、例えば乱数600が選択される際には、乱数600が第2共通鍵550bとして暗号処理部110に入力される。乱数600は、後述するように、コマンドデコーダ12から出力される。以後、乱数200を「メモリ乱数200」と呼び、乱数600を「ホスト乱数600」と呼ぶことがある。
【0026】
第3選択回路115は、入力される第3制御信号に基づいて、入力される2つのデータのうちのいずれか一つのデータを選択し、選択したデータを出力データ560として演算回路112に出力する。第3選択回路115には、メモリ乱数200と、メモリアレイ13から出力されるデータ400(以後、「メモリデータ400」と呼ぶ)との2つのデータが入力される。第3選択回路115が、例えばメモリデータ400を選択する場合には、メモリデータ400が出力データ560となる。なお、第1選択回路113〜第3選択回路115を制御するための第1〜第3制御信号は、例えば、半導体メモリ20内で生成される。
【0027】
暗号処理部111は、暗号処理部110から出力される後述のセッション鍵SKに基づいて自身の初期化(自身の暗号アルゴリズムの初期化)を行う。初期化後の暗号処理部111は、自身の暗号機能(自身の暗号アルゴリズム)を使用してキーストリームKSを生成して出力する。言い換えれば、初期化後の暗号処理部111は、暗号処理を行ってキーストリームKSを生成して出力する。
【0028】
演算回路112は、暗号処理部111から出力されるキーストリームKSと、ホスト装置30から出力される、暗号化されたコマンド350(以後、「暗号コマンド350」と呼ぶことがある)との排他的論路和を演算して出力する。これにより、ホスト装置30からの暗号コマンド350が復号化される。復号化された暗号コマンド350は、平文コマンド360としてコマンドデコーダ12に入力される。
【0029】
また、演算回路112は、暗号処理部111から出力されるキーストリームKSと、第3選択回路115からの出力データ560との排他的論理和を演算して出力する。これにより、出力データ560が暗号化される。暗号化された出力データ560は、暗号データ570としてホスト装置30に出力される。
【0030】
このように、演算回路112は、暗号処理部111から出力されるデータをキーストリームKSとして使用して、入力されるデータを暗号化あるいは復号化する。
【0031】
コマンドデコーダ12は、入力される平文コマンド360をデコードして、当該平文コマンド360を解析する。コマンドデコーダ12は、入力される平文コマンド360を解析した結果、当該平文コマンド360がメモリアレイ13からデータを読み出すことを指示する読み出しコマンドである場合には、アドレス信号及びリード信号等の制御信号をメモリアレイ13に出力する。これにより、メモリアレイ13からメモリデータ400が出力される。メモリアレイ13には、例えば、複数のゲームプログラムや、各ゲームプログラムで使用される各種データなどが記憶されている。第3選択回路115からメモリデータ400が出力されると、演算回路112においてメモリデータ400が暗号化され、暗号化後のメモリデータ400がホスト装置30に入力される。ホスト装置30は、入力されるメモリデータ400にゲームプログラムが含まれている場合には、当該ゲームプログラムを実行する。
【0032】
またコマンドデコーダ12は、入力される平文コマンド360をデコードして、当該平文コマンド360に含まれる、ホスト装置30が生成したホスト乱数600を抽出する。コマンドデコーダ12は、抽出したホスト乱数600を第2選択回路114に出力する。
【0033】
ホスト装置30には、半導体メモリ20の乱数生成装置1と同様の乱数生成装置が(以後、「ホスト側乱数生成装置」と呼ぶ)が設けられている。ホスト側乱数生成装置は、不確定回路10と同様の不確定回路(以後、「ホスト側不確定回路」と呼ぶ)と、暗号処理装置11と同様の暗号処理装置(「以後、ホスト側暗号処理装置」と呼ぶ)とを有している。ホスト装置30は、ホスト側暗号処理装置を使用してコマンドを暗号化し、暗号化後のコマンド(暗号コマンド350)を半導体メモリ20に出力する。また、ホスト装置30は、ホスト側暗号処理装置を使用して、半導体メモリ20からの暗号データ570を復号化する。
【0034】
またホスト側乱数生成装置では、乱数生成装置1と同様にして、ホスト側暗号処理装置が、自身の暗号機能とホスト側不確定回路から出力されるデータとを使用して一様性の高いホスト乱数600を生成する。ホスト装置30は、生成したホスト乱数600を含む所定のコマンドを半導体メモリ20に出力する。なお、ホスト側乱数生成装置は、半導体メモリ20の乱数生成装置1とは異なる方法でホスト乱数600を生成しても良い。
【0035】
本実施の形態に係るメモリシステム50では、ホスト乱数600及びメモリ乱数200が鍵として使用される。ホスト装置30と半導体メモリ20との間で、ホスト乱数600及びメモリ乱数200の交換が行われることによって、鍵交換が行われる。
【0036】
<メモリシステムでの鍵交換について>
次に、ホスト装置30と半導体メモリ20との間で鍵交換が行われる際のメモリシステム50の動作について説明する。
図3は、ホスト装置30と半導体メモリ20との間で鍵交換が行われる際の当該半導体メモリ20の動作を示すフローチャートである。
【0037】
図3に示されるように、ステップs1において、半導体メモリ20では固定鍵500が使用されて暗号処理装置11についての初期化処理が行われる。この初期化処理は、ホスト装置30と半導体メモリ20との間で鍵交換を行うために必要な処理である。
【0038】
ステップs1においては、第1選択回路113が第1固定鍵500aを選択して出力し、第2選択回路114が第2固定鍵500bを選択して出力する。これにより、暗号処理部110には、固定鍵500が共通鍵550として入力される。暗号処理部110は、入力された固定鍵500(共通鍵550)に基づいて、自身の初期化(自身の暗号アルゴリズムを初期化)を行う。そして、初期化後の暗号処理部110は、自身の暗号機能を使用してセッション鍵SKを生成して暗号処理部111に出力する。言い換えれば、初期化後の暗号処理部110は、暗号処理を行ってセッション鍵SKを生成して出力する。ステップs1では、暗号処理部110における、固定鍵500に基づいて初期化された暗号アルゴリズムの出力がセッション鍵SKとなる。
【0039】
またステップs1では、暗号処理部111が、入力されたセッション鍵SKに基づいて、自身の初期化(自身の暗号アルゴリズムを初期化)を行う。そして、初期化後の暗号処理部111は、自身の暗号機能を使用してキーストリームKSを生成して演算回路112に出力する。ステップs1では、暗号処理部111における、セッション鍵SKで初期化された暗号アルゴリズムの出力がキーストリームKSとなる。以後、このキーストリームKSを特に「鍵交換用キーストリームKS」と呼ぶ。
【0040】
ホスト装置30でも、同様にして、固定鍵500と同じ固定鍵が使用されてホスト側暗号処理装置についての初期化処理が行われる。これにより、ホスト側暗号処理装置においても、鍵交換用キーストリームKSと同じキーストリーム(以後、「ホスト側鍵交換用キーストリーム」と呼ぶ)が生成される。
【0041】
ホスト装置30は、ホスト側鍵交換用キーストリームを生成すると、当該ホスト側鍵交換用キーストリームを使用して乱数生成コマンドを暗号化する。乱数生成コマンドは、半導体メモリ20に対してメモリ乱数200を生成することを命令するコマンドである。ホスト装置30は、暗号化された乱数生成コマンドを半導体メモリ20に出力する。
【0042】
ステップs2において、半導体メモリ20が暗号化された乱数生成コマンドを受信すると、ステップs3において、演算回路112は、鍵交換用キーストリームKSを使用して当該乱数生成コマンドを復号化する。復号化された乱数生成コマンドはコマンドデコーダ12に入力される。
【0043】
コマンドデコーダ12において乱数生成コマンドが解析されると、ステップs4において、第1選択回路113が第1データ100aを選択して出力し、第2選択回路114が第2データ100bを選択して出力する。これにより、不確定回路10から出力されるデータ100が乱数生成用の共通鍵550(暫定の共通鍵550)として暗号処理部110に入力される。
【0044】
次にステップs5において、鍵を生成する鍵生成部として機能する暗号処理部110は、自身の暗号機能(自身の暗号アルゴリズム)と、入力されたデータ100(乱数生成用の共通鍵550)とを使用して、当該データ100よりも一様性の高いメモリ乱数200を生成して出力する。具体的には、暗号処理部110は、データ100に基づいて自身の初期化を行う。そして、初期化後の暗号処理部110は、自身の暗号機能を使用してメモリ乱数200を生成して出力する。ステップs5では、暗号処理部110における、データ100(一様性の低い乱数)に基づいて初期化された暗号アルゴリズムの出力が、一様性の高いメモリ乱数200となる。暗号アルゴリズムの出力については、暗号アルゴリズムの本質から予測不可能性を有することから、暗号アルゴリズムの出力では、“0”と“1”の出現確率の差が小さい。したがって、暗号処理部110において一様性の高いメモリ乱数200を生成することができる。
【0045】
暗号処理部110でメモリ乱数200が生成されると、ステップs6において、第1選択回路113がメモリ乱数200を選択して出力する。これにより、メモリ乱数200が、鍵交換後に使用される正式な第1共通鍵550aとして暗号処理部110に入力される。
【0046】
次にステップs7において、半導体メモリ20は、ステップs5で生成された、鍵としてのメモリ乱数200をホスト装置30に出力する。ステップs7では、第3選択回路115がメモリ乱数200を選択して出力する。これにより、演算回路112には、出力データ560としてメモリ乱数200が入力される。演算回路112は、入力されたメモリ乱数200と鍵交換用キーストリームKSとの排他的論理和を演算して出力する。これにより、鍵交換用キーストリームKSで暗号化されたメモリ乱数200が暗号データ570としてホスト装置30に入力される。
【0047】
ホスト装置30に対して暗号化されたメモリ乱数200が入力されると、ホスト側暗号処理装置は、ホスト側鍵交換用キーストリームを使用して、当該メモリ乱数200を復号化する。また、ホスト装置30では、半導体メモリ20と同様にして、鍵として扱われるホスト乱数600が生成される。そして、ホスト装置30は、生成したホスト乱数600を含むホスト乱数コマンドを生成する。このホスト乱数コマンドは、ホスト側暗号処理装置において、ホスト側鍵交換用キーストリームに基づいて暗号化される。暗号化されたホスト乱数コマンドは半導体メモリ20に入力される。
【0048】
ステップs8において、半導体メモリ20が暗号化されたホスト乱数コマンドを受信すると、ステップs9において、暗号処理装置11は、鍵交換用キーストリームKSを使用して当該ホスト乱数コマンドを復号化する。復号化されたホスト乱数コマンドはコマンドデコーダ12に入力される。
【0049】
次にステップs10において、コマンドデコーダ12は、ホスト乱数コマンドをデコードして、当該ホスト乱数コマンドからホスト乱数600を抽出する。ホスト乱数600が取得されると、ステップs11において、第2選択回路114は当該ホスト乱数600を選択して出力する。これにより、ホスト乱数600が、鍵交換後に使用される正式な第2共通鍵550bとして暗号処理部110に入力される。暗号処理部110には、メモリ乱数200及びホスト乱数600から成る正式な共通鍵550が入力される。
【0050】
ホスト装置30においても、半導体メモリ20と同様に、ホスト側暗号処理装置における、暗号処理部110に相当する暗号処理部に対して、半導体メモリ20からのメモリ乱数200とホスト乱数600から成る正式な共通鍵が入力される。
【0051】
ホスト装置30は、半導体メモリ20に対して、正式な共通鍵550を使用して暗号処理装置11についての初期化処理を行うことを命令する初期化コマンドを生成する。そして、ホスト装置30では、ホスト側暗号処理装置が、ホスト側鍵交換用キーストリームを使用して初期化コマンドを暗号化する。暗号化された初期化コマンドは半導体メモリ20に入力される。
【0052】
ステップs12において、半導体メモリ20が暗号化された初期化コマンドを受信すると、ステップs13において、演算回路112は、鍵交換用キーストリームKSを使用して当該初期化コマンドを復号化する。復号化された初期化コマンドは、コマンドデコーダ12に入力される。
【0053】
コマンドデコーダ12において初期化コマンドが解析されると、ステップs14において、正式な共通鍵550(メモリ乱数200及びホスト乱数600)が使用されて暗号処理装置11についての初期化処理が行われる。具体的には、暗号処理部110は、入力された正式な共通鍵550に基づいて、つまりホスト乱数600及びメモリ乱数200に基づいて、自身の初期化を行う。そして、初期化後の暗号処理部110は、自身の暗号機能を使用してセッション鍵SKを生成して出力する。暗号処理部111は、暗号処理部110で生成されたセッション鍵SKに基づいて、自身の初期化を行う。そして、初期化後の暗号処理部111は、自身の暗号機能を使用してキーストリームKSを生成して出力する。以後、暗号処理装置11では、ホスト装置30からのコマンドが、暗号処理部111から出力されるキーストリームKSで復号化される。また、メモリアレイ13からのメモリデータ400が暗号処理部111から出力されるキーストリームKSで暗号化される。
【0054】
ホスト装置30では、半導体メモリ20と同様にして、ホスト乱数600とメモリ乱数200とから成る正式な共通鍵が使用されてホスト側暗号処理装置についての初期化処理が行われる。初期化処理後のホスト側暗号処理装置では、半導体メモリ20に送信されるコマンドがキーストリームで暗号化されるとともに、半導体メモリ20からの暗号データ570(暗号化されたメモリデータ400)がキーストリームで復号化される。
【0055】
このように、ホスト装置30と半導体メモリ20との間で鍵交換(本例では乱数の交換)を行うことによって、ホスト装置30と半導体メモリ20との間での相互認証を実現することができる。
【0056】
また、本例のように、暗号処理装置11の一部(暗号処理部110)を使って生成された一様性の高い乱数200をセキュリティおける機密性の高い情報として使用することによって、セキュリティにおける機密性の高い情報を低コストで生成することができる。
【0057】
また、本例のように、暗号処理装置11の一部を使って生成された一様性の高い乱数200を鍵として使用することによって、生成される鍵や交換される鍵のセキュリティを確保でき、その結果、暗号通信のセキュリティの確保を低コストで実現できる。
【0058】
また、鍵生成部として機能する暗号処理部110は、ステップs5において、データ100と自身の暗号機能とを使用して第1の鍵であるメモリ乱数200を生成している。そして、暗号処理部110は、ステップs14において、第1の鍵と自身の暗号機能とを使用して、第2の鍵であるセッション鍵SKを生成している。このように、暗号処理部110が自分で生成した第1の鍵を使用して第2の鍵を生成することによって、簡単な構成でセキュリティの高い鍵を生成することができる。つまり、低コストでセキュリティの高い鍵を生成することができる。また、暗号処理部110では、不確定回路10から出力されるデータ100が使用されて第1の鍵が生成されているため、当該第1の鍵のセキュリティを高めることができる。上記の例では、第1の鍵(メモリ乱数200)は、暗号処理部111では使用されていなかったが、メモリシステム50で鍵交換が行われない場合等においては、暗号処理部111は、自身の鍵として第1の鍵を使用しても良い。
【0059】
なお、上記の例では、暗号処理部装置11で生成されたメモリ乱数200が当該暗号処理装置11で使用されているが、他の装置で使用されても良い。また、上記の例では、暗号処理装置11に複数の暗号処理部を設けていたが、1つの暗号処理部だけを設けても良い。また、上記の例では、ホスト装置30と半導体メモリ20との間で鍵交換が行われているが、鍵交換を行わなくても良い。この場合には、半導体メモリ20では、暗号処理装置11で生成されたメモリ乱数200だけで正式な共通鍵550が構成されることになる。また、ホスト装置30においても、半導体メモリ20から送られてくるメモリ乱数200だけで、ホスト側暗号処理装置での正式な共通鍵が構成されることになる。また、本例のように記憶領域(記憶素子)に半導体素子が使用された半導体メモリ20に不確定回路10及び暗号処理装置11等を設ける代わりに、記憶領域に半導体素子が使用されない記憶装置に不確定回路10及び暗号処理装置11等を設けても良い。
【0060】
以上のように、乱数生成装置1、半導体メモリ20及びメモリシステム50は詳細に説明されたが、上記した説明は、全ての局面において例示であって、この発明がそれに限定されるものではない。また、上述した各種変形例は、相互に矛盾しない限り組み合わせて適用可能である。そして、例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。