以下、本発明をその実施の形態を示す図面に基づいて説明する。図1は本実施の形態のIoTデバイス100の構成の一例を示す模式図である。IoTデバイス100は、実装対象となっているデバイスであり、例えば、RTOS(Real Time Operating System)やLinux(登録商標)等が動作する組み込みボードなどを含む。IoTデバイスは、例えば、OSを搭載して独立動作をすることができるデバイス(電子デバイスとも称する)であり、「モノのインターネット」(IoT)でいうところの「モノ」に該当するデバイスである。IoTデバイス100は、内部にSoC(System on Chip)50、及びセキュアエレメント60を有する。
SoC50は、IoTデバイス100の主要な機能を保持するICチップである。SoC50は、ROM51、NVM(Non-volatile memory)(TEE:Trusted Execution Environment)52、NVM(REE:Rich Execution Environment)53、RAM(TEE)54、及びRAM(REE)55を有する。
セキュアエレメント60は、耐タンパ性を有するセキュリティチップであり、内部にCPU、NVM(Non-volatile memory)を有し、セキュアな不揮発性メモリを有する。セキュアエレメント60は、SoC50との間で、標準的な通信路(例えば、ISO7816/SPI/I2C等)で通信を行う。
鍵管理サーバ200は、各セキュアエレメントにおける鍵共有情報を個別管理するサーバである。
ROM51には、デバイスIDが保存されている。デバイスIDは、IoTデバイスを固体識別するためのIDである。セキュアエレメント60とIoTデバイス100との紐付けをするために用いられる。本実施の形態において、デバイスIDの一意性は問われないが、IoTデバイス100とセキュアエレメント60との紐付けを十分に得るためには、IoTデバイス製造者内、または全世界で一意であり、かつ書き換え不可能であることが望ましい。
NVM(TEE)52には、前回生成値21、非対称鍵ペア生成機能41、生成値復号機能42、生成値署名検証機能43、及び鍵派生機能44が保存されている。
前回生成値21は、セキュアエレメント60が前回出力した生成値である。
非対称鍵ペア生成機能41は、IoTデバイス100側(デバイス本体)で非対称鍵暗号の鍵ペアを生成する機能である。
生成値復号機能42は、セキュアエレメント60が返送した生成値が暗号化されている場合、復号する機能である。
生成値署名検証機能43は、セキュアエレメント60が返送した生成値に署名が施されている場合、署名検証を行って生成値の正当性を確認する機能である。
鍵派生機能44は、セキュアエレメント60が生成した生成値から派生鍵値を派生させる機能である。
前回生成値21、非対称鍵ペア生成機能41、生成値復号機能42、生成値署名検証機能43、及び鍵派生機能44は、ROM51上に存在していてもよいが、鍵派生を1回のみ行う場合は、鍵派生後にNVM(TEE)52から削除することで、リプレイアタックや解析の防止等、一定の効果が得られるため、本実施の形態では、NVM(TEE)52に配置している。なお、NVMがセキュアな領域(TEE)を有していない場合、前回生成値21、非対称鍵ペア生成機能41、生成値復号機能42、生成値署名検証機能43、及び鍵派生機能44は、NVM(REE)53に配置してもよい。
RAM(TEE)54には、生成値22、派生鍵値23、生成値暗号鍵24、生成値復号鍵25、及び生成値署名検証鍵26が保存されている。
生成値22は、セキュアエレメント60が返送した、鍵共有に使用する値である。
派生鍵値23は、生成値22から派生された派生鍵の値である。IoTデバイス100がセキュアエレメント60と共有する鍵値である。
生成値暗号鍵24は、生成値22を暗号化授受する際に、セキュアエレメント60側で暗号化に用いる非対称鍵である。生成値暗号鍵24は、IoTデバイス100側で生成される。
生成値復号鍵25は、生成値22を暗号化授受する際に、IoTデバイス100側で復号に用いる非対称鍵である。生成値復号鍵25は、IoTデバイス100側で生成される。
生成値署名検証鍵26は、セキュアエレメント60が返送した生成値に署名が施されている場合、署名検証に用いる非対称鍵である。生成値署名検証鍵26は、セキュアエレメント60側の生成値署名鍵27と対向する非対称鍵である。
本実施の形態では、生成値の署名検証と暗号化の両方において非対称鍵の利用を想定している。なお、RAMがセキュアな領域(TEE)を有していない場合、生成値22、派生鍵値23、生成値暗号鍵24、生成値復号鍵25、及び生成値署名検証鍵26は、RAM(REE)55に保存してもよい。
セキュアエレメント60は、SEID、OTP(ワンタイムパスワード)、OTPカウンタ、OTP生成鍵、生成値22、派生鍵値23、生成値暗号鍵24、生成値署名鍵27、及び生成値署名検証鍵26などのデータを保持する。
SEIDは、セキュアエレメント60を一意識別するIDである。鍵管理サーバ200が、セキュアエレメント60を特定するための値として用いることができる。
OTPは、セキュアエレメント60内で保持するワンタイムパスワードである。
OTPカウンタは、セキュアエレメント60がOTP入力と生成値の出力を、あと何回行えるかを保持するカウンタである。OTP入力時にOTPカウンタが0の場合は、セキュアエレメント60は生成値を出力できない。
OTP生成鍵は、OTPの値をセキュアエレメント60内部で生成、または検証する際に使用する鍵値である。
生成値22は、セキュアエレメント60が鍵共有のために生成し、IoTデバイス100に出力する値である。
派生鍵値23は、生成値22から派生された派生鍵の値である。派生鍵値23は、IoTデバイス100と共有する鍵値である。
生成値暗号鍵24は、生成値22を外部出力する際、暗号化を行う際に使用する鍵である。生成値暗号鍵24は、IoTデバイス100から受信して用いる。
生成値署名鍵27は、生成値22を外部出力する際、署名を付加する際に使用する非対称鍵である。
生成値署名検証鍵26は、セキュアエレメント60が返送した生成値に署名が施されている場合、署名検証に用いる非対称鍵である。生成値署名検証鍵28は、生成値署名鍵27と対向する非対称鍵である。なお、本実施の形態では、生成値署名検証鍵26は、セキュアエレメント60からIoTデバイス100に出力する運用を想定している。
本実施の形態では、OTPカウンタ値をOTP試行回数とOTP生成回数の上限として共通使用しているが、ユーザによる試行失敗をある程度許容するため、OTP試行回数とOTP生成回数を分けて管理し、試行回数の上限を複数回としてもよい。
また、セキュアエレメント60は、OTP生成機能61、OTP検証機能62、生成値出力機能63、生成値暗号化機能64、生成値署名生成機能65、鍵派生機能66、及び秘匿通信機能67を備える。
OTP検証機能62は、外部から入力されたOTPの値とセキュアエレメント60内部のOTPの値を比較する機能である。
OTP生成機能61は、IoTデバイスと紐付くOTPが入力された際、セキュアエレメント60内でOTPを再計算する機能である。
生成値出力機能63は、鍵派生元となる生成値22を生成し、IoTデバイス100側(デバイス本体)に出力する機能である。
鍵派生機能66は、生成値22から派生鍵値(鍵値)23を派生する機能である。
生成値暗号化機能64は、生成値暗号鍵24を使用して生成値22の暗号化を行う機能である。
生成値署名生成機能65は、生成値署名鍵27(秘密鍵)を使用して、生成値22に署名を付加する機能である。署名は、送信内容が改ざんされたとき、受信者が改ざんされたことを分かるようにする技術である。一般的には、送信者は、データをハッシュ化してダイジェストを生成し、生成したダイジェストを秘密鍵で暗号化することで署名を生成する。送信者はデータと一緒に署名を送信する。受信者は、データと署名を受信し、データをハッシュ化してダイジェストを生成する。受信者は署名を公開鍵で復号してダイジェストを得る。2つのダイジェストを比較して一致・不一致を判定する。両者が一致していれば、データが改ざんされていないことを確認できる。
秘匿通信機能67は、セキュアエレメント60が鍵管理サーバ200と秘匿通信を行うための機能である。
鍵管理サーバ200は、OTPテーブル201、OTP生成機能202、及び秘匿通信機能203を備える。
OTPテーブル201は、SEIDごとに、当該SEIDのセキュアエレメント60に格納されているOTP値とOTP生成鍵とを対応付けて保持するデータベースである。
OTP生成機能202は、OTPの生成要求を受けた際に、OTP値を再生成する機能である。
秘匿通信機能203は、鍵管理サーバ200がセキュアエレメント60と秘匿通信を行うための機能である。
次に、本実施の形態のIoTデバイス100の処理について説明する。まず、基本的な鍵共有の処理について説明する。
図2は基本的な鍵共有の流れの一例を示す説明図である。以下、符号P1〜P10で示す処理について説明する。
P1(OTPの受領):IoTデバイス100のユーザは、セキュアエレメント事業者(例えば、鍵管理サーバ200の提供や運用を行うことができる)から、保持するIoTデバイス100内のセキュアエレメント60用のOTPを受領する。
P2(IoTデバイスへのOTP入力):IoTデバイス100のユーザは、IoTデバイス100に対しOTPを入力する。
P3(セキュアエレメントへの送信):IoTデバイス100は、ユーザから入力されたOTPをセキュアエレメント60に送信する。
P4(OTPカウンタ値の検証):セキュアエレメント60は、OTPを受信し、自身が持つOTPカウンタをチェックし、カウンタ値が1以上であることを確認する。カウンタ値が0の場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P5(OTPカウンタの減算):セキュアエレメント60は、OTPカウンタ値を1だけ減算する。本実施例では、1回だけOTPによる鍵生成を許可しているので、カウンタ値は1から0となる。
P6(OTPの検証):セキュアエレメント60は、受信したOTPを自身が保持するOTPと比較する。本実施例では、両者の一致比較のみを行う。両者が一致しない場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P7(生成値の出力):受信したOTPとセキュアエレメント60が保持するOTPとが一致した場合(検証が成功した場合)、セキュアエレメント60は、生成値の生成、及び生成した生成値の出力を行う。本実施例では、生成値には特段の規則性はなく、例えば、セキュアエレメント60内の乱数生成器で生成した乱数を生成値として用いることができる。
P8(IoTデバイスへの返送):セキュアエレメント60は、生成値をIoTデバイス100に返送する。IoTデバイス100は、生成値をRAM(TEE)54に保存する。
P9(派生鍵値の派生):IoTデバイス100は、生成値を鍵派生機能44に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。セキュアエレメント60も、同様に、生成値を鍵派生機能66に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。これにより、IoTデバイス100とセキュアエレメント60は、同一の派生鍵値を得ることができる。
P10(セキュアチャネルの開設):IoTデバイス100とセキュアエレメント60は、派生鍵値を元にセキュアチャネルを開設し、秘匿通信を行う。
生成値からの鍵派生アルゴリズムについては、IoTデバイス100及びセキュアエレメント60間でアルゴリズムの合意ができていれば、いかなるアルゴリズムを使用してもよい。例えば、生成値に対してSHA−256等の一方向ハッシュ関数を使う等、種々の方法を用いることができる。
ある特定のIoTデバイスに対して、特定のセキュアエレメントのみを紐付けたい場合、OTPの生成と検証の方式を変更することで、これを実現することができる。具体的には、セキュアエレメント事業者によってIoTデバイスのデバイスIDが紐付くOTPを生成すると同時に、セキュアエレメント内部でも同様の生成を行って、入力と比較することで、特定のデバイスIDを入力としない限り、生成値を出力しないようにすることができる。以下に具体例を示す。
図3はデバイスIDに紐付いたOTPの入力の一例を示す説明図である。以下、符号P21〜P32で示す処理について説明する。
P21(デバイスIDとSEIDの送付):IoTデバイス100のユーザは、IoTデバイス100のデバイスID(図の例では、Dev000003)と、セキュアエレメント60のSEID(図の例では、SEID:00000001)をセキュアエレメント事業者に連絡する。
P22(IoTデバイスと紐付くOTPの生成):セキュアエレメント事業者は、受領したデバイスIDと、セキュアエレメント60に紐付くOTP生成鍵(図の例では、11223344)から、新たなOTP(図の例では、DEXXXXXX)を生成する。
P23(OTPの受領):IoTデバイス100のユーザは、セキュアエレメント事業者(鍵管理サーバ200)から、新たなOTP(図の例では、DEXXXXXX)を受領する。
P24(セキュアエレメントへの送信):IoTデバイス100は、ユーザから入力されたOTPと、IoTデバイス100のデバイスIDをセキュアエレメント60に送信する。
P25(OTPカウンタ値の検証):セキュアエレメント60は、OTPを受信し、自身が持つOTPカウンタをチェックし、カウンタ値が1以上であることを確認する。カウンタ値が0の場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P26(OTPカウンタの減算):セキュアエレメント60は、OTPカウンタ値を1だけ減算する。本実施例では、1回だけOTPによる鍵生成を許可しているので、カウンタ値は1から0となる。
P27(OTPの生成):セキュアエレメント60は、自身のOTP生成機能61により、OTP生成鍵(図の例では、11223344)と受信したデバイスIDから、比較対象となるOTP(図の例では、DEXXXXXX)を生成する。
P28(OTPの検証):セキュアエレメント60は、受信したOTPと、生成したOTPを比較する。本実施例では、両者の一致比較のみを行う。両者が一致しない場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P29(生成値の出力):受信したOTPとセキュアエレメント60が生成したOTPとが一致した場合(検証が成功した場合)、セキュアエレメント60は、生成値の生成、及び生成した生成値の出力を行う。本実施例では、生成値には特段の規則性はなく、例えば、セキュアエレメント60内の乱数生成器で生成した乱数を生成値として用いることができる。
P30(IoTデバイスへの返送):セキュアエレメント60は、生成値をIoTデバイス100に返送する。IoTデバイス100は、生成値をRAM(TEE)54に保存する。
P31(派生鍵値の派生):IoTデバイス100は、生成値を鍵派生機能44に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。セキュアエレメント60も、同様に、生成値を鍵派生機能66に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。これにより、IoTデバイス100とセキュアエレメント60は、同一の派生鍵値を得ることができる。
P32(セキュアチャネルの開設):IoTデバイス100とセキュアエレメント60は、派生鍵値を元にセキュアチャネルを開設し、秘匿通信を行う。
上述の例では、セキュアエレメント60内で比較対象となるOTPを動的に生成するため、予め記録されているOTPは使用しない。また、任意の値でOTPが更新されることを防止するため、OTPの更新も行わない。
OTPの生成アルゴリズムについては、種々の方法を用いることができる。例えば、鍵付きハッシュ(HMAC−SHA256等)を用い、デバイスIDを入力としてOTP生成鍵により鍵付きハッシュを生成することで、第三者によるOTP生成を防止しつつ、デバイスIDの成分をOTPに入れることが可能となる。
上述の例では、IoTデバイス100のユーザがセキュアエレメント事業者にデバイスIDとセキュアエレメントのSEIDを通知した上で、セキュアエレメント事業者が新たなOTPを生成し、OTPを共有している。これにより、デバイス初回起動時などの任意のタイミングで鍵共有シーケンスを開始することができる。また、例えば、デバイス製造時に、デバイスIDとセキュアエレメントの紐付けを事前に行えるのであれば、ユーザによる、デバイスIDとセキュアエレメントのSEIDの通知は不要であり、予めデバイスIDを元にOTPを生成して共有してもよい。
上述のように、本実施の形態によれば、IoTデバイスとセキュアエレメントの紐付け方法を確保しつつ、紐付けを任意のタイミングで柔軟に行うことができる。
上述の例では、IoTデバイス100及びセキュアエレメント60の両者とも、生成値を元に派生鍵値を派生させている。一方、第三者による、IoTデバイス100とセキュアエレメント60間の通信路傍受やメモリ解析の可能性がなく、IoTデバイス100側に鍵生成アルゴリズムを持たせられない場合、生成値をそのまま鍵値とする運用も可能である。以下、生成値をそのまま鍵値として使用する場合について説明する。
図4は鍵値の直接生成の一例を示す説明図である。以下、符号P41〜P49で示す処理について説明する。
P41(OTPの受領):IoTデバイス100のユーザは、セキュアエレメント事業者(鍵管理サーバ200)から、保持するIoTデバイス100内のセキュアエレメント60用のOTPを受領する。
P42(IoTデバイスへのOTP入力):IoTデバイス100のユーザは、IoTデバイス100に対しOTPを入力する。
P43(セキュアエレメントへの送信):IoTデバイス100は、ユーザから入力されたOTPをセキュアエレメント60に送信する。
P44(OTPカウンタ値の検証):セキュアエレメント60は、OTPを受信し、自身が持つOTPカウンタをチェックし、カウンタ値が1以上であることを確認する。カウンタ値が0の場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P45(OTPカウンタの減算):セキュアエレメント60は、OTPカウンタ値を1だけ減算する。本実施例では、1回だけOTPによる鍵生成を許可しているので、カウンタ値は1から0となる。
P46(OTPの検証):セキュアエレメント60は、受信したOTPを自身が保持するOTPと比較する。本実施例では、両者の一致比較のみを行う。両者が一致しない場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P47(生成値の出力):受信したOTPとセキュアエレメント60が保持するOTPとが一致した場合(検証が成功した場合)、セキュアエレメント60は、生成値の生成、及び生成した生成値の出力を行う。本実施例では、生成値には特段の規則性はなく、例えば、セキュアエレメント60内の乱数生成器で生成した乱数を生成値として用いることができる。
P48(IoTデバイスへの返送):セキュアエレメント60は、生成値をIoTデバイス100に返送する。IoTデバイス100は、生成値をRAM(TEE)54に保存する。
P49(セキュアチャネルの開設):IoTデバイス100とセキュアエレメント60は、生成値をそのまま鍵値としてセキュアチャネルを開設し、秘匿通信を行う。
上述の例において、生成値を乱数としつつ初回通信時の仮鍵として用い、セキュアチャネルの開設後、直ちにユーザの本番鍵に変更する等の対策を施すことにより、鍵交換時の状況を傍受できない攻撃者に対しては十分な備えとなる。
上述の例のように、平文での生成値授受がIoTデバイス100とセキュアエレメント60との間の通信路上で危殆化する恐れがある(傍受、改ざん等)場合、非対称鍵暗号の導入によって生成値を保護することができる。以下、生成値の保護について説明する。
図5は生成値の署名と暗号化の一例を示す説明図である。以下、符号P51〜P65で示す処理について説明する。
P51(OTPの受領):IoTデバイス100のユーザは、セキュアエレメント事業者(鍵管理サーバ200)から、保持するIoTデバイス100内のセキュアエレメント60用のOTPを受領する。
P52(IoTデバイスへのOTP入力):IoTデバイス100のユーザは、IoTデバイス100に対しOTPを入力する。
P53(IoTデバイス側非対称鍵ペア生成):IoTデバイス100は、自身の非対称鍵ペア生成機能41を用いて、非対称鍵暗号の鍵ペア(生成値暗号鍵24と生成値復号鍵25)を生成する。
P54(セキュアエレメントへの送信):IoTデバイス100は、ユーザから入力されたOTP、生成した生成値暗号鍵24をセキュアエレメント60に送信する。
P55(OTPカウンタ値の検証):セキュアエレメント60は、OTP及び生成値暗号鍵24を受信し、自身が持つOTPカウンタをチェックし、カウンタ値が1以上であることを確認する。カウンタ値が0の場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P56(OTPカウンタの減算):セキュアエレメント60は、OTPカウンタ値を1だけ減算する。本実施例では、1回だけOTPによる鍵生成を許可しているので、カウンタ値は1から0となる。
P57(OTPの検証):セキュアエレメント60は、受信したOTPを自身が保持するOTPと比較する。本実施例では、両者の一致比較のみを行う。両者が一致しない場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P58(生成値の出力):受信したOTPとセキュアエレメント60が保持するOTPとが一致した場合(検証が成功した場合)、セキュアエレメント60は、生成値の生成、及び生成した生成値の出力を行う。本実施例では、生成値には特段の規則性はなく、例えば、セキュアエレメント60内の乱数生成器で生成した乱数を生成値として用いることができる。
P59(生成値に対する署名生成):セキュアエレメント60は、生成値に対して自身の生成値署名鍵27で署名を行う。本実施例では、例えば、生成値のハッシュに対して生成値署名鍵27による暗号演算を行う。この署名値に、生成値署名鍵27に対向する生成値署名検証鍵26を添付し、生成値証明書を生成する。
P60(生成値の暗号化):セキュアエレメント60は、生成値に対して、IoTデバイス100から受信した生成値暗号鍵24で暗号化を行う。
P61(IoTデバイスへの返送):セキュアエレメント60は、暗号化生成値と生成値証明書をIoTデバイス100に返送する。IoTデバイス100は、受信した暗号化生成値と生成値証明書をRAM(TEE)54に保存する。
P62(生成値の復号):IoTデバイス100は、自身の非対称鍵ペア生成機能41を用いて生成した生成値復号鍵25を用いて生成値の復号を行い、平文の生成値を得る。
P63(生成値に対する署名検証):IoTデバイス100は、復号した生成値と生成値証明書の比較を行う。本実施例では、生成値証明書内の署名を生成値署名検証鍵26で復号し、生成値に対するハッシュ演算結果と一致するか比較する。両者が不一致の場合、署名検証が失敗したとみなし、ここで処理を終了する。
P64(派生鍵値の派生):IoTデバイス100は、生成値を鍵派生機能44に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。セキュアエレメント60も、同様に、生成値を鍵派生機能66に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。これにより、IoTデバイス100とセキュアエレメント60は、同一の派生鍵値を得ることができる。
P65(セキュアチャネルの開設):IoTデバイス100とセキュアエレメント60は、派生鍵値を元にセキュアチャネルを開設し、秘匿通信を行う。
上述の例において、生成値署名鍵27と生成値署名検証鍵26が非対称鍵として対応関係にあり、生成値署名鍵27が秘密鍵であり、生成値署名検証鍵26が公開鍵である。
上述の例では、IoTデバイス100は、セキュアエレメント60が返送する生成値証明書内から生成値署名検証鍵26を取得しているが、生成値署名検証鍵26を、セキュアエレメント事業者のサーバ等、別途外部から取得してもよい。また、生成値署名検証鍵26に対し、CA(認証局)による署名を行うことで、検証をTrust Chainに組み込むことも可能である。
本実施例では、生成値暗号鍵24と生成値復号鍵25が対応関係にあり、生成値暗号鍵24が公開鍵であり、生成値復号鍵25が秘密鍵である。通信路上で授受されるのは生成値暗号鍵24だけだが、生成値暗号鍵24だけでは暗号化された生成値を復号できないため、通信路上での生成値の秘匿性が確保される。
上述の例では、OTPによる生成値出力を1回のみとする方法であったが、複数回の生成値出力を可能にすることで、IoTデバイス100とセキュアエレメント60の紐付けを都度確認することができる。以下、初回鍵共有時と、2回目以降の鍵共有時の処理を説明する。なお、派生鍵値は、電源遮断時に明示的に消去されるものとする。
図6は初回の生成値のチェイニングの一例を示す説明図である。以下、符号P71〜P82で示す処理について説明する。
P71(OTPの受領):IoTデバイス100のユーザは、セキュアエレメント事業者(鍵管理サーバ200)から、保持するIoTデバイス100内のセキュアエレメント60用のOTPを受領する。
P72(IoTデバイスへのOTP入力):IoTデバイス100のユーザは、IoTデバイス100に対しOTPを入力する。
P73(セキュアエレメントへの送信):IoTデバイス100は、ユーザから入力されたOTPをセキュアエレメント60に送信する。
P74(OTPカウンタ値の検証):セキュアエレメント60は、OTPを受信し、自身が持つOTPカウンタをチェックし、カウンタ値が1以上であることを確認する。カウンタ値が0の場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。カウンタ値が1以上の場合は、カウンタ値から1を減算する。
P75(OTPの検証):セキュアエレメント60は、受信したOTPを自身が保持するOTPと比較する。本実施例では、両者の一致比較のみを行う。両者が一致しない場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P76(カウンタ値の更新):受信したOTPとセキュアエレメント60が保持するOTPとが一致した場合(検証が成功した場合)、セキュアエレメント60は、自身が持つOTPカウンタに1を加算する。
P77(生成値の出力):セキュアエレメント60は、生成値の生成、及び生成した生成値の出力を行う。本実施例では、生成値には特段の規則性はなく、例えば、セキュアエレメント60内の乱数生成器で生成した乱数を生成値として用いることができる。
P78(OTPの更新):セキュアエレメント60は、OTPの値(図の例では、XXXXXXXX)を生成値(図の例では、87654321)で更新する。
P79(IoTデバイスへの返送):セキュアエレメント60は、生成値をIoTデバイス100に返送する。IoTデバイス100は、生成値をRAM(TEE)54に保存する。
P80(生成値の保存):IoTデバイス100は、生成値を前回生成値として、NVM(TEE)52に保存する。
P81(派生鍵値の派生):IoTデバイス100は、生成値を鍵派生機能44に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。セキュアエレメント60も、同様に、生成値を鍵派生機能66に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。これにより、IoTデバイス100とセキュアエレメント60は、同一の派生鍵値を得ることができる。
P82(セキュアチャネルの開設):IoTデバイス100とセキュアエレメント60は、派生鍵値を元にセキュアチャネルを開設し、秘匿通信を行う。
図7は2回目以降の生成値のチェイニングの一例を示す説明図である。以下、符号P91〜P102で示す処理について説明する。
P91(電源投入):IoTデバイス100のユーザは、IoTデバイス100の電源を投入する。
P92(前回生成値のOTP入力):IoTデバイス100は、NVM(TEE)52に保存されている前回生成値をOTPとして取り扱う。
P93(セキュアエレメントへの送信):IoTデバイス100は、前回生成値をOTPとしてセキュアエレメント60に送信する。
P94(OTPカウンタ値の検証):セキュアエレメント60は、OTPを受信し、自身が持つOTPカウンタをチェックし、カウンタ値が1以上であることを確認する。カウンタ値が0の場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。カウンタ値が1以上の場合は、カウンタ値から1を減算する。
P95(OTPの検証):セキュアエレメント60は、受信したOTPを自身が保持するOTPと比較する。本実施例では、両者の一致比較のみを行う。両者が一致しない場合、セキュアエレメント60は、ここで処理を終了し、生成値出力及び鍵共有を行わない。
P96(カウンタ値の更新):受信したOTPとセキュアエレメント60が保持するOTPとが一致した場合(検証が成功した場合)、セキュアエレメント60は、自身が持つOTPカウンタに1を加算する。
P97(生成値の出力):セキュアエレメント60は、生成値の生成、及び生成した生成値の出力を行う。本実施例では、生成値には特段の規則性はなく、例えば、セキュアエレメント60内の乱数生成器で生成した乱数を生成値として用いることができる。
P98(OTPの更新):セキュアエレメント60は、OTPの値(図の例では、87654321)を生成値(図の例では、FEDCBA98)で更新する。
P99(IoTデバイスへの返送):セキュアエレメント60は、生成値をIoTデバイス100に返送する。IoTデバイス100は、生成値をRAM(TEE)54に保存する。
P100(生成値の保存):IoTデバイス100は、生成値を前回生成値として、NVM(TEE)52に保存する。
P101(派生鍵値の派生):IoTデバイス100は、生成値を鍵派生機能44に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。セキュアエレメント60も、同様に、生成値を鍵派生機能66に入力し、生成値から鍵の派生を行うことにより、派生鍵値を得る。これにより、IoTデバイス100とセキュアエレメント60は、同一の派生鍵値を得ることができる。
P102(セキュアチャネルの開設):IoTデバイス100とセキュアエレメント60は、派生鍵値を元にセキュアチャネルを開設し、秘匿通信を行う。
本実施例では、生成値をSoC50内のセキュアな環境に保存しつつ、次回の鍵共有の条件として前回生成値をOTPとして入力することを条件としている。これにより、SoC50とセキュアエレメント60側で鍵共有を継続的に行いつつ、両者の紐付けを継続的に確認可能、という点に特徴がある。また、派生鍵値は、電源遮断時に消去されることから、IoTデバイス100のNVM(TEE)52側に保存されている前回生成値を知らない限り、セキュアエレメント60は、有効な派生鍵を生成できず、セキュアチャネルを開設することができない。このように、派生鍵値を電源投入ごとのセッション鍵として、鍵値の変更を強制しつつも、紐付けされているIoTデバイスでないと新たな派生鍵を生成できない。よって、特にセキュアエレメント60をSoCから切り離して別のSoCに接続する等、IoTデバイス100とセキュアエレメント60の対応関係を改ざんしようとした場合に対して、対策として有効に機能する。
なお、前回生成値そのものを直接OTPとするだけでなく、予めIoTデバイス100とセキュアエレメント60との間でアルゴリズムを合意しておき、前回生成値を入力とし、当該アルゴリズムを用いて生成した派生データをOTPとして構成してもよい。
鍵共有の運用段階で、例えば、(1)初回の鍵共有に失敗しOTPがブロックしてしまった、(2)セキュアエレメント60とIoTデバイス100との対応関係を適法に変更したい、(3)OTP機能をブロックしたい等の要求が発生し得る。これらの要求には、例えば、セキュアエレメント60の秘匿通信路を利用して、セキュアエレメント60内部の情報を更新することで対応することが可能である。以下では、生成値を出力したものの、何らかの理由で鍵共有に失敗し、OTPがブロックした事態からの復旧手順について説明する。
図8は鍵管理サーバ200からの遠隔管理の一例を示す説明図である。以下、符号P111〜P120で示す処理について説明する。
P111(セキュアエレメント管理者への連絡):ユーザは、セキュアエレメント管理者に連絡し、OTPがブロックし、復旧してほしい旨とSEIDの値を伝える。なお、この処理は、ユーザの端末装置とセキュアエレメント管理者の端末装置との間の通信で行うことができる。
P112(OTPのサーバ側更新):セキュアエレメント管理者は、自身の端末装置を用いて、鍵管理サーバ200のOTPテーブル201からSEIDを探し、当該SEIDのOTPを更新する(図の例では、OTP値がA55AA55Aに更新されている)。
P113(OTPのユーザ側への連絡):セキュアエレメント管理者は、自身の端末装置を用いて、更新後のOTPをユーザ側に連絡し、リカバリ時の復旧手順(秘匿通信路開設手順)を伝える。
P114(電源投入と復旧手順の実施):ユーザは、セキュアエレメント管理者から伝えられた復旧手順に基づいて電源を投入し、復旧手順を実行する。
P115(秘匿通信機能の有効化):IoTデバイス100は、所定の復旧手順を実行することで、自動的にセキュアエレメント60側の秘匿通信機能67を有効化するように構成されている。これにより、セキュアエレメント60に秘匿通信機能67の有効化を指示する。
P116(秘匿通信路の開設):セキュアエレメント60は、鍵管理サーバ200との間で秘匿通信路を開設する。ここでは、ネットワーク通信機能(Ethernet(商標)/Wi-Fi(商標)等)のみIoTデバイス100の機能を利用し、セキュアエレメント60と鍵管理サーバ200との間でTLS(Transport Layer Security)等のセキュアチャネルを開設しているが、セキュアエレメント60が独立してネットワーク通信可能であれば、単体で通信を実施してもよい。開設後、セキュアエレメント60は、OTP同期要求とSEIDを鍵管理サーバ200に送信する。
P117(OTPの更新確認):鍵管理サーバ200は、接続元のセキュアエレメント60から受信したOTP同期要求を受け、指定されたSEIDに対して、OTPの更新有無を確認する(図の例では、OTP値がA55AA55Aに更新されている)。
P118(更新情報の取得):鍵管理サーバ200は、当該SEIDのOTPが更新されている場合、当該更新後のOTPを取得する。
P119(更新情報のダウンロード):鍵管理サーバ200は、セキュアエレメント60に対し、秘匿通信路経由で更新後のOTP値を送信する。
P120(セキュアエレメント側情報の更新):セキュアエレメント60は、鍵管理サーバ200から受信したOTP値で元のOTP値を更新する(図の例では、OTP値がA55AA55Aに更新されている)。更新に伴い、OTPカウンタの値を最大値まで回復する。
上述の例では、便宜上、OTP値の更新と同時にOTPカウンタ値を自動で最大値に更新しているが、OTPカウンタ値についても鍵管理サーバ200に保持しておき、秘匿通信路経由で同期するように構成してもよい。この場合、上述のリカバリとは逆に、鍵管理サーバ200側のOTPカウンタを0にすることで、セキュアエレメント60側のOTP機能をブロックすることができる。また、セキュアエレメント管理者がユーザの与信を行う方法については、例えば、オンラインでの証明書認証、電話、オフライン証明書による確認等、事業者のセキュリティポリシーによって種々の方法を用いることができる。
本実施の形態のデバイスは、セキュアエレメント及びデバイス本体を備えるデバイスであって、前記デバイス本体は、ワンタイムパスワードを取得する取得部と、前記取得部で取得したワンタイムパスワードを前記セキュアエレメントへ出力する出力部とを備え、前記セキュアエレメントは、前記ワンタイムパスワードを検証する検証部と、前記検証部で検証が成功した場合、所定の方法で生成した生成値を前記デバイス本体へ出力する生成値出力部とを備え、前記デバイス本体及びセキュアエレメントそれぞれは、前記生成値を用いて鍵共有を行う。
本実施の形態のセキュアエレメントは、デバイスに実装されるセキュアエレメントであって、デバイス側からワンタイムパスワードを取得する取得部と、前記ワンタイムパスワードを検証する検証部と、前記検証部で検証が成功した場合、所定の方法で生成した生成値を前記デバイス側へ出力する生成値出力部とを備え、前記デバイス側との間で前記生成値を用いて鍵共有を行う。
本実施の形態の鍵共有方法は、セキュアエレメント及びデバイス本体を備えるデバイスの鍵共有方法であって、前記デバイス本体は、ワンタイムパスワードを取得し、取得したワンタイムパスワードを前記セキュアエレメントへ出力し、前記セキュアエレメントは、前記ワンタイムパスワードを検証し、検証が成功した場合、所定の方法で生成した生成値を前記デバイス本体へ出力し、前記デバイス本体及びセキュアエレメントそれぞれは、前記生成値を用いて鍵共有を行う。
デバイス本体(デバイスのうち、セキュアエレメントの除く部分)は、ユーザが入力したワンタイムパスワードを取得し、取得したワンタイムパスワードをセキュアエレメントへ出力する。
セキュアエレメントは、デバイス本体が出力したワンタイムパスワードを検証し、検証が成功した場合、所定の方法で生成した生成値をデバイス本体へ出力する。事前にセキュアエレメントに設定されたワンタイムパスワードの入力を、生成値の生成の前提条件とする。すなわち、生成値の生成に先立って、セキュアエレメントに対し、セキュアエレメント製造者が指定したワンタイムパスワードの入力を求める。これにより、鍵共有を行う者に対しセキュアエレメント製造者がナレッジベース認証を行うこととなり、鍵共有者の身元を確認できる。ワンタイムパスワードを用いることにより、リプレイアタックによる複数回鍵生成を防止できる。
デバイス本体及びセキュアエレメントそれぞれは、生成値を用いて鍵共有を行う。セキュアエレメントに鍵(共有鍵)の派生元の値を生成させて動的に鍵共有を行う。
すなわち、鍵共有時に、セキュアエレメントが生成した動的な値(生成値)をデバイス本体に返送し、その値を基にデバイス本体とセキュアエレメントとの鍵共有を行う。これにより、事前に鍵を書き込むことなく、工場出荷時以降の任意のタイミングで鍵共有を行うことができる。また、固定鍵をデバイスに埋め込む必要がなく、鍵共有前にデバイスが盗難されても鍵を特定されることがない。
また、予め(例えば、製造時など)デバイスとセキュアエレメントとの対応関係を定めておく必要がなく、特定のセキュアエレメントを任意のデバイスに紐付けることができ、柔軟性を確保することができる。また、デバイスとセキュアエレメントとの間の通信路を経由して鍵の授受がないので、鍵の漏洩や盗難のリスクがない。
本実施の形態のデバイスにおいて、前記デバイス本体は、前記生成値出力部が出力した生成値から派生した鍵値を生成する鍵派生部を備え、前記鍵値を共有する。
本実施の形態のセキュアエレメントは、前記所定の方法で生成した生成値から派生した鍵値を生成する鍵派生部を備え、前記デバイス側との間で前記鍵値を共有する。
デバイス本体は、セキュアエレメントが出力した生成値から派生した鍵値を生成し、生成した鍵値を共有する。生成値からの鍵派生アルゴリズムは、デバイス本体とセキュアエレメントとの間で合意があれば、どのようなアルゴリズムを使用してもよい。これにより、仮に生成値が不正に盗難されても鍵派生アルゴリズムを知らなければ鍵値を生成することができないので、セキュリティが向上する。
本実施の形態のデバイスは、前記生成値出力部が出力した生成値を鍵値として共有する。
本実施の形態のセキュアエレメントは、前記デバイス側との間で、前記所定の方法で生成した生成値を鍵値として共有する。
セキュアエレメントが出力した生成値を鍵値として共有する。例えば、鍵派生アルゴリズムを持たないデバイスに対しては、生成値を鍵値とする(鍵値を直接生成する)。これにより、デバイス側の要件に応じて鍵生成アルゴリズムの柔軟性を確保することができる。
本実施の形態のデバイスにおいて、前記デバイス本体は、非対称鍵暗号の鍵ペアを生成する鍵生成部と、前記鍵生成部で生成した鍵ペアの一方を前記セキュアエレメントへ出力する鍵出力部とを備え、前記セキュアエレメントは、前記所定の方法で生成した生成値を前記鍵ペアの一方で暗号化する暗号化部を備え、前記生成値出力部は、前記暗号化部で暗号化された生成値を前記デバイスへ出力し、前記デバイス本体は、さらに、前記暗号化された生成値を前記鍵ペアの他方で復号する復号部を備える。
本実施の形態のセキュアエレメントは、前記デバイス側から非対称鍵暗号の鍵ペアの一方を取得する鍵取得部と、前記所定の方法で生成した生成値を前記鍵ペアの一方で暗号化する暗号化部とを備え、前記生成値出力部は、前記暗号化部で暗号化された生成値を前記デバイスへ出力する。
デバイス本体は、非対称鍵暗号の鍵ペアを生成し、生成した鍵ペアの一方をセキュアエレメントへ出力する。
セキュアエレメントは、所定の方法で生成した生成値を鍵ペアの一方で暗号化し、暗号化された生成値をデバイスへ出力する。これにより、生成値通信を秘匿化する。
デバイス本体は、暗号化された生成値を鍵ペアの他方で復号する。すなわち、生成値に対する非対称鍵暗号を適用する。これにより、鍵生成時の通信傍受を防止して、デバイスとセキュアエレメントとの間の不適切な紐付けを防止することができる。
本実施の形態のデバイスにおいて、前記セキュアエレメントは、前記所定の方法で生成した生成値に対する署名を生成する署名生成部を備え、前記生成値出力部は、前記署名とともに前記暗号化された生成値を前記デバイスへ出力し、前記デバイス本体は、さらに、前記署名を検証する署名検証部を備え、検証が失敗した場合、鍵共有を行わない。
本実施の形態のセキュアエレメントは、前記所定の方法で生成した生成値に対する署名を生成する署名生成部を備え、前記生成値出力部は、前記署名とともに前記暗号化された生成値を前記デバイスへ出力する。
セキュアエレメントは、所定の方法で生成した生成値に対する署名を生成し、生成した署名とともに暗号化された生成値をデバイスへ出力する。セキュアエレメント内の秘密鍵で署名することで、生成値の正当性を確保することができる。
デバイス本体は、署名を検証し、検証が失敗した場合、鍵共有を行わない。これにより、生成値の正当性確認手段を提供することができ、デバイスとセキュアエレメントとの間の不適切な紐付けを防止することができる。
本実施の形態のデバイスにおいて、前記デバイス本体は、前記鍵生成部で生成した鍵ペア、前記セキュアエレメントが出力した生成値、及び前記生成値から派生した鍵値を保持するセキュアな領域を有するSoCを備える。
デバイス本体は、生成した鍵ペア、セキュアエレメントが出力した生成値、及び生成値から派生した鍵値を保持するセキュアな領域を有するSoCを備える。これにより、生成値に対するソフトウェアアタック及び鍵の漏洩を防止できる。
本実施の形態のデバイスにおいて、前記デバイス本体は、前記生成値出力部が出力した生成値を前回生成値として保持するセキュアな領域を有するSoCを備え、デバイス起動時に、前記前回生成値又は前記前回生成値に基づく演算値を前記ワンタイムパスワードとして用いる。
本実施の形態のセキュアエレメントは、デバイス起動時に、前回生成した前回生成値又は前記前回生成値に基づく演算値をデバイス側から取得する生成値取得部を備え、前記生成値出力部は、前記前回生成値又は前記演算値を用いて生成した生成値を前記デバイス側へ出力する。
デバイス本体は、セキュアエレメントが出力した生成値を前回生成値として保持するセキュアな領域を有するSoCを備える。デバイス起動時に、前回生成値又は前回生成値に基づく演算値をワンタイムパスワードとして用いる。すなわち、デバイス起動(例えば、電源投入)の都度、ワンタイムパスワードによるセキュアエレメントとの鍵共有が必要であり、鍵共有時のワンタイムパスワードとして、前回の生成値、または前回の生成値から派生した値の入力を求める。
これにより、セキュアエレメントとデバイスを切り離した場合、すでに鍵共有済みの組み合わせでないと動作できないようにしつつ、派生鍵の変更を強制して派生鍵の解析リスクを低減できる。
本実施の形態のセキュアエレメントは、前記生成値の生成回数に上限を有する。
生成値の生成回数に上限を有する。例えば、上限を1回とすることで、初期化時に1回のみ鍵共有を許す。これにより、鍵共有のタイミングを厳格に制御できる。
本実施の形態のセキュアエレメントにおいて、前記取得部は、前記デバイスの識別情報及び前記識別情報と対応付けられたワンタイムパスワードを取得し、前記識別情報を用いてワンタイムパスワードを生成する生成部を備え、前記生成値出力部は、前記生成部で生成したワンタイムパスワード及び前記取得部で取得したワンタイムパスワードに基づいて前記生成値を前記デバイス側へ出力するか否かを決定する。
セキュアエレメントは、デバイスの識別情報及び識別情報と対応付けられたワンタイムパスワードを取得し、識別情報を用いてワンタイムパスワードを生成する。セキュアエレメントは、生成したワンタイムパスワードと取得したワンタイムパスワードとに基づいて、生成値をデバイス側へ出力するか否かを決定する。
すなわち、ワンタイムパスワード入力時、同時にデバイス側の識別情報の入力を求め、入力された識別情報を用いて生成されたワンタイムパスワードと入力されたワンタイムパスワードとの一貫性をセキュアエレメント内で確認する。これにより、セキュアエレメント製造者によるデバイスとセキュアエレメントの紐付けを行うことで、ユーザや事業者が想定しない、デバイスとセキュアエレメントの不正な組み合わせによる鍵共有を防止できる。
本実施の形態のセキュアエレメントは、ワンタイムパスワードを保持する保持部と、秘匿通信路を介して外部のサーバから前記保持部で保持したワンタイムパスワードを更新する更新部とを備え、前記検証部は、前記保持部で保持したワンタイムパスワードを用いて前記取得部で取得したワンタイムパスワードを検証する。
セキュアエレメントは、秘匿通信路を介して外部のサーバからワンタイムパスワードを更新できる。セキュアエレメントは、更新したワンタイムパスワードを用いて、入力されたワンタイムパスワードを検証する。
例えば、鍵共有に失敗し、ワンタイムパスワードがブロックした場合、デバイスとセキュアエレメントとの対応関係を適法に変更したい場合、あるいは、ワンタイムパスワード機能をブロックしたい場合等の要求に対応することができる。これにより、セキュアエレメントの鍵共有に関する振る舞いを、デバイスのセキュリティと独立して管理する方法を提供できる。
本実施の形態のセキュアエレメントにおいて、前記生成値の生成回数は、前記外部のサーバから変更可能である。
生成値の生成回数は、秘匿通信路を介して外部のサーバから変更可能である。これにより、セキュアエレメントの鍵共有に関する振る舞いを、デバイスのセキュリティと独立して管理する方法を提供できる。