(57)【要約】      （修正有）【課題】送信ノードと受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させる。【解決手段】送信ノードは入力された送信データを分割し、分割された送信データと分割された送信データを使用して生成されたメッセージ認証コード（ＭＡＣ）との組の各々を別々に送信するメッセージ中のデータ部に格納する送信部１１１と、分割された送信データを使用して、分割された送信データと共に送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成部１１４と、を備える。【選択図】図２
2016012912.tif 000002
【特許請求の範囲】
【請求項１】
メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記送信ノードであり、
入力された送信データを分割し、分割された送信データと当該分割された送信データを使用して生成されたメッセージ認証コードとの組の各々を別々に前記送信するメッセージ中のデータ部に格納する送信部と、
前記分割された送信データを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成部と、
を備えた送信ノード。
【請求項２】
前記メッセージの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する送信カウンタ部を備え、
前記メッセージ認証コード生成部は、
前記分割された送信データと前記保持されている送信カウンタ値とを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するものであって、
前記入力された送信データが分割された送信データである第１送信データと第２送信データとのうち、前記第１送信データが格納されたメッセージの送信により前記所定のカウント値だけ増加された送信カウンタ値を前記第２送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードの生成に使用する、
請求項１に記載の送信ノード。
【請求項３】
前記メッセージ認証コード生成部は、前記送信カウンタ値のビット列のうち所定の抽出ビット数分の上位抽出ビットのみを前記メッセージ認証コードの生成に使用し、
前記送信部は、前記送信するメッセージに対して、前記生成されたメッセージ認証コードのビット列うち、前記送信カウンタ値のビット列のうち前記上位抽出ビット以外の所定の下位ビットの値で特定される一部分のビット列のみを格納する、
請求項２に記載の送信ノード。
【請求項４】
前記受信ノードで保持される秘密情報と同じ秘密情報を記憶する秘密情報記憶部を備え、
前記メッセージ認証コード生成部は、前記秘密情報を前記メッセージ認証コードの生成に使用する、
請求項１から３のいずれか１項に記載の送信ノード。
【請求項５】
メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記受信ノードであり、
前記メッセージの受信毎に前記送信ノードで使用されるカウント値と同じ所定のカウント値だけ増加させる受信カウンタ値を保持する受信カウンタ部と、
前記受信したメッセージ中のデータ部から取得した受信データと前記保持されている受信カウンタ値とを使用してメッセージ認証コードを生成し、該生成したメッセージ認証コードと前記受信したメッセージから取得したメッセージ認証コードとが一致するかを検査するメッセージ認証コード検査部と、
を備えた受信ノード。
【請求項６】
前記メッセージ認証コード検査部は、前記受信カウンタ値のビット列のうち所定の抽出ビット数分の上位抽出ビットのみを前記メッセージ認証コードの生成に使用し、前記生成したメッセージ認証コードのうち、前記受信カウンタ値のビット列のうち該上位抽出ビット以外の所定の下位ビットの値で特定される一部分のビット列のみを、前記受信したメッセージから取得したメッセージ認証コードとの一致の検査の対象にする、
請求項５に記載の受信ノード。
【請求項７】
前記メッセージ認証コード検査部は、前記検査の結果が不一致である場合に、前記生成したメッセージ認証コードのうち、前記受信カウンタ値に前記カウント値だけ増加させた値における前記下位ビットの値で特定される一部分のビット列のみを前記一致の再検査の対象にする、
請求項６に記載の受信ノード。
【請求項８】
前記受信カウンタ部は、前記再検査の結果が一致である前記下位ビットの値を、自己が保持する受信カウンタ値の前記下位ビットの値にする、
請求項７に記載の受信ノード。
【請求項９】
前記送信ノードで保持される秘密情報と同じ秘密情報を記憶する秘密情報記憶部を備え、
前記メッセージ認証コード検査部は、前記秘密情報を前記メッセージ認証コードの生成に使用する、
請求項５から８のいずれか１項に記載の受信ノード。
【請求項１０】
請求項１に記載の送信ノードと、
前記送信ノードから受信したメッセージ中のデータ部から取得した受信データとメッセージ認証コードとを使用してメッセージ認証コードを検査するメッセージ認証コード検査部を備えた受信ノードと、
を有する通信ネットワークシステム。
【請求項１１】
請求項２に記載の送信ノードと、請求項５に記載の受信ノードと、を有する通信ネットワークシステム。
【請求項１２】
請求項３に記載の送信ノードと、請求項６から８のいずれか１項に記載の受信ノードと、を有する通信ネットワークシステム。
【請求項１３】
前記送信ノードと前記受信ノードとが同じ秘密情報を有し、前記送信ノードと前記受信ノードとが前記秘密情報をメッセージ認証コードの生成に使用する、
請求項１０から１２のいずれか１項に記載の通信ネットワークシステム。
【請求項１４】
メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記送信ノードのメッセージ作成方法であり、
前記送信ノードが、入力された送信データを分割し、分割された送信データと当該分割された送信データを使用して生成されたメッセージ認証コードとの組の各々を別々に前記送信するメッセージ中のデータ部に格納する送信ステップと、
前記送信ノードが、前記分割された送信データを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成ステップと、
を含むメッセージ作成方法。
【請求項１５】
メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記送信ノードのコンピュータに、
入力された送信データを分割し、分割された送信データと当該分割された送信データを使用して生成されたメッセージ認証コードとの組の各々を別々に前記送信するメッセージ中のデータ部に格納する送信ステップと、
前記分割された送信データを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成ステップと、
を実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送信ノード、受信ノード、通信ネットワークシステム、メッセージ作成方法およびコンピュータプログラムに関する。
【背景技術】
【０００２】
従来、車両に搭載される通信ネットワークの一つとして知られているＣＡＮ（Controller Area Network）が、車両内の各種ＥＣＵ（Electronic Control Unit）間の通信に用いられている。そのＣＡＮにおいてメッセージの認証を可能にする技術として、例えば非特許文献１，２、特許文献１に記載の技術が知られている。
【０００３】
非特許文献１に記載の従来技術では、ＣＡＮに接続された偽のＥＣＵからなりすましメッセージを発信する攻撃に対して、本物のＥＣＵが、自己のＩＤが付与されたなりすましメッセージを検知すると、自己のＩＤを付与した異常を知らせるメッセージを発信することで、受信側ＥＣＵに対して異常を報知している。
【０００４】
非特許文献２に記載の従来技術では、ＣＡＮフレーム中の誤り訂正（Cyclic Redundancy Check：CRC）フィールドに格納する情報をＭＡＣ（Message Authentication Code）に変更している。この従来技術では、送信側は、Ｎ番目からＮ＋３番目までの４つのＣＡＮフレーム中のデータフィールドのデータ（６４×４＝２５６ビット）から６４ビットのＭＡＣを生成し、該ＭＡＣを１６ビットずつに４分割して、Ｎ＋４番目からＮ＋７番目までの４つのＣＡＮフレーム中のＣＲＣフィールド（１６ビット）にそれぞれ格納して各ＣＡＮフレームを送信する。受信側では、Ｎ＋４番目からＮ＋７番目までのＣＡＮフレーム中のＣＲＣフィールドからＭＡＣを取得し、Ｎ番目からＮ＋３番目までのＣＡＮフレーム中のデータフィールドから生成されるＭＡＣと一致するか否かによってＮ番目からＮ＋３番目までのＣＡＮフレームが正当であるか否かを判断する。これにより、ＣＲＣフィールドから得られるＭＡＣと、データフィールドから算出されるＭＡＣとが異なる場合には、Ｎ番目からＮ＋３番目までのＣＡＮフレームのいずれかが不正であると判断できる。
【０００５】
特許文献１に記載の技術では、各ＥＣＵにおいてＣＡＮＩＤごとにメッセージが送信された回数をカウントする。そして、メインメッセージを送信した送信ノードは、メインメッセージのデータフィールドおよびＣＡＮＩＤと、ＣＡＮＩＤに対応するカウンタ値とから生成したＭＡＣを含むＭＡＣメッセージを送信する。メインメッセージを受信した受信ノードは、メインメッセージに含まれるデータフィールドおよびＣＡＮＩＤと、ＣＡＮＩＤに対応するカウンタ値とからＭＡＣを生成して、受信したＭＡＣメッセージに含まれるＭＡＣと一致するかを判断する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１３／０６５６８９号
【非特許文献】
【０００７】
【非特許文献１】畑正人、田邉正人、吉岡克成、大石和臣、松本勉、“不正送信阻止：CANではそれが可能である”、情報処理学会、コンピュータセキュリティシンポジウム（CSS2011）、pp.624-629、2011年10月．
【非特許文献２】AKIRA YOSHIOKA ET AL.: “Kosei Shomei Kino o Motsu Shanai Tsushin Protocol no Teian” SYMPOSIUM ON MULTIMEDIA, DISTRIBUTED, COOPERATIVE AND MOBILE SYSTEMS (DICOM02008) RONBUNSHU vol. 2008, no. 1, 02 July 2008, pages 1270 - 1275
【非特許文献３】RFC 2104 HMAC: Keyed-Hashing for Message Authentication、［２０１４年５月２６日検索］、インターネット＜ＵＲＬ：http://www.rfc-editor.org/rfc/rfc2104.txt＞
【非特許文献４】RFC 2104 HMAC：メッセージ認証のための鍵付ハッシング、［２０１４年５月２６日検索］、インターネット＜ＵＲＬ：http://www.ipa.go.jp/security/rfc/RFC2104JA.html＞
【非特許文献５】竹森敬祐、川端秀明、窪田歩、“ARM＋SIM/UIMによるセキュアブート”、電子情報通信学会、暗号と情報セキュリティシンポジウム（SCIS2014）、1B1-2、2014年1月．
【非特許文献６】Trusted Computing Group、［２０１５年２月１８日検索］、インターネット＜ＵＲＬ：http://www.trustedcomputinggroup.org/＞
【非特許文献７】“CAN通信におけるデータ送信の仕組みとは？”、［２０１５年２月１８日検索］、インターネット＜ＵＲＬ：http://monoist.atmarkit.co.jp/mn/articles/0807/09/news140.html＞
【非特許文献８】AUTOSAR、“Specification of Module Secure Onboard Communication AUTOSAR Release 4.2.1”、［２０１５年２月１８日検索］、インターネット＜ＵＲＬ：http://www.autosar.org/fileadmin/files/releases/4-2/software-architecture/communication-stack/standard/AUTOSAR_SWS_SecureOnboardCommunication.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、上述した非特許文献１に記載の従来技術では、通信を監視する本物のＥＣＵが取り外された場合に異常を報知できない。また、非特許文献２に記載の従来技術では、Ｎ番目からＮ＋３番目までのＣＡＮフレームの正当性を確認するためには、Ｎ＋４番目からＮ＋７番目までのＣＡＮフレームを受信するまで待たなければならないので、該正当性の確認に時間がかかる。このため、特にリアルタイム制御が求められる場合には適していない。また、特許文献１に記載の従来技術では、メインメッセージとは別にＭＡＣメッセージを送信するので通信量が２倍以上になる。さらに、メインメッセージの認証を行うためには、ＭＡＣメッセージを受信するまで待たなければならないので、該認証に時間がかかる。このため、ＣＡＮの通信帯域の圧迫と即時性の低下という問題がある。
【０００９】
本発明は、このような事情を考慮してなされたものであり、メッセージを送信する送信ノードと該メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させることができる、送信ノード、受信ノード、通信ネットワークシステム、メッセージ作成方法およびコンピュータプログラムを提供することを課題とする。
【課題を解決するための手段】
【００１０】
（１）本発明の一態様は、メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記送信ノードであり、入力された送信データを分割し、分割された送信データと当該分割された送信データを使用して生成されたメッセージ認証コードとの組の各々を別々に前記送信するメッセージ中のデータ部に格納する送信部と、前記分割された送信データを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成部と、を備えた送信ノードである。
（２）本発明の一態様は、上記（１）の送信ノードにおいて、前記メッセージの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する送信カウンタ部を備え、前記メッセージ認証コード生成部は、前記分割された送信データと前記保持されている送信カウンタ値とを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するものであって、前記入力された送信データが分割された送信データである第１送信データと第２送信データとのうち、前記第１送信データが格納されたメッセージの送信により前記所定のカウント値だけ増加された送信カウンタ値を前記第２送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードの生成に使用する、送信ノードである。
（３）本発明の一態様は、上記（２）の送信ノードにおいて、前記メッセージ認証コード生成部は、前記送信カウンタ値のビット列のうち所定の抽出ビット数分の上位抽出ビットのみを前記メッセージ認証コードの生成に使用し、前記送信部は、前記送信するメッセージに対して、前記生成されたメッセージ認証コードのビット列うち、前記送信カウンタ値のビット列のうち前記上位抽出ビット以外の所定の下位ビットの値で特定される一部分のビット列のみを格納する、送信ノードである。
（４）本発明の一態様は、上記（１）から（３）のいずれかの送信ノードにおいて、前記受信ノードで保持される秘密情報と同じ秘密情報を記憶する秘密情報記憶部を備え、前記メッセージ認証コード生成部は、前記秘密情報を前記メッセージ認証コードの生成に使用する、送信ノードである。
【００１１】
（５）本発明の一態様は、メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記受信ノードであり、前記メッセージの受信毎に前記送信ノードで使用されるカウント値と同じ所定のカウント値だけ増加させる受信カウンタ値を保持する受信カウンタ部と、前記受信したメッセージ中のデータ部から取得した受信データと前記保持されている受信カウンタ値とを使用してメッセージ認証コードを生成し、該生成したメッセージ認証コードと前記受信したメッセージから取得したメッセージ認証コードとが一致するかを検査するメッセージ認証コード検査部と、を備えた受信ノードである。
（６）本発明の一態様は、上記（５）の受信ノードにおいて、前記メッセージ認証コード検査部は、前記受信カウンタ値のビット列のうち所定の抽出ビット数分の上位抽出ビットのみを前記メッセージ認証コードの生成に使用し、前記生成したメッセージ認証コードのうち、前記受信カウンタ値のビット列のうち該上位抽出ビット以外の所定の下位ビットの値で特定される一部分のビット列のみを、前記受信したメッセージから取得したメッセージ認証コードとの一致の検査の対象にする、受信ノードである。
（７）本発明の一態様は、上記（６）の受信ノードにおいて、前記メッセージ認証コード検査部は、前記検査の結果が不一致である場合に、前記生成したメッセージ認証コードのうち、前記受信カウンタ値に前記カウント値だけ増加させた値における前記下位ビットの値で特定される一部分のビット列のみを前記一致の再検査の対象にする、受信ノードである。
（８）本発明の一態様は、上記（７）の受信ノードにおいて、前記受信カウンタ部は、前記再検査の結果が一致である前記下位ビットの値を、自己が保持する受信カウンタ値の前記下位ビットの値にする、受信ノードである。
（９）本発明の一態様は、上記（５）から（８）のいずれかの受信ノードにおいて、前記送信ノードで保持される秘密情報と同じ秘密情報を記憶する秘密情報記憶部を備え、前記メッセージ認証コード検査部は、前記秘密情報を前記メッセージ認証コードの生成に使用する、受信ノードである。
【００１２】
（１０）本発明の一態様は、上記（１）の送信ノードと、前記送信ノードから受信したメッセージ中のデータ部から取得した受信データとメッセージ認証コードとを使用してメッセージ認証コードを検査するメッセージ認証コード検査部を備えた受信ノードと、を有する通信ネットワークシステムである。
（１１）本発明の一態様は、上記（２）の送信ノードと、上記（５）の受信ノードと、を有する通信ネットワークシステムである。
（１２）本発明の一態様は、上記（３）の送信ノードと、上記（６）から（８）のいずれかの受信ノードと、を有する通信ネットワークシステムである。
（１３）本発明の一態様は、上記（１０）から（１２）のいずれかの通信ネットワークシステムにおいて、前記送信ノードと前記受信ノードとが同じ秘密情報を有し、前記送信ノードと前記受信ノードとが前記秘密情報をメッセージ認証コードの生成に使用する、通信ネットワークシステムである。
【００１３】
（１４）本発明の一態様は、メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記送信ノードのメッセージ作成方法であり、前記送信ノードが、入力された送信データを分割し、分割された送信データと当該分割された送信データを使用して生成されたメッセージ認証コードとの組の各々を別々に前記送信するメッセージ中のデータ部に格納する送信ステップと、前記送信ノードが、前記分割された送信データを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成ステップと、を含むメッセージ作成方法である。
【００１４】
（１５）本発明の一態様は、メッセージを送信する送信ノードと前記メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおける前記送信ノードのコンピュータに、入力された送信データを分割し、分割された送信データと当該分割された送信データを使用して生成されたメッセージ認証コードとの組の各々を別々に前記送信するメッセージ中のデータ部に格納する送信ステップと、前記分割された送信データを使用して、当該分割された送信データと共に前記送信するメッセージ中のデータ部に格納されるメッセージ認証コードを生成するメッセージ認証コード生成ステップと、を実行させるためのコンピュータプログラムである。
【発明の効果】
【００１５】
本発明によれば、メッセージを送信する送信ノードと該メッセージを受信する受信ノードとが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させることができるという効果が得られる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。
【図２】本発明の第１実施形態に係るＭＣＵ＿２（ノード）の構成を示すブロック図である。
【図３】本発明の第１実施形態に係るデータフレームの構成を示す図である。
【図４】本発明の第１実施形態に係る送信処理の手順を示す図である。
【図５】本発明の第１実施形態に係る受信処理の手順を示す図である。
【図６】本発明の第１実施形態に係る受信処理の手順を示す図である。
【図７】本発明の第２実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。
【図８】本発明の第２実施形態に係るブート処理のシーケンスチャートである。
【図９】本発明の第２実施形態に係る暗号処理のシーケンスチャートである。
【図１０】本発明の第２実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明するためのシーケンスチャートである。
【図１１】ＣＡＮの標準フォーマットのデータフレームを示す構成図である。
【図１２】ＣＡＮの拡張フォーマットのデータフレームを示す構成図である。
【図１３】本発明の一実施形態に係るメッセージ作成方法を示す説明図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照し、本発明の実施形態について説明する。
【００１８】
［第１実施形態］
本実施形態では、本発明に係る通信ネットワークシステムの一態様として、車両に搭載される通信ネットワークシステムとしてのＣＡＮを例に挙げて説明する。図１は、本発明の第１実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。図１において、通信ネットワークシステム１は、複数のＭＣＵ（Micro Computing Unit）＿２を有する。ＭＣＵ＿２は、ＣＰＵ（Central Processing Unit：中央演算処理装置）及びメモリ等から構成されるものであって、コンピュータの一種である。ＭＣＵ＿２は、自己のＣＰＵがコンピュータプログラムを実行することにより、該コンピュータプログラムに該当する機能を実現する。各ＭＣＵ＿２は、車両内の機器を制御する電子制御ユニット（ＥＣＵ）として利用される。
【００１９】
ＭＣＵ＿２はＣＡＮの通信バス３に接続されている。本実施形態では、説明の便宜上、通信ネットワークシステム１は３台のＭＣＵ＿２を有するものとし、該３台のＭＣＵ＿２が通信バス３に接続されている。通信バス３は、各ＭＣＵ＿２の間で交換されるメッセージを伝送する。各ＭＣＵ＿２は、通信バス３を介して、相互にメッセージを送受する。ＣＡＮでは、所定のフレーム形式でメッセージの伝送が行われる。ＭＣＵ＿２は、ＣＡＮにおけるノード（通信装置）として機能する。本実施形態では、ＭＣＵ＿２は、メッセージを送信する送信ノードの機能と該メッセージを受信する受信ノードの機能とを有する。図１中に示されるように、３台の各ＭＣＵ＿２には、ＣＡＮにおける識別子（ＩＤ）として、ＩＤ１、ＩＤ２、ＩＤ３がそれぞれ付与されている。
【００２０】
図２は、本発明の第１実施形態に係るＭＣＵ＿２（ノード）の構成を示すブロック図である。図２において、ＭＣＵ＿２は、送信部１１１と受信部１１２とフレーム受信処理部１１３とＭＡＣ（メッセージ認証コード）生成部１１４とカウンタ部１１５とＭＡＣ（メッセージ認証コード）検査部１１６と秘密情報記憶部１１７を備える。
【００２１】
送信部１１１は、所定のフレーム形式のメッセージを通信バス３に送信する。受信部１１２は、該所定のフレーム形式のメッセージを通信バス３から受信する。図３は、本発明の第１実施形態に係るデータフレームの構成を示す図である。図３のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。図３に示されるデータフレームの構成は、ＣＡＮにおける標準フォーマットのデータフレームの構成に対して、一部変更している。本実施形態では、データフレーム中のＣＲＣフィールド（ＣＲＣ部）に格納する情報をメッセージ認証コード（ＭＡＣ）に変更する。該データフレームにおいてＣＲＣ部以外の部分は、ＣＡＮにおける標準フォーマットから変更なしである。以下、図３に示される本実施形態に係るデータフレームのことをＣＡＮフレームと称する。
【００２２】
説明を図２に戻す。
送信部１１１には、ＣＡＮフレームに格納する送信データ等のデータが入力される。送信部１１１は、該入力されたデータをＣＡＮフレーム中の該当部分に格納したＣＡＮフレームを、通信バス３へ送信する。送信データは、図３中のデータフィールド（Data Field：データ部）に格納される。フレーム受信処理部１１３は、受信部１１２により通信バス３から受信されたＣＡＮフレームについての受信処理を行う。ＭＡＣ生成部１１４は、ＣＡＮフレーム中のデータ部に格納される送信データ等に基づいてＭＡＣを生成する。
【００２３】
カウンタ部１１５は、送信カウンタ部としての機能と、受信カウンタ部としての機能とを有する。カウンタ部１１５は、送信カウンタ部の機能として、送信部１１１によるＣＡＮフレームの送信毎に所定のカウント値だけ増加させる送信カウンタ値を保持する。本実施形態では、該カウント値は１とする。したがって、カウンタ部１１５は、送信部１１１によるＣＡＮフレームの送信毎に１だけ増加させる送信カウンタ値を保持する。この送信カウンタ値は、自己のＭＣＵ＿２（ノード）がＣＡＮフレームを送信する毎に１ずつ増やされる。
【００２４】
カウンタ部１１５は、受信カウンタ部の機能として、受信部１１２によるＣＡＮフレームの受信毎に送信カウンタ部と同じ所定のカウント値だけ増加させる受信カウンタ値を保持する。本実施形態では、該カウント値は１となる。したがって、カウンタ部１１５は、受信部１１２によるＣＡＮフレームの受信毎に１だけ増加させる受信カウンタ値を保持する。この受信カウンタ値は、ＣＡＮフレーム中のＩＤ毎に設けられる。該ＩＤは、ＣＡＮフレームを送信したＭＣＵ＿２（ノード）に付与されているＩＤであり、図３中のＩＤフィールド（ＩＤ部）に格納される。
【００２５】
本実施形態では、３台のＭＣＵ＿２（ＩＤがそれぞれ、ＩＤ１、ＩＤ２、ＩＤ３である）が存在するので、図２に示されるように、カウンタ部１１５は該３台の各ＭＣＵ＿２（各ＩＤであるＩＤ１、ＩＤ２、ＩＤ３）に対応する３つのカウンタ値（ＩＤ１カウンタ値、ＩＤ２カウンタ値、ＩＤ３カウンタ値）を保持する。カウンタ部１１５において、自己のＭＣＵ＿２のＩＤに対応するカウンタ値が送信カウンタ値であり、他のＭＣＵ＿２のＩＤに対応するカウンタ値が受信カウンタ値である。例えば、ＩＤ１のＭＣＵ＿２においては、ＩＤ１カウンタ値が送信カウンタ値であり、ＩＤ２カウンタ値がＩＤ２に対応する受信カウンタ値であり、ＩＤ３カウンタ値がＩＤ３に対応する受信カウンタ値である。
【００２６】
ＭＡＣ検査部１１６は、受信部１１２により通信バス３から受信されたＣＡＮフレームから取得されたＭＡＣについての検査を行う。秘密情報記憶部１１７は、各ＭＣＵ＿２において同じ秘密情報を記憶する。この秘密情報は、ＭＣＵ＿２の製造時などに、安全に、ＭＣＵ＿２に設定される。
【００２７】
次に、本実施形態に係るＭＣＵ＿２（ノード）の動作を説明する。
【００２８】
［送信ノードの動作］
はじめに図４を参照して、ＭＣＵ＿２の送信ノードとしての動作を説明する。図４は、本発明の第１実施形態に係る送信処理の手順を示す図である。図４の送信処理は、送信部１１１から送信されるＣＡＮフレームを作成する際に開始される。
【００２９】
（ステップＳ１１１）ＭＡＣ生成部１１４は、カウンタ部１１５から送信カウンタ値を取得する。ＭＡＣ生成部１１４は、該取得した送信カウンタ値のビット列（ビット数がＬである）から、所定の抽出ビット数分（Ｌ−ｎビット分）の上位ビットのみを上位抽出ビット（ビット数が「Ｌ−ｎ」である）として取得する。
【００３０】
（ステップＳ１１２）ＭＡＣ生成部１１４は、ＣＡＮフレーム中のデータ部に格納される送信データと、ステップＳ１１１で取得した上位抽出ビットと、秘密情報記憶部１１７に記憶されている秘密情報とを使用して、ＭＡＣを生成する。ＭＡＣとして、例えば、ハッシュ（Hash）値を算出する。ハッシュ値の算出方法として、例えば、SHA-256が挙げられる。なお、ハッシュ値の算出方法については、例えば非特許文献３，４に記載されている。
【００３１】
（ステップＳ１１３）ＭＡＣ生成部１１４は、ステップＳ１１２で生成したＭＡＣのビット列（ＭＡＣ値）から、ＣＡＮフレーム中のＣＲＣ部に格納するビット列（１５ビット）を抽出する。この抽出されるビット列は、ステップＳ１１１で取得した送信カウンタ値のビット列（ビット数がＬである）のうち上位抽出ビット以外の所定の下位ビット（ビット数がｎである）の値で特定される。図４に示される例では、該下位ビット（ビット数がｎである）の値は「３」である。これにより、ＭＡＣ値のビット列中において、該値「３」で特定される一部分（１５ビット分）を抽出する。
【００３２】
本実施形態においてＣＡＮフレーム中のＣＲＣ部は１５ビットであるので、該ＣＲＣ部に格納する情報として、ＭＡＣ値のビット列から該値「３」で特定される１５ビット分を抽出している。このため、ＭＡＣ値のビット列に対して１５ビットずつの区間を定め、どの区間の１５ビットをＣＡＮフレーム中のＣＲＣ部に格納するのかを、送信カウンタ値の下位ビット（ビット数がｎである）の値で特定している。なお、図４の例では、ＭＡＣ値の総ビット数に応じたＫ個の区間（１区間は１５ビット）が定められている。
【００３３】
送信部１１１は、ＣＡＮフレームに対して、送信データ（ステップＳ１１２でＭＡＣ生成に使用されたもの）をデータ部に格納し、ステップＳ１１３でＭＡＣ値のビット列中から抽出された１５ビットのビット列をＣＲＣ部に格納する。送信部１１１は、該ＣＡＮフレームを通信バス３へ送信する。カウンタ部１１５は、該ＣＡＮフレームの送信により送信カウンタ値を１だけ増加させて保持する。
【００３４】
以上が送信ノードの動作の説明である。
【００３５】
［受信ノードの動作］
次に図５、図６を参照して、ＭＣＵ＿２の受信ノードとしての動作を説明する。図５、図６は、本発明の第１実施形態に係る受信処理の手順を示す図である。図５の受信処理は、受信部１１２によりＣＡＮフレームを受信した際に開始される。
【００３６】
（ステップＳ１２１）ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値を、カウンタ部１１５から取得する。ＭＡＣ検査部１１６は、該取得した受信カウンタ値のビット列（ビット数がＬである）から、所定の抽出ビット数分（Ｌ−ｎビット分）の上位ビットのみを上位抽出ビット（ビット数が「Ｌ−ｎ」である）として取得する。この上位抽出ビットの取得方法は、上述したＭＡＣ生成部１１４の処理（ステップＳ１１１）と同じである。
【００３７】
（ステップＳ１２２）ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のデータ部から取得した受信データと、ステップＳ１２１で取得した上位抽出ビットと、秘密情報記憶部１１７に記憶されている秘密情報とを使用して、ＭＡＣを生成する。このＭＡＣの値（算出ＭＡＣ値）は、上述したＭＡＣ生成部１１４と同じ算出方法（例えば、SHA-256によるハッシュ値の算出）で算出される。
【００３８】
（ステップＳ１２３）ＭＡＣ検査部１１６は、ステップＳ１２２で生成したＭＡＣのビット列（算出ＭＡＣ値）から、検査の対象にする検査対象ビット列（１５ビット）を抽出する。この検査対象ビット列の抽出方法は、上述したＭＡＣ生成部１１４での、ＣＡＮフレーム中のＣＲＣ部に格納するビット列（１５ビット）の抽出方法（ステップＳ１１３）と同様である。つまり、該検査対象ビット列は、算出ＭＡＣ値のビット列のうち、ステップＳ１２１で取得した受信カウンタ値のビット列（ビット数がＬである）のうち上位抽出ビット以外の所定の下位ビット（ビット数がｎである）の値で特定される一部分（１５ビット分）である。図５に示される例では、該下位ビット（ビット数がｎである）の値は「３」である。これにより、算出ＭＡＣ値のビット列中において、該値「３」で特定される一部分（１５ビット分）を抽出する。
【００３９】
本実施形態では、ＣＡＮフレーム中のＣＲＣ部（１５ビット）に格納されている情報と、算出ＭＡＣ値のビット列から抽出された検査対象ビット列（１５ビット）との一致を検査する。このため、上述した送信処理と同様に、算出ＭＡＣ値のビット列に対して１５ビットずつの区間を定め、どの区間の１５ビットを検査対象ビット列とするのかを、受信カウンタ値の下位ビット（ビット数がｎである）の値で特定している。なお、図５の例では、算出ＭＡＣ値の総ビット数に応じたＫ個の区間（１区間は１５ビット）が定められている。
【００４０】
ＭＡＣ検査部１１６は、受信部１１２により受信したＣＡＮフレーム中のＣＲＣ部から取得したＭＡＣ値（受信ＭＡＣ値（１５ビット））と、算出ＭＡＣ値のビット列から抽出された検査対象ビット列（１５ビット）とが一致するか否かを判定する。
【００４１】
該判定の結果、受信ＭＡＣ値と検査対象ビット列とが一致である場合には、ＭＡＣ検査部１１６は、フレーム受信処理部１１３に対して、検査合格を通知する。これにより、フレーム受信処理部１１３は、受信部１１２により受信したＣＡＮフレームに対して、正常に受信したＣＡＮフレームに対する所定の受信処理を行う。また、ＭＡＣ検査部１１６は、カウンタ部１１５に対して、検査合格を通知する。これにより、カウンタ部１１５は、該当する受信カウンタ値を１だけ増加させて保持する。このカウント対象の受信カウンタ値は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値である。
【００４２】
一方、該判定の結果、受信ＭＡＣ値と検査対象ビット列とが不一致である場合には、ＭＡＣ検査部１１６は、図６に示される再検査処理を行う。以下、図６を参照して該再検査処理を説明する。
【００４３】
（ステップＳ１３１）ＭＡＣ検査部１１６は、ステップＳ１２２で生成した算出ＭＡＣ値のビット列から、再検査の対象にする再検査対象ビット列（１５ビット）を抽出する。この再検査対象ビット列の抽出処理は、上述した検査対象ビット列の抽出処理と同様であるが、ステップＳ１２１で取得した受信カウンタ値を増加させた値（増加受信カウンタ値）を使用する。具体的には、まず、ステップＳ１２１で取得した受信カウンタ値に１を加える。そして、算出ＭＡＣ値のビット列のうち、該受信カウンタ値に１を加算した値である増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値で特定される一部分（１５ビット分）を、再検査対象ビット列として抽出する。
【００４４】
ＭＡＣ検査部１１６は、該抽出した再検査対象ビット列と受信ＭＡＣ値との一致を判定する。この判定の結果が不一致である場合には、現在の増加受信カウンタ値に対してさらに１を加算した値を新たな増加受信カウンタ値とする。そして、算出ＭＡＣ値のビット列のうち、該新たな増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値で特定される一部分（１５ビット分）を、新たな再検査対象ビット列として抽出する。そして、該抽出された新たな再検査対象ビット列と受信ＭＡＣ値との一致を判定する。この再検査は、判定の結果が一致となるまで繰り返される。但し、算出ＭＡＣ値のビット列の端の区間（下位ビットの値「Ｋ−１」で特定される区間）までで当該再検査は終了とする。この理由は、下位ビットの値が桁上げされて、算出ＭＡＣ値の生成に使用される上位抽出ビットの値が変わるからである。
【００４５】
したがって、算出ＭＡＣ値のビット列のうち、下位ビットの値「Ｋ−１」で特定される区間まで検査を行っても、受信ＭＡＣ値と一致とならない場合には、下位ビットの値の桁上げ後の上位抽出ビットを使用して算出ＭＡＣ値を再計算し、該再計算した新たな算出ＭＡＣ値を使用して、上述した再検査と同様に、受信ＭＡＣ値との一致の判定を行う。
【００４６】
（ステップＳ１３２）ＭＡＣ検査部１１６は、ステップＳ１３１の再検査の結果、再検査対象ビット列と受信ＭＡＣ値とが一致した場合に、カウンタ部１１５に対して、当該再検査対象ビット列に係る下位ビットの値を通知してカウンタ同期を指示する。カウンタ部１１５は、該カウンタ同期の指示により、該当する受信カウンタ値の下位ビット（ビット数がｎである）の値を、通知された下位ビットの値に変更する。このカウンタ同期対象の受信カウンタ値は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値である。これにより、当該ＩＤに対応する送信ノードの送信カウンタ値と、本受信ノードの当該ＩＤに対応する受信カウンタ値との同期が取られることになる。
【００４７】
図６に示される例では、ステップＳ１２１で取得した受信カウンタ値における下位ビット（ビット数がｎである）の値は「３」である。この値「３」で特定された検査対象ビット列では受信ＭＡＣ値と不一致であった。このため、ステップＳ１２１で取得した受信カウンタ値に１を加算した増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値「４」で特定される部分を再検査対象ビット列として、受信ＭＡＣ値との一致を判定する。図６の例では、該値「４」で特定された再検査対象ビット列でも、受信ＭＡＣ値と不一致であった。このため、現在の増加受信カウンタ値に１を加算した新たな増加受信カウンタ値のビット列における下位ビット（ビット数がｎである）の値「５」で特定される部分を再検査対象ビット列として、受信ＭＡＣ値との一致を判定する。図６の例では、該値「５」で特定された再検査対象ビット列では、受信ＭＡＣ値と一致であった。これにより、カウンタ部１１５において該当する受信カウンタ値の下位ビット（ビット数がｎである）の値が「３」から「５」に変更される。
【００４８】
ＭＡＣ検査部１１６は、所定回数だけ再検査を繰り返しても、再検査対象ビット列と受信ＭＡＣ値とが不一致である場合には、フレーム受信処理部１１３に対して、検査不合格を通知する。これにより、フレーム受信処理部１１３は、受信部１１２により受信したＣＡＮフレームを破棄する。これは、通信エラー、又はなりすましメッセージを発信する攻撃が発生したと考えられるからである。なお、検査不合格の場合、ＭＡＣ検査部１１６は、カウンタ部１１５に対して、検査合格を通知しない。これにより、カウンタ部１１５は、受信部１１２により受信したＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値に対して、受信カウンタ値の増加を行わない。
【００４９】
なお、受信ノードは、同一ＩＤのＣＡＮフレームにおいて、同じＭＡＣ値を有するＣＡＮフレームを２回以上連続して受信した場合には、リプレイ攻撃が発生したと判断する。この場合、当該ＩＤのＣＡＮフレームについては、受信処理を行わないようにする対処が挙げられる。
【００５０】
以上が受信ノードの動作の説明である。
【００５１】
本実施形態によれば、送信ノードから送信されるＣＡＮフレームには、当該ＣＡＮフレームのデータ部に格納される送信データを使用して生成されたＭＡＣがＣＲＣ部に格納される。そして、受信ノードでは、受信したＣＡＮフレームのデータ部から取得した受信データを使用して生成したＭＡＣと、当該ＣＡＮフレームのＣＲＣ部から取得したＭＡＣとを使用して、当該ＣＡＮフレームの検査を行う。これにより、送信ノードから、送信データのＣＡＮフレームとは別にＭＡＣのＣＡＮフレームを送信する必要がないので、ＭＡＣのＣＡＮフレームによりＣＡＮの通信帯域が圧迫される問題を解消できる。さらに、送信データとＭＡＣを同じＣＡＮフレームで受信できるので、検査の即時性を実現できる。
【００５２】
さらに、送信ノードと受信ノードで共通の秘密情報を使用してＭＡＣが生成されるので、該秘密情報を有さない送信ノードが生成したＭＡＣではＣＡＮフレームの検査が不合格となる。これにより、ＣＡＮフレームの検査に対する信頼性が向上する。
【００５３】
また、生成されたＭＡＣのビット列のうち、送信カウンタ値の下位ビットで特定される区間をＣＡＮフレームに格納することにより、送信されるＣＡＮフレーム毎に格納されているＭＡＣ値が異なる。これにより、同じＣＡＮフレームを繰り返し送信するリプレイ攻撃を容易に検出できる。また、送信ノードではＣＡＮフレーム中のデータ部の送信データを使用してＭＡＣを生成するので、受信ノードで送信データの改竄を検出できる。
【００５４】
また、本実施形態では、ＭＡＣの生成にはカウンタ値の上位抽出ビットを使用し、カウンタ値の上位抽出ビット以外の下位ビットによって、該ＭＡＣのどの部分をＣＲＣ部に格納するのかを決める。このため、ＭＡＣの再検査において、該下位ビットの桁上げが発生するまでは、ＭＡＣの再計算を行う必要がなく、同じＭＡＣの中から再検査対象ビット列を変えながら再検査を繰り返し行うことができる。これにより、検査時の演算量を低減でき、検査時間の短縮に寄与できる。
【００５５】
また、本実施形態によれば、ＣＡＮの既存のフレーム形式に対する変更が少ないという効果も得られる。
【００５６】
なお、本実施形態では、生成されたＭＡＣのうち一部分のみをＣＡＮフレーム中のＣＲＣ部に格納することから、ＭＡＣ同士の衝突が発生する可能性がある。例えば、ハッシュ値の衝突は「１／２」の１５乗（＝１／３２７６８）で発生する可能性がある。しかしながら、もしハッシュ値の衝突が発生しても、さらに次のハッシュ値の衝突が発生する確率はまた１／３２７６８であるため、連続してハッシュ値の衝突が発生する確率は非常に小さくなる。例えば、同じ送信データを有する複数のＣＡＮフレーム（各ＣＡＮフレームのＭＡＣは異なる）を連続して送信すれば、該複数のＣＡＮフレームのいずれかではＭＡＣ（ハッシュ値）の衝突が発生せず、正常に受信できると考えられるので、ハッシュ値の衝突による通信品質への影響は少ないと考えられる。
【００５７】
また、上述した実施形態では、ＣＡＮフレーム中のＣＲＣ部にＭＡＣを格納したが、データ部に格納するようにしてもよい。例えば、データ部の先頭部分又は最後方部分に格納することが挙げられる。但し、最後方部分に格納する方が、データ部の既存の使用方法に対する影響が少ないと考えられる。また、データ部のサイズは６４ビットであるので、ＣＲＣ部（１５ビット）に比して、生成されたＭＡＣのうちＣＡＮフレームに格納する部分を多くできる。但し、生成されたＭＡＣのうちＣＡＮフレームに格納する部分を多くすると、その分だけ、送信データのサイズが小さくなるので、データ部に格納するＭＡＣのサイズは、ＭＡＣの衝突による影響が許容される程度に小さく抑えることが好ましい。なお、データ部にＭＡＣを格納する場合には、ＣＲＣ部にはＣＲＣを格納することにより、ＣＲＣ機能を活用できる。
【００５８】
［第２実施形態］
第２実施形態は、上述した第１実施形態において、ＭＣＵ＿２が秘密情報を安全に保持するための構成例である。図７は、本発明の第２実施形態に係る通信ネットワークシステム１の構成を示すブロック図である。図７に示される通信ネットワークシステム１は車両に搭載される。図７に示される通信ネットワークシステム１において、ＣＡＮの通信バス３には、複数のＭＣＵ＿２−ａ，２−ｂが接続されている。第２実施形態においても、上述した第１実施形態と同様に、説明の便宜上、３台のＭＣＵ＿２−ａ，２−ｂが通信バス３に接続されているとする。図７中に示されるように、３台の各ＭＣＵ＿２−ａ，２−ｂには、ＣＡＮにおける識別子（ＩＤ）として、ＭＣＵ＿２−ａにはＩＤ１が付与され、各ＭＣＵ＿２−ｂにはＩＤ２、ＩＤ３がそれぞれ付与されている。
【００５９】
ＭＣＵ＿２−ａは、通信バス３に接続されるＭＣＵ＿２−ｂを認証する処理においてマスタとして動作する。以下、ＭＣＵ＿２−ａのことを「マスタＭＣＵ＿２−ａ」と称する。また、ＭＣＵ＿２−ｂのことを「エンドＭＣＵ＿２−ｂ」と称する。また、ＭＣＵ＿２−ａ，２−ｂを特に区別しないときは「ＭＣＵ＿２」と称する。
【００６０】
次に、図７を参照して、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの構成を説明する。マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとは同様の構成であるので、以下、ＭＣＵ＿２として、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの構成を説明する。
【００６１】
ＭＣＵ＿２は、ＣＰＵ＿１０と、フラッシュメモリ（flash memory）１１と、ＲＡＭ（ランダムアクセスメモリ）＿１２と、ブートローダ（boot loader）１３と、セキュアエレメント（secure element）１４を有する。セキュアエレメント１４は、セキュアＲＡＭ＿２１と、セキュアＲＯＭ（Read Only Memory：リードオンリメモリ）＿２２と、検証部２３と、暗号処理部２４を有する。
【００６２】
ＣＰＵ＿１０は、コンピュータプログラムを実行することにより、車両内の機器を制御するＥＣＵとしての機能およびＣＡＮにおけるノードとして機能を実現する。フラッシュメモリ１１は、ＣＰＵ＿１０で実行されるコンピュータプログラムと該コンピュータプログラムについての署名とを記憶する。ＲＡＭ＿１２はデータを記憶する。ＲＡＭ＿１２は、ＣＰＵ＿１０がコンピュータプログラムを実行する際の実行領域となる。
【００６３】
ブートローダ１３は、ＭＣＵ＿２の電源投入によりブート処理を行う。ブートローダ１３は、該ブート処理の内容を変更できないようにＲＯＭ化されている。
【００６４】
セキュアエレメント１４は、セキュアエレメント１４内部で保持されるデータに対してセキュアエレメント１４外部からアクセスできない安全な要素として構成される。セキュアＲＡＭ＿２１は、セキュアエレメント１４内部で保持されるデータの一時記憶領域である。セキュアＲＡＭ＿２１に対してセキュアエレメント１４外部からはアクセスできないように構成される。セキュアＲＯＭ＿２２は、セキュアエレメント１４内部で使用される鍵を記憶する。セキュアＲＯＭ＿２２に対してセキュアエレメント１４外部からはアクセスできないように構成される。セキュアＲＯＭ＿２２には、ＭＣＵ＿２の製造時などに、予め安全に鍵が書き込まれる。
【００６５】
検証部２３は、ブートローダ１３によるブート処理におけるプログラム正当性検証処理を、セキュアＲＯＭ＿２２に保持される署名検証鍵を使用して行う。検証部２３は、該プログラム正当性検証処理において、セキュアＲＡＭ＿２１を一時記憶領域として使用する。
【００６６】
暗号処理部２４は、自己のＭＣＵ＿２と他のＭＣＵ＿２との間で交換される情報についての暗号処理を、セキュアＲＯＭ＿２２に保持される暗号鍵を使用して行う。該暗号処理は、暗号化処理または復号化処理である。暗号処理部２４は、該暗号処理において、セキュアＲＡＭ＿２１を一時記憶領域として使用する。
【００６７】
次に、図８を参照して、本実施形態に係るブート処理を説明する。図８は、本実施形態に係るブート処理のシーケンスチャートである。ＭＣＵ＿２の電源投入により図８の処理が開始される。
【００６８】
（ステップＳ１）ブートローダ１３が、フラッシュメモリ１１からコンピュータプログラムと署名とを読み込む。次いで、ブートローダ１３が、該読み込んだコンピュータプログラムのハッシュ（hash）値を算出する。
【００６９】
（ステップＳ２）ブートローダ１３が、該算出したハッシュ値と、フラッシュメモリ１１から読み込んだ署名とをセキュアエレメント１４へ送信する。
【００７０】
（ステップＳ３）セキュアエレメント１４において検証部２３が、セキュアＲＯＭ＿２２に保持される署名検証鍵を使用して、ブートローダ１３から受信した署名に含まれる値とブートローダ１３から受信したハッシュ値との一致を検証する。この検証処理では、セキュアＲＡＭ＿２１が、検証処理におけるデータの一時記憶領域として使用される。該検証が成功した場合には、セキュアエレメント１４はブートローダ１３へ検証成功を通知する。
【００７１】
（ステップＳ４）ブートローダ１３は、セキュアエレメント１４から検証成功の通知を受信した場合に、ステップＳ１でフラッシュメモリ１１から読み込んだコンピュータプログラムをＲＡＭ＿１２へロードする。これにより、ＣＰＵ＿１０はＲＡＭ＿１２にロードされたコンピュータプログラムを実行することができる。
【００７２】
一方、ブートローダ１３は、セキュアエレメント１４からの検証成功の通知がない場合には（例えば、ステップＳ２の送信後から所定時間が経過してもセキュアエレメント１４から検証成功の通知を受信しなかったり、セキュアエレメント１４から検証失敗の通知を受信したりした場合）、ステップＳ１でフラッシュメモリ１１から読み込んだコンピュータプログラムをＲＡＭ＿１２へロードしない。この場合、ブートローダ１３がＭＣＵ＿２の起動を停止する。
【００７３】
上述した本実施形態に係るブート処理によれば、セキュアエレメント１４による署名検証によって、ＣＰＵ＿１０で実行されるコンピュータプログラムの正当性検証が安全に行われる。これにより、ＣＰＵ＿１０の実行領域であるＲＡＭ＿１２には正しいコンピュータプログラムがロードされ、該ＲＡＭ＿１２にロードされたコンピュータプログラムをＣＰＵ＿１０が実行することにより、ＭＣＵ＿２が正常に起動する。よって、本実施形態に係る通信ネットワークシステム１では、ＭＣＵ＿２の個々において、ＭＣＵ＿２の起動時に当該ＭＣＵ＿２のコンピュータプログラム（例えば、オペレーティングシステム（Operating System：ＯＳ）など）の正当性を検証するセキュアブート（Secure Boot）が実現される。なお、セキュアブートについては、例えば非特許文献５に記載されている。
【００７４】
次に、図９を参照して、本実施形態に係る暗号処理を説明する。図９は、本実施形態に係る暗号処理のシーケンスチャートである。所定の契機により図９の処理が開始される。ここでは、秘密の情報である乱数を、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂへ安全に通知する場面を例に挙げて説明する。なお、マスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂとの間のデータの送受は通信バス３を介して行われる。
【００７５】
（ステップＳ１１）マスタＭＣＵ＿２−ａが、自己のＲＡＭ＿１２に保持される初期乱数をチャレンジとしてエンドＭＣＵ＿２−ｂへ送信する。また、マスタＭＣＵ＿２−ａは、該エンドＭＣＵ＿２−ｂへチャレンジとして送信した初期乱数を、自己のセキュアエレメント１４へ渡す。
【００７６】
（ステップＳ１２）エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信したチャレンジである初期乱数を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された初期乱数を、自己のセキュアＲＯＭ＿２２に保持される秘密鍵Ｋｓを使用して暗号化する。この暗号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、暗号化処理におけるデータの一時記憶領域として使用される。次いで、エンドＭＣＵ＿２−ｂは、暗号化された初期乱数である暗号化データＫｓ（初期乱数）をレスポンスとしてマスタＭＣＵ＿２−ａへ送信する。
【００７７】
（ステップＳ１３）マスタＭＣＵ＿２−ａは、エンドＭＣＵ＿２−ｂから受信したレスポンスである暗号化データＫｓ（初期乱数）を、自己のセキュアエレメント１４に渡す。マスタＭＣＵ＿２−ａの暗号処理部２４は、該渡された暗号化データＫｓ（初期乱数）を、自己のセキュアＲＯＭ＿２２に保持される該当エンドＭＣＵ＿２−ｂの公開鍵Ｋｐを使用して復号化する。次いで、マスタＭＣＵ＿２−ａの暗号処理部２４は、該復号化により得られた復号化データと、ステップＳ１１でチャレンジとしてエンドＭＣＵ＿２−ｂへ送信された初期乱数との一致を検証する。それら復号化処理および検証処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、復号化処理および検証処理におけるデータの一時記憶領域として使用される。該検証の成功により、当該エンドＭＣＵ＿２−ｂの認証が成功したと判断できる。
【００７８】
該検証が成功した場合には、マスタＭＣＵ＿２−ａの暗号処理部２４は、秘密の情報である乱数を生成し、生成した乱数を、自己のセキュアＲＯＭ＿２２に保持される該当エンドＭＣＵ＿２−ｂの公開鍵Ｋｐを使用して暗号化する。それら乱数生成処理および暗号化処理では、マスタＭＣＵ＿２−ａのセキュアＲＡＭ＿２１が、乱数生成処理および暗号化処理におけるデータの一時記憶領域として使用される。次いで、マスタＭＣＵ＿２−ａは、暗号化された秘密の情報（乱数）である暗号化データＫｐ（乱数）をエンドＭＣＵ＿２−ｂへ送信する。
【００７９】
エンドＭＣＵ＿２−ｂは、マスタＭＣＵ＿２−ａから受信した暗号化データＫｐ（乱数）を、自己のセキュアエレメント１４に渡す。エンドＭＣＵ＿２−ｂの暗号処理部２４は、該渡された暗号化データＫｐ（乱数）を、自己のセキュアＲＯＭ＿２２に保持される秘密鍵Ｋｓを使用して復号化する。この復号化処理では、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１が、復号化処理におけるデータの一時記憶領域として使用される。該復号化処理によって暗号化データＫｐ（乱数）から、秘密の情報である乱数が取得される。該取得された乱数は、エンドＭＣＵ＿２−ｂのセキュアＲＡＭ＿２１で安全に保持される。
【００８０】
上述した本実施形態に係る暗号処理によれば、セキュアエレメント１４による暗号処理によって、ＭＣＵ＿２間（上述した例ではマスタＭＣＵ＿２−ａとエンドＭＣＵ＿２−ｂの間）で交換される情報の暗号処理（暗号化処理、復号化処理）が安全に行われる。これにより、ＭＣＵ＿２間で交換される情報の安全性が保たれる。
【００８１】
さらに、当該暗号処理に基づいたチャレンジ・レスポンスによって、マスタＭＣＵ＿２−ａがエンドＭＣＵ＿２−ｂの確かな認証を行うことができる。そして、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、当該暗号処理に基づいて秘密の情報を安全に送信することができる。この秘密の情報は、上述した第１実施形態における秘密情報として利用できる。上述した例では、マスタＭＣＵ＿２−ａからエンドＭＣＵ＿２−ｂに対して、安全に、秘密の情報である乱数が伝達される。
【００８２】
次に、図１０を参照して、本実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明する。図１０は、本実施形態に係るＭＡＣ生成処理およびＭＡＣ検査処理を説明するためのシーケンスチャートである。上述した図９に係る暗号処理によって、マスタＭＣＵ＿２−ａから認証済みのエンドＭＣＵ＿２−ｂに対して、秘密の情報である乱数が安全に送信されている。マスタＭＣＵ＿２−ａ及びエンドＭＣＵ＿２−ｂは、該秘密の情報である乱数をセキュアＲＡＭ＿２１に格納する。このセキュアＲＡＭ＿２１は、上述した第１実施形態における秘密情報記憶部１１７として、該乱数（秘密情報）を安全に保持する。
【００８３】
図１０において、送信側ＭＣＵ＿２は送信ノードとして動作する。送信側ＭＣＵ＿２はマスタＭＣＵ＿２−ａであってもよく、又は、エンドＭＣＵ＿２−ｂであってもよい。受信側ＭＣＵ＿２は受信ノードとして動作する。受信側ＭＣＵ＿２はマスタＭＣＵ＿２−ａであってもよく、又は、エンドＭＣＵ＿２−ｂであってもよい。送信側ＭＣＵ＿２は、ＲＡＭ＿１２に送信カウンタ値および送信データを保持している。受信側ＭＣＵ＿２は、ＲＡＭ＿１２に受信カウンタ値を保持している。図１０の処理は、送信側ＭＣＵ＿２から送信されるＣＡＮフレームを作成する際に開始される。
【００８４】
（ステップＳ２１）送信側ＭＣＵ＿２は、ＲＡＭ＿１２からセキュアＲＡＭ＿２１へ、送信データおよび送信カウンタ値を渡す。送信側ＭＣＵ＿２のセキュアエレメント１４は、セキュアＲＡＭ＿２１に保持される、乱数（秘密情報）と送信データと送信カウンタ値を使用して、ＭＡＣの生成を行う。このＭＡＣの生成方法は、上述した第１実施形態と同様である。但し、該ＭＡＣの生成は、セキュアＲＡＭ＿２１において安全に行われる。このＭＡＣの生成の結果としてＭＡＣ値のビット列中から抽出された１５ビットのビット列（ＣＲＣ部用抽出ＭＡＣビット列）は、セキュアＲＡＭ＿２１からＲＡＭ＿１２へ渡される。
【００８５】
（ステップＳ２２）送信側ＭＣＵ＿２は、ＣＡＮフレームに対して、ステップＳ２１でＲＡＭ＿１２からセキュアＲＡＭ＿２１へ渡した送信データをデータ部に格納し、ステップＳ２１でセキュアＲＡＭ＿２１からＲＡＭ＿１２へ渡されたＣＲＣ部用抽出ＭＡＣビット列をＣＲＣ部に格納する。送信側ＭＣＵ＿２は、該ＣＡＮフレームを通信バス３へ送信する。このＣＡＮフレームは、通信バス３を介して受信側ＭＣＵ＿２で受信される。
【００８６】
（ステップＳ２３）受信側ＭＣＵ＿２は、通信バス３から受信したＣＡＮフレームをＲＡＭ＿１２に保持する。受信側ＭＣＵ＿２は、ＲＡＭ＿１２に保持されるＣＡＮフレーム中のデータ部から取得した受信データとＣＲＣ部から取得した受信ＭＡＣ値とをセキュアＲＡＭ＿２１へ渡す。さらに、受信側ＭＣＵ＿２は、ＲＡＭ＿１２に保持されるＣＡＮフレーム中のＩＤ部に格納されているＩＤに対応する受信カウンタ値を、ＲＡＭ＿１２からセキュアＲＡＭ＿２１へ渡す。
【００８７】
次いで、受信側ＭＣＵ＿２のセキュアエレメント１４は、セキュアＲＡＭ＿２１に保持される、乱数（秘密情報）と受信データと受信カウンタ値を使用して、ＭＡＣの生成を行う。このＭＡＣの生成方法は、上述した第１実施形態と同様である。但し、該ＭＡＣの生成は、セキュアＲＡＭ＿２１において安全に行われる。このＭＡＣの生成の結果として算出ＭＡＣ値のビット列中から１５ビットの検査対象ビット列が抽出される。次いで、受信側ＭＣＵ＿２のセキュアエレメント１４は、セキュアＲＡＭ＿２１に保持される受信ＭＡＣ値と検査対象ビット列との一致を判定する。この判定の結果が不一致である場合には、上述した第１実施形態と同様に再検査が行われる。
【００８８】
上述したように本実施形態によれば、セキュアＲＡＭ＿２１に安全に保持される乱数（秘密情報）を使用してＭＡＣの生成および検査が行われる。これにより、ＣＡＮフレームの検査に対する信頼性が向上する。
【００８９】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【００９０】
例えば、上述した実施形態では、１台のＭＣＵ＿２が送信ノードの機能と受信ノードの機能とを有したが、１台のＭＣＵ＿２が送信ノードの機能のみを有してもよく、又は、１台のＭＣＵ＿２が受信ノードの機能のみを有してもよい。
【００９１】
また、一つのＭＣＵ＿２が一つの半導体装置として構成されてもよい。一つのＭＣＵ＿２が一つの半導体集積回路としてワンチップ化されることにより、安全性がさらに向上する。
【００９２】
また、セキュアエレメントとして、例えば、無線通信に使用されるｅＳＩＭ（Embedded Subscriber Identity Module）又はＳＩＭ（Subscriber Identity Module）を使用してもよい。ｅＳＩＭおよびＳＩＭは、コンピュータの一種であり、コンピュータプログラムによって所望の機能を実現する。又は、セキュアエレメントとして、耐タンパー性（Tamper Resistant）のある暗号処理チップを使用してもよい。耐タンパー性のある暗号処理チップとして、例えば、ＴＰＭ（Trusted Platform Module）と呼ばれる暗号処理チップが知られている。ＴＰＭについては、例えば非特許文献６に記載されている。
【００９３】
また、上述した実施形態は、車両として、例えば、自動車、原動機付自転車、鉄道車両等に適用可能である。
【００９４】
また、上述した実施形態では、本発明に係る通信ネットワークシステムの一態様として、車両に搭載される通信ネットワークシステムを例に挙げて説明したが、本発明に係る通信ネットワークシステムは様々な分野に適用可能である。例えば、家電製品を制御するコンピュータとしてＭＣＵ＿２を適用し、宅内の各家電製品のＭＣＵ＿２を宅内ネットワークで接続するように構成してもよい。また、スマートメーターとしてＭＣＵ＿２を適用し、各スマートメーターのＭＣＵ＿２を通信ネットワークで接続するように構成してもよい。
【００９５】
［メッセージ作成方法の実施形態］
本発明の一実施形態に係るメッセージ作成方法を説明する。本実施形態では、メッセージの例として、ＣＡＮのデータフレームを挙げて説明する。図１１はＣＡＮの標準フォーマットのデータフレームを示す構成図である。図１２はＣＡＮの拡張フォーマットのデータフレームを示す構成図である。ＣＡＮのデータフレームについては、例えば非特許文献７に記載される。図１１及び図１２のデータフレームにおいて、各フィールド中に示されるカッコ内の数字は、当該フィールドに格納される情報のビット数を示している。
【００９６】
本実施形態では、データフレーム中のデータ部（Data Field：データフィールド）に、ＭＡＣを格納する。図１１の標準フォーマット及び図１２の拡張フォーマットにおいて、データ部には最大８バイトのデータを格納できる。ＭＡＣは、データ部内の所定の場所に格納される。例えば、データ部の先頭部分又は最後方部分に格納することが挙げられる。但し、最後方部分に格納する方が、データ部の既存の使用方法に対する影響が少ないと考えられる。
【００９７】
次に図１３を参照して、本実施形態に係るデータフレーム作成方法を説明する。図１３は、本発明の一実施形態に係るメッセージ作成方法を示す説明図である。図１３では、データ部に格納するＭＡＣのデータ長の例として４バイトとする。したがって、データ部に格納できる送信データのデータ長は最大４バイトである。このため、送信データのデータ長が４バイト超である場合には、送信データを分割し、分割された送信データ毎にＭＡＣを生成し、分割された送信データとＭＡＣとの組の各々を別々にデータフレームのデータ部に格納する。
【００９８】
ここでは、図１３に示されるように、送信データは８バイトであるとする。送信データは図２に示される送信部１１１とＭＡＣ生成部１１４との両方に入力される。送信データが送信部１１１及びＭＡＣ生成部１１４に入力されると、図１３の処理が開始される。
【００９９】
（ステップＳ２０１）送信部１１１は、入力された８バイトの送信データを、４バイトずつの第１送信データと第２送信データとに分割する。例えば、入力された８バイトの送信データのうち、上位４バイトを第１送信データとし、下位４バイトを第２送信データとする。ＭＡＣ生成部１１４は、送信部１１１と同じ方法で、入力された８バイトの送信データを、４バイトずつの第１送信データと第２送信データとに分割する。
【０１００】
（ステップＳ２０２）ＭＡＣ生成部１１４は、４バイトの第１送信データを使用して、４バイトの第１ＭＡＣを生成する。この第１ＭＡＣの生成方法は、上述した図４に示される第１実施形態のＭＡＣ生成方法と同じである。但し、図４のステップＳ１１２においてＭＡＣの計算に使用される送信データは第１送信データである。また、図４のステップＳ１１３において、ステップＳ１１２で第１送信データを使用して算出されたＭＡＣのビット列から抽出されるビット列（抽出値）は４バイトである。この４バイトの抽出値が第１ＭＡＣである。
【０１０１】
（ステップＳ２０３）送信部１１１は、第１データフレームのデータ部に、第１送信データと第１ＭＡＣとを格納する。送信部１１１は、第１データフレームを通信バス３へ送信する。カウンタ部１１５は、該第１データフレームの送信により送信カウンタ値を１だけ増加させて保持する。
【０１０２】
（ステップＳ２０４）ＭＡＣ生成部１１４は、４バイトの第２送信データを使用して、４バイトの第２ＭＡＣを生成する。この第２ＭＡＣの生成方法は、上述した図４に示される第１実施形態のＭＡＣ生成方法と同じである。但し、図４のステップＳ１１２においてＭＡＣの計算に使用される送信データと上位抽出ビットとに関して、送信データは第２送信データであり、上位抽出ビットの取得元の送信カウンタ値は上記ステップＳ２０３の第１データフレームの送信により１だけ増加された送信カウンタ値である。また、図４のステップＳ１１３において、ステップＳ１１２で第２送信データを使用して算出されたＭＡＣのビット列から抽出されるビット列（抽出値）は４バイトである。この４バイトの抽出値が第２ＭＡＣである。
【０１０３】
（ステップＳ２０５）送信部１１１は、第２データフレームのデータ部に、第２送信データと第２ＭＡＣとを格納する。送信部１１１は、第２データフレームを通信バス３へ送信する。カウンタ部１１５は、該第２データフレームの送信により送信カウンタ値を１だけ増加させて保持する。
【０１０４】
上述したデータフレーム作成方法によれば、ＭＡＣのデータ長を所定の長さ（例えば４バイト）に保ちつつ、データフレームのデータ部に送信データとＭＡＣとを格納することができる。これにより、メッセージを送信する送信ノードと該メッセージを受信する受信ノードが接続される通信ネットワークシステムにおけるメッセージ検査性能を向上させることができるという効果が得られる。
【０１０５】
なお、入力された一の送信データから分割された第１送信データと第２送信データとの各々が別々に格納された第１データフレームと第２データフレームとに同じラベルを付けることにより、受信ノードに対して、同じラベルが付された第１データフレームと第２データフレームとの各データ部内の送信データから一の送信データが構成されることを通知してもよい。
【０１０６】
また、上述したデータフレーム作成方法では、送信部１１１とＭＡＣ生成部１１４との両方が各々、入力された送信データを第１送信データと第２送信データとに分割したが、送信部１１１が、入力された送信データを第１送信データと第２送信データとに分割し、第１送信データと第２送信データとをＭＡＣ生成部１１４へ供給してもよい。
【０１０７】
また、上述したデータフレーム作成方法では、データフレームに格納するＭＡＣの生成方法として、上述した図４に示される第１実施形態のＭＡＣ生成方法を使用したがこれに限定されず、他のＭＡＣ生成方法を使用してもよい。例えば、非特許文献８に記載されるＭＡＣ生成方法を使用してもよい。
【０１０８】
また、データフレームに格納するＭＡＣのデータ長は、送信ノードと受信ノードとの組毎に決めてもよい。この場合、送信ノードと受信ノードとの組毎に、データフレームに格納するＭＡＣのデータ長が設定される。
【０１０９】
例えば、図１に示される通信ネットワークシステム１が自動車に搭載され、ＭＣＵ＿２が自動車内の機器を制御する電子制御ユニット（ＥＣＵ）として利用されるとする。自動車内の機器を制御するための情報はデータフレームを使用してＥＣＵ（ＭＣＵ＿２）間で送受される。該情報の送受のＥＣＵ（ＭＣＵ＿２）の組毎に、データフレームに格納するＭＡＣのデータ長を決める。例えば、ＥＣＵ（ＭＣＵ＿２）が有する制御機能の重要度に応じて、当該ＥＣＵ（ＭＣＵ＿２）と通信相手のＥＣＵ（ＭＣＵ＿２）との間で交換するデータフレームに格納するＭＡＣのデータ長を決める。例えば、該重要度が高いほどにＭＡＣのデータ長を長くする。なお、ＥＣＵ（ＭＣＵ＿２）が有する制御機能の重要度が低い場合、当該ＥＣＵ（ＭＣＵ＿２）と通信相手のＥＣＵ（ＭＣＵ＿２）との間で交換するデータフレームにはＭＡＣを格納しないようにしてもよい。
【０１１０】
又は、ＥＣＵ（ＭＣＵ＿２）の組毎に、データフレームを使用して送受する送信データの最大データ長に応じて、データフレームに格納するＭＡＣのデータ長を決めてもよい。例えば、最大データ長の送信データをデータ部に格納した場合のデータ部の空きサイズの範囲内で、データフレームに格納するＭＡＣのデータ長を決める。この場合、データ部には最大データ長の送信データとＭＡＣとが格納できるので、送信データを分割して別々のデータフレームで送信する必要がない。
【０１１１】
［ＭＡＣの例］
ＭＡＣとして、例えば、ハッシュ（Hash）値を算出することが挙げられる。ハッシュ値の算出方法として、例えば、SHA-256が挙げられる。又は、ＭＡＣとして、例えば、Code MAC（CMAC）を算出することが挙げられる。ＣＭＡＣは共通鍵暗号ベースのＭＡＣである。
【０１１２】
また、上述したＭＣＵ＿２の機能を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行するようにしてもよい。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＤＶＤ（Digital Versatile Disk）等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。
【０１１３】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータ内部の揮発性メモリ（例えばＤＲＡＭ（Dynamic Random Access Memory））のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【０１１４】
１…通信ネットワークシステム、２，２−ａ，２−ｂ…ＭＣＵ、３…通信バス、１０…ＣＰＵ、１１…フラッシュメモリ、１２…ＲＡＭ、１３…ブートローダ、１４…セキュアエレメント、２１…セキュアＲＡＭ、２２…セキュアＲＯＭ、２３…検証部、２４…暗号処理部、１１１…送信部、１１２…受信部、１１３…フレーム受信処理部、１１４…ＭＡＣ（メッセージ認証コード）生成部、１１５…カウンタ部、１１６…ＭＡＣ（メッセージ認証コード）検査部、１１７…秘密情報記憶部
【図１】
2016012912.tif 000003
【図２】
2016012912.tif 000004
【図３】
2016012912.tif 000005
【図４】
2016012912.tif 000006
【図５】
2016012912.tif 000007
【図６】
2016012912.tif 000008
【図７】
2016012912.tif 000009
【図８】
2016012912.tif 000010
【図９】
2016012912.tif 000011
【図１０】
2016012912.tif 000012
【図１１】
2016012912.tif 000013
【図１２】
2016012912.tif 000014
【図１３】
2016012912.tif 000015