(57)【要約】【課題】プローブ攻撃に対してシールド回路を用いる間接的な防御ではなく、秘密鍵を格納する回路自体を直接的に防御することにより、プローブ攻撃に対する耐性が高められた安全な暗号処理装置を提供する。【解決手段】チャレンジアンドレスポンス認証プロトコル用の暗号処理装装置は、入力として整数の乱数であるチャレンジＧを受ける受信部と、整数である秘密鍵Ｋを格納する不揮発性メモリである第１のメモリと、整数である攪拌値Ｃを格納する第２のメモリと、秘密鍵Ｋと攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である攪拌された秘密鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する鍵攪拌部と、攪拌された秘密鍵Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’を作用させてレスポンスＡ＝Ｅｎｃ（Ｇ、Ｋ’）を生成するレスポンス生成部と、第２のメモリに格納されている攪拌値Ｃを更新する攪拌値更新部と、攪拌値ＣとレスポンスＡを出力する送信部と、を含むことを特徴とする。【選択図】図９
2014033324.tif 000002
【特許請求の範囲】
【請求項１】
入力として整数の乱数であるチャレンジを受ける受信部と、
整数である秘密鍵を格納する不揮発性メモリである第１のメモリと、
整数である攪拌値を格納する第２のメモリと、
前記秘密鍵と前記攪拌値に攪拌関数を作用させて整数である攪拌された秘密鍵を生成する鍵攪拌部と、
前記攪拌された秘密鍵と前記チャレンジに暗号化関数を作用させてレスポンスを生成するレスポンス生成部と、
前記第２のメモリに格納されている前記攪拌値を更新する攪拌値更新部と、
前記攪拌値と前記レスポンスを出力する送信部と、
を含む暗号処理装置。
【請求項２】
外部装置であって、前記送信部から出力された前記攪拌値と前記レスポンスを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値である第２の秘密鍵とに攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記レスポンスを前記暗号化関数の逆関数である復号関数に作用させてチャレンジ比較値を生成し、前記チャレンジと前記チャレンジ比較値前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて、前記攪拌値と前記レスポンスを出力した前記暗号処理装置を認証する外部装置によって認証を受ける、請求項１に記載の暗号処理装置。
【請求項３】
前記送信部から送信された前記攪拌値と前記レスポンスを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値である第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記レスポンスに暗号化関数を作用させてチャレンジ比較値を生成し、前記チャレンジと前記チャレンジ比較値を比較し、前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて、前記攪拌値と前記レスポンスを出力した前記暗号処理装置を認証する外部装置によって認証を受ける、請求項１に記載の暗号処理装置。
【請求項４】
さらに、整数の乱数である第２のチャレンジを生成するチャレンジ生成部を含む暗号処理装置であって、
前記送信部は、前記攪拌値と前記レスポンスと前記第２チャレンジを出力し、
前記受信部は、外部装置であって、前記送信部から出力された前記攪拌値と前記レスポンスと前記第２チャレンジを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値である第２の秘密鍵とに攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記レスポンスを前記暗号化関数の逆関数である復号関数に作用させて整数であるチャレンジ比較値を生成し、自身のメモリに格納してある整数である第２の攪拌値と前記秘密鍵に攪拌関数を作用させて整数である第２の秘密鍵比較値を生成し、前記チャレンジと前記チャレンジ比較値との比較をし、前記前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて前記攪拌値と前記レスポンスと前記第２チャレンジを出力した前記暗号処理装置が認証された場合に、前記第２の秘密鍵比較値と前記第２のチャレンジに暗号化関数を作用させて整数である第２のレスポンスを生成し、前記第２の攪拌値と前記第２のレスポンスを出力する外部装置から、前記第２の攪拌値と前記第２のレスポンスを受け、
前記鍵攪拌部は、前記秘密鍵と前記第２の攪拌値に攪拌関数を作用させて整数である第２の攪拌された秘密鍵を生成する暗号処理装置であって、
さらに、
前記第２の攪拌された秘密鍵と前記第２のレスポンスを前記暗号化関数の逆関数である復号関数に作用させて第２のチャレンジ比較値を生成する復号部と、
前記第２のチャレンジ比較値と前記第２チャレンジとの比較に基づいて、前記第２の攪拌値と前記第２のレスポンスを出力した外部装置を認証する認証部と、
を含む請求項２に記載の暗号処理装置。
【請求項５】
さらに、
整数の乱数である第２のチャレンジを生成するチャレンジ生成部を含む暗号処理装置であって、
前記送信部は、前記攪拌値と前記レスポンスと前記第２チャレンジを出力し、
前記受信部は、外部装置であって、前記送信部から出力された前記攪拌値と前記レスポンスと前記第２チャレンジを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値でる第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記チャレンジに前記暗号化関数を作用させて整数であるレスポンス比較値を生成し、さらに自身のメモリに格納してある整数である第２の攪拌値と前記秘密鍵に攪拌関数を作用させて第２の攪拌された秘密鍵を生成し、前記レスポンスと前記レスポンス比較値とを比較し、前記レスポンスと前記レスポンス比較値との比較の結果に基づいて前記攪拌値と前記レスポンスと前記第２チャレンジを出力した前記暗号処理装置が認証された場合に、前記第２の秘密鍵比較値と前記第２のチャレンジに暗号化関数を作用させて整数である第２のレスポンスを生成し、前記第２のレスポンスと前記第２の攪拌値を出力する外部装置から、前記第２のレスポンスと前記第２の攪拌値を受け、
前記鍵攪拌部は、前記秘密鍵と前記第２の攪拌値に攪拌関数を作用させて整数である第２の攪拌された秘密鍵を生成する暗号処理装置であって、
さらに、
前記第２の攪拌値と前記秘密鍵を前記暗号化に作用させて第２のレスポンス比較値を生成する暗号化部と、
前記第２のレスポンス前記第２のレスポンス比較値との比較に基づいて、前記第２のレスポンスと前記第２の攪拌値を出力した外部装置を認証する認証部と、
を含む請求項３に記載の暗号処理装置。
【請求項６】
前記鍵攪拌部は、不揮発性回路から構成される攪拌鍵格納部を含み、前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成し、前記攪拌鍵格納部に格納し、前記秘密鍵の更新の際には保持されている前記攪拌された秘密鍵に前記攪拌関数の逆関数である逆攪拌関数を作用させる、請求項２乃至５のいずれか一項に記載の暗号処理装置。
【請求項７】
前記鍵攪拌部は、不揮発性回路から構成される攪拌鍵格納部を含み、前記不揮発性回路に格納された前記攪拌された秘密鍵の読み出し処理は、前記攪拌された秘密鍵の全ビットを１サイクルで読み出しをする、請求項２乃至６のいずれか一項に記載の暗号処理装置。
【請求項８】
前記鍵攪拌部は、不揮発性回路から構成される攪拌鍵格納部を含み、前記攪拌鍵格納部への前記攪拌された秘密鍵の書き込み処理は、前記攪拌された秘密鍵の全ビットを１サイクルで読み出しをする、請求項２乃至７のいずれか一項に記載の暗号処理装置。
【請求項９】
前記鍵攪拌部は、前記不揮発性回路への書き込み処理および／または前記不揮発性回路から読み出し処理は、不揮発性フリップフロップを用いて行う、請求項７または８に記載の暗号処理装置。
【請求項１０】
前記鍵攪拌部において、前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成することは、入力値と出力値が以下のような性質：
（ＭＧＦ１）前記入力値が１ビットでも変化した場合、前記出力値の少なくとも複数のビットが変化する、
（ＭＧＦ２）前記出力値から前記入力値を求めることが出来ない、
（ＭＧＦ３）前記入力値と前記出力値のビット長を、任意に調整することができる、
を有するマスク生成関数（ＭＧＦ）を作用することを含む、請求項６に記載の暗号処理装置。
【請求項１１】
前記鍵攪拌部は、前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成することは、前記秘密鍵と前記攪拌値の上位半分ビットと下位半分ビットのビット結合に対して、入力値と出力値が以下のような性質：
（ＭＧＦ１）前記入力値が１ビットでも変化した場合、前記出力値の少なくとも複数のビットが変化する、
（ＭＧＦ２）前記出力値から前記入力値を求めることが出来ない、
（ＭＧＦ３）前記入力値と前記出力値のビット長を、任意に調整することができる、
を有するマスク生成関数（ＭＧＦ）を作用する、および排他的論理和（ＸＯＲ）演算を実行するマスク生成関数（ＭＧＦ）作用部を含む、請求項６に記載の暗号装置。
【請求項１２】
前記鍵攪拌部において、前記秘密鍵をマスク値によってマスク化するマスク処理部を含む、請求項２乃至１１のいずれか一項に記載の暗号処理装置。
【請求項１３】
前記鍵攪拌部において、前記マスク生成関数（ＭＧＦ）を作用することの前に、入力値と出力値が以下のような性質：
（事前複雑化１）前記入力値は、マスク化処理に用いられるマスク値、前記秘密鍵に対して前記マスク化処理を実行して得られるマスク化された秘密鍵、前記攪拌値である、
（事前複雑化２）前記入力値に対して、前記秘密鍵および前記攪拌値によって定まるビット転置処理を行う、
（事前複雑化３）前記出力値は、前記秘密鍵および前記攪拌値にのみ依存する、
を有する事前複雑化処理を行うＭＧＦ事前複雑化処理部を含む、請求項１２に記載の暗号処理装置。
【請求項１４】
前記ＭＧＦ事前複雑化処理部において、前記事前複雑化処理を行う前記ＸＯＲ型スワッピングボックスと、線形シフトフィードバック処理を行う線形帰還シフトレジスタを含み、前記事前複雑化処理の後に線形シフトフィードバック処理を行う複数の構成とＸＯＲゲートを含み、前記複数の構成の出力に対して排他的論理和（ＸＯＲ）演算を行う、請求項１３に記載の暗号処理装置。
【請求項１５】
入力として整数の乱数であるチャレンジを受けることと、
整数である秘密鍵と整数である攪拌値に攪拌関数を作用させて整数である攪拌された秘密鍵を生成することと、
前記攪拌された秘密鍵を用いて前記チャレンジに暗号化関数を作用させて整数であるレスポンスを生成することと、
前記攪拌値を更新することと、
前記攪拌値と前記レスポンスを出力することと、
を含む暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プローブ攻撃へ耐性を有する暗号処理装置および方法に関する。
【背景技術】
【０００２】
プリンタカートリッジや医療機器の分野で、正規品と偽造品を区別するために、認証機能を持つ組み込み機器を用いることが行なわれる。認証プロトコルとしてはチャレンジアンドレスポンス方式が用いられる。認証チップを用いる認証方式では、回路規模の小ささを優先できるメリットがある共通鍵暗号を用いる方法が広く用いられている。
【０００３】
プリンタカートリッジの偽造は二つの系列に分かれる。回路のデザインコピーと鍵の盗聴である。この二つが揃わないと攻撃できない。
認証機能を備えたデバイス（以下、認証デバイスと呼ぶ）において鍵の盗聴を防ぎ偽造を防ぐための対策としては、共通鍵による暗号化通信プロトコルを用いた方法が一般的である。共通鍵暗号を用いることで、小さな回路規模で暗号方式を実装できる。このとき、秘密鍵が認証チップ等の認証デバイスの外部に漏洩しないことが偽造防止の大きな前提となる。この前提を満たすために、製造時に秘密鍵をデバイス内部のメモリに書き込んだ上で、製造後は外部からどのような操作を行ったとしても、秘密鍵の値を外部から読み取らせないようにする方法が一般的である。
【０００４】
しかし、このような方法は、プローブ攻撃と呼ばれる手法を用いることで無効化できることが知られている。プローブ攻撃は、暗号鍵を格納する認証チップの内部の回路を保護するパッケージを剥離し、内部の回路に対してマイクロプローブと呼ばれる小さな針を挿入する方法である。秘密鍵の値を格納する内部の回路に対してマイクロプローブを挿入することで、鍵の値を直接読むことが出来る。
【０００５】
プローブ攻撃に対処するため、認証チップの最上層にシールド線またはシールド回路を設ける方法がある。シールド線またはシールド回路を設ける方法では、回路の物理的な層を多段にしたうえで、マイクロプローブが挿入される入口である最上位の層に対し、シールド回路と呼ばれる防御回路を設置することで下位層の回路に「蓋」をする方法である。この「蓋」により、攻撃者のマイクロプローブ挿入が阻害されるため、秘密鍵をプローブ攻撃から守ることが出来る。たとえば、認証チップは、シールド線が断線されたことを検知すると、鍵を消去するなどの処理を行い、盗聴を防ぐ。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Mihir Bellare and Phillip Rogaway "Optimal Asymmetric Encryption : How to Encrypt with RSA.", EUROCRYPT ‘94, LNCS vol. 950, pp. 341-358, Springer, 1995
【非特許文献２】PKCS #1: RSA Cryptography Standard ftp://ftp.rsa.com/pub/pkcs/pkcs-1/pkcs-1v2-1d2.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００７】
シールド線またはシールド回路を設ける方法では、攻撃者が切断する対象となるシールド線に電位を代替的に印加しつつ、その一部を切断すると、認証チップはシールド線の切断を検知できないため、盗聴を防ぐことができないという問題がある。
【０００８】
また、攻撃者がシールド回路に対して物理的な修正を行うことで「蓋」に穴を開けることができたとしても、認証チップの一部のみが開封可能となるため、一つの認証チップから鍵データを取得することができないので安全であろうという期待があるかも知れない。しかし、攻撃者が複数の認証チップに対して認証チップ内の別々の領域から情報を取得し、それらをまとめることによって鍵データの全体が再構成されると、認証チップはプローブ攻撃に対して脆弱になるという問題がある。
【０００９】
プローブ攻撃に対してシールド回路を用いる間接的な防御ではなく、秘密鍵を格納する回路自体を直接的に防御することにより、プローブ攻撃に対する耐性が高められた安全な暗号処理装置および方法が望まれている。
【課題を解決するための手段】
【００１０】
チャレンジアンドレスポンス認証プロトコル用の暗号処理装装置は、入力として整数の乱数であるチャレンジＧを受ける受信部と、整数である秘密鍵Ｋを格納する不揮発性メモリである第１のメモリと、整数である攪拌値Ｃを格納する第２のメモリと、秘密鍵Ｋと攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である攪拌された秘密鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する鍵攪拌部と、攪拌された秘密鍵Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’を作用させてレスポンスＡ＝Ｅｎｃ（Ｇ、Ｋ’）を生成するレスポンス生成部と、第２のメモリに格納されている攪拌値Ｃを更新する攪拌値更新部と、攪拌値ＣとレスポンスＡを出力する送信部と、を含むことを特徴とする。
【発明の効果】
【００１１】
認証チップごとに異なる攪拌値を用いて鍵を攪拌するチャレンジアンドレスポンス認証プロトコルを採用することによって、認証チップの鍵データの一部ずつをプローブ攻撃で入手されても、全体の鍵データを復元することができないので、高いプローブ攻撃耐性を有する安全な暗号処理装置および方法を得ることができる。
【図面の簡単な説明】
【００１２】
【図１】チャレンジアンドレスポンス認証プロトコルの概要を示す図である。
【図２】共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（片側認証、暗号化・復号化）の原理を示す図である。
【図３】共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（片側認証、暗号化のみ）の原理を示す図である。
【図４】共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（両側認証、暗号化・復号化）の原理を示す図である。
【図５】共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（両側認証、暗号化のみ）の原理を示す図である。
【図６】プローブ攻撃の概要を示す図である。
【図７Ａ】プローブ攻撃対策であるシールド回路の概要を示す図である。
【図７Ｂ】プローブ攻撃対策であるシールド回路の概要を示す図である。
【図７Ｃ】プローブ攻撃対策であるシールド回路の概要を示す図である。
【図７Ｄ】プローブ攻撃対策であるシールド回路の概要を示す図である。
【図８】プローブ攻撃対策であるシールド回路の概要を示す図である。
【図９】鍵に対する動的な攪拌処理を用いる方法の概略を示す図である。
【図１０】鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（片側認証、暗号化・復号化）の原理を示す図である。
【図１１】鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（片側認証、暗号化のみ）の原理を示す図である。
【図１２】鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（両側認証、暗号化・復号化）の原理を示す図である。
【図１３】鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（両側認証、暗号化のみ）の原理を示す図である。
【図１４】攪拌関数Ｆ（Ｋ、Ｃ）を用いて鍵に対する動的な攪拌処理を行う鍵攪拌処理部の機能ブロック図である。
【図１５】鍵に対する動的な攪拌処理を行う鍵攪拌処理部の攪拌関数Ｆ（Ｋ、Ｃ）の第１の構成を示す図である。
【図１６】最適非対称暗号符号化処理部の構成の例を示す図である。
【図１７】最適非対称暗号符号化処理部を用いて構成される鍵攪拌処理部の例を示す図である。
【図１８】鍵に対する動的な攪拌処理を行う鍵攪拌処理部の攪拌関数Ｆ（Ｋ、Ｃ）の第２の構成を示す図である。
【図１９】鍵に対する動的な攪拌処理を行う鍵攪拌処理部の機能ブロック図の第２の例を示す図である。
【図２０】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理部を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の機能ブロック図である。
【図２１】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理部を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の第１の構成を示す図である。
【図２２】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理部を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の第２の構成を示す図である。
【図２３】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部に対するプローブ攻撃の概略を示す図である。
【図２４】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部に対するプローブ攻撃の概略を示す図である。
【図２５Ａ】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理の原理を説明する図である。
【図２５Ｂ】マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理の原理を説明する図である。
【図２６】スワッピングボックスの性質を示す図である。
【図２７】１ビットスワッピングボックスの構成の例を示す図である。
【図２８Ａ】１ビットスワッピングボックスの動作の例を示す図である。
【図２８Ｂ】１ビットスワッピングボックスの動作の例を示す図である。
【図２８Ｃ】多段１ビットスワッピングボックスの動作の例を示す図である。
【図２８Ｄ】多段１ビットスワッピングボックスの動作の例を示す図である。
【図２９】２ビットスワッピングボックスの構成の例を示す図である。
【図３０】多段Ｔビットスワッピングボックスの構成の例を示す図である。
【図３１Ａ】多段Ｔビットスワッピングボックスの性質を示す図（その１）である。
【図３１Ｂ】多段Ｔビットスワッピングボックスの性質を示す図（その２）である。
【図３２】加算スワッピングボックスの性質を示す図である。
【図３３】Ｔビットスワッピングボックスの性質を示す図である。
【図３４Ａ】第１、第２の実施例の全体の構成の例を示す図（その１）である。
【図３４Ｂ】第１、第２の実施例の全体の構成の例を示す図（その２）である。
【図３５】第１、第５の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
【図３６】第１、第２の実施例におけるマスク処理部、アンマスク処理部の構成の例を示す図である。
【図３７】第２の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
【図３８Ａ】第３の実施例の全体の構成の例を示す図（その１）である。
【図３８Ｂ】第３の実施例の全体の構成の例を示す図（その２）である。
【図３９】第３の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
【図４０】第３の実施例におけるマスク処理部の構成の例を示す図である。
【図４１】第３の実施例におけるアンマスク処理部の構成の例を示す図である。
【図４２Ａ】第４の実施例の全体の構成の例を示す図（その１）である。
【図４２Ｂ】第４の実施例の全体の構成の例を示す図（その２）である。
【図４３】第４の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
【図４４】第４の実施例におけるマスク処理部、アンマスク処理部の構成の例を示す図である。
【図４５Ａ】第５の実施例の全体の構成の例を示す図（その１）である。
【図４５Ｂ】第５の実施例の全体の構成の例を示す図（その２）である。
【図４６】実施形態の装置を実現可能なハードウェア構成図の例である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について、図面を参照しながら説明をする。尚、図中で類似の部分または類似の機能を果たす部分については、同一または類似の参照符号を付与して重複した説明を省略する。
＜チャレンジアンドレスポンス認証プロトコルの概要＞
暗号方式は、公開鍵暗号方式と共通鍵暗号方式に大別される。公開鍵暗号方式とは、暗号化と復号で異なる鍵を用いる方式であり、暗号化を行うための鍵（公開鍵）を一般に公開する代わりに、暗号文を復号するための鍵（秘密鍵）を受信者のみの秘密情報とすることで安全性を保つ方式である。これに対し、共通鍵暗号方式と呼ばれるものは、暗号化と復号で同一の鍵（秘密鍵）を用いる方式であり、この秘密鍵を送信者と受信者以外の第三者にわからない情報とすることで安全性を保つ方式である。
【００１４】
図１は、チャレンジアンドレスポンス認証プロトコルの概要を示す図である。
図１では、認証を行う側（親機）１０１および認証される側（子機）１０２は共に、認証チップ１０３を含んでいる。
【００１５】
認証チップ１０３においては、機器の正当性を確認するために、チャレンジアンドレスポンス認証プロトコルと呼ばれる通信プロトコルが利用される。チャレンジアンドレスポンス認証とは、デジタル情報を用いた合言葉であり、認証を行う側（親機）１０１から認証される側（子機）１０２に対し、「チャンレジ」と呼ばれる乱数を送信する。これに対し、子機側では「チャンレンジ」に対して「レスポンス」と呼ばれる応答を生成し、親機に返信する。親機は、「チャレンジ」に対する「レスポンス」の値を判断し、もし正しいならば、子機が正当な機器であると判断する。
【００１６】
「チャレンジ」として乱数を用いることで、対応する「レスポンス」が毎回変化する。これにより、再送攻撃（Ｒｅｐｌａｙ  ａｔｔａｃｋ）に対する防止措置である。再送攻撃とは、過去に外部から観察された応答を繰り返すことで、正当な機器の成りすましを行う攻撃である。つまり、乱数を用いない場合、チャンレジとレスポンスのペアが完全に固定値になるため、攻撃者がこのペアを観察することで、チャレンジに対応する適切なレスポンスを知ることができ、このレスポンスを返すチップを製造することでチップ偽造が容易となるからである。例えるならば、「山」に対する「川」という合言葉しか用いないシステムであることを、悪意のある第三者が知ることができれば、常に「川」と応答することで成りすましが可能となる。
【００１７】
図２は、共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（片側認証、暗号化・復号化）の原理を示す図である。
「チャレンジ」に対する「レスポンス」の生成は、暗号関数を用いた方法が一般的である。どの暗号関数を用いるかによってメリットとデメリットがあるが、認証チップの場合、回路規模の小ささを優先できるメリットがある共通鍵暗号を用いる方法が広く用いられている。
【００１８】
図２に示すプロトコルは、親機１０１の認証チップ１０３と子機１０２の認証チップ１０３の間で、秘密鍵Ｋを事前共有している。これは、チップの製造時に秘密鍵Ｋの値を書き込むことで実現できる。この秘密鍵Ｋの値が外部に漏洩しないことがセキュリティ上の重要な前提である。
【００１９】
ステップＳ１０２で、認証を行なう側の親機１０１は、まず、チャレンジと呼ばれる整数Ｇを生成し、認証される側の子機１０２に送信する。整数Ｇは乱数であり得る。
ステップＳ１０４で、子機１０２は、整数Ｇに対し、認証チップ１０３に格納されている秘密鍵Ｋによる暗号化処理Ｅｎｃ（Ｇ、Ｋ）を実行し、応答Ａ＝Ｅｎｃ（Ｇ、Ｋ）を生成する。そして、子機１０２は、応答Ａを親機１０１に返信する。ここで、Ａ＝Ｅｎｃ（Ｐ、Ｋ）とは、共通鍵暗号を用いて、平文Ｐを秘密鍵Ｋにより暗号化した結果が暗号文Ａであることを表す。
【００２０】
ステップＳ１０６で、親機１０１は、子機１０２から応答Ａを受け取り、秘密鍵Ｋによる復号処理Ｄｅｃ（Ａ、Ｋ）を実行し、復号結果Ｇｃ＝Ｄｅｃ（Ａ、Ｋ）を得る。復号結果Ｇｃが、ステップＳ１０２で生成した整数Ｇと一致するならば、親機１０１は子機１０２を正当な機器と認定する。
【００２１】
チャレンジＧに対応した正当なレスポンスＡを生成できるのは、秘密鍵Ｋを有する場合に限られるので、親機１０１は子機１０２の正当性を確認することができる。
【００２２】
図３は共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（片側認証、暗号化のみ）の原理を示す図である。
図３に示されているチャンレジアンドレスポンス認証では暗号化のみを行う点が、図２に示されている暗号化と復号の両方を利用するチャンレジアンドレスポンス認証との違いである。
【００２３】
図３では、親機１０１の認証チップ１０３と子機１０２の認証チップ１０３の間で、秘密鍵Ｋを事前共有している。
ステップＳ２０２で、認証を行なう側の親機１０１は、チャレンジと呼ばれる整数Ｇを生成し、認証される側の子機１０２に送信する。
【００２４】
ステップＳ２０４で、子機１０２は、整数Ｇに対し、秘密鍵Ｋによる暗号化処理Ｅｎｃ（Ｇ、Ｋ）を実行し、応答Ａ＝Ｅｎｃ（Ｇ、Ｋ）を生成する。そして、子機１０２は、応答Ａを親機１０１に返信する。ここまでは図２と同じである。
【００２５】
ステップＳ２０６では、親機１０１が子機１０２の正当性を確認するために、応答Ａを復号する代わりにチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ）を行う。そして、その処理結果Ａ’＝Ｅｎｃ（Ｇ、Ｋ）が子機１０２からの応答Ａと一致するか判定し、一致するならば子機１０２が正当であると判断する。
【００２６】
図４は、共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（両側認証、暗号化・復号化）の原理を示す図である。
図２、３に示されている認証は、片側認証と呼ばれる、親機１０１が子機１０２の正当性を確認するための認証プロトコルである。片側認証では、子機１０２は親機１０１の正当性を確認することができないため、子機１０２は親機１０１の不正を防止できない。これを防ぐために、子機１０２も親機１０１の正当性を確認する手段が必要である。これを実現するのが両側認証と呼ばれる認証プロトコルであり、子機１０２が親機１０１にチャレンジを送信し、親機１０１からのレスポンスを確認する処理が行われる。
【００２７】
ステップＳ３０２で、図２と同様、親機１０１がチャレンジＧを子機１０２に送信する。
ステップＳ３０４で、子機１０２がチャレンジＧを認証チップ１０３に格納されている秘密鍵Ｋで暗号化した結果である応答Ａを計算する。
【００２８】
また次のステップＳ３０６で、子機１０２は、チャレンジＨを生成する。チャレンジＨは整数であり、また乱数であっても良い。ステップＳ３０６では子機１０２は、応答ＡとチャレンジＨを親機１０１に送信する。
【００２９】
ステップＳ３０８で、親機１０１は応答Ａを認証チップ１０３に格納されている秘密鍵Ｋで復号し、ステップＳ３０２で生成したチャレンジＧと一致するなら子機１０２が正当であると判断する。さらに秘密鍵Ｋを用いてチャレンジＨを暗号化した整数Ｂを応答として生成する。そして親機１０１は、この応答Ｂを子機１０２に送る。
【００３０】
次のステップＳ３１０で子機１０２は、親機１０１からの応答Ｂを秘密鍵Ｋにより復号し、その結果がステップＳ３０４で生成されたチャレンジＨと一致するならば親機１０１が正当であると判断する。
【００３１】
図５は共通鍵暗号を用いた一般的なチャレンジアンドレスポンス認証（両側認証、暗号化のみ）の原理を示す図である。
図４に示されている認証は暗号化・復号を用いた両側認証であるが、暗号化のみの認証も可能である。
【００３２】
ステップＳ４０２で親機１０１は、チャレンジとしての整数Ｇを生成し、子機１０２に送信する。
ステップＳ４０４で子機１０２は、親機１０１から受け取った整数Ｇを秘密鍵Ｋで暗号化処理Ｅｎｃ（Ｇ、Ｋ）を行い、結果Ａ＝Ｅｎｃ（Ｇ、Ｋ）を生成する。
【００３３】
また、ステップＳ４０６で子機１０２は、チャレンジとしての整数Ｈを生成する。ステップＳ４０６では子機１０２は、応答ＡとチャレンジＨを親機１０１に送信する。チャレンジＨは乱数であり得る。
【００３４】
ステップＳ４０８で親機１０１は、秘密鍵Ｋで暗号化処理Ｅｎｃ（Ｇ、Ｋ）を行い、結果Ａｃを生成する。そしてこの結果Ａｃが子機１０２からの応答Ａと一致するならば、子機１０２が正当であると判断する。そして、子機１０２からのチャレンジＨを秘密鍵Ｋにより暗号化処理Ｅｎｃ（Ｈ、Ｋ）を行い、結果Ｂ＝Ｅｎｃ（Ｈ、Ｋ）を生成する。そして、結果Ｂを子機１０２に送信する。
【００３５】
ステップＳ４１０で子機１０２は、乱数Ｈを秘密鍵Ｋにより暗号化処理Ｅｎｃ（Ｈ、Ｋ）を行い、結果Ｂｃ＝Ｅｎｃ（Ｈ、Ｋ）を生成する。この結果ＢｃがステップＳ４０６で生成し、親機１０１から子機１０２に送られた結果Ｂと一致するなら、親機１０１が正当であると判断する。
【００３６】
＜プローブ攻撃＞
図６〜８を参照して、プローブ攻撃の概略と、シールド回路を用いたプローブ攻撃対策の概略を説明する。
図６は、プローブ攻撃の概要を示す図である。
【００３７】
認証チップ１０３中の回路を保護するチップパッケージをはがし、内部配線にマイクロプローバー１０５と呼ばれる小型の電極を挿入することで、センサ１０４を用いて鍵の値を直接的に読み取る。プローブ攻撃は強力な方法であるが、マイクロプローバーを用いた読み取り機器が備えているプローバーの最大本数や、多くのプローバーを備えていてもマイクロプーバー同士の物理的な干渉により、同時に使用可能なマイクロプローバーの本数には限界があることが知られている。すなわち、プロービング攻撃により、同時に盗聴可能なビット数には限界がある。以下、ｑビット同時に盗聴するプローブ攻撃を、ｑビットプローブ攻撃と呼ぶ。
【００３８】
この本数は、攻撃者の環境に応じて変化するが、例えば、２〜４ビットの同時盗聴は容易であるが、６ビット以上の同時盗聴は難しくなり、１０ビット以上の同時盗聴は困難となる。この性質を考慮すると、プローブ攻撃の対策を行うための第１の条件は次のようになる。
（条件１）攻撃者が同時盗聴可能な最大ビット数をＱとした場合、Ｑビットプローブ攻撃に対して、秘密鍵の全ビットを盗聴出来ないこと。
【００３９】
図７ａ〜７ｄは、プローブ攻撃対策であるシールド回路の概要を示す図である。
図７ａ、７ｃに示されているように、認証チップ１０３は、認証チップ１０３の底面の上に、下から内部回路Ｂ１０６ｃ、内部回路Ａ１０６ｂ、シールド回路１０６ａ（これらをまとめて内部回路１０６として参照することがある）の順に積層されている。図７ｂ、７ｄに示されているように、認証チップ１０３を上から見たときに、シールド回路１０６ａが内部回路Ｂ１０６ｃおよび内部回路Ａ１０６ｂを覆うように配置される。
【００４０】
多数の層からなる内部回路１０６のうち、最上位層にシールド線と呼ばれる配線を複数設置する。プローブの侵入に対し、このシールド線は「蓋」の役割を果たすので、プローブの侵入を阻害する。それぞれのシールド線には、一定の電圧がかかっており、シールド線を切断した場合、開放されたシールド線の先の電位は０となるため、切断を検知できるので、単純な物理修正を防ぐことが出来る。
【００４１】
ただし、図７ｂに示すように、切断する対象のシールド線に対して、一定の電位Ｖｃｃを持つ電線につないだ状態を攻撃者が作り出すことが出来るならば、切断を検知できない。すなわち、最上位層のシールドが形成する「蓋」に対して「穴」をあけることが出来るので、攻撃者はこの「穴」を通じて、プローブ攻撃を行うことが出来る。
【００４２】
シールド回路１０６ａを用いた場合でも、シールド線に対する攻撃者の物理修正により、部分的にプローブ攻撃を行うことが出来る。一方、一般的な共通鍵暗号では、１２８ビットの鍵が用いられる。つまり、同時にプローブ可能なビット数をＱとした場合、Ｑの最大数が１０程度ならば、１２８ビットの鍵を全て盗聴するのは困難であるので、安全なように見える。しかし、１２８ビットの鍵を用いた場合でも、１ビットプローブ攻撃を１２８個のチップ固体に対して用いれば、１２８ビット全ての鍵を盗聴し得る。
【００４３】
図８は、プローブ攻撃対策であるシールド回路の概要を示す図である。
秘密鍵は、フラッシュＲＯＭなどの不揮発性メモリに書かれている状態では、全てのビットは狭い領域に集中しているが、暗号機能を動作させるために、不揮発性メモリから読み出しレジスタに転送した場合、１２８ビット鍵の各ビット値がチップ中のあらゆる場所に散在することになる。このような状態のチップを１２８個集めた場合、一つの認証チップから１ビットずつプローブ攻撃を行い、この情報を１２８ビット分集めることで、全てのチップに共通する値である１２８ビット鍵を盗聴可能である。
【００４４】
図８では、認証チップ＃１〜＃１２８までの１２８個の認証チップ１０３＿１、１０３＿２、…、１０３＿１２８から互いに異なる１ビットずつを、マイクロプローブ１０５を用いて盗聴する。例えば、１番目の認証チップ（認証チップ＃１）１０３＿１から１番目の鍵ビット（鍵ビット＃１）の値１を盗聴する。２番目の認証チップ（認証チップ＃２）１０３＿２から２番目の鍵ビット（鍵ビット＃２）の値０を、３番目の認証チップ（認証チップ＃３）１０３＿３から３番目の鍵ビット（鍵ビット＃３）の値１を盗聴し、以下、１２８番目の認証チップ（認証チップ＃１２８）１０３＿１０８から１２８番目の鍵ビット（鍵ビット＃１２８）の値１まで１２８個の鍵ビットを盗聴する。これらをまとめて１２８ビットの共通鍵を再構築することが可能である。この性質を考慮すると、プローブ攻撃の対策を行うための第１の条件は次のようになる。
（条件２）多数の認証チップから、Ｑビット以下のプローブ攻撃を繰り返す攻撃に対しても、秘密鍵の全ビットを盗聴できないこと。
【００４５】
＜鍵に対する攪拌処理＞
図９は鍵に対する動的な攪拌処理を用いる方法の概略を示す図である。
以下の方法では、子機は親機と同一の鍵を保持するとともに、電源ｏｎの間に変化する攪拌値（例えば乱数値）とを保持する（攪拌値は、子機間で別の値を有する）。認証時に、親機からチャレンジを受け取ると、鍵と攪拌値をもとに生成した攪拌鍵によってチャレンジを暗号化し、攪拌値と共に親機に送る。親機は保持している鍵と受け取った攪拌値とをもとに、受け取った暗号化されたチャレンジを復号して認証するか、親機は送ったチャレンジを、攪拌値と鍵をもとに生成した攪拌鍵によって暗号化し、子機から受け取った暗号化されたチャレンジと比較することで認証する。
【００４６】
図９では、認証チップ＃１〜＃１２８までの１２８個の認証チップ１００３＿１、１００３＿２、…、１００３＿１２８（これらをまとめて認証チップ１００３と呼ぶことがある）の各々に格納されている鍵に対して、互いに異なる攪拌処理を行う。攪拌処理によって、各認証チップは、固定の秘密鍵を保持せずに、電源が入っている間は常に鍵の値は変化する。攪拌処理は、認証チップ１００３に格納されている秘密鍵の値と攪拌値に基づいて行われる。攪拌値は、認証チップ１００３の間で異なる値を持つ必要がある。すなわち、攪拌値は、電源が入っている間に常に生成する乱数であっても良いし、認証チップ１００３ごとに個別の初期値から開始し電源が入っている間は認証チップで常に１ずつ増加する値であっても良い。認証チップ１００３の間で共通の秘密鍵に対し、認証チップ１００３の間で異なる攪拌値を用いて攪拌した値を認証チップ１００３の内部で保持する。したがって、各認証チップ１００３で鍵の値が異なる値として観察されるため、多数の認証チップ１００３からのプローブ攻撃を防ぐことが出来る。
【００４７】
ただし、図９に示されるような、認証チップごとに異なる攪拌値を用いて鍵を攪拌する方法を用いて、認証プロトコルをそのまま実行する場合、親機と子機の間で攪拌結果が異なるため、鍵の値の同期がとれず、正当な機器であっても認証が失敗するおそれがある。よって、本発明で用いる認証プロトコルにおいては、親機と子機の間で攪拌値を共有する必要がある。
【００４８】
図１０は、鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（片側認証、暗号化・復号化）の原理を示す図である。
図１０に示されているように、親機１００１は認証チップ１０３を含み、子機１００２は認証チップ１００３を含んでいる。認証チップ１０３は秘密鍵Ｋを格納しており、認証チップ１００３は秘密鍵Ｋと攪拌値Ｃを格納している。
【００４９】
ステップＳ５０２で、認証を行なう側の親機１００１は、まず、チャレンジと呼ばれる整数Ｇを生成し、認証される側の子機１００２に送信する。整数Ｇは乱数であり得る。
ステップＳ５０４で子機１００２は、認証チップ１００３に格納され、常に更新される攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ，Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ，Ｃ）を生成する。
【００５０】
次のステップＳ５０６で子機１００２は、攪拌された鍵Ｋ’を用いて親機１０２から受け取ったチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ’）を実行し、応答Ａ＝Ｅｎｃ（Ｇ、Ｋ’）を生成する。そして、子機１００２は、応答Ａと攪拌値Ｃを親機１００１に返信する。
【００５１】
ステップＳ５０８で親機１００１は、子機１０２から受け取った攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ、Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する。
ステップＳ５１０で親機１００１は、ステップＳ５０８で生成された攪拌された鍵Ｋ’を用いて、子機１００２から受け取った応答Ａの復号処理Ｄｅｃ（Ａ、Ｋ’）を実行し、復号結果Ｇｃ＝Ｄｅｃ（Ａ、Ｋ’）を得る。復号結果Ｇｃが、ステップＳ５０２で生成した整数Ｇと一致するならば、親機１００１は子機１００２を正当な機器と認定する。
【００５２】
したがって、図１０に示した方法を処理する子機１００２は、入力として整数の乱数であるチャレンジＧを受ける受信部と、整数である秘密鍵Ｋを格納する不揮発性メモリである第１のメモリと、整数である攪拌値Ｃを格納する第２のメモリと、秘密鍵Ｋと攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である攪拌された秘密鍵Ｋ’を生成する鍵攪拌部と、攪拌された秘密鍵Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’）を作用させてレスポンスＡ＝Ｅｎｃ（Ｇ、Ｋ’）を生成するレスポンス生成部と、第２のメモリに格納されている攪拌値Ｃを更新する攪拌値更新部と、攪拌値ＣとレスポンスＡを出力する送信部と、を含む。
【００５３】
また、図１０に示した方法を処理する親機１００１は、子機１００２によって出力された攪拌値ＣとレスポンスＡを受け取り、受け取った前記攪拌値Ｃと、予め自身の不揮発性メモリに格納してある前記秘密鍵Ｋと同じ値である第２の秘密鍵Ｋとに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である秘密鍵比較値Ｋ’＝Ｆ（Ｋ、Ｃ）を生成し、秘密鍵比較値Ｋ’とレスポンスＡを前記暗号化関数の逆関数である復号関数Ｄｅｃ（Ａ、Ｋ’に作用させてチャレンジ比較値Ｇｃ＝Ｄｅｃ（Ａ、Ｋ’）を生成し、チャレンジＧとチャレンジ比較値Ｇｃ＝Ｄｅｃ（Ａ、Ｋ’）を比較し、前記チャレンジＧと前記チャレンジ比較値Ｇｃ＝Ｄｅｃ（Ａ、Ｋ’）との比較の結果に基づいて、子機１００２を認証する。
上記の構成を有する親機１００１と子機１００２の組において、親機１００１と子機１００２の役割は、互いに交換可能である。
【００５４】
図１１は、鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（片側認証、暗号化のみ）の原理を示す図である。
【００５５】
ステップＳ６０２で、認証を行なう側の親機１００１は、まず、チャレンジと呼ばれる整数Ｇを生成し、認証される側の子機１００２に送信する。整数Ｇは乱数であり得る。
ステップＳ６０４で子機１００２は、認証チップ１００３に格納され、常に更新される攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ，Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ，Ｃ）を生成する。
【００５６】
次のステップＳ６０６で子機１００２は、攪拌された鍵Ｋ’を用いて親機１０２から受け取ったチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ’）を実行し、応答Ａ＝Ｅｎｃ（Ｇ、Ｋ’）を生成する。そして、子機１０２は、応答Ａと攪拌値Ｃを親機１０１に返信する。
【００５７】
ステップＳ６０８で親機１００１は、子機１００２から受け取った攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ，Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する。
【００５８】
ステップＳ６１０で親機１０１は、ステップＳ５０８で生成された攪拌された鍵Ｋ’を用いて、ステップＳ６０２で生成したチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ’）を実行し、結果Ａｃ＝Ｅｎｃ（Ｇ、Ｋ’）を生成する。結果Ａｃが、子機１００２から受け取ったレスポンスＡと一致するならば、親機１０１は子機１０２を正当な機器と認定する。
【００５９】
したがって、図１１に示した方法を処理する子機１００２は、入力として整数の乱数であるチャレンジＧを受ける受信部と、整数である秘密鍵Ｋを格納する不揮発性メモリである第１のメモリと、整数である攪拌値Ｃを格納する第２のメモリと、秘密鍵Ｋと攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である攪拌された秘密鍵Ｋ’を生成する鍵攪拌部と、攪拌された秘密鍵Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’）を作用させてレスポンスＡ＝Ｅｎｃ（Ｇ、Ｋ’）を生成するレスポンス生成部と、第２のメモリに格納されている攪拌値Ｃを更新する攪拌値更新部と、攪拌値ＣとレスポンスＡを出力する送信部と、を含む。
【００６０】
また、図１１に示した方法を処理する親機１００１は、子機１００２によって出力された攪拌値ＣとレスポンスＡを受け取り、受け取った前記攪拌値Ｃと、予め自身の不揮発性メモリに格納してある前記秘密鍵Ｋと同じ値である第２の秘密鍵Ｋに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である秘密鍵比較値Ｋ’を生成し、秘密鍵比較値Ｋ’とレスポンスＡに暗号化関数Ｅｎｃ（Ａ、Ｋ’）を作用させてチャレンジ比較値Ｇｃ＝Ｅｎｃ（Ａ、Ｋ’）を生成し、チャレンジＧとチャレンジ比較値Ｇｃを比較し、チャレンジＧとチャレンジ比較値Ｇｃとの比較の結果に基づいて、子機１００２を認証する。
【００６１】
上記の構成を有する親機１００１と子機１００２の組において、親機１００１と子機１００２の役割は、互いに交換可能である。
【００６２】
図１２は、鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（両側認証、暗号化・復号化）の原理を示す図である。
【００６３】
ステップＳ７０２で認証を行なう側の親機１００１は、まず、チャレンジと呼ばれる整数Ｇを生成し、認証される側の子機１００２に送信する。整数Ｇは乱数であり得る。
ステップＳ７０４で子機１００２は、チャレンジＨを生成する。チャレンジＨは整数であり、また乱数であっても良い。
【００６４】
ステップＳ７０６で子機１００２は、認証チップ１００３に格納され、常に更新される攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ、Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する。
【００６５】
次のステップＳ７０８で子機１００２は、攪拌された鍵Ｋ’を用いて親機１０２から受け取ったチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ’）を実行し、応答Ａ＝Ｅｎｃ（Ｇ、Ｋ’）を生成する。そして、子機１００２は、応答Ａと攪拌値ＣとチャレンジＨを親機１００１に返信する。
【００６６】
ステップＳ７１０で親機１００１は、子機１００２から受け取った攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ，Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する。
次のステップＳ７１２で親機１００１は、攪拌された鍵Ｋ’を用いて子機１００２から受け取った応答Ａの復号処理Ｄｅｃ（Ａ、Ｋ’）を実行し、復号結果Ｇｃ＝Ｄｅｃ（Ａ、Ｋ’）を得る。
【００６７】
ステップＳ７１４で親機１００１は、認証チップ１００３に格納され、常に更新される攪拌値Ｄと秘密鍵Ｋを攪拌関数Ｆ（Ｋ、Ｄ）に用いて攪拌された鍵Ｋ”＝Ｆ（Ｋ、Ｄ）を生成する。
【００６８】
ステップＳ７１６で親機１００１は、復号結果Ｇｃが、ステップＳ７０２で生成した整数Ｇと一致するならば、親機１００１は子機１００２を正当な機器と認証する。そして、攪拌された鍵Ｋ”を用いて子機１００２から受け取ったチャレンジＨの暗号化処理Ｅｎｃ（Ｈ、Ｋ”）を実行し、応答Ｂ＝Ｅｎｃ（Ｈ、Ｋ”）を生成する。そして親機１００１は、応答Ｂと攪拌値Ｄを子機１００２に送信する。
【００６９】
ステップＳ７１８で子機１００２は、親機１００１から受け取った攪拌値Ｄと秘密鍵Ｋを用いて、攪拌された鍵Ｋ”＝Ｆ（Ｋ、Ｄ）を生成する。
次にステップＳ７２０で子機１００２は、攪拌された鍵Ｋ”を用いて親機１００１から受け取った応答Ｂの復号処理Ｄｅｃ（Ｂ、Ｋ”）を実行し、復号結果Ｈｃ＝Ｄｅｃ（Ｂ、Ｋ”）を得る。復号結果Ｈｃが、ステップＳ７０４で生成した整数Ｈと一致するならば、子機１００２は親機１００１を正当な機器と認証する。
【００７０】
したがって、図１２に示した方法を処理する子機１００２は、入力として整数の乱数であるチャレンジＧを受ける受信部と、整数の乱数である第２のチャレンジＨを生成するチャレンジ生成部と、整数である秘密鍵Ｋを格納する不揮発性メモリである第１のメモリと、整数である攪拌値Ｃを格納する第２のメモリと、秘密鍵Ｋと攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である攪拌された秘密鍵Ｋ’を生成する鍵攪拌部と、攪拌された秘密鍵Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’）を作用させてレスポンスＡ＝Ｅｎｃ（Ｇ、Ｋ’）を生成するレスポンス生成部と、第２のメモリに格納されている攪拌値Ｃを更新する攪拌値更新部と、攪拌値ＣとレスポンスＡと第２のチャレンジＨを出力する送信部と、を含む。
【００７１】
また、図１２に示した方法を処理する親機１００１は、子機１００２によって出力された攪拌値ＣとレスポンスＡと第２チャレンジＨを受け取り、受け取った攪拌値Ｃと、予め自身の不揮発性メモリに格納してある秘密鍵Ｋと同じ値である第２の秘密鍵Ｋとに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である秘密鍵比較値Ｋ’を生成し、秘密鍵比較値Ｋ’とレスポンスＡを暗号化関数の逆関数である復号関数Ｄｅｃ（Ａ、Ｋ’）に作用させて整数であるチャレンジ比較値Ｇｃを生成し、自身のメモリに格納してある整数である第２の攪拌値Ｄと秘密鍵Ｋに攪拌関数Ｆ（Ｋ、Ｄ）を作用させて整数である第２の秘密鍵比較値Ｋ''を生成し、チャレンジＧとチャレンジ比較値Ｇｃとの比較をし、チャレンジＧと前記チャレンジ比較値Ｇｃとの比較の結果に基づいて子機１００２が認証された場合に、第２の秘密鍵比較値Ｋ''と第２のチャレンジＨに暗号化関数Ｅｎｃ（Ｈ、Ｋ''）を作用させて整数である第２のレスポンスＢ＝Ｅｎｃ（Ｈ、Ｋ''）を生成し、第２の攪拌値Ｄと第２のレスポンスＢを出力する。
【００７２】
また、図１２に示した方法を処理する子機１００２はの鍵攪拌部は、秘密鍵Ｋと第２の攪拌値Ｄに攪拌関数Ｆ（Ｋ、Ｄ）を作用させて整数である第２の攪拌された秘密鍵Ｋ''を生成し、さらに、第２の攪拌された秘密鍵Ｋ''と第２のレスポンスＨを復号関数Ｄｅｃ（Ｈ、Ｋ''）に作用させて第２のチャレンジ比較値Ｈｃを生成する復号部と、第２のチャレンジ比較値Ｈｃと第２チャレンジＨとの比較に基づいて、親機１００１を認証する認証部と、を含む。
【００７３】
上記の構成を有する親機１００１と子機１００２の組において、親機１００１と子機１００２の役割は、互いに交換可能である。
【００７４】
図１３は、鍵に対する動的な攪拌処理を用いる方法を用いる共通鍵暗号を用いたチャレンジアンドレスポンス認証（両側認証、暗号化のみ）の原理を示す図である。
【００７５】
ステップＳ８０２で認証を行なう側の親機１００１は、まず、チャレンジと呼ばれる整数Ｇを生成し、認証される側の子機１００２に送信する。整数Ｇは乱数であり得る。
ステップＳ８０４で子機１００２は、チャレンジＨを生成する。チャレンジＨは整数であり、また乱数であっても良い。
【００７６】
ステップＳ８０６で子機１００２は、認証チップ１００３に格納され、常に更新される攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ、Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する。
【００７７】
次のステップＳ８０８で子機１００２は、攪拌された鍵Ｋ’を用いて親機１０２から受け取ったチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ’）を実行し、応答Ａ＝Ｅｎｃ（Ｇ、Ｋ’）を生成する。そして、子機１００２は、応答Ａと攪拌値ＣとチャレンジＨを親機１００１に返信する。
【００７８】
ステップＳ８１０で親機１００１は、子機１００２から受け取った攪拌値Ｃと秘密鍵Ｋを攪拌関数Ｆ（Ｋ，Ｃ）に用いて攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を生成する。
次のステップＳ８１２で親機１００１は、攪拌された鍵Ｋ’を用いてステップＳ８０２で生成したチャレンジＧの暗号化処理Ｅｎｃ（Ｇ、Ｋ’）を実行し、結果Ａｃ＝Ｅｎｃ（Ｇ、Ｋ’）を生成する。
【００７９】
ステップＳ８１４で親機１００１は、認証チップ１００３に格納され、常に更新される攪拌値Ｄと秘密鍵Ｋを攪拌関数Ｆ（Ｋ、Ｄ）に用いて攪拌された鍵Ｋ”＝Ｆ（Ｋ、Ｄ）を生成する。
【００８０】
ステップＳ８１６で親機１００１は、結果Ａｃが、子機１００２から受け取った応答Ａと一致するならば、親機１００１は子機１００２を正当な機器と認証する。そして、攪拌された鍵Ｋ”を用いて子機１００２から受け取ったチャレンジＨの暗号化処理Ｅｎｃ（Ｈ、Ｋ”）を実行し、応答Ｂ＝Ｅｎｃ（Ｈ、Ｋ”）を生成する。そして親機１００１は、応答Ｂと攪拌値Ｄを子機１００２に送信する。
【００８１】
ステップＳ８１８で子機１００２は、親機１００１から受け取った攪拌値Ｄと秘密鍵Ｋを用いて、攪拌された鍵Ｋ”＝Ｆ（Ｋ、Ｄ）を生成する。
次にステップＳ８２０で子機１００２は、攪拌された鍵Ｋ”を用いてステップＳ８０４で生成したチャレンジＨの暗号化処理Ｅｎｃ（Ｈ、Ｋ”）を実行し、結果Ｂｃ＝Ｅｎｃ（Ｈ、Ｋ”）を生成する。結果Ｂｃが、親機１００１から受け取った応答Ｂと一致するならば、子機１００２は親機１００１を正当な機器と認証する。
【００８２】
したがって、図１３に示した方法を処理する子機１００２は、入力として整数の乱数であるチャレンジＧを受ける受信部と、整数の乱数である第２のチャレンジＨを生成するチャレンジ生成部と、整数である秘密鍵Ｋを格納する不揮発性メモリである第１のメモリと、整数である攪拌値Ｃを格納する第２のメモリと、秘密鍵Ｋと攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させて整数である攪拌された秘密鍵Ｋ’を生成する鍵攪拌部と、攪拌された秘密鍵Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’）を作用させてレスポンスＡ＝Ｅｎｃ（Ｇ、Ｋ’）を生成するレスポンス生成部と、第２のメモリに格納されている攪拌値Ｃを更新する攪拌値更新部と、攪拌値ＣとレスポンスＡと第２のチャレンジＨを出力する送信部と、を含む。
【００８３】
また、図１３に示した方法を処理する親機１００１は、子機１００２によって出力された攪拌値ＣとレスポンスＡと第２チャレンジＨを受け取り、受け取った攪拌値Ｃと、予め自身の不揮発性メモリに格納してある秘密鍵Ｋと同じ値でる第２の秘密鍵Ｋに攪拌関数Ｆ（Ｋ、Ｄ）を作用させて整数である秘密鍵比較値Ｋ’を生成し、秘密鍵比較値Ｋ’とチャレンジＧに暗号化関数Ｅｎｃ（Ｇ、Ｋ’を作用させて整数であるレスポンス比較値Ａｃを生成し、さらに自身のメモリに格納してある整数である第２の攪拌値Ｄと秘密鍵Ｋに攪拌関数Ｆ（Ｋ、Ｄ）を作用させて第２の攪拌された秘密鍵Ｋ''を生成し、レスポンスＡと前記レスポンス比較値Ａｃとを比較し、レスポンスＡとレスポンス比較値Ａｃとの比較の結果に基づいて子機（１００２）が認証された場合に、第２の秘密鍵比較値Ｋ''と第２のチャレンジＨに暗号化関数Ｅｎｃ（Ｈ、Ｋ''）を作用させて整数である第２のレスポンスＢ＝Ｅｎｃ（Ｈ、Ｋ''）を生成し、第２のレスポンスＢと第２の攪拌値Ｄを出力する。
【００８４】
また、図１３に示した方法を処理する子機１００２はの鍵攪拌部は、秘密鍵Ｋと第２の攪拌値Ｄに攪拌関数Ｆ（Ｋ、Ｄ）を作用させて整数である第２の攪拌された秘密鍵（Ｋ''）を生成し、さらに、第２の攪拌値Ｄと秘密鍵Ｋを暗号化関数Ｅｎｃ（Ｋ、Ｄ）に作用させて第２のレスポンス比較値Ｂｃを生成する暗号化部と、第２のレスポンスＢと第２のレスポンス比較値Ｂｃとの比較に基づいて、親機１００１を認証する認証部と、を含む。
【００８５】
上記の構成を有する親機１００１と子機１００２の組において、親機１００１と子機１００２の役割は、互いに交換可能である。
【００８６】
＜（ｉ）不揮発性回路へのプローブ攻撃対策＞
以下では、（ｉ）不揮発性回路に対するプローブ攻撃対策の種別と、（ｉｉ）揮発性回路に対するプローブ攻撃対策の種別、（ｉｉｉ）秘密鍵へのマスク演算の種別について説明する。
【００８７】
一般に回路は以下の２種類に分類される。
（１）不揮発性回路：読み込み、書き込みの両方が可能であり、電源が切れた状態やリセット後も値を記憶している回路。フラッシュＲＯＭ、Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＥＥＰＲＯＭ）、強誘電体メモリ（ＦＲＡＭ（登録商標））、不揮発性フリップフロップが該当する。
（２）揮発性回路：電源が切れた状態やリセット後は値を記憶しない回路。レジスタや論理回路が該当する。
【００８８】
以下ではまず、図１４〜１８を参照しながら、不揮発性回路へのプローブ攻撃対策について説明する。
図１４は、攪拌関数Ｆ（Ｋ、Ｃ）を用いて鍵に対する動的な攪拌処理を行う鍵攪拌処理部の機能ブロック図である。
【００８９】
鍵攪拌処理部は、ラッピング処理部２０００、鍵記憶部２１００、アンラッピング処理部２２００、ビット短縮処理部２３００を含む。
【００９０】
ラッピング処理部２０００は、秘密鍵Ｋを格納するメモリ２００２、攪拌関数Ｆを用いて攪拌処理を行う攪拌関数作用部Ｆ（Ｋ、Ｃ）２００４、攪拌値Ｃを格納するメモリ２００８とメモリ２００８に接続され、メモリ２００８に格納される攪拌値Ｃを更新する攪拌値更新部２００６と、認証チップ１００３の外部からの入力とメモリ２００８に格納されている攪拌値のいずれを攪拌関数作用部Ｆ（Ｋ、Ｃ）２００４に入力するかを切り替える切り替え器２０１０を含む。攪拌関数作用部Ｆ（Ｋ、Ｃ）２００４は、秘密鍵Ｋを格納するメモリ２００２および切り替え器２０１０から入力された秘密鍵Ｋおよび攪拌値Ｃに攪拌関数Ｆ（Ｋ、Ｃ）を作用させ、結果の値を鍵記憶部２１００に出力する。このように、ラッピング処理部２０００では、秘密鍵Ｋと攪拌値Ｃを攪拌関数Ｆに作用させることによって、Ｆ（Ｋ、Ｃ）により表される鍵攪拌結果が生成される。
【００９１】
鍵記憶部２１００は不揮発性回路で構成され、攪拌鍵格納部２１０２を含む。鍵記憶部２１００を不揮発性回路２１００として参照することがある。攪拌鍵格納部２１０２はラッピング処理部２０００の攪拌関数作用部Ｆ（Ｋ、Ｃ）２００４で生成された値を格納する。
【００９２】
攪拌鍵格納部２１０２はビット短縮処理部２３００に接続されており、必要に応じて、攪拌鍵格納部２１０２に格納されている値のビット数を短縮して、攪拌鍵として出力する。
【００９３】
アンラッピング処理部２２００は逆関数作用部２２０２を含む。逆関数作用部２２０２は、攪拌関数Ｆ（Ｋ、Ｃ）の逆攪拌関数Ｆ−１（Ｋ、Ｃ）を用いて、攪拌鍵格納部２１０２に格納されている値から、秘密鍵Ｋおよび攪拌値Ｃを得る。逆関数作用部２２０２の出力である秘密鍵Ｋは、ラッピング処理部２０００のメモリ２００２に入力され、格納される。
【００９４】
このように、図１４では、秘密鍵Ｋと攪拌値ＣからＦ（Ｋ、Ｃ）により表される攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）が生成され、不揮発性回路で構成される鍵記憶部２１００の攪拌鍵格納部２１０２に格納される。この攪拌値Ｃは、図１０〜１３に示される認証プロトコルにおいて、親機１００１と子機１００２の同期を取るために認証チップの外部に出力される。また、これらの認証プロトコルにおいて、親機１００１または子機１００２は、攪拌値Ｃを外部から受け取ることもある。その認証チップ内部の攪拌値を使用するか、外部の攪拌値を使用するかは、切り替え器２０１０によって変更される。攪拌値Ｃは、チップの電源が入っている間は常に変更される値である。攪拌値の更新処理の内容に特に制約はなく、ハードウェア乱数のような予測がつかない更新であっても、値を１増加させるといった予測がつく更新のいずれであっても良い。
【００９５】
セキュリティの観点からは、攪拌関数Ｆ（Ｋ、Ｃ）は、以下の（性質１）（性質２）（性質３）を有することが要求される。
（性質１）入力値ＫまたはＣが１ビットでも変化した場合、出力値Ｋ’＝Ｆ（Ｋ、Ｃ）の全てのビットが変化する。
（性質２）Ｆ（Ｋ、Ｃ）の逆関数Ｆ−１（Ｋ、Ｃ）が存在する。
（性質３）Ｆ（Ｋ、Ｃ）の全てのビット値が分からない限り、Ｆ（Ｋ、Ｃ）から入力値Ｋ、Ｃの組（Ｋ、Ｃ）を求めることは出来ない。
【００９６】
しかしながら、上記（性質１）は次の（性質１’）に置き換えても良い。
（性質１’）入力値ＫまたはＣが１ビットでも変化した場合、出力値Ｋ’＝Ｆ（Ｋ、Ｃ）の複数のビットが変化する。
【００９７】
しかしながら、上記（性質３）は次の（性質３’）に置き換えても良い。
（性質３’）Ｆ（Ｋ、Ｃ）のＱ＋１ビット以上のビット値が分からない限り、Ｆ（Ｋ、Ｃ）から入力値Ｋ、Ｃの組（Ｋ、Ｃ）を求めることは出来ない。  上記の（性質１）により、攪拌値Ｃが１ビットでも変化した場合、不揮発性回路で構成される攪拌鍵格納部２１０２の全ビットが変化するので、攻撃者は攪拌鍵格納部２１０２に対してプローブ攻撃を用いても、認証チップごとに得られる値が異なるため、複数の認証チップから取り出した結果を用いても、秘密鍵Ｋを再構成することができない。また、上記（性質１’）により、攪拌値Ｃが変化した場合、不揮発性回路で構成される攪拌鍵格納部２１０２の複数のビットが変化するので、攻撃者が攪拌鍵格納部２１０２に対してプローブ攻撃を用いて秘密鍵Ｋを再構成しようとしても、時間と手間が必要である。
【００９８】
よって、不揮発性回路２１００は、前述の（条件２）「多数の認証チップから、Ｑビット以下のプローブ攻撃を繰り返す攻撃に対しても、秘密鍵の全ビットを盗聴できないこと」を満足することが出来る。
【００９９】
上記の（性質２）により、攪拌鍵格納部２１０２に格納された攪拌鍵Ｋ’から、Ｋ、Ｃの組（Ｋ、Ｃ）を得ることが出来る。このとき、攪拌鍵Ｋ’からＫ、Ｃの組（Ｋ、Ｃ）を得る処理は、論理回路やレジスタなどの揮発性回路によって行われる。すなわち、揮発性回路は秘密鍵Ｋの値を保持するため、複数の認証チップからの１ビットプローブ攻撃に脆弱な可能性がある。この問題は、後の＜揮発性回路へのプローブ攻撃対策＞にて述べられる手段を用いることによって解決される。
【０１００】
（性質３）（性質３’）は、不揮発性回路２１００に対するプローブ攻撃の難しさを保障するための性質である。例えば、Ｆ（Ｋ、Ｃ）が２５６ビットである場合、攻撃者は攪拌値Ｃに応じて動的に更新されるこの２５６ビット値を同時にプローブ攻撃しない限り、Ｆ（Ｋ、Ｃ）からＫ、Ｃの組（Ｋ、Ｃ）を得ることが出来ない。すなわち不揮発性回路２１００に関して、前述の（条件１）「攻撃者が同時盗聴可能な最大ビット数をＱとした場合、Ｑビットプローブ攻撃に対して、秘密鍵の全ビットを盗聴出来ないこと」を満足することができる。
【０１０１】
上記（性質３）は、不揮発性回路２１００のビット値の互いの依存性が高いことを意味している。よって、２５６ビット書き込み処理は、１サイクルのうちに全て完結することが望ましい。また、（性質３）を完全に保障するためには、２５６ビットの全ビット値が認証チップ上に分散して配置されるのが望ましい。例えば１バイト単位で読み出し／書き込みを行うＥＥＰＲＯＭ上に２５６ビットの攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を書き込む場合には、メモリの読み書きを行う８ビットインターフェイス（Ｉ／Ｆ）上の配線にプロービングを行うことで、２５６ビットの攪拌された鍵Ｋ’＝Ｆ（Ｋ、Ｃ）を８ビット単位で読み取ることが出来るため、安全性が保障されない。すなわち、（性質３）を保障するためには、不揮発性回路２１００は、不揮発性フリップフロップ等の回路を用いて、２５６ビットを１サイクルで読み書きできることが望ましい。
【０１０２】
このように、図１４に示す構成において、関数Ｆが（性質１）（性質２）（性質３）を満たすならば、不揮発性回路２１００は、前述の（条件１）（条件２）を満足することが出来る。不揮発性回路２１００に格納された値はそのまま攪拌鍵として用いられても良いし、ビット短縮処理部２３００でビット短縮処理を行った後に攪拌鍵として用いられても良い。
（性質１）（性質２）（性質３）を満たす鍵攪拌処理部２００４の構成は複数存在する。
【０１０３】
図１５は、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の攪拌関数Ｆ（Ｋ、Ｃ）の第１の構成を示す図である。
図１５に開示の方法は、最適非対称暗号符号化（ＯＡＥＰ）と呼ばれる公開鍵のメッセージパディング方式をベースとしている。
【０１０４】
図１６は最適非対称暗号符号化処理部の構成の例を示す図である。図１７は、最適非対称暗号符号化処理部を用いて構成される鍵攪拌処理部の例を示す図である。
【０１０５】
先に、図１６の最適非対称暗号符号化処理部について説明し、次に、図１７の最適非対称暗号符号化処理部を用いて構成される鍵攪拌処理部の例を説明する。その次に、図１５の攪拌関数Ｆ（Ｋ、Ｃ）の第１の構成の説明に戻る。
【０１０６】
図１６の最適非対称暗号符号化処理部は、記憶部２８００、マスク生成関数（ＭＧＦ）作用部２７０２、２７０４、２９０２、２９０６、ＸＯＲゲート２７０４、２７０８、２９０４、２９０８を含んでいる。鍵記憶部２８００は不揮発性回路で構成され、さらに攪拌鍵１を記憶する第１のメモリ２８０２と攪拌鍵２を記憶する第２のメモリ２８０４を含む。
【０１０７】
マスク生成関数（ＭＧＦ）作用部２７０２、２７０４、２９０２、２９０６は、入力に対してマスク生成関数ＭＧＦを作用させる。
マスク生成関数ＭＧＦはメッセージ生成関数とも呼ばれ、次のような性質を持つ。
（ＭＧＦ１）入力が１ビットでも変化した場合、出力値の全ビットが変化する。
（ＭＧＦ２）出力から入力値を求めることが出来ない。
（ＭＧＦ３）入力と出力のビット長を、パラメータにより調整することができる。
マスク生成関数ＭＧＦは基本的には、入出力のビット長を調整することができるハッシュ関数である。
【０１０８】
図１６に示されているように、種値ｓｅｅｄはマスク生成関数（ＭＧＦ）作用部２７０２に入力され出力ＭＧＦ（ｓｅｅｄ）を得る。出力ＭＧＦ（ｓｅｅｄ）はＸＯＲゲート２７０４に入力され、データ値ＤＢとの排他的論理和（ＸＯＲ）が演算され、出力ＤＢ☆ＭＧＦ（ｓｅｅｄ）を得る。
本明細書中では、記号「☆」を排他的論理和
2014033324.tif 000003
の意味で用いる。
マスク生成関数（ＭＧＦ）作用部２７０２では、上記性質（ＭＧＦ１）より、種値ｓｅｅｄが１ビットでも変化すると、出力ＭＧＦ（ｓｅｅｄ）は全ビットが変化する。
【０１０９】
ＸＯＲゲート２７０４の出力ＤＢ☆ＭＧＦ（ｓｅｅｄ）は、記憶部２８００の第２のメモリ２８０４に格納されると同時に、マスク生成関数（ＭＧＦ）作用部２７０６に入力される。その結果ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））は、ＸＯＲゲート２７０８に入力され、種値ｓｅｅｄとの排他的論理和（ＸＯＲ）が演算され、出力ｓｅｅｄ☆ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））を得る。出力ｓｅｅｄ☆ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））は記憶部２８００の第１のメモリ２８０２に格納される。
ここまでがデータ値ＤＢを、種値ｓｅｅｄを用いて暗号化する処理に対応する。
【０１１０】
次に、復号する処理を説明する。
記憶部２８００の第１のメモリ２８０２にはｓｅｅｄ☆ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））が、第２のメモリ２８０４にはＤＢ☆ＭＧＦ（ｓｅｅｄ）が格納されている。
【０１１１】
まず、次の論理式に注目する。
［ｓｅｅｄ☆ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））］☆［ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））］
＝ｓｅｅｄ
上式の左辺第１項は第１のメモリ２８０２に格納されている値であり、左辺第２項は第２のメモリ２８０４に格納されている値にマスク生成関数（ＭＧＦ）を作用させることによって得ることができる値である。
【０１１２】
よって、第２のメモリ２８０４に格納されている値をマスク生成関数（ＭＧＦ）作用部２９０２に入力し、出力ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ）を得て、さらにこの出力ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ）と第１のメモリ２８０２に格納されている値ｓｅｅｄ☆ＭＧＦ（ＤＢ☆ＭＧＦ（ｓｅｅｄ））との排他的論理和（ＸＯＲ）を、ＸＯＲゲート２９０４で演算することにより種値ｓｅｅｄを得ることができる。
【０１１３】
また、次の論理式にも注目する。
ＭＧＦ（ｓｅｅｄ）☆［ＤＢ☆ＭＧＦ（ｓｅｅｄ）］＝ＤＢ
上式の左辺第１項はＸＯＲゲート２９０４の出力にマスク生成関数（ＭＧＦ）を作用させることによって得ることができる値である。左辺第２項は第２のメモリ２８０４に格納されている値である。よって、データ値ＤＢを得るためには、まず、ＸＯＲゲート２９０４の出力を、マスク生成関数（ＭＧＦ）作用部２９０６に入力し、出力ＭＧＦ（ｓｅｅｄ）を得る。次に、マスク生成関数（ＭＧＦ）作用部２９０６の出力ＭＧＦ（ｓｅｅｄ）と、第２のメモリ２８０４に格納されている値ＤＢ☆ＭＧＦ（ｓｅｅｄ）との排他的論理和（ＸＯＲ）を、ＸＯＲゲート２９０８で演算すればよい。
【０１１４】
図１７は、最適非対称暗号符号化処理部を用いて構成される鍵攪拌処理部の例を示す図である。図１７で、ｓｅｅｄは、図１４の攪拌値Ｃに相当し、ＤＢは秘密鍵Ｋに相当する。
【０１１５】
図１７の鍵攪拌処理部は、ラッピング処理部３０００、鍵記憶部３１００、アンラッピング処理部３２００を含む。
ラッピング処理部３０００は、マスク生成関数（ＭＧＦ）作用部３００２、３００６、ＸＯＲゲート３００４、３００８を含む。
【０１１６】
鍵記憶部３１００は第１のメモリ３１０２と第２のメモリ３１０４を含む。
アンラッピング処理部３２００は、マスク生成関数（ＭＧＦ）作用部３２０２、３２０６、ＸＯＲゲート３２０４、３２０８を含む。
【０１１７】
ラッピング処理部３０００に入力される攪拌値Ｃは、常に更新されている。
攪拌値Ｃはマスク生成関数（ＭＧＦ）作用部３００２に入力され出力ＭＧＦ（Ｃ）を得る。出力ＭＧＦ（Ｃ）はＸＯＲゲート３００４に入力され、秘密鍵Ｋとの排他的論理和（ＸＯＲ）が演算され、出力Ｋ☆ＭＧＦ（Ｃ）を得る。
【０１１８】
ＸＯＲゲート３００４の出力Ｋ☆ＭＧＦ（Ｃ）は、鍵記憶部３１００の第２のメモリ３１０４に格納されると同時に、マスク生成関数（ＭＧＦ）作用部３００６に入力される。その結果ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））は、ＸＯＲゲート３００８に入力され、攪拌値Ｃとの排他的論理和（ＸＯＲ）が演算され、出力Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））を得る。出力Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））は鍵記憶部３１００の第１のメモリ３１０２に格納される。
【０１１９】
鍵記憶部３１００は不揮発性回路で構成される。不揮発性回路の第１のメモリ３１０２にはＣ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））で示される値が、第２のメモリ３１０４にはＫ☆ＭＧＦ（Ｃ）で示される値が格納される。
【０１２０】
図１４に示されるチャレンジアンドレスポンス認証のアルゴリズムでは、攪拌値Ｃの値は認証チップ外部から観察可能である。しかし、Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））で示される値に対してプローブ攻撃を行っても、秘密鍵Ｋを得ることが出来ない。なぜなら、ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））の値は秘密鍵Ｋの全ビットをプローブ攻撃しない限り攻撃者に分からない値であるからである。このようにして、本実施形態暗号処理装置の安全性が保証される。しかし、値Ｋ☆ＭＧＦ（Ｃ）が格納される不揮発性回路へのプローブ攻撃に対しては脆弱である。なぜなら、攪拌値Ｃは認証チップ外部から観察可能であるため、攻撃者はＭＧＦ（Ｃ）の値を計算可能であるので、値Ｋ☆ＭＧＦ（Ｃ）が格納されている第２のメモリ３１０４へのプローブ攻撃は攪拌されていない秘密鍵Ｋへのプローブ攻撃と同じである。これは、条件１、条件２を満たすことができないことを意味する。すなわち、図１６に示される方法をそのまま図１４に適用しても、プローブ攻撃に対する十分な耐性が得られないことがあり得る。
【０１２１】
そこで、秘密鍵Ｋの上位半分のビットをＫＨ、秘密鍵Ｋの下位半分のビットをＫＬ、攪拌値Ｃの上位半分のビットをＣＨ、秘密鍵Ｋの下位半分のビットをＣＬとする。また以下では、ビット結合を記号「||」で表すことにする。
【０１２２】
そして、上位半分同士を結合した値ＫＨ||ＣＨを最適非対称暗号符号化処理部の種値ｓｅｅｄとして、下半分同士を結合した値ＫＬ||ＣＬを最適非対称暗号符号化処理部のデータ値ＤＢとして入力することによって、上の問題を回避する。秘密鍵Ｋと攪拌値Ｃを分割、再結合して入力することで、記憶部には、ＫＨ||ＣＨ☆ＭＧＦ（ＫＬ||ＣＬ）☆ＭＧＦ（ＫＨ||ＣＨ）と、ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）が格納される。これらの値は、ＫＨ、ＫＬにマスク生成関数ＭＧＦが作用されて得られる値であり、裸の秘密鍵Ｋの値はマスクされている。よって、記憶部を構成する不揮発性回路の値を全ビット同時にプロービングしない限り、攻撃者は秘密鍵Ｋの値を得ることが出来ない。
【０１２３】
図１５に示されているように、鍵攪拌処理部は、ラッピング処理部２３００、鍵記憶部２４００、アンラッピング処理部２５００を含む。
秘密鍵Ｋの上位半分のビットをＫＨ、秘密鍵Ｋの下位半分のビットをＫＬ、攪拌値Ｃの上位半分のビットをＣＨ、秘密鍵Ｋの下位半分のビットをＣＬとする。また以下では、ビット結合を記号「||」で表すことにする。
【０１２４】
メモリ２６０２には、秘密鍵Ｋの上位半分のビットＫＨと攪拌値Ｃの上位半分のビットＣＨをビット結合した値ＫＨ||ＣＨが格納される。メモリ２６０２には更新処理部２６０４が接続され、メモリ２６０２に格納されている攪拌値Ｃの上位半分のビットＣＨを更新する。
【０１２５】
またメモリ２６０６には、秘密鍵Ｋの下位半分のビットＫＬと攪拌値Ｃの下位半分のビットＣＬをビット結合した値ＫＬ||ＣＬが格納される。メモリ２６０６には更新処理部２６０８が接続され、メモリ２６０６に格納されている攪拌値Ｃの下位半分のビットＣＬを更新する。
【０１２６】
メモリ２６０２およびメモリ２６０６は、ラッピング処理部２３００の入力端子に接続されている。
メモリ２６０２からラッピング処理部２３００に入力された値ＫＨ||ＣＨは、マスク生成関数（ＭＧＦ）作用部２３０２でマスク処理が施され、結果ＭＧＦ（ＫＨ|ＣＨ）が生成される。その結果は、ＸＯＲゲート２３０４に入力され、メモリ２６０６からラッピング処理部２３００に入力された値ＫＬ||ＣＬとの排他的論理和（ＸＯＲ）、すなわちＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）が演算される。さらに、ＸＯＲゲート２３０４の出力は、鍵記憶部２４００に入力されると共に、マスク生成関数（ＭＧＦ）作用部２３０６でマスク処理が施され、結果ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）が生成される。この結果は、ＸＯＲゲート２３０８でメモリ２６０２からラッピング処理部２３００に入力された値ＫＨ||ＣＨとの排他的論理和ＫＨ||ＣＨ☆ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）が演算される。ＸＯＲゲート２３０８の出力は鍵記憶部２４００に入力される。
【０１２７】
鍵記憶部２４００は第１の攪拌鍵格納部２４０２と第２の攪拌鍵格納部２４０４を含む。第１の攪拌鍵格納部２４０２には、ＸＯＲゲート２３０８の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）が格納される。第２の攪拌鍵格納部２４０４には、ＸＯＲゲート２３０４の出力ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）が格納される。
【０１２８】
アンラッピング処理部２５００では、鍵記憶部２４００の第１の攪拌鍵格納部２４０２に格納されている値ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）がマスク生成関数（ＭＧＦ）作用部２５０２でマスク処理が施され、その結果ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ））が生成される。この結果ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ））はＸＯＲゲート２５０４で、第１の攪拌鍵格納部２４０２に格納されている値ＫＨ||ＣＨ☆ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）との排他的論理和（ＸＯＲ）が演算され、出力ＫＨ||ＣＨを得る。さらに、このＸＯＲゲート２５０４の出力ＫＨ||ＣＨは、マスク生成関数（ＭＧＦ）作用部２５０６でマスク処理が施され、その結果ＭＧＦ（ＫＨ||ＣＨ）が生成される。ＸＯＲゲート２５０８でマスク生成関数（ＭＧＦ）作用部２５０６の出力ＭＧＦ（ＫＨ||ＣＨ）と第２の攪拌鍵格納部２４０４に格納されている値ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）との排他的論理和（ＸＯＲ）が演算され、出力ＫＬ||ＣＬを得る。
【０１２９】
これらの出力ＫＨ||ＣＨ、ＫＬ||ＣＬはそれぞれ、再びメモリ２６０２およびメモリ２６０６に格納されても良い。
このように、図１５に示されている鍵攪拌処理部の攪拌関数Ｆ（Ｋ、Ｃ）の第１の構成は、ラッピング処理部２３００およびアンラッピング処理部２５００はそれぞれ２段のマスク生成関数（ＭＧＦ）作用部を含み、不揮発性回路に対する（条件１）および（条件２）を満足することができる。
【０１３０】
図１８は、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の攪拌関数Ｆ（Ｋ、Ｃ）の第２の構成を示す図である。
図１８に示されている構成は、ラッピング処理部３４００およびアンラッピング処理部３６００はそれぞれ３段のマスク生成関数（ＭＧＦ）作用部を含む。また、図１５に示されている構成と異なり、図１８に示されている構成は、秘密鍵Ｋ、攪拌値Ｃの分割、再結合処理を行わない。秘密鍵Ｋ、攪拌値Ｃの分割、再結合処理を行わない理由は、マスク生成関数（ＭＧＦ）を３回適用した結果の不揮発性回路の値は、左半分、右半分共に秘密鍵Ｋを入力としたマスク生成関数（ＭＧＦ）値によるマスクがかかっているため、不揮発性回路の全ビットを同時にプロービングしない限り攻撃者は鍵Ｋの値を得ることが出来ないからである。
【０１３１】
図１８に示されているように、鍵攪拌処理部は、ラッピング処理部３４００、鍵記憶部３５００、アンラッピング処理部３６００を含む。
ラッピング処理部３４００は、マスク生成関数（ＭＧＦ）作用部３４０２、３４０６、３４１０、ＸＯＲゲート３４０４、３４０８、３４１２を含む。
【０１３２】
鍵記憶部３１００は第１のメモリ３５０２と第２のメモリ３５０４を含む。
アンラッピング処理部３２００は、マスク生成関数（ＭＧＦ）作用部３６０２、３６０６、３６１０、ＸＯＲゲート３２０４、３２０８、３６１２を含む。
【０１３３】
メモリ３７０２には、攪拌値Ｃが格納される。メモリ３７０２には更新処理部３７０４が接続され、メモリ３７０２に格納されている攪拌値Ｃを更新する。
またメモリ３７０６には、秘密鍵Ｋが格納される。
【０１３４】
メモリ３７０２およびメモリ３７０６は、ラッピング処理部３４００の入力端子に接続されている。
メモリ３７０２からラッピング処理部３４００に入力された攪拌値Ｃは、マスク生成関数（ＭＧＦ）作用部３４０２でマスク処理が施され、結果ＭＧＦ（Ｃ）が生成される。その結果は、ＸＯＲゲート３４０４に入力され、メモリ３７０６からラッピング処理部３４００に入力された値秘密鍵Ｋとの排他的論理和（ＸＯＲ）、すなわちＫ☆ＭＧＦ（Ｃ）が演算される。さらに、ＸＯＲゲート３４０４の出力は、ＸＯＲゲート３４１２に入力されると共に、マスク生成関数（ＭＧＦ）作用部３４０６でマスク処理が施され、結果ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））が生成される。この結果は、ＸＯＲゲート３４０８でメモリ３７０２からラッピング処理部３４００に入力された攪拌値Ｃとの排他的論理和Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））が演算される。ＸＯＲゲート３４０８の出力は、鍵記憶部３１００は第１のメモリ３５０２に格納されると共に、マスク生成関数（ＭＧＦ）作用部３４１０でマスク処理が施され、結果ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））が生成される。その結果は、ＸＯＲゲート２７１２に入力され、ＸＯＲゲート３４０４の出力Ｋ☆ＭＧＦ（Ｃ）との排他的論理和（ＸＯＲ）、すなわちＫ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））が演算される。ＸＯＲゲート２７１２の出力は、鍵記憶部３１００の第２のメモリ３５０４に格納される。
【０１３５】
鍵記憶部３１００は不揮発性メモリで構成される。鍵記憶部３１００は第１のメモリ３５０２には、値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））が格納される。鍵記憶部３１００の第２のメモリ３５０４には、値Ｋ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））が格納される。
【０１３６】
アンラッピング処理部３６００では、第１のメモリ３５０２に格納されている値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））がマスク生成関数（ＭＧＦ）作用部３６０２でマスク処理が施され、その結果ＭＧＦ（値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））が生成される。この結果ＭＧＦ（値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））はＸＯＲゲート３６０４で、第１のメモリ３５０２に格納されている値Ｋ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））との排他的論理和（ＸＯＲ）が演算され、出力Ｋ☆ＭＧＦ（Ｃ）を得る。さらに、このＸＯＲゲート３６０４の出力Ｋ☆ＭＧＦ（Ｃ）は、マスク生成関数（ＭＧＦ）作用部３６０６でマスク処理が施され、その結果ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））が生成される。ＸＯＲゲート３６０８でマスク生成関数（ＭＧＦ）作用部３６０６の出力Ｋ☆ＭＧＦ（Ｃ）と第１のメモリ３５０２に格納されている値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））との排他的論理和（ＸＯＲ）が演算され、出力Ｃを得る。ＸＯＲゲート３６０８の出力Ｃは、マスク生成関数（ＭＧＦ）作用部３６１０でマスク処理が施され、その結果ＭＧＦ（Ｃ）が生成される。この結果ＭＧＦ（Ｃ）はＸＯＲゲート３６１２で、ＸＯＲゲート３６０４の出力Ｋ☆ＭＧＦ（Ｃ）との排他的論理和（ＸＯＲ）が演算され、出力Ｋを得る。
【０１３７】
上記に示した構成のほかにも、マスク生成関数（ＭＧＦ）作用部をさらに多段化するなど、様々な関数Ｆの構成を用いることで、不揮発性回路に対するプロービング攻撃を防ぐことが出来る。
【０１３８】
＜（ｉｉ）揮発性回路へのプローブ攻撃対策＞
図１９〜３３を参照して、揮発性回路へのプローブ攻撃対策について説明する。
【０１３９】
図１５や図１８に示す本発明の構成を用いることで、不揮発性回路に対しては、（条件１）と（条件２）を満足することが出来る。しかし、いずれの構成においても、揮発性回路に関しては秘密鍵Ｋの値をそのまま保持するため、（条件１）と（条件２）を満足することが出来ない。
【０１４０】
図１９は、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の機能ブロック図の第２の例を示す図である。
秘密鍵Ｋ（共通鍵Ｋ）は、マスク値と呼ばれる値によりマスク化される。マスク値はＶ個の値Ｍ０、Ｍ１、…、ＭＶ−１が用いられ、秘密鍵ＫはこれらＶ個の値に対して、Ｍ＝Ｍ０☆Ｍ１☆…☆ＭＶ−１を満たすマスク値Ｍを用いてマスク化された値Ｋ☆Ｍとして論理回路上に保存されている。マスク値Ｍは、攪拌値Ｃと同様に、認証チップごとに異なり、電源が入っている間は常に更新されている値であるが、攪拌値のように認証チップの外部に見せる値ではなく、認証チップの内部のみで使用される値である。揮発性回路に対しプローブ攻撃を行った場合でも、秘密鍵Ｋは動的に変化するマスク値Ｍでマスク化されているため、攻撃者は秘密鍵Ｋの値を知ることが出来ない。また、回路上ではマスク値Ｍの値を直接的に格納されていないので、マスク値Ｍを知るためには、Ｖ個のマスク値Ｍ０、Ｍ１、…、ＭＶ−１を同じタイミングで観察しなければならない。このＶの値が（条件１）と（条件２）のＱを超えるならば、攻撃者はプローブ攻撃を行うことが出来ないので、（条件１）と（条件２）を揮発性回路についても満足することが出来る。
【０１４１】
図１９に示されているように、鍵攪拌処理部は、ラッピング処理部３８００、鍵記憶部３９００、アンラッピング処理部４０００を含む。
ラッピング処理部３８００は、値Ｋ☆ＭとＶ個のマスク値Ｍ０、Ｍ１、…、ＭＶ−１を記憶するメモリ３８０２、Ｖ個のマスク値Ｍ０、Ｍ１、…、ＭＶ−１を更新する第１の更新処理部（マスク値更新処理部）３８０４、攪拌値Ｃを格納するメモリ３８０６、攪拌値を更新する第２の更新処理部（攪拌値更新処理部）３８０８、切り替え器３８１０、攪拌関数作用部Ｆ（Ｋ、Ｃ、Ｍ０、Ｍ１、…、ＭＶ−１）３８１２を含む。
【０１４２】
メモリ３８０２に格納されている値Ｋ☆ＭとＶ個のマスク値Ｍ０、Ｍ１、…、ＭＶ−１と、メモリ３８０６に記憶されているまたは認証チップの外部から入力される攪拌値Ｃを用いて、攪拌された秘密鍵Ｆ’（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）が攪拌関数作用部Ｆ（Ｋ、Ｃ、Ｍ０、Ｍ１、…、ＭＶ−１）３８１２の出力として得られる。
【０１４３】
鍵記憶部３９００は不揮発性回路で構成され、攪拌鍵格納部３９０２を含む。攪拌された秘密鍵Ｆ’（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）は鍵記憶部３９００の攪拌鍵格納部３９０２に格納される。
【０１４４】
アンラッピング処理部４０００は、逆関数作用部４００２を含む。逆関数作用部４００２は、攪拌関数Ｆ’（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）の逆関数攪拌関数Ｆ’−１（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）を用いて、攪拌鍵格納部３９０２に格納されている値から、値Ｋ☆Ｍおよび攪拌値Ｃを得る。
【０１４５】
逆関数作用部４００２の出力Ｋ☆Ｍは、メモリ３８０２に格納されても良い。
マスク値は、チップ外部から観察することができない値である。すなわち、図１０〜１３に示すプロトコルでは、親機と子機でマスク値の同期をとることができない。同期が取れないマスク値を基準に認証を行うことは出来ない。すなわち、図１０〜１３に示す認証プロトコルにおいて、鍵攪拌処理の結果は、マスク値の影響を受けてはならない。
【０１４６】
よって、次の条件が要請される。
（条件３）鍵攪拌処理の結果は、マスク値の影響を受ない。
しかし、もしマスク生成関数ＭＧＦを含む鍵攪拌処理を行う場合、マスクされた鍵の値へのマスク生成関数（ＭＧＦ）の作用は、マスク値の全ビットの影響をうけて、予測のつかない変化をもたらす。鍵攪拌関数はＦ’（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）と表され、この演算結果がマスク値の全ビットの影響をうけて予測のつかない変化をする場合、この演算結果からマスク値の除去は困難である。従って、Ｆ’（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）で示される鍵攪拌結果は、マスク値の影響を受けず、秘密鍵Ｋ、攪拌値Ｃの影響のみを受けて変化する。鍵攪拌関数Ｆ’の逆関数は、Ｆ’−１（Ｋ、Ｍ０、Ｍ１、…、ＭＶ−１）で表される。更新されたマスク値Ｍ０、Ｍ１、…、ＭＶ−１の影響を受けて、マスクされた秘密鍵Ｋ☆Ｍが出力される。
【０１４７】
そこで、鍵攪拌処理内部で用いられるマスク生成関数（ＭＧＦ）を作用する処理の前段に「ＭＧＦ事前複雑化」という処理を追加する。ＭＧＦ事前複雑化処理は、秘密鍵Ｋ、攪拌値Ｃで決まるビット転置処理である。
【０１４８】
図２０は、マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理部を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の機能ブロック図である。
入力セット４１００がＭＧＦ事前複雑化処理部４１０２に入力され、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）４１０４が出力される。そして、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）４１０４がマスク生成関数（ＭＧＦ）作用部４１０６に入力される。
【０１４９】
ＭＧＦ事前複雑化処理への入出力は、次のようである。
入力：マスクされた秘密鍵Ｋ☆Ｍ、Ｖ個のマスク値Ｍ０、Ｍ１、…、ＭＶ−１、攪拌値Ｃ
出力：ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）
【０１５０】
ＭＧＦ事前複雑化処理に対して要求される条件は次のような条件である。
（複雑化１）マスク値Ｍ０、Ｍ１、…、ＭＶ−１の個数Ｖが（条件１）と（条件２）に現れるＱより大きい
（複雑化２）Ｐ（Ｋ、Ｃ）の値から、攪拌値Ｃを知っていても入力の値Ｋを求めることができない
【０１５１】
上記の（複雑化１）と（複雑化２）の条件を満たすとき、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）はマスク値の影響を受けず、攪拌値Ｃを知っていても、Ｐ（Ｋ、Ｃ）から秘密鍵Ｋを求めるのは困難となる。
【０１５２】
揮発性回路へのプローブ攻撃としては、入力側へのプローブ攻撃と、出力側へのプローブ攻撃が考えられる。入力側に対しては、秘密鍵ＫはＶ個のマスク値Ｍ０、Ｍ１、…、ＭＶ−１でマスクされているため、Ｖが（条件１）と（条件２）のＱを超えるように設定することで安全となる。出力側へのプローブ攻撃は、Ｐ（Ｋ、Ｃ）の値から、攪拌値Ｃを知っていても入力の値Ｋを求めることができない性質を有することで、安全となる。
【０１５３】
図２１は、マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理部を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の第１の構成を示す図である。
図２１に示されている構成では、入力セット４２００がＭＧＦ事前複雑化処理部４２０２に入力され、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）４２０４が出力される。そして、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）４２０４がマスク生成関数（ＭＧＦ）作用部４２０６に入力される。
【０１５４】
ＭＧＦ事前複雑化処理部４２０２では、最初に、マスクされた秘密鍵Ｋ☆Ｍと攪拌値Ｃの排他的論理和（ＸＯＲ）を演算する。その後、マスク値Ｍ＝Ｍ０☆Ｍ１☆…☆ＭＶ−１の影響を除去するために、Ｍ０、Ｍ１、…、ＭＶ−１の順に排他的論理和（ＸＯＲ）の演算を繰り返す。最終的に出力Ｋ☆Ｃを得る。
【０１５５】
しかし、攪拌値Ｃを知っていれば、Ｐ（Ｋ、Ｃ）＝Ｋ☆Ｃの値か秘密鍵Ｋを算出することは可能である。よって、図２１に示されている構造は、上記の（複雑化２）の条件を満たさない。
【０１５６】
図２２は、マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理部を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部の第２の構成を示す図である。図２２に示されている鍵攪拌処理部では、図２１に示されている鍵攪拌処理部の構成に、さらに行列演算による改良が加えられている。
【０１５７】
図２２に示されている構成では、入力セット４３００がＭＧＦ事前複雑化処理部４３０２に入力され、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）４３０４が出力される。そして、ＭＧＦ事前複雑化処理結果Ｐ（Ｋ、Ｃ）４３０４がマスク生成関数（ＭＧＦ）作用部４３０６に入力される。
【０１５８】
ＭＧＦ事前複雑化処理部４３０２では、最初に、マスクされた秘密鍵Ｋ☆Ｍと攪拌値Ｃの排他的論理和（ＸＯＲ）を演算する。その後、マスク値Ｍ＝Ｍ０☆Ｍ１☆…☆ＭＶ−１の影響を除去するために、Ｍ０、Ｍ１、…、ＭＶ−１の順に排他的論理和（ＸＯＲ）の演算を繰り返す。ただし、全てのＸＯＲ演算の前に、行列Ｂを作用させてからＸＯＲ演算を実行することで、複雑度を高める。例えば、図２１のＭＧＦ事前複雑化処理部４２０２ではＫ☆Ｍ☆Ｍ０と演算するステージで、ＭＧＦ事前複雑化処理部４３０２では、Ｂ（Ｋ☆Ｍ）☆Ｂ（Ｍ０）を演算する。ＭＧＦ事前複雑化処理部４３０２の最終的な演算結果はＰ（Ｋ、Ｃ）=Ｂ（Ｋ☆Ｃ）となる。
【０１５９】
しかし、この行列演算はＸＯＲ演算に関する線形性を有する。すなわち、
Ｐ（Ｋ、Ｃ）=Ｂ（Ｋ☆Ｃ）＝Ｂ（Ｋ）☆Ｂ（Ｃ）
が成立する。
【０１６０】
攪拌値Ｃから値Ｂ（Ｃ）を求めることは容易であるので、攻撃者はＰ（Ｋ、Ｃ）にプローブ攻撃を行うことで、Ｂ（Ｋ）の値を求めることが出来る。
【０１６１】
また、行列Ｂを求めることは攻撃者にとって難しくないので、行列Ｂの逆行列を用いることでＢ（Ｋ）から秘密鍵Ｋを計算することも可能である。よって、図２２に示されている構造は、上記の（複雑化２）の条件を満たさない。したがって、図２２に示されている構造は、前述の（条件１）（条件２）を満足しない。
【０１６２】
図２３、２４を参照して、（条件１）（条件２）（条件３）を同時に満足することの困難さを説明する。
図２３は、マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部に対するプローブ攻撃の概略を示す図である。図２４は、マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理を行う鍵攪拌処理部に対するプローブ攻撃の概略を示す図である。
【０１６３】
図２３、２４に示されるとおり、図２１や図２２に示したＸＯＲ演算や行列を用いた、定式化が容易な演算を用いた構成では、演算結果の線形性などの関係を利用することができるため、マスク値の影響を容易に除去することができ、（条件３）を満足することができる。しかし、ＭＧＦ事前複雑化処理の入力と出力の関係は、攻撃者により簡単に定式化することができるため出力から入力を求めることが容易であり、（条件１）（条件２）を満足することができない。つまり、図２３に示されているＭＧＦ事前複雑化処理では、図２４に示されているように、入力と出力の関係式が確定的であり、攻撃されやすい。
【０１６４】
一方、ハッシュ関数等の定式化が難しい処理をＭＧＦ事前複雑化処理として用いた場合、出力から入力を求めることが難しいため、（条件１）（条件２）を満足することは可能であるが、マスク値の影響の除去が困難となり、（条件３）を満足することができない。
【０１６５】
従って、マスク値の影響を除去することと、出力から入力を求めることができない性質の、両立することが難しい性質を同時に満たすことが、ＭＧＦ事前複雑化処理に求められる。
【０１６６】
図２５ａ〜２５ｂは、マスク生成関数ＭＧＦを用いるＭＧＦ事前複雑化処理を含む、鍵に対する動的な攪拌処理の原理を説明する図である。
図２５ａ〜２５ｂに示されている原理では、秘密鍵Ｋや攪拌値Ｃの値に応じたビット転置処理を実行する。入力に対する出力の関係は、秘密鍵Ｋや攪拌値Ｃのビット値のとりうる指数的なパターン数に応じて変化するため、攻撃者は秘密鍵Ｋの全ビット値を知らない限り、入力に対する出力の関係を特定できないため、安全となる。また、ビット転置は、定式が難しく、攻撃を抑制できるという利点がある。
【０１６７】
図２５ａ〜２５ｂに示した基本アイデアを実現するためには、ビット転置処理の結果を、秘密鍵Ｋや攪拌値Ｃの値に応じさせる必要があるが、マスク値に応じさせてはいけないという制約がある。
【０１６８】
そこで、ＭＧＦ事前複雑化処理において、以下で説明する「スワッピングボックス（Ｓｗａｐｐｉｎｇ  Ｂｏｘ）」という回路を用いる。
図２６〜２９は、スワッピングボックスの構成と性質を説明する図である。
【０１６９】
図２６は、スワッピングボックスの性質を示す図である。図２７は、１ビットスワッピングボックス４６００の構成の例を示す図である。図２８ａは、１ビットスワッピングボックス４７００の動作の例を示す図である。図２８ｂは、１ビットスワッピングボックス４７０２の動作の例を示す図である。図２８ｃは、１ビットスワッピングボックス４７０６、４７０８から構成される多段１ビットスワッピングボックスの動作の例を示す図である。図２８ｄは、１ビットスワッピングボックス４７１０、４７１２から構成される多段１ビットスワッピングボックスの動作の例を示す図である。図２９は、２ビットスワッピングボックス４８００の構成の例を示す図である。
【０１７０】
スワッピングボックスは、セレクタ信号に応じてビット転置を行う回路である。そして、次のような性質を有する。
（スワッピングボックス１）多数のスワッピングボックスを直列に繋いだ場合のビット転置の結果と、１個のスワッピングボックスのセレクタ信号に対して前述のスワッピングボックスの各セレクタ信号の全ての値をＸＯＲ演算した値を入力した結果が同じ。
【０１７１】
例えば、図２６に示すように、（Ｖ＋１）個のスワッピングボックスを直列につなぎ、それぞれに対してＫ☆Ｍ、Ｍ０、Ｍ１、…、ＭＶ−１をセレクト信号として与えた場合のビット転置の結果は、1個のスワッピングボックスに対してＫ☆Ｍ☆Ｍ０☆ …☆ＭＶ−１をセレクト信号として与えた場合と同じである。さらに、Ｍ☆Ｍ０☆ …☆ＭＶ−１＝０を考慮すると、１個のスワッピングボックスに対してＫをセレクト信号として与えた場合と同じである。すなわち、秘密鍵Ｋに関するマスクを消去しつつ、秘密鍵Ｋに応じたビット転置を実現することができる。
【０１７２】
スワッピングボックスに入力するセレクト信号のビット長がＴビットであるとき、スワッピングボックスは、「Ｔビットスワッピングボックス」と呼ばれる。
図２７は、１ビットスワッピングボックス４６００の構成の例を示す図である。
【０１７３】
図２８ａは、１ビットスワッピングボックスの動作の例を示す図であり、図２８ｂは、１ビットスワッピングボックス４７００、４７０２の動作の例を示す図である。
１ビットスワッピングボックスは、２つの入力ａ、ｂを受け取り、出力としてＸ，Ｙを返す。１ビットセレクト信号が０ならビット転置を行わず、出力として、Ｘ＝ａ、Ｙ＝ｂを出力し、１ビットセレクト信号が１ならばビット転置を行った結果であるＸ＝ｂ、Ｙ＝ａを出力する。つまり、１ビットスワッピングボックスは次のような動作を行う。
セレクト信号が「０」の場合：ビット転置を実行しない。
セレクト信号が「１」の場合：ビット転置を実行する。
これは、ｘ☆ｙで示される１ビット値ｘ、ｙのＸＯＲ演算、すなわち
ｙ＝０の場合：ｘの値をビット反転させない
ｙ＝１の場合：ｘの値をビット反転する
と類似している。
【０１７４】
すなわち、セレクト信号がＸＯＲ演算と同等の性質を有しているため、図３０に示されているように、多段スワッピングボックスのビット転置結果は、セレクト信号をＸＯＲ演算した1個のスワッピングボックスの転置結果と等価となる。
【０１７５】
図２９は、２ビットスワッピングボックスの構成の例を示す図である。
２つの入力ａ、ｂ、ｃ、ｄを受け取り、出力としてＸ、Ｙ、Ｚ、Ｗを返す。２ビットセレクト信号ｓｅｌ［１］、ｓｅｌ［０］のうち、ｓｅｌ［１］が「１」ならば、１段目のセレクト回路にてａ、ｂとｃ、ｄのビット転置を行い、ｓｅｌ［１］が「０」なら行わない。ｓｅｌ［１］＝０ならば、この１段目のセレクト回路の処理結果のうち、ａ、ｂのペアを２段目のセレクト回路の上位側に、ｃ、ｄのペアを２段目のセレクト回路の下位側に入力する。ｓｅｌ［１］＝１ならば、ｃ、ｄのペアを２段目のセレクト回路の上位側に、ａ、ｂのペアを２段目のセレクト回路の下位側に入力する。ｓｅｌ［０］が「１」ならば、ａ、ｂとｃ、ｄのそれぞれのペアのビット位置を入れ替えるビット転置を行い、ｓｅｌ［０］が「０」ならば何もしない。このような構成を用いることで、セレクト信号が２ビットである場合でも、多段スワッピングボックスのビット転置結果は、セレクト信号をＸＯＲ演算した1個のスワッピングボックスの転置結果と等価となる。
【０１７６】
同様の拡張を行うことで、任意のＴビットスワッピングボックスは容易に構成することができ、多段スワッピングボックスのビット転置結果は、セレクト信号をＸＯＲ演算した１個のスワッピングボックスの転置結果と等価となる。すなわち、鍵の値に応じたビット転置を行いつつ、鍵マスクの消去を行うことができるので、（条件１）（条件２）（条件３）を同時に満足することができる。
【０１７７】
しかしながら、図２９に示されているように、Ｔビットスワッピングボックスの回路規模は、Ｔ×２（Ｔ−１）に比例するため、セレクト信号のビット長を大きくすることは容易でないことがある。
【０１７８】
図３０は、多段Ｔビットスワッピングボックスの構成の例を示す図である。
図３０に示した構成を用いて、秘密鍵Ｋの部分的なＴビットの値に応じたビット転置を複数回繰り返すことで、秘密鍵Ｋの全ビット値に応じたビット転置を実現する。
【０１７９】
すなわち、秘密鍵Ｋをｎ個のＴビット部分鍵Ｋ＝ｋ[ｎＴ−１：ｎＴ−Ｔ]||…||ｋ[２Ｔ−１：Ｔ]||…||[Ｔ−１：０]に分割し、Ｔビット部分鍵ｋ[Ｔ×ｉ＋Ｔ−１：Ｔ×ｉ]を用いた多段スワッピングボックスのビット転置処理をｎ回繰り返すことで、秘密鍵Ｋの全ビットの影響を受けるスワッピングボックスの処理を実現する。ｎ回繰り返えされる多段スワッピングボックスの後処理として、図３０に示される通り、線形フィードバック処理が行われる。この処理がないと、多スワッピングボックスをｎ回繰り返した結果が、Ｔビット部分鍵のＸＯＲ演算結果ｋ[ｎＴ−１：ｎＴ−Ｔ] ☆…☆ｋ[２Ｔ−１：Ｔ]☆ｋ[Ｔ−１：０]に応じたビット転置処理を行うので、ビット転置結果の取りうるパターン数が２Ｔに限定される。例えばＴ＝４の場合、高々２４＝１６パターンでしかないので、攻撃が容易となる。よって、ビット転置結果をＫの取りうる値に応じて指数的に増加させるためには、多段スワッピングボックスの後処理には線形フィードバック処理を行う必要がある。
【０１８０】
図２６〜３０に示したスワッピングボックスへの入力（たとえばａ、ｂ、ｃ、ｄ）は、定数であっても、攪拌値であっても、マスクされた秘密鍵Ｋ☆Ｍであってもよい。マスクされた秘密鍵の場合、マスクの影響を消去する必要があるが、このマスクの消去は容易である。
【０１８１】
図３１は、多段Ｔビットスワッピングボックスの性質を示す図である。
数個の入力をスワッピングボックスに与え全ての出力をＸＯＲ演算した結果は、これら複数個の入力全てをＸＯＲ演算した値をスワッピングボックスに与えた場合の出力と同一となるからである。ただし、このときスワッピングボックスに与えるセレクト信号は、複数個の入力で同一である必要がある。
【０１８２】
つまり、マスクされた秘密鍵Ｋ☆Ｍをスワッピングボックスに入力した場合のスワッピングボックス処理結果と、Ｍ０、Ｍ１、…、ＭＶ−１を入力した場合のそれぞれのスワッピングボックス処理結果をＸＯＲ演算した結果は、秘密鍵Ｋをスワッピングボックスに与えた場合の出力と同一となる。
【０１８３】
図２６〜２９に示したスワッピングボックスのほかにも、スワッピングボックスに構成例は存在する。構成例を図３２〜３３に示す。
図３２は、加算スワッピングボックスの性質を示す図である。図３３は、Ｔビットスワッピングボックスの性質を示す図である。
【０１８４】
図３２〜３３に示されているスワッピングボックスは、次のような性質を有する。
（スワッピングボックス２）多数のスワッピングボックスを直列に繋いだ場合のビット転置の結果と、１個のスワッピングボックスのセレクタ信号に対して前述のスワッピングボックスの各セレクタ信号の全ての値を加算した値を入力した結果が同じとなる。
【０１８５】
例えば、図３２に示すように、（Ｖ＋１）個のスワッピングボックスを直列につなぎ、それぞれに対してＫ☆Ｍ、Ｍ０、Ｍ１、…、ＭＶ−１をセレクト信号として与えた場合のビット転置の結果は、１個のスワッピングボックスに対してＫ☆Ｍ☆Ｍ０☆Ｍ１☆…☆ＭＶ−１をセレクト信号として与えた場合と同じである。さらに、Ｍ＝Ｍ０☆Ｍ１☆…☆ＭＶ−１となるようマスク値の関係を調整することで、１個のスワッピングボックスに対してＫをセレクト信号として与えた場合と同じである。すなわち、鍵Kに関するマスクを消去しつつ、鍵Ｋに応じたビット転置を実現することができる。このような性質を持つスワッピングボックスは、図３３に示すように、セレクト信号の値をシフトビット数として用いる巡回シフト回路によって実現することができる。データｚをｘビット巡回シフトさせた結果に対しさらにｙビット巡回シフトさせた結果と、データｚをｘ＋ｙビット巡回シフトさせた結果は明らかに同一であるので、多段スワッピングボックスのビット転置結果は、多段スワッピングボックスへの全てのセレクト信号を加算させた１回のスワッピングボックスのビット転置結果と同一となる。
【０１８６】
＜第１実施例＞
実施例は、（ｉ）不揮発性回路に対するプローブ攻撃対策の種別と、（ｉｉ）揮発性回路に対するプローブ攻撃対策の種別、（ｉｉｉ）秘密鍵へのマスク演算の種別、の３つの組み合わせから構成される。以下では、この組み合わせに応じた５つの実施例を述べる。しかしながら（ｉ）不揮発性回路に対するプローブ攻撃対策の種別と、（ｉｉ）揮発性回路に対するプローブ攻撃対策の種別、（ｉｉｉ）秘密鍵へのマスク演算の種別の組み合わせは、以下の実施例に限定されない。
【０１８７】
実施例１は、以下の組み合わせによる実施例である。
（ｉ）不揮発性回路に対するプローブ攻撃対策：図１５の構成を利用
（ｉｉ）揮発性回路に対するプローブ攻撃対策：図３０のスワッピングボックスを利用
（ｉｉｉ）秘密鍵へのマスク演算の種別：ＸＯＲ演算
【０１８８】
図３４は、第１の実施例の全体の構成の例を示す図である。
図３４において、１２８ビット秘密鍵Ｋは上位の６４ビットであるＫＨと下位６４ビットであるＫＬに分割されており、それぞれ１６ビットマスク値Ｍによってマスク化されたデータＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ）、ＫＬ☆（Ｍ||Ｍ||Ｍ||Ｍ）として６４ビットレジスタ７００１、７００４に格納される。また、１２８ビット攪拌値Ｃは上位の６４ビットであるＣＨと下位６４ビットであるＣＬに分割され、それぞれ６４ビットレジスタ７００２、７００５に格納されている。
【０１８９】
マスク値Ｍは直接レジスタに格納されないが、Ｍ０☆Ｍ１☆…☆Ｍ１５＝Ｍを満たすＭｉ（ｉは０から１５までの整数）がそれぞれ１６ビットレジスタ７００９〜７０２４に格納される。１６ビットレジスタ７００９〜７０２４は更新部７００９〜７０２４としても機能する。これらの値から、鍵攪拌関数Ｆ（Ｋ、Ｃ）を作用させる処理が行われた結果が、２つの１２８ビット不揮発性レジスタ７２０１、７２０２に格納され、これら２つの値を入力としてＸＯＲ演算をした結果を１２８ビット攪拌鍵として利用する。
【０１９０】
鍵攪拌関数Ｆ（Ｋ、Ｃ）の値を計算するまでには、ＭＧＦ事前複雑化処理部７１０１、７１０４、ＭＧＦ作用部７１０２、７１０５、ＸＯＲゲート７１０３、７１０６で処理が行われる。ＭＧＦ事前複雑化処理部７１０１には、ＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ）と１２８ビット攪拌値Ｃの下位６４ビットであるＣＬのビット結合値と、Ｍｉ（ｉは０から１５までの整数）が入力され、前述のＭＧＦ事前複雑化処理が行われる。その結果は、ＭＧＦ作用部７１０２に入力される。ＭＧＦ事前複雑化処理部７１０１、７１０４では、処理の結果がＭｉ（ｉは０から１５までの整数）の値の影響を受けないように処理される。ただし、ＸＯＲゲート７１０３、７１０６の出力は、レジスタ７００２、７００５の影響を受けるので、マスク値Ｍの影響を受けている。この影響を取り除くために、ＸＯＲゲート７１０３、７１０６の出力は、アンマスク処理部７１０７に入力され、アンマスク処理が施される。アンマスク処理は、Ｍ１、…、Ｍ１５を受け取り、順次ＸＯＲ演算を行うことで、マスク値Ｍの影響を取り除く。この結果、不揮発性フリップフロップ７２０１、７２０２に格納される値は、マスク値Ｍの影響を受けない。
【０１９１】
鍵攪拌関数Ｆ（Ｋ、Ｃ）計算が完了すると、次の鍵攪拌処理を実行するために、攪拌値Ｃとマスク値Ｍｉ（ｉは０から１５までの整数）の更新処理が行われる。攪拌値Ｃの上位の６４ビットＣＨの更新は更新部７００３で、下位６４ビットＣＬの更新は更新部７００６で実行される。また、マスク値Ｍｉ（ｉは０から１５までの整数）の更新は、更新部７００９〜７０２４で実行される。
【０１９２】
攪拌値Ｃとマスク値Ｍｉ（ｉは０から１５までの整数）が更新されたら、レジスタ７００１、７００４に格納されているマスク化されたデータＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ）、ＫＬ☆（Ｍ||Ｍ||Ｍ||Ｍ）を更新するために、攪拌関数Ｆ（Ｋ、Ｃ）の逆関数である逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算を行う。
【０１９３】
まず、マスク化処理部７３０１で、更新されたマスク値Ｍｉ（ｉは０から１５までの整数）を用いて、不揮発性フリップフロップ７２０１、７２０２に格納される値のマスク化を行う。この処理は、不揮発性フリップフロップ７２０１、７２０２に格納される値ＫＨ||ＣＨ☆ＭＧＦ（ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ））、ＫＬ||ＣＬ☆ＭＧＦ（ＫＨ||ＣＨ）に、更新されたマスク値Ｍｉを順次、ＸＯＲ演算を作用させることで実行される。
【０１９４】
逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算のためには、ＭＧＦ事前複雑化処理部７３０３、７３０６、ＭＧＦ事前複雑化処理部７３０２、７３０５、ＸＯＲゲート７３０４、７３０７で処理が行われる。
【０１９５】
ＭＧＦ事前複雑化処理部７３０２には、不揮発性フリップフロップ７２０２の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ））と更新されたマスク値Ｍｉが入力される。ＭＧＦ事前複雑化処理部７３０２の出力は、ＭＧＦ作用部７３０３に入力される。
【０１９６】
ＸＯＲゲート７３０４では、不揮発性フリップフロップ７２０１の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ））とＭＧＦ作用部７３０３の出力が入力され、ＸＯＲ演算を実行する。ＸＯＲゲート７３０４の１２８ビット出力の上位６４ビットは、６４ビットレジスタ７００１に新しい値として格納される。
【０１９７】
ＭＧＦ事前複雑化処理部７３０５には、不揮発性フリップフロップ７２０１の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ））と更新されたマスク値Ｍｉが入力される。ＭＧＦ事前複雑化処理部７３０５の出力は、ＭＧＦ作用部７３０６に入力される。ＭＧＦ作用部７３０６の出力はＸＯＲゲート７３０７で、ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ）をマスク化処理部７３０１に入力して得られる１２８ビット出力値と、ＭＧＦ作用部７３０６の１２８ビット出力値のＸＯＲ演算を行う。ＸＯＲゲート７３０７の１２８ビット出力の上位６４ビットは、６４ビットレジスタ７００５に新しい値として格納される。
以上の処理により、Ｆ−１（Ｋ、Ｃ）の演算処理が完了する。
【０１９８】
逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算処理によるトレジスタ７００１、７００５に格納される値の更新が終わると、再び鍵攪拌関数Ｆ（Ｋ、Ｃ）を計算し、不揮発性フリップフロップ７２０１、７２０２に格納される値の更新を行う。そして、Ｆ−１（Ｋ、Ｃ）の演算処理によってレジスタ７００１、７００４に格納される値の更新を、認証チップの電源が入っている間、繰り返す。
切り替え器７００７、７００８は、攪拌値を内部レジスタと外部入力から切り替える処理を行う。
【０１９９】
図３５は、第１の実施例におけるＭＧＦ事前複雑化処理部７４００の構成の例を示す図である。図３５に示されている構成は、図３４のＭＧＦ事前複雑化処理部７１０１、７１０４、７３０２、７３０５に適用され得る。
【０２００】
ＭＧＦ事前複雑化処理部７４００の端子７４０２には、マスク化された１２８ビットデータＸ☆Ｍと１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）が入力される。端子７４０１には、例えば、１２８ビットの定数Ｃが入力される。端子７４０１は補助入力端子である。
【０２０１】
ＭＧＦ事前複雑化処理部７４００では、これらの入力からＭＧＦ事前複雑化処理を実行し、１２８ビット出力を生成する。この出力は、出力端子７４８０から取り出すことができる。
【０２０２】
入力端子７４０２に入力された１２８ビットのデータＸは上位６４ビットＸＨと下位６４ビットＸＬに分割され、ＸＯＲゲート７４１９でこれらのＸＯＲ演算が実行される。得られた６４ビット値はさらに１６個の４ビット値に分割されて切り替え器７４２０に入力される。切り替え器７４２０の出力は、４ビットスワッピングボックス７４３９、７４６１に入力される。４ビットスワッピングボックス７４３９は直列に繋がれた１６個の４ビットスワッピングボックス７４３９〜７４５５と１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）７４５６から構成されるビット転置処理部の端のものである。各スワッピングボックス７４３９〜７４５５では、ビット転置処理が行われる。切り替え器７４２０はスワッピングボックスを選択するための適切なセレクト信号を与え、１６回の繰り返しのビット転置処理が首尾よく実行されるようにする。
【０２０３】
端子７４０３〜７４１８に入力される１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）の各々も、４ビット値に分割されて１６個の切り替え器７４２２〜７４３７に入力される。これらの切り替え器は直列に繋がれた４ビットスワッピングボックス７４３９〜７４５５と１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）７４５６を用いてビット転置処理を１６回繰り返す処理において、１６回の繰り返しのビット転置処理が首尾よく実行されるようにスワッピングボックスを選択するためのセレクト信号を出力する。
【０２０４】
４ビットスワッピングボックス７４３９〜７４５５では、ビット転置処理を１６回繰り返す処理が実行される。
端子７４０１に入力された１２８ビット定数Ｃは、１６ビットごとに８分割され、切り替え器７４３８、７４６０を含む８つの切り替え器に入力される。つまり定数Ｃは、Ｃ＝Ｃ０||Ｃ１||…||Ｃ７と書くことができる。これら８個の１６ビットの値Ｃ０、Ｃ１、…、Ｃ７は、８系列実行される、ビット転置処理の初期値として入力される。
【０２０５】
切り替え器７４２０に接続されている８個の４ビットスワッピングボックス（たとえば、４ビットスワッピングボックス７４３９、７４６１）では、切り替え器７４２０の出力をセレクト信号としたビット転置が行われる。切り替え器７４２０のセレクト信号は、マスク値の影響を受けているため、切り替え器７４２０に接続されている８個の４ビットスワッピングボックスの出力もマスク値Ｍの影響を受ける。４ビットスワッピングボックス７４３９〜７４５５、７４６１〜７４７６を含む８系列の１６段４ビットスワッピングボックスは、１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）から生成された信号をセレクト信号とするので、マスク値Ｍの影響を消去することができる。
【０２０６】
これら８系列の１６段４ビットスワッピングボックスと１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）を含むビット転置処理部の処理を１６回繰り返し、８系列の各１６ビットを結合した出力値として、端子７４０３に入力された１２８ビットデータＸの影響を受け、かつマスク値Ｍの影響を受けない値を得ることができる。
【０２０７】
図３６は第１の実施例におけるマスク処理部、アンマスク処理部の構成の例を示す図である。
本例では、マスク処理部、アンマスク処理部の構成は共通化されている。
【０２０８】
マスク処理部／アンマスク処理部は、入力端子７５０１〜７５１６、７５５１、７５５２に入力される１６個の１６ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５と、２つの１２８ビット値入力値ｘ、ｙを用いて、出力端子７５６１、７５６２から出力される２つの１２８ビット値出力値Ｘ、Ｙを生成する。
【０２０９】
１６個の１６ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５は、ビット結合によってＭｉ||Ｍｉ||Ｍｉ||Ｍｉ（ｉは０から１５までの整数）で表される６４ビット値に変換される。そして、２つの１２８ビット値入力値ｘ、ｙの上位６４ビットに対し、Ｍ０、Ｍ１、…、Ｍ１５の順にＸＯＲ演算を作用される。このＸＯＲ演算の結果と、１２８ビット値入力値ｘ、ｙの下位６４ビットを結合し、１２８ビット出力Ｘ、Ｙを得る。
【０２１０】
＜第２実施例＞
第２実施例は、以下の組み合わせによる実施例である。
（ｉ）不揮発性回路に対するプローブ攻撃対策：図１５の構成を利用
（ｉｉ）揮発性回路に対するプローブ攻撃対策：図３１のスワッピングボックスを利用
（ｉｉｉ）秘密鍵へのマスク演算の種別：ＸＯＲ演算
【０２１１】
第２実施例が第１実施例と異なる点は、スワッピングボックスの構成が図３０の構成ではなく図３１に示されている構成であることである。これにより、図３５に示したＭＧＦ事前複雑化の処理構成が変化する。
第２実施例の全体の構成は図３４に、マスク処理部、アンマスク処理部の構成は図３６に示されており、第１実施例と同一である。
【０２１２】
図３７は、第２の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
図３７に示されているＭＧＦ事前複雑化処理全体７６００に対して、マスク化された１２８ビットデータが入力端子７６０２から、１６個の１６ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５が入力端子７６０３、７６０４を含む１６個の端子から入力される。端子７６０１は補助入力端子である。
【０２１３】
乱数発生器７６０５は１２８ビット乱数を生成する。
端子７６０１には、１２８ビット定数が入力される。これらの入力から、１２８ビットの出力値が生成され、出力値は出力端子７６０８から取り出すことができる。
【０２１４】
ＭＧＦ事前複雑化処理全体７６００は、２つのモジュール７７００、７８００を含む。モジュール７７００は入力端子７７０１〜７７１８を、モジュール７８００は入力端子７８０１〜７８１８を含む。モジュール７７００の入力端子７７０１およびモジュール７８００の入力端子７８０２には、乱数発生器７６０５の出力が入力される。モジュール７７００の入力端子７７０２およびモジュール７８００の入力端子７８０２には入力端子７８０には入力端子７６０２に入力されたマスク化された１２８ビットデータが入力される。モジュール７７００の１６個の入力端子７７０３〜７７１８およびモジュール７８００の１６個の入力端子７８０３〜７８１８には、１６個の１６ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５が入力される。
【０２１５】
また、乱数発生器７６０５で発生した乱数と、入力端子７６０２に入力されたマスク化された１２８ビットデータはＸＯＲゲート７６０６でＸＯＲ演算が施され、ＸＯＲゲート７６０６の１２８ビット出力値はモジュール７８００の入力端子７８０１に入力される。
【０２１６】
モジュール７７００とモジュール７８００の出力は、ＸＯＲゲート７６０８に入力され、ＸＯＲゲート７６０８ではＸＯＲ演算が実行される。ＸＯＲゲート７６０８の出力は、出力端子７６０８から取り出すことができる。
【０２１７】
図３７は、論理的には図３５と等価であるが、乱数発生器７６０５で発生した乱数の効果により、モジュール７７００、７８００の内部におけるスワッピングボックスへの入力値がランダム化されるので、プローブ攻撃への耐性を高めることができる。
【０２１８】
＜第３の実施例＞
第３の実施例は、以下の組み合わせによる実施例である。
（ｉ）不揮発性回路に対するプローブ攻撃対策：図１５の構成を利用
（ｉｉ）揮発性回路に対するプローブ攻撃対策：図３０のスワッピングボックスを利用
（ｉｉｉ）秘密鍵へのマスク演算の種別：加算
【０２１９】
実施例１との違いは、秘密鍵のマスク演算をＸＯＲ演算から加算に置き換えたことである。これにより、図３４に示した全体構造、図３５に示したＭＧＦ事前複雑化の処理構成、図３６に示したマスク処理部、アンマスク処理部の構成が変化する。基本的な構造は同一であるが、一部の演算はＸＯＲ演算から加算または減算に置き換えられる。
【０２２０】
図３８は、第３の実施例の全体の構成の例を示す図である。
図３８は、基本的な構造は図３４と同一であるが、秘密鍵のマスク処理がＸＯＲ演算を用いるものから加算を用いるものに置き換わっている。そのため、一部のＸＯＲ演算が加算および減算に置き換わっている。また、秘密鍵のマスク値Ｍを４ビットを単位に扱うため、１６分割されたマスク値Ｍｉ（ｉは０から１５までの整数）の各々も４ビットである。
【０２２１】
図３８において、１２８ビット秘密鍵Ｋは上位の６４ビットであるＫＨと下位６４ビットであるＫＬに分割され、上位の６４ビットであるＫＨと下位６４ビットであるＫＬはさらにそれぞれ、４ビットごとに１６個のＫＨ、０、ＫＨ、１、…、ＫＨ、１５およびＫＬ、０、ＫＬ、１、…、ＫＬ、１５に分割される。６４ビットレジスタ７９０１、７９０４にはそれぞれ、４ビットマスク値Ｍに対して加算マスク化されたデータ（ＫＨ、１５☆Ｍ）||（ＫＨ、１４☆Ｍ）||…||（ＫＨ、０☆Ｍ）、（ＫＬ、１５☆Ｍ）||（ＫＬ、１４☆Ｍ）||…||（ＫＬ、０☆Ｍ）が格納される。
【０２２２】
１２８ビット攪拌値Ｃは、上位６４ビットＣＨと下位６４ビットＣＬに分割され、それぞれ６４ビットレジスタ７９０２、７９０５に格納される。
マスク値Ｍは直接レジスタに格納されないが、Ｍ０☆Ｍ１☆…☆Ｍ１５＝Ｍを満たすＭｉ（ｉは０から１５までの整数）がそれぞれ１６ビットレジスタ７９０９〜７９２４に格納される。１６ビットレジスタ７９０９〜７９２４は更新部７９０９〜７９２４としても機能する。これらの値から、鍵攪拌関数Ｆ（Ｋ、Ｃ）を作用させる処理が行われた結果が、２つの１２８ビット不揮発性レジスタ８１０１、８１０２に格納され、これら２つの値を入力としてＸＯＲ演算をした結果を１２８ビット攪拌鍵として利用する。
【０２２３】
鍵攪拌関数Ｆ（Ｋ、Ｃ）の値を計算するまでには、ＭＧＦ事前複雑化処理部８００１、８００４、ＭＧＦ作用部８００２、８００５、加算ゲート８００３、８００６で処理が行われる。ＭＧＦ事前複雑化処理部８００１には、６４ビットレジスタ７９０１に格納されている（ＫＨ、１５☆Ｍ）||…||（ＫＨ、０☆Ｍ）と６４ビットレジスタ７９０２に格納されている１２８ビット攪拌値Ｃの上位６４ビットであるＣＨのビット結合値と、Ｍｉ（ｉは０から１５までの整数）が入力され、前述のＭＧＦ事前複雑化処理が行われる。その結果は、ＭＧＦ作用部８００２に入力される。ＭＧＦ事前複雑化処理部８００１、８００４では、処理の結果がＭｉ（ｉは０から１５までの整数）の値の影響を受けないように処理される。加算ゲート８００３では、ＭＧＦ作用部８００２の出力と、６４ビットレジスタ７９０４に格納されている（ＫＬ、１５☆Ｍ）||…||（ＫＬ、０☆Ｍ）と６４ビットレジスタ７９０２に格納されている１２８ビット攪拌値Ｃの下位６４ビットであるＣＬのビット結合値との加算演算が行われる。加算ゲート８００３の出力は、アンマスク処理部８００７に入力される。
【０２２４】
また、加算ゲート８００３の出力は、ＭＧＦ事前複雑化処理部８００４でＭＧＦ事前複雑化処理が行われ、ＭＧＦ作用部８００５でＭＧＦが作用される。ＭＧＦ作用部８００５の出力は加算ゲート８００６で、６４ビットレジスタ７９０１に格納されている（ＫＨ、１５☆Ｍ）||…||（ＫＨ、０☆Ｍ）と６４ビットレジスタ７９０２に格納されている１２８ビット攪拌値Ｃの上位６４ビットであるＣＨのビット結合値と、加算される。加算ゲート８００３、８００６の出力はそれぞれ、アンマスク処理部８００７への１２８ビット入力となる。アンマスク処理部８００７では、入力に対するアンマスク処理が行われ、マスク化された鍵の値の影響を、減算によって取り除く処理を行う。この結果、不揮発性フリップフロップ８１０１、８１０２に格納される値は、マスク値Ｍの影響を受けない。以上により鍵攪拌関数Ｆ（Ｋ、Ｃ）の値の計算が完了する。
【０２２５】
鍵攪拌関数Ｆ（Ｋ、Ｃ）の値の計算が完了した後は、次の鍵攪拌処理を実行するために、攪拌値Ｃとマスク値ＫＨ、０、ＫＨ、１、…、ＫＨ、１５、ＫＬ、０、ＫＬ、１、…、ＫＬ、１５の更新処理が行われる。攪拌値Ｃの上位の６４ビットＣＨの更新は更新部７９０３で、下位６４ビットＣＬの更新は更新部７９０６で実行される。また、マスク値ＫＨ、０、ＫＨ、１、…、ＫＨ、１５、ＫＬ、０、ＫＬ、１、…、ＫＬ、１５の更新は、更新部７９０９〜７９２４で実行される。
【０２２６】
攪拌値Ｃとマスク値ＫＨ、０、ＫＨ、１、…、ＫＨ、１５、ＫＬ、０、ＫＬ、１、…、ＫＬ、１５が更新されたら、（ＫＨ、１５☆Ｍ）||…||（ＫＨ、０☆Ｍ）および（ＫＬ、１５☆Ｍ）||…||（ＫＬ、０☆Ｍ）を計算し、レジスタ７９０１、７９０４に格納するために、攪拌関数Ｆ（Ｋ、Ｃ）の逆関数である逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算を行う。
【０２２７】
まず、マスク化処理部８２０１で、更新されたマスク値Ｍｉ（ｉは０から１５までの整数）を用いて、不揮発性フリップフロップ８１０１、８１０２に格納される値のマスク化を行う。この処理は、不揮発性フリップフロップ８１０１、８１０２に格納される値ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ））、ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ）に、更新されたマスク値Ｍｉを順次、加算演算を作用させることで実行される。
【０２２８】
逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算のためには、ＭＧＦ事前複雑化処理部８２０３、８２０６、ＭＧＦ事前複雑化処理部８２０２、８２０５、加算ゲート８２０４、８２０７で処理が行われる。
【０２２９】
ＭＧＦ事前複雑化処理部８２０２には、不揮発性フリップフロップ８１０２の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ））と更新されたマスク値Ｍｉが入力される。ＭＧＦ事前複雑化処理部８２０２の出力は、ＭＧＦ作用部８２０３に入力される。
【０２３０】
加算ゲート８２０４では、不揮発性フリップフロップ８１０１の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL ☆ＭＧＦ（ＫＨ||ＣＨ））とＭＧＦ作用部８２０３の出力が入力され、加算演算を実行する。加算ゲート８２０４の１２８ビット出力の上位６４ビットは、６４ビットレジス７９０１に新しい値として格納される。
【０２３１】
ＭＧＦ事前複雑化処理部８２０５には、不揮発性フリップフロップ８１０１の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL ☆ＭＧＦ（ＫＨ||ＣＨ））と更新されたマスク値Ｍｉが入力される。ＭＧＦ事前複雑化処理部８２０５の出力は、ＭＧＦ作用部８２０６に入力される。ＭＧＦ作用部８２０６の出力は加算ゲート８２０７で、ＫL||ＣL ☆ＭＧＦ（ＫＨ||ＣＨ）をマスク化処理部８２０１に入力して得られる１２８ビット出力値と、ＭＧＦ作用部８２０６の１２８ビット出力値の加算演算を行う。ＸＯＲゲート８２０７の１２８ビット出力の上位６４ビットは、６４ビットレジスタ７９０５に新しい値として格納される。
以上の処理により、逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算処理が完了する。
【０２３２】
逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算処理によるトレジスタ７９０１、７９０５に格納される値の更新が終わると、再び鍵攪拌関数Ｆ（Ｋ、Ｃ）を計算し、不揮発性フリップフロップ８１０１、８１０２に格納される値の更新を行う。そして、Ｆ−１（Ｋ、Ｃ）の演算処理によってレジスタ７９０１、７９０４に格納される値の更新を、認証チップの電源が入っている間、繰り返す。
切り替え器７９０７、７９０８は、攪拌値を内部レジスタと外部入力から切り替える処理を行う。
【０２３３】
図３９は、第３の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
ＭＧＦ事前複雑化処理部８３００の端子８３０２には、マスク化された１２８ビットデータＸ☆Ｍと１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）が入力される。端子８３０１には、例えば、１２８ビットの定数Ｃが入力される。端子８３０１は補助入力端子である。
【０２３４】
ＭＧＦ事前複雑化処理部８３００では、これらの入力からＭＧＦ事前複雑化処理を実行し、１２８ビット出力を生成する。この出力は、出力端子８３６０から取り出すことができる。
【０２３５】
入力端子８３０２に入力された１２８ビットのデータＸは上位６４ビットＸＨと下位６４ビットＸＬに分割され、加算ゲート８３１９でこれらの加算演算が実行される。得られた６４ビット値はさらに１６個の４ビット値に分割されて切り替え器８３２０に入力される。切り替え器８３２０の出力は、４ビットスワッピングボックス８３２２、８３４１に入力される。４ビットスワッピングボックス８３２２は直列に繋がれた１６個の４ビットスワッピングボックス８３２２〜８３３８と１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）８３３９から構成されるビット転置処理部の端のものである。４ビットスワッピングボックス８３２２〜８３３８では、ビット転置処理を１６回繰り返す処理が実行される。
【０２３６】
各スワッピングボックス８３２２〜８３３８では、ビット転置処理が行われる。各スワッピングボックス８３２２〜８３３８は、秘密鍵Ｋの加算マスクに関するスワッピングボックスであるので、４ビットセレクト信号の値だけシフトを行う１６ビット巡回シフト回路として実装される。切り替え器８３２０はスワッピングボックスを選択するための適切なセレクト信号を与え、１６回の繰り返しのビット転置処理が首尾よく実行されるようにする。
【０２３７】
端子８３０３〜８３１８に入力される１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）の各々も、４ビット値に分割されて１６個の切り替え８３２２〜８３３８に入力される。これらの切り替え器は直列に繋がれた４ビットスワッピングボックス８３２２〜８３３８と１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）８３３９を用いてビット転置処理を１６回繰り返す処理において、１６回の繰り返しのビット転置処理が首尾よく実行されるようにスワッピングボックスを選択するためのセレクト信号を出力する。
【０２３８】
端子８３０１に入力された１２８ビット定数Ｃは、１６ビットごとに８分割され、切り替え器８３２１、８３４０を含む８つの切り替え器に入力される。つまり定数Ｃは、Ｃ＝Ｃ０||Ｃ１||…||Ｃ７と書くことができる。これら８個の１６ビットの値Ｃ０、Ｃ１、…、Ｃ７は、８系列実行される、ビット転置処理の初期値として入力される。
【０２３９】
切り替え器８３２０に接続されている８個の４ビットスワッピングボックス（たとえば、４ビットスワッピングボックス８３２２、８３４１）では、切り替え器８３２０の出力をセレクト信号としたビット転置が行われる。切り替え器８３２０のセレクト信号は、マスク値の影響を受けているため、切り替え器８３２０に接続されている８個の４ビットスワッピングボックスの出力もマスク値Ｍの影響を受ける。４ビットスワッピングボックス８３２２〜８３３８、８３４１〜８３５７を含む８系列の１６段４ビットスワッピングボックスは、１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）から生成された信号をセレクト信号とするので、マスク値Ｍの影響を消去することができる。
【０２４０】
これら８系列の１６段４ビットスワッピングボックスと１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）を含むビット転置処理部の処理を１６回繰り返し、８系列の各１６ビットを結合した出力値として、端子８３０２に入力された１２８ビットデータＸの影響を受け、かつマスク値Ｍの影響を受けない値を得ることができる。
【０２４１】
図４０は第３の実施例におけるマスク処理部の構成の例を示す図、図４１は第３の実施例におけるアンマスク処理部の構成の例を示す図である。
アンマスク処理部８４００は、入力端子８４０１〜８４１６に入力された１６個の４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５と、入力端子８４１７、８４５０に入力される６４ビット入力値ｘ、ｙ（ｘとｙのビット結合値ｘ||ｙを１２８ビット入力値とも呼ぶ）を受け取り、出力端子８４８０、８４８１から１２８ビット出力値Ｘ、Ｙを出力する。減算器８４１８〜８４４９では、入力端子８４１７に入力される６４ビット入力値ｘ、ｙを４ビットごとに分割した１６個の４ビット値ｘ０、…ｘ１５、ｙ０、…ｙ１５から４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５を順次減算する処理を行う。４ビット値ｘ０、…ｘ１５から４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５を減算した結果をビット結合して６４ビット値としたものと、入力端子８４１７入力された６４ビット入力値ｘは結合され、出力端子８４８０から出力される。４ビット値ｙ０、…ｙ１５から４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５を減算して得た結果をビット結合して６４ビット値としたものと、入力端子８４５０入力された６４ビット入力値ｙは結合され、出力端子８４８１から出力される。
【０２４２】
図４１は、第３の実施例におけるアンマスク処理部の構成の例を示す図である。
マスク処理部８５００は、入力端子８５０１〜８５１６に入力された１６個の４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５と、入力端子８５１７、８５５０に入力される６４ビット入力値ｘ、ｙ（ｘとｙのビット結合値ｘ||ｙを１２８ビット入力値とも呼ぶ）を受け取り、出力端子８５８０、８５８１から１２８ビット出力値Ｘ、Ｙを出力する。加算器８５１８〜８５４９では、入力端子８４１７に入力される６４ビット入力値ｘ、ｙを４ビットごとに分割した１６個の４ビット値ｘ０、…ｘ１５、ｙ０、…ｙ１５から４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５を順次加算する処理を行う。４ビット値ｘ０、…ｘ１５に４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５を加算した結果をビット結合して６４ビット値としたものと、入力端子８５１７入力された６４ビット入力値ｘは結合され、出力端子８５８０から出力される。４ビット値ｙ０、…ｙ１５に４ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５を加算した結果をビット結合して６４ビット値としたものと、入力端子８４５０入力された６４ビット入力値ｙは結合され、出力端子８５８１から出力される。
【０２４３】
＜第４実施例＞
実施例4は、以下の組み合わせによる実施例である。
（ｉ）不揮発性回路に対するプローブ攻撃対策：図１８の構成を利用
（ｉｉ）揮発性回路に対するプローブ攻撃対策：図３０のスワッピングボックスを利用
（ｉｉｉ）秘密鍵へのマスク演算の種別：ＸＯＲ演算
【０２４４】
第１実施例との相違点は、不揮発性回路に対するプローブ攻撃対策として、図１８の構成を用いていることである。
【０２４５】
図４２は、第４の実施例の全体の構成の例を示す図である。
図４２において、１２８ビットレジスタ８６０１に攪拌値Ｃが格納される。１２８ビットレジスタ８６０１には攪拌値Ｃが格納されている。８６０３には、マスク化された秘密鍵が格納されている。マスク化された秘密鍵は、１２８ビットレジスタ１６ビットマスク値をＭとすると、１２８ビット秘密鍵Ｋに対して、１６ビットマスク値Ｍを８個、ビット結合した値Ｋ☆（Ｍ||…||Ｍ）で表される。マスク値Ｍは直接レジスタに格納されないが、Ｍ０☆Ｍ１☆…☆Ｍ１５＝Ｍを満たすＭｉ（ｉは０から１５までの整数）がそれぞれ１６ビットレジスタ８６０４〜８６１９に格納される。１６ビットレジスタ８６０４〜８６１９は更新部８６０４〜８６１９としても機能する。これらの値から、鍵攪拌関数Ｆ（Ｋ、Ｃ）を作用させる処理が行われた結果が、２つの１２８ビット不揮発性レジスタ８９０１、８９０２に格納される。
【０２４６】
鍵攪拌関数Ｆ（Ｋ、Ｃ）の値を計算するまでには、ＭＧＦ事前複雑化処理部８７０４、ＭＧＦ作用部８７０１、８７０３、８７０６、ＸＯＲゲート８７０２、８７０５、８７０７で処理が行われる。
【０２４７】
１２８ビットレジスタ８６０１に格納される攪拌値Ｃは、ＭＧＦ作用部８７０１に入力される。攪拌値Ｃはマスクの影響を受けないため、ＭＧＦ事前複雑化処理は不要である。ＭＧＦ作用部８７０１の出力と１２８ビットレジスタ８６０３からの出力Ｋ☆（Ｍ||…||Ｍ）は、加算器８７０２で加算処理が行われる。加算器８７０２の出力は、ＭＧＦ事前複雑化処理部８７０４に入力される。ＭＧＦ事前複雑化処理部８７０４では、加算器８７０２の出力から、マスク値Ｍｉ（ｉは０から１５までの整数）の値の影響を受けない１２８ビット値を生成する。この値は秘密鍵Ｋと攪拌値Ｃのみに影響をうけ、マスク値Ｍの影響を受けない。ＭＧＦ事前複雑化処理部８７０４の出力はＭＧＦ作用部７３０３に入力され、マスク生成関数ＭＧＦが作用される。ＭＧＦ作用部７３０３の１２８ビット出力は、ＸＯＲゲート８７０５において、攪拌値ＣとのＸＯＲ演算が実施され、アンマスク処理部８８００に入力される。同時に、ＸＯＲゲート８７０５の１２８ビット出力は、ＭＧＦ作用部７３０に入力され、その結果はＸＯＲゲート８７０７において、ＸＯＲゲート８７０２からの出力とＸＯＲ演算が施される。ＸＯＲゲート８７０７の１２８ビット出力は、アンマスク処理部８８００に入力される。
【０２４８】
アンマスク処理部８８００では、２つの１２８ビット入力値および１６個の分割されたマスク値Ｍｉ（ｉは０から１５までの整数）を入力とし、ＸＯＲ演算を用いて２つの１２８ビット入力値からマスク値Ｍｉ（ｉは０から１５までの整数）の影響を取り除いた２つの値を生成する。それら２つの値はそれぞれ、不揮発性レジスタ８９０１、８９０２に格納される。不揮発性レジスタ８９０１、８９０２に格納された値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））、Ｋ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））は秘密鍵Ｋおよび攪拌値Ｃの影響のみを受け、マスク値Ｍ（または１６ビットマスク値Ｍｉ（ｉは０から１５までの整数））の影響を受けない。
【０２４９】
以上によりＦ（Ｋ、Ｃ）の演算が完了するので、攪拌値Ｃとマスク値Ｍの更新処理を行う。攪拌値Ｃの更新は、更新部８６０２で、マスク値の更新は更新部８６２１、８６２２で行われる。その結果、１２８ビットレジスタ８６０１に格納される攪拌値Ｃと、１６個の１６ビットレジスタ８６０４〜８６１９に格納される１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）が更新される。
【０２５０】
攪拌値Ｃとマスク値Ｍの更新処理が終了したら、逆攪拌関数Ｆ−１（Ｋ、Ｃ）の計算処理を行う。まず、マスク処理部９００１でマスク処理が行われる。不揮発性レジスタ８９０１、８９０２に格納された値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））、Ｋ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））のマスク化処理を、１６個の１６ビットレジスタ８６０４〜８６１９に格納される１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）を用いて行う。
【０２５１】
マスク処理部９００１では、不揮発性レジスタ８９０１に格納された値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））はそのまま出力される。また、マスク処理部９００１では、不揮発性レジスタ８９０２に格納された値Ｋ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））は、１６個の１６ビットレジスタ８６０４〜８６１９に格納される１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）とのＸＯＲ演算が施され、マスク化された値が生成される。
【０２５２】
マスク処理部９００１の出力の一つである、不揮発性レジスタ８９０１に格納された値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））は、ＭＧＦ作用部９００２に入力される。ＭＧＦ作用部９００２の入力はマスク値の影響を受けていない。ＭＧＦ作用部９００２の出力は、ＸＯＲゲート９００３に入力され、不揮発性レジスタ８９０２に格納された値Ｋ☆ＭＧＦ（Ｃ）☆ＭＧＦ（Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ）））をマスク化した値とのＸＯＲ演算が実行される。ＸＯＲゲート９００３の出力は、ＭＧＦ事前複雑化処理部９００４に入力される。ＭＧＦ事前複雑化処理部９００４の入力は、マスク値の影響を受けているが、出力はマスク値の影響を受けない。ＭＧＦ事前複雑化処理部９００４の出力は、ＭＧＦ作用部９００５に入力され、ＭＧＦが作用され、出力される。ＭＧＦ作用部９００５の出力もマスク値の影響を受けない。ＭＧＦ作用部９００５の出力は、ＸＯＲゲート９００６で、マスク処理部９００１の出力の一つである、不揮発性レジスタ８９０１に格納された値Ｃ☆ＭＧＦ（Ｋ☆ＭＧＦ（Ｃ））とのＸＯＲ演算が実行され、ＭＧＦ作用部９００７に入力され、ＭＧＦが作用される。ＭＧＦ作用部９００７の出力は、ＸＯＲゲート９００８で、ＸＯＲゲート９００３の出力とのＸＯＲ演算を実行され、その結果は、１２８ビットレジスタ８６０３に格納される。
以上の処理により、逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算処理が完了する。
【０２５３】
逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算処理によるトレジスタ８６０３に格納される値の更新が終わると、再び鍵攪拌関数Ｆ（Ｋ、Ｃ）を計算し、不揮発性フリップフロップ８９０１、８９０２に格納される値の更新を行う。そして、逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算処理によってレジスタ８６０３に格納される値の更新を、認証チップの電源が入っている間、繰り返す。
切り替え器８６２３は、攪拌値を内部レジスタと外部入力から切り替える処理を行う。
【０２５４】
図４３は、第４の実施例におけるＭＧＦ事前複雑化処理部の構成の例を示す図である。
ＭＧＦ事前複雑化処理部９１００の端子９１０２〜９１１８には、マスク化された１２８ビットデータＸ☆Ｍと１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）が入力される。端子９１０１には、例えば、１２８ビットの定数Ｃが入力される。端子９１０１は補助入力端子である。
【０２５５】
ＭＧＦ事前複雑化処理部９１００では、これらの入力からＭＧＦ事前複雑化処理を実行し、１２８ビット出力を生成する。この出力は、出力端子９１９０から取り出すことができる。
【０２５６】
入力端子９１０２に入力された１２８ビットのデータＸは３２個の４ビット値Ｘ０、…、Ｘ３１に分割され、切り替え器９１１９に入力される。切り替え器９１１９の出力は、４ビットスワッピングボックス９１３７から９１６１を含む１６個の４ビットスワッピングボックスに入力される。４ビットスワッピングボックス９１３７は直列に繋がれた１６個の４ビットスワッピングボックス９１３７〜９１５３と１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）９１５４から構成されるビット転置処理部の端のものである。１６個の４ビットスワッピングボックス９１３７〜９１５３ではビット転置処理を３２回繰り返す処理が行われる。
【０２５７】
４ビットスワッピングボックス９１６１〜９１８７を含む８×１６個の４ビットスワッピングボックスでは、ビット転置処理が行われる。各スワッピングボックスは、秘密鍵Ｋのマスクに関するスワッピングボックスであるので、４ビットセレクト信号の値だけシフトを行う１６ビット巡回シフト回路として実装される。切り替え器９１１９はスワッピングボックスを選択するための適切なセレクト信号を与え、３２回の繰り返しのビット転置処理が首尾よく実行されるようにする。
【０２５８】
端子９１０２〜９１１８に入力される１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）の各々も４ビットごとに分割され、１６個の切り替え器９１２０〜９１３５に入力される。これらの切り替え器９１２０〜９１３５は、４ビットスワッピングボックス９１３７〜９１５３、９１６１〜９１８７を含む８×１６個の４ビットスワッピングボックスおよび１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）９１５４、９１８８を含む８個の１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）を用いて処理されるビット転置処理を３２回繰り返す処理が首尾よく実行されるように、８×１６個の４ビットスワッピングボックスに対してセレクト信号を送る。
【０２５９】
４ビットスワッピングボックス９１３７〜９１５３、９１６１〜９１８７を含む８×１６個の４ビットスワッピングボックスおよび１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）９１５４、９１８８を含む８個の１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）を用いて、ビット転置処理を３２回繰り返す処理が行われる。端子９１０１に入力された１２８ビット定数Ｃは、１６ビットごとに８分割され、切り替え器７４３８、７４６０を含む８つの切り替え器に入力される。つまり定数Ｃは、Ｃ＝Ｃ０||Ｃ１||…||Ｃ７と書くことができる。これら８個の１６ビットの値Ｃ０、Ｃ１、…、Ｃ７は、８個の切り替え器９１３６〜９１６０に入力される。
【０２６０】
８個の１６ビットの値Ｃ０、Ｃ１、…、Ｃ７が入力される８個の切り替え器９１３６〜９１６０の各々接続されている８個の４ビットスワッピングボックス（たとえば、４ビットスワッピングボックス９１３７、９１６１）では、切り替え器９１１９の出力をセレクト信号としたビット転置が行われる。切り替え器９１３６のセレクト信号は、マスク値の影響を受けているため、切り替え器９１３６に接続されている８個の４ビットスワッピングボックス９１３７〜９１５３の出力もマスク値Ｍの影響を受ける。４ビットスワッピングボックス９１３７〜９１５３、９１６１〜９１８７を含む８系列の１６段４ビットスワッピングボックスは、１６個の１６ビットマスク値Ｍｉ（ｉは０から１５までの整数）から生成された信号をセレクト信号とするので、マスク値Ｍの影響を消去することができる。
【０２６１】
これら８系列の１６段４ビットスワッピングボックスと１６ビット線形帰還シフトレジスタ（ＬＦＳＲ）を含むビット転置処理部の処理を３２回繰り返し、８系列の各１６ビットを結合した出力値として、端子９１９０に入力された１２８ビットデータＸの影響を受け、かつマスク値Ｍの影響を受けない値を得ることができる。
【０２６２】
図４４は、第４の実施例におけるマスク処理部、アンマスク処理部の構成の例を示す図である。
本例では、マスク処理部、アンマスク処理部の構成は共通化されている。
【０２６３】
マスク処理部／アンマスク処理部は、入力端子９２０３〜９２１９、９２０１、９２０２に入力される１６個の１６ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５と、２つの１２８ビット値入力値ｘ、ｙを用いて、出力端子９２２０、９２２１から出力される２つの１２８ビット値出力値Ｘ、Ｙを生成する。
【０２６４】
１６個の１６ビットマスク値Ｍ０、Ｍ１、…、Ｍ１５は、ビット結合によってＭｉ||Ｍｉ||Ｍｉ||Ｍｉ（ｉは０から１５までの整数）で表される１２８ビット値に変換される。そして、２つの１２８ビット値に対し、Ｍ０、Ｍ１、…、Ｍ１５の順にＸＯＲ演算を作用される。このＸＯＲ演算の結果が１２８ビット出力Ｙとして出力端子９２２１から出力される。出力端子９２２０からは、入力端子９２０１に入力された１２８ビット値ｘが出力Ｘとして出力される。
【０２６５】
＜第５の実施例＞
実施例５は、以下の組み合わせによる実施例である。
（ｉ）不揮発性回路に対するプローブ攻撃対策：図１５の構成を利用
（ｉｉ）揮発性回路に対するプローブ攻撃対策：図３０のスワッピングボックスを利用
（ｉｉｉ）秘密鍵へのマスク演算の種別：ＸＯＲ演算
【０２６６】
すなわち、基本的な組み合わせは、第１実施例１と同一である。第１実施例と異なる点は、不揮発性レジスタに格納する値もマスク化することである。２つの不揮発性レジスタに格納されている値は、同一の値でマスクされている。これら２つの値をＸＯＲ演算を作用して得られる値を攪拌鍵として認証プロトコルに用いることで、マスクの値がキャンセルされ、攪拌鍵はマスク値の影響をうけなくなる。全ての値が常にマスク化されているので、プローブ攻撃に対する耐性をさらに向上させることができる。
【０２６７】
ただし、不揮発性レジスタの値をマスク化するため、ただし、不揮発性レジスタの値をマスク化するため、マスク値Ｍを１６分割したＭ０、Ｍ１、…、Ｍ１５の保存先を揮発性レジスタから不揮発性レジスタに変更する必要がある。なぜなら、突然の電源断が発生した場合、不揮発性レジスタの値はマスク値の影響を受けたままの値を保持することになる。不揮発性レジスタの値は電源を切った後もマスク値の影響を受けたままであるが、このとき分散されたマスク値Ｍ０、Ｍ１、…、Ｍ１５の保存先を揮発性のレジスタとすると、電源を切った後にこれらのマスク値が消えてしまい、再び電源を入れた後にマスク値が消去されてしまう。
【０２６８】
本実施例のように、不揮発性レジスタがマスク値の影響を受ける場合、対応するマスク値も正しい値を保存しておかないと正しい鍵の値を保持できないので、本実施例では、分散されたマスク値Ｍ０、Ｍ１、…、Ｍ１５の保存先を不揮発性レジスタとする。
【０２６９】
図４５は、第５の実施例の全体の構成の例を示す図である。
図４５において、１２８ビット秘密鍵Ｋは上位の６４ビットであるＫＨと下位６４ビットであるＫＬに分割されており、それぞれ１６ビットマスク値Ｍによってマスク化されたデータＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ）、ＫＬ☆（Ｍ||Ｍ||Ｍ||Ｍ）として６４ビットレジスタ９３０１、９３０４に格納される。また、１２８ビット攪拌値Ｃは上位の６４ビットであるＣＨと下位６４ビットであるＣＬに分割され、それぞれ６４ビットレジスタ９３０２、９３０５に格納されている。
【０２７０】
マスク値Ｍは直接レジスタに格納されないが、Ｍ０☆Ｍ１☆…☆Ｍ１５＝Ｍを満たすＭｉ（ｉは０から１５までの整数）がそれぞれ１６ビットレジスタ９４０１〜９４１６に格納される。本例で１６ビットレジスタ９４０１〜９４１６は不揮発性フリップフロップで構成される。１６ビットレジスタ９４０１〜９４１６は更新部９４０１〜９４１６としても機能する。これらの値から、鍵攪拌関数Ｆ（Ｋ、Ｃ）を作用させる処理が行われた結果が、２つの１２８ビット不揮発性レジスタ９６０１、９６０２に格納され、これら２つの値を入力としてＸＯＲ演算をした結果を１２８ビット攪拌鍵として利用する。
【０２７１】
鍵攪拌関数Ｆ（Ｋ、Ｃ）の値を計算するまでには、ＭＧＦ事前複雑化処理部９５０１、９５０４、ＭＧＦ作用部９５０２、９５０５、ＸＯＲゲート９５０３、９５０６で処理が行われる。ＭＧＦ事前複雑化処理部９５０１には、ＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ）と１２８ビット攪拌値Ｃの下位６４ビットであるＣＬのビット結合値と、Ｍｉ（ｉは０から１５までの整数）が入力され、前述のＭＧＦ事前複雑化処理が行われる。その結果は、ＭＧＦ作用部７１０２に入力される。ＭＧＦ事前複雑化処理部９５０１、９５０４では、処理の結果がＭｉ（ｉは０から１５までの整数）の値の影響を受けないように処理される。ただし、ＸＯＲゲート９５０３、９５０６の出力は、レジスタ９３０２、９３０５の影響を受けるので、マスク値Ｍの影響を受けている。この影響を取り除くために、ＸＯＲゲート９５０３、９５０６の出力は、第１実施例の場合とは異なりアンマスク処理を行わずに、不揮発性フリップフロップ９６０１、９６０２に格納される。
【０２７２】
不揮発性フリップフロップ９６０１、９６０２に格納される値はともに、Ｍ||Ｍ||Ｍ||Ｍ||０…０で示される値、すなわち鍵６４ビット値がＭ||Ｍ||Ｍ||ＭによるＸＯＲマスクの影響をうけ、６４ビット攪拌値Ｃではその影響を受けない。不揮発性フリップフロップ９６０１、９６０２の上位６４ビットが共に同一の値Ｍ||Ｍ||Ｍ||ＭのＸＯＲマスクの影響を受けるため、不揮発性フリップフロップ９６０１、９６０２に格納される値をＸＯＲ演算し攪拌鍵を生成することで、これらのマスク値が互いに相殺され、攪拌鍵の値はマスク値の影響をうけなくなる。
【０２７３】
鍵攪拌関数Ｆ（Ｋ、Ｃ）計算が完了すると、次の鍵攪拌処理を実行するために、攪拌値Ｃとマスク値Ｍｉ（ｉは０から１５までの整数）の更新処理が行われる。攪拌値Ｃの上位の６４ビットＣＨの更新は更新部９３０３で、下位６４ビットＣＬの更新は更新部９３０６で実行される。また、マスク値Ｍｉ（ｉは０から１５までの整数）の更新は、更新部９４０１〜９４１６で実行される。
【０２７４】
攪拌値Ｃとマスク値Ｍｉ（ｉは０から１５までの整数）が更新されたら、レジスタ９３０１、９３０４に格納されているマスク化されたデータＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ）、ＫＬ☆（Ｍ||Ｍ||Ｍ||Ｍ）を更新するために、攪拌関数Ｆ（Ｋ、Ｃ）の逆関数である逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算を行う。
【０２７５】
本例では、不揮発性フリップフロップ９６０１、９６０２に格納される値のマスク化は行わない。
逆攪拌関数Ｆ−１（Ｋ、Ｃ）の演算のためには、ＭＧＦ事前複雑化処理部９７０１、９７０４、ＭＧＦ作用部９７０２、９７０５、ＸＯＲゲート９７０３、９７０６で処理が行われる。
【０２７６】
ＭＧＦ事前複雑化処理部９７０１には、不揮発性フリップフロップ９７０２の出力ＫＨ||ＣＨ☆ＭＧＦ（ＫL||ＣL☆ＭＧＦ（ＫＨ||ＣＨ））と更新部９４１７、９４１８を含む８個の更新部で更新された更新されたマスク値Ｍｉが入力される。ＭＧＦ事前複雑化処理部９７０１の出力は、ＭＧＦ作用部９７０２に入力される。ＭＧＦ作用部９７０２では、入力に対してＭＧＦが作用され、出力される。
【０２７７】
ＸＯＲゲート９７０３では、不揮発性フリップフロップ９６０１の出力（ＫＨ☆（Ｍ||Ｍ||Ｍ||Ｍ））||ＣＨ☆ＭＧＦ（ＫL||ＣL ☆ＭＧＦ（ＫＨ||ＣＨ））とＭＧＦ作用部７３０２の出力が入力され、ＸＯＲ演算を実行する。ＸＯＲゲート９７０３の１２８ビット出力の上位６４ビットは、６４ビットレジスタ９３０１に新しい値として格納される。
【０２７８】
ＭＧＦ事前複雑化処理部９７０４には、ＸＯＲゲート９７０３の出力と更新部９４１７、９４１８を含む８個の更新部で更新されたマスク値Ｍｉが入力される。ＭＧＦ事前複雑化処理部９７０４の出力は、ＭＧＦ作用部９７０５に入力される。ＭＧＦ作用部９７０５の出力はＸＯＲゲート９７０６で、（ＫL☆（Ｍ||Ｍ||Ｍ||Ｍ））||ＣL☆ＭＧＦ（ＫＨ||ＣＨ）と、ＭＧＦ作用部９７０５の１２８ビット出力値のＸＯＲ演算を行う。ＸＯＲゲート９７０６の１２８ビット出力の上位６４ビットは、６４ビットレジスタ９３０４に新しい値として格納される。
【０２７９】
以上の処理により、Ｆ−１（Ｋ、Ｃ）の演算処理が完了する。
Ｆ−１（Ｋ、Ｃ）の演算処理によるトレジスタ９３０１、９３０５に格納される値の更新が終わると、再び鍵攪拌関数Ｆ（Ｋ、Ｃ）を計算し、不揮発性フリップフロップ９６０１、９６０２に格納される値の更新を行う。そして、Ｆ−１（Ｋ、Ｃ）の演算処理によってレジスタ９３０１、９３０４に格納される値の更新を、認証チップの電源が入っている間、繰り返す。
【０２８０】
切り替え器９３０７、９３０８は、攪拌値を内部レジスタと外部入力から切り替える処理を行う。
図４６は上記の実施形態の装置を実現可能なハードウェア構成図の例である。
【０２８１】
なお、各機能ブロックを、標準的なハードウェア構成のコンピュータを用いて構成することができる。
ここで図４６について説明する。図４６は、上記実施形態の暗号処理装置に使用可能なコンピュータの一例の構成図である。
【０２８２】
このコンピュータ９８００は、ＭＰＵ９８０１、ＲＯＭ９８０２、ＲＡＭ９８０３、ハードディスク装置９８０４、レジスタ９８０５、不揮発性回路９８０６、インタフェース装置９８０７を備えている。なお、これらの構成要素はバスライン９８１０を介して接続されており、ＭＰＵ９８０１の管理の下で各種のデータを相互に授受することができる。
【０２８３】
ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９８０１は、このコンピュータ２００全体の動作を制御する演算処理装置であり、コンピュータ９８００の制御処理部として機能する。
【０２８４】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９８０２は、所定の基本制御プログラムが予め記録されている読み出し専用半導体メモリである。ＭＰＵ９８０１は、この基本制御プログラムをコンピュータ９８００の起動時に読み出して実行することにより、このコンピュータ９８００の各構成要素の動作制御が可能になる。
【０２８５】
ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９８０３は、ＭＰＵ９８０１が各種の制御プログラムを実行する際に、必要に応じて作業用記憶領域として使用する、随時書き込み読み出し可能な半導体メモリである。
【０２８６】
ハードディスク装置９８０４は、ＭＰＵ９８０１によって実行される各種の制御プログラムや各種のデータを記憶しておく記憶装置である。ＭＰＵ９８０１、ＲＯＭ９８０２、ＲＡＭ９８０３、ハードディスク装置９８０４、レジスタ９８０５、不揮発性回路９８０６は制御部を構成し得る。
【０２８７】
レジスタ９８０５、不揮発性回路９８０６には、秘密鍵Ｋ、攪拌値Ｃ、マスク値Ｍなどが格納され得る。例えば、不揮発性回路９８０６は秘密鍵を格納し、レジスタ９８０５は攪拌値を格納しても良い。
【０２８８】
制御部は、ハードディスク装置９８０４に記憶されている所定の制御プログラムを読み出してＭＰＵ９８０１で実行することにより、図１０〜４５を参照しながら説明した前述の各種処理部での各種の処理を行えるようになる。
【０２８９】
レジスタ９８０５、不揮発性回路９８０６には、秘密鍵Ｋ、攪拌値Ｃ、マスク値Ｍなどが格納され得る。例えば、不揮発性回路９８０６は秘密鍵を格納し、レジスタ９８０５は攪拌値を格納しても良い。
【０２９０】
インタフェース装置９８０７は、このコンピュータ９８００に接続される各種機器との間での各種情報の授受の管理を行う。例えば、本コンピュータ９８００が親機である場合には、子機との通信の管理を行う。また本コンピュータ９８００が子機である場合には、親機との通信の管理を行う。
【０２９１】
インタフェース装置９８０７は、入力としてチャレンジとしての乱数を受ける受信部、攪拌値とレスポンスを送信する送信部として機能する。
【０２９２】
記録媒体駆動装置９８０８は、可搬型記録媒体９８０９に記録されている各種の制御プログラムやデータの読み出しを行う装置である。ＭＰＵ９８０１は、可搬型記録媒体９８０９に記録されている所定の制御プログラムを、記録媒体駆動装置９８０８を介して読み出して実行することによって、後述する各種の制御処理を行うようにすることもできる。なお、可搬型記録媒体９８０９としては、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格のコネクタが備えられているフラッシュメモリ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などがある。
【０２９３】
ＭＰＵ９８０１、ＲＯＭ９８０２、ＲＡＭ９８０３、レジスタ９８０５、不揮発性回路９８０６は組み合わされて、秘密鍵と攪拌値に攪拌関数を作用させて攪拌された秘密鍵を生成する鍵攪拌部、攪拌された秘密鍵を用いて乱数に暗号化関数を作用させてレスポンスを生成するレスポンス生成部、攪拌値を、更新する攪拌値更新部として機能する。
【０２９４】
このようなコンピュータ９８００を用いて暗号処理装置を構成するには、例えば、暗号処理装置を構成する各機能ブロックをＭＰＵ９８０１に行わせるための制御プログラムを作成する。作成された制御プログラムはハードディスク装置９８０４若しくは可搬型記録媒体９８０９に予め格納しておく。そして、ＭＰＵ９８０１に所定の指示を与えてこの制御プログラムを読み出させて実行させる。こうすることで、暗号処理装置が備えている機能がＭＰＵ９８０１により提供される。従って、このコンピュータ９８００が暗号処理装置として機能するようになる。
【０２９５】
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）
入力として整数の乱数であるチャレンジを受ける受信部と、
整数である秘密鍵を格納する不揮発性メモリである第１のメモリと、
整数である攪拌値を格納する第２のメモリと、
前記秘密鍵と前記攪拌値に攪拌関数を作用させて整数である攪拌された秘密鍵を生成する鍵攪拌部と、
前記攪拌された秘密鍵と前記チャレンジに暗号化関数を作用させてレスポンスを生成するレスポンス生成部と、
前記第２のメモリに格納されている前記攪拌値を更新する攪拌値更新部と、
前記攪拌値と前記レスポンスを出力する送信部と、
を含む暗号処理装置。
（付記２）
暗号処理装置に接続された外部装置であって、前記送信部から出力された前記攪拌値と前記レスポンスを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値である第２の秘密鍵とに攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記レスポンスを前記暗号化関数の逆関数である復号関数に作用させてチャレンジ比較値を生成し、前記チャレンジと前記チャレンジ比較値前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて、前記攪拌値と前記レスポンスを出力した前記暗号処理装置を認証する外部装置によって認証を受ける、付記１に記載の暗号処理装置。
（付記３）
前記送信部から出力された前記攪拌値と前記レスポンスを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値である第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記レスポンスに暗号化関数を作用させてチャレンジ比較値を生成し、前記チャレンジと前記チャレンジ比較値を比較し、前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて、前記攪拌値と前記レスポンスを出力した前記暗号処理装置を認証する外部装置によって認証を受ける、付記１に記載の暗号処理装置。
（付記４）
さらに、整数の乱数である第２のチャレンジを生成するチャレンジ生成部を含む暗号処理装置であって、
前記送信部は、前記攪拌値と前記レスポンスと前記第２チャレンジを出力し、
前記受信部は、暗号処理装置に接続された外部装置であって、前記送信部から出力された前記攪拌値と前記レスポンスと前記第２チャレンジを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値である第２の秘密鍵とに攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記レスポンスを前記暗号化関数の逆関数である復号関数に作用させて整数であるチャレンジ比較値を生成し、自身のメモリに格納してある整数である第２の攪拌値と前記秘密鍵に攪拌関数を作用させて整数である第２の秘密鍵比較値を生成し、前記チャレンジと前記チャレンジ比較値との比較をし、前記前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて前記攪拌値と前記レスポンスと前記第２チャレンジを出力した前記暗号処理装置が認証された場合に、前記第２の秘密鍵比較値と前記第２のチャレンジに暗号化関数を作用させて整数である第２のレスポンスを生成し、前記第２の攪拌値と前記第２のレスポンスを出力する外部装置から、前記第２の攪拌値と前記第２のレスポンスを受け、
前記鍵攪拌部は、前記秘密鍵と前記第２の攪拌値に攪拌関数を作用させて整数である第２の攪拌された秘密鍵を生成する暗号処理装置であって、
さらに、
前記第２の攪拌された秘密鍵と前記第２のレスポンスを前記暗号化関数の逆関数である復号関数に作用させて第２のチャレンジ比較値を生成する復号部と、
前記第２のチャレンジ比較値と前記第２チャレンジとの比較に基づいて、前記第２の攪拌値と前記第２のレスポンスを出力した外部装置を認証する認証部と、
を含む付記２に記載の暗号処理装置。
（付記５）
さらに、
整数の乱数である第２のチャレンジを生成するチャレンジ生成部を含む暗号処理装置であって、
前記送信部は、前記攪拌値と前記レスポンスと前記第２チャレンジを出力し、
前記受信部は、暗号処理装置に接続された外部装置であって、前記送信部から出力された前記攪拌値と前記レスポンスと前記第２チャレンジを受け取り、受け取った前記攪拌値と、予め自身の不揮発性メモリに格納してある前記秘密鍵と同じ値でる第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値を生成し、前記秘密鍵比較値と前記チャレンジに前記暗号化関数を作用させて整数であるレスポンス比較値を生成し、さらに自身のメモリに格納してある整数である第２の攪拌値と前記秘密鍵に攪拌関数を作用させて第２の攪拌された秘密鍵を生成し、前記レスポンスと前記レスポンス比較値とを比較し、前記レスポンスと前記レスポンス比較値との比較の結果に基づいて前記攪拌値と前記レスポンスと前記第２チャレンジを出力した前記暗号処理装置が認証された場合に、前記第２の秘密鍵比較値と前記第２のチャレンジに暗号化関数を作用させて整数である第２のレスポンスを生成し、前記第２のレスポンスと前記第２の攪拌値を出力する外部装置から、前記第２のレスポンスと前記第２の攪拌値を受け、
前記鍵攪拌部は、前記秘密鍵と前記第２の攪拌値に攪拌関数を作用させて整数である第２の攪拌された秘密鍵を生成する暗号処理装置であって、
さらに、
前記第２の攪拌値と前記秘密鍵を前記暗号化に作用させて第２のレスポンス比較値を生成する暗号化部と、
前記第２のレスポンス前記第２のレスポンス比較値との比較に基づいて、前記第２のレスポンスと前記第２の攪拌値を出力した外部装置を認証する認証部と、
を含む付記３に記載の暗号処理装置。
（付記６）
前記鍵攪拌部は、不揮発性回路から構成される攪拌鍵格納部を含み、前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成し、前記攪拌鍵格納部に格納し、前記秘密鍵の更新の際には保持されている前記攪拌された秘密鍵に前記攪拌関数の逆関数である逆攪拌関数を作用させる、付記２乃至５のいずれか一項に記載の暗号処理装置。
（付記７）
前記鍵攪拌部は、不揮発性回路から構成される攪拌鍵格納部を含み、前記不揮発性回路に格納された前記攪拌された秘密鍵の読み出し処理は、前記攪拌された秘密鍵の全ビットを１サイクルで読み出しをする、付記２乃至６のいずれか一項に記載の暗号処理装置。
（付記８）
前記鍵攪拌部は、不揮発性回路から構成される攪拌鍵格納部を含み、前記攪拌鍵格納部への前記攪拌された秘密鍵の書き込み処理は、前記攪拌された秘密鍵の全ビットを１サイクルで読み出しをする、付記２乃至７のいずれか一項に記載の暗号処理装置。
（付記９）
前記鍵攪拌部は、前記不揮発性回路への書き込み処理および／または前記不揮発性回路から読み出し処理は、不揮発性フリップフロップを用いて行う、付記７または８に記載の暗号処理装置。
（付記１０）
前記鍵攪拌部において、前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成することは、入力値と出力値が以下のような性質：
（ＭＧＦ１）前記入力値が１ビットでも変化した場合、前記出力値の少なくとも複数のビットが変化する、
（ＭＧＦ２）前記出力値から前記入力値を求めることが出来ない、
（ＭＧＦ３）前記入力値と前記出力値のビット長を、任意に調整することができる、
を有するマスク生成関数（ＭＧＦ）を作用することを含む、付記６に記載の暗号処理装置。
（付記１１）
前記鍵攪拌部は、前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成することは、前記秘密鍵と前記攪拌値の上位半分ビットと下位半分ビットのビット結合に対して、入力値と出力値が以下のような性質：
（ＭＧＦ１）前記入力値が１ビットでも変化した場合、前記出力値の少なくとも複数のビットが変化する、
（ＭＧＦ２）前記出力値から前記入力値を求めることが出来ない、
（ＭＧＦ３）前記入力値と前記出力値のビット長を、任意に調整することができる、
を有するマスク生成関数（ＭＧＦ）を作用する、および排他的論理和（ＸＯＲ）演算を実行するマスク生成関数（ＭＧＦ）作用部を含む、付記６に記載の暗号装置。
（付記１２）
前記鍵攪拌部において、前記秘密鍵をマスク値によってマスク化するマスク処理部を含む、付記２乃至１１のいずれか一項に記載の暗号処理装置。
（付記１３）
前記鍵攪拌部において、前記マスク生成関数（ＭＧＦ）を作用することの前に、入力値と出力値が以下のような性質：
（事前複雑化１）前記入力値は、マスク化処理に用いられるマスク値、前記秘密鍵に対して前記マスク化処理を実行して得られるマスク化された秘密鍵、前記攪拌値である、
（事前複雑化２）前記入力値に対して、前記秘密鍵および前記攪拌値によって定まるビット転置処理を行う、
（事前複雑化３）前記出力値は、前記秘密鍵および前記攪拌値にのみ依存する、
を有する事前複雑化処理を行うＭＧＦ事前複雑化処理部を含む、付記１２に記載の暗号処理装置。
（付記１４）
前記ＭＧＦ事前複雑化処理部において、前記事前複雑化処理は、以下の性質：
（スワッピングボックス１）多数のスワッピングボックスを直列に繋いだ場合のビット転置の結果と、１個のスワッピングボックスのセレクタ信号に対して前述のスワッピングボックスの各セレクタ信号の全ての値排他的論理和（ＸＯＲ）演算した値を入力した結果が同じ、
を有するＸＯＲ型スワッピングボックスを用いて行う、付記１３に記載の暗号処理装置。
（付記１５）
前記ＭＧＦ事前複雑化処理部において、前記事前複雑化処理を行う前記ＸＯＲ型スワッピングボックスと、線形シフトフィードバック処理を行う線形帰還シフトレジスタを含み、前記事前複雑化処理の後に線形シフトフィードバック処理を行う、付記１３に記載の暗号処理装置。
（付記１６）
前記ＭＧＦ事前複雑化処理部において、前記事前複雑化処理を行う前記ＸＯＲ型スワッピングボックスと、線形シフトフィードバック処理を行う線形帰還シフトレジスタを含み、前記事前複雑化処理の後に線形シフトフィードバック処理を行う複数の構成とＸＯＲゲートを含み、前記複数の構成の出力に対して排他的論理和（ＸＯＲ）演算を行う、付記１３に記載の暗号処理装置。
（付記１７）
前記ＭＧＦ事前複雑化処理部において、前記事前複雑化処理は、以下の性質：
（スワッピングボックス２）多数のスワッピングボックスを直列に繋いだ場合のビット転置の結果と、１個のスワッピングボックスのセレクタ信号に対して前述のスワッピングボックスの各セレクタ信号の全ての値を加算した値を入力した結果が同じとなる、
を有する加算型スワッピングボックスを用いて行うＭＧＦ事前複雑化処理部を含む、付記１３に記載の暗号処理装置。
（付記１８）
攪拌値更新部前記攪拌値を更新することは、前記暗号処理装置が稼動している間は、常に行われる、付記１乃至１８のいずれか一項に記載の暗号処理装置。
（付記１９）
入力として整数の乱数であるチャレンジを受けることと、
整数である秘密鍵と整数である攪拌値に攪拌関数を作用させて整数である攪拌された秘密鍵を生成することと、
前記攪拌された秘密鍵を用いて前記チャレンジに暗号化関数を作用させて整数であるレスポンスを生成することと、
前記攪拌値を更新することと、
前記攪拌値と前記レスポンスを出力することと、
を含む暗号処理方法。
（付記２０）
前記攪拌値と前記レスポンスが受け取られ、受け取られた前記攪拌値と前記秘密鍵と同じ値である第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値が生成され、前記秘密鍵比較値と前記レスポンスを前記暗号化関数の逆関数である復号関数に作用させてチャレンジ比較値が生成され、前記チャレンジと前記チャレンジ比較値が比較され、前記チャレンジと前記チャレンジ比較値の比較の結果に基づいて認証を受けること、
を含む、付記１９に記載の暗号処理方法。（付記２１）
前記攪拌値と前記レスポンスを受け取られ、受け取られた前記攪拌値と前記秘密鍵と同じ値である第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値が生成され、前記秘密鍵比較値と前記レスポンスに暗号化関数を作用させてチャレンジ比較値が生成され、前記チャレンジと前記チャレンジ比較値が比較され、前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて認証を受けること、
を含む、付記１９に記載の暗号処理方法。
（付記２２）
さらに、整数の乱数である第２のチャレンジを生成することを含み、
前記攪拌値と前記レスポンスを出力すること前記攪拌値と前記レスポンスに加え、前記第２チャレンジを出力しする暗号処理方法であって、
さらに、
前記攪拌値と前記レスポンスと前記第２チャレンジが受け取られ、受け取られた前記攪拌値と前記秘密鍵と同じ値である第２の秘密鍵とに攪拌関数を作用させて整数である秘密鍵比較値が生成され、前記秘密鍵比較値と前記レスポンスを前記暗号化関数の逆関数である復号関数に作用させてチャレンジ比較値が生成され、さらに整数である第２の攪拌値と前記秘密鍵に攪拌関数を作用させて第２の秘密鍵比較値が生成され、前記チャレンジと前記チャレンジ比較値が比較され、前記前記チャレンジと前記チャレンジ比較値との比較の結果に基づいて認証を受けた場合に、前記第２の秘密鍵比較値と前記第２のチャレンジに暗号化関数を作用させて整数である第２のレスポンスが生成され、前記第２の攪拌値と前記第２のレスポンスが出力されたことに応答して、前記第２の攪拌値と前記第２のレスポンスを受けることと、
前記秘密鍵と前記第２の攪拌値に攪拌関数を作用させて整数である第２の攪拌された秘密鍵を生成することと、
前記第２の攪拌された秘密鍵と前記第２のレスポンスを前記暗号化関数の逆関数である復号関数に作用させて第２のチャレンジ比較値を生成することと、
前記第２のチャレンジ比較値と前記第２チャレンジとを比較することと、
前記第２のチャレンジ比較値と前記第２チャレンジとの比較に基づいて、認証を行うことと、
を含む付記２０に記載の暗号処理方法。
（付記２３）
さらに、乱数である第２のチャレンジを生成することを含み、
前記攪拌値と前記レスポンスを出力することは、さらに前記攪拌値と前記レスポンスに加え、前記第２チャレンジを出力しする暗号処理方法であって、
前記攪拌値と前記レスポンスと前記第２チャレンジが受け取られ、受け取られた前記攪拌値と、前記秘密鍵と同じ値である第２の秘密鍵に攪拌関数を作用させて整数である秘密鍵比較値が生成され、前記秘密鍵比較値と前記チャレンジに前記暗号化関数を作用させてレスポンス比較値が生成され、さらに整数である第２の攪拌値と前記秘密鍵に攪拌関数を作用させて整数である第２の攪拌された秘密鍵が生成され、前記レスポンスと前記レスポンス比較値とが比較され、前記レスポンスと前記レスポンス比較値との比較の結果に基づいて認証を受けた場合に、前記第２の秘密鍵比較値と前記第２のチャレンジに暗号化関数を作用させて整数である第２のレスポンスが生成され、前記第２のレスポンスと前記第２の攪拌値が出力されることに応答して、前記第２のレスポンスと前記第２の攪拌値を受けることと、
前記秘密鍵と前記第２の攪拌値に攪拌関数を作用させて整数である第２の攪拌された秘密鍵を生成することと、
前記第２の攪拌値と前記秘密鍵を前記暗号化に作用させて第２のレスポンス比較値値を生成することと、
前記第２のレスポンス前記第２のレスポンス比較値とを比較することと、
前記第２のレスポンス前記第２のレスポンス比較値との比較の結果に基づいて認証を行うことと、
を含む付記２１に記載の暗号処理方法。
（付記２４）
整数である秘密鍵と整数である攪拌値に攪拌関数を作用させて整数である攪拌された秘密鍵を生成すること
前記秘密鍵と前記攪拌値に前記攪拌関数を作用させて前記攪拌された秘密鍵を生成することと、
前記攪拌された秘密鍵を格納することと、
前記秘密鍵の更新の際には前記攪拌された秘密鍵に前記攪拌関数の逆関数である逆攪拌関数を作用させること、
を含む付記２０乃至２３のいずれか一項に記載の暗号処理方法。
（付記２５）
攪拌された秘密鍵を生成すること前記攪拌された秘密鍵の読み出し処理は、前記攪拌された秘密鍵の全ビットを１サイクルで読み出しをすることを含む、付記１９乃至２３のいずれか一項に記載の暗号処理方法。
（付記２６）
攪拌された秘密鍵を生成すること前記攪拌された秘密鍵の書き込み処理は、前記攪拌された秘密鍵の全ビットを１サイクルで読み出しをすることを含む、付記１９乃至２４のいずれか一項に記載の暗号処理方法。
（付記２７）
前記攪拌された秘密鍵を生成することは、入力値と出力値が以下のような性質：
（ＭＧＦ１）前記入力値が１ビットでも変化した場合、前記出力値の少なくとも複数のビットが変化する、
（ＭＧＦ２）前記出力値から前記入力値を求めることが出来ない、
（ＭＧＦ３）前記入力値と前記出力値のビット長を、任意に調整することができる、
を有するマスク生成関数（ＭＧＦ）を作用することを含む、付記２４に記載の暗号処理方法。
（付記２８）
前記攪拌された秘密鍵を生成することは、前記秘密鍵と前記攪拌値のビット結合の上位半分ビットと下位半分ビットに対して、入力値と出力値が以下のような性質：
（ＭＧＦ１）前記入力値が１ビットでも変化した場合、前記出力値の少なくとも複数のビットが変化する、
（ＭＧＦ２）前記出力値から前記入力値を求めることが出来ない、
（ＭＧＦ３）前記入力値と前記出力値のビット長を、任意に調整することができる、
を有するマスク生成関数（ＭＧＦ）を作用すること、および排他的論理和（ＸＯＲ）演算を実行することを含む、付記２４に記載の暗号処理方法。
（付記２９）
さらに、前記秘密鍵をマスク値を用いてマスク化することを含む、付記２０乃至２８のいずれか一項に記載の暗号処理方法。
（付記３０）
前記マスク生成関数（ＭＧＦ）を作用することの前に、入力値と出力値が以下のような性質：
（事前複雑化１）前記入力値は、マスク化処理に用いられるマスク値、前記秘密鍵に対して前記マスク化処理を実行して得られるマスク化された秘密鍵、前記攪拌値である、
（事前複雑化２）前記入力値に対して、前記秘密鍵および前記攪拌値によって定まるビット転置処理を行う、
（事前複雑化３）前記出力値は、前記秘密鍵および前記攪拌値にのみ依存する、
を有する事前複雑化処理を行うことを含む、付記２８に記載の暗号処理方法。
（付記３１）
前記事前複雑化処理の後、線形シフトフィードバック処理を行うことを含む、付記３０に記載の暗号処理方法。
（付記３２）
ビット転置を行うことを繰り返し行うことによって前記事前複雑化処理を行うことと、線形シフトフィードバック処理を行うこと、を並列に行い複数の出力を得ることと、
前記複数の出力に対して排他的論理和（ＸＯＲ）演算を行うことと、
を含む付記３１に記載の暗号処理方法。
（付記３３）
さらに、
攪拌値更新部前記攪拌値を更新することは、前記暗号処理装置が稼動している間、常に行うこと
を含む、付記２０乃至３２のいずれか一項に記載の暗号処理装置。
【符号の説明】
【０２９６】
１０１、１００１  親機
１０２、１００２  子機
１０３  不揮発性メモリ
１０４  センサ
１０５  マイクロプローバー
１０６（１０６ａ、１０６ｂ、１０６ｃ）、１０６’（１０６ａ’、１０６ｂ、１０６ｃ）  内部回路
２０００、２３００、３４００、３８００、７１００、８０００、８７００、９５００  ラッピング部
２００２  メモリ
２００４  攪拌関数作用部
２１００、２４００、３５００、３９００、７２００、８１００、８９００、９６００  鍵記憶部（不揮発性回路）
２２００、２５００、３６００、４０００、７３００、８２００、９０００、９７００  アンラッピング部
４１００、４２００、４３００、４４００  入力セット
４１０２、４２０２、４３０２、４４０２，７４００、７６００、８３００、９１００  ＭＧＦ事前複雑化処理部
４１０４、４２０４、４３０４、４４０４  ＭＧＦ事前複雑化処理結果
４１０６、４２０６、４３０６  マスク生成関数（ＭＧＦ）作用部
４５００、４５０２、４５０４  スワッピングボックス
４６００、４７００、４７０２、４７０４、４７０６、４７０８、４７１０、４７１２、４８０２、４８０４、４８０６  １ビットスワッピングボックス
４８００  ２ビットスワッピングボックス
４９００  切り替え器
５００２、５００４、５００６、５２００、５４０２、５４０４、５４０６、５７０２、５７０４、５７０６、６１０２、６１０４、６１０６、６５００  Ｔビットスワッピングボックス
５５００、５８００、６２００  線形シフトフィードバック
６３０２、６３０４、６３０６、６４００  加算スワッピングボックス
７５００、８４００、９２００  マスク処理部
７５００、８５００、９２００  アンマスク処理部
【図２】
2014033324.tif 000004
【図３】
2014033324.tif 000005
【図４】
2014033324.tif 000006
【図５】
2014033324.tif 000007
【図１０】
2014033324.tif 000008
【図１１】
2014033324.tif 000009
【図１２】
2014033324.tif 000010
【図１３】
2014033324.tif 000011
【図１４】
2014033324.tif 000012
【図１５】
2014033324.tif 000013
【図１６】
2014033324.tif 000014
【図１７】
2014033324.tif 000015
【図１８】
2014033324.tif 000016
【図１９】
2014033324.tif 000017
【図２０】
2014033324.tif 000018
【図２１】
2014033324.tif 000019
【図２２】
2014033324.tif 000020
【図２３】
2014033324.tif 000021
【図２４】
2014033324.tif 000022
【図２５Ａ】
2014033324.tif 000023
【図２５Ｂ】
2014033324.tif 000024
【図２６】
2014033324.tif 000025
【図２７】
2014033324.tif 000026
【図２８Ａ】
2014033324.tif 000027
【図２８Ｂ】
2014033324.tif 000028
【図２８Ｃ】
2014033324.tif 000029
【図２８Ｄ】
2014033324.tif 000030
【図３０】
2014033324.tif 000031
【図３１Ａ】
2014033324.tif 000032
【図３１Ｂ】
2014033324.tif 000033
【図３２】
2014033324.tif 000034
【図３３】
2014033324.tif 000035
【図３４Ａ】
2014033324.tif 000036
【図３４Ｂ】
2014033324.tif 000037
【図３５】
2014033324.tif 000038
【図３６】
2014033324.tif 000039
【図３７】
2014033324.tif 000040
【図３８Ａ】
2014033324.tif 000041
【図３８Ｂ】
2014033324.tif 000042
【図３９】
2014033324.tif 000043
【図４０】
2014033324.tif 000044
【図４１】
2014033324.tif 000045
【図４２Ａ】
2014033324.tif 000046
【図４２Ｂ】
2014033324.tif 000047
【図４３】
2014033324.tif 000048
【図４４】
2014033324.tif 000049
【図４５Ａ】
2014033324.tif 000050
【図４５Ｂ】
2014033324.tif 000051
【図４６】
2014033324.tif 000052
【図１】
2014033324.tif 000053
【図６】
2014033324.tif 000054
【図７Ａ】
2014033324.tif 000055
【図７Ｂ】
2014033324.tif 000056
【図７Ｃ】
2014033324.tif 000057
【図７Ｄ】
2014033324.tif 000058
【図８】
2014033324.tif 000059
【図９】
2014033324.tif 000060
【図２９】
2014033324.tif 000061