はじめに
今回は、FeliCa Lite-Sのセキュリティ(メッセージ認証)を使用してみました。
カードを認証する内部認証を行ってみました。
FeliCa Lite-S ユーザーズマニュアル
5.4.1 内部認証
使用機器
PN5180 NFC RFセンサーモジュール
FeliCa Lite-S RC-S966
準備
セキュリティを使用するために鍵を準備します。
今回の動作確認では、下記の鍵を使用しました。
鍵 | 値 |
---|---|
CK1 | 0xAB 0xE6 0xF4 0xE3 0x92 0xEC 0x58 0xB9 |
CK2 | 0xD5 0x34 0x5D 0x3D 0xA2 0x8C 0x75 0x15 |
Writeコマンドを使用して事前に鍵を書き込んでおく必要があります。
※鍵は1度書き込みを行えば電源をオフしても記憶されています。
手順
手順1. ランダムチャレンジ(RC1、RC2)を書き込みます。
手順2. ID、CKV、MAC_Aを同時に読み出します。
手順3. MACを計算して、読み出したMAC_Aと比較します。
FeliCa Lite-Sでのメッセージ認証ではセッション鍵を使用します。
セッション鍵は、鍵(CK1、CK2)とランダムチャレンジ(RC1、RC2)から作られます。
動作確認のためランダムチャレンジの値を固定値としました。
※ランダムチャレンジの値は、電源がオフされると消えてしまいます。
ランダムチャレンジ | 値 |
---|---|
RC1 | 0x40 0x49 0x54 0xF4 0x0B 0xEA 0xA8 0xA8 |
RC2 | 0x16 0x0E 0xFD 0x98 0xA4 0x89 0x04 0x16 |
鍵とランダムチャレンジから生成されるセッション鍵(SK1、SK2)は下記となります。
セッション鍵 | 値 |
---|---|
SK1 | 0x02 0x47 0x1A 0xD7 0x51 0xCD 0x00 0x25 |
SK2 | 0xD1 0x07 0xAC 0x7C 0xBB 0xB8 0x43 0x45 |
セッション鍵の生成方法は、
FeliCa Lite-S ユーザーズマニュアル
5.1.1 読み出し時のMAC生成方法
となります。
セッション鍵について
鍵とランダムチャレンジから作成したセッション鍵はパリティが合っていません。パリティの設定は合っていませんがMACは正しく生成されます。DESの計算過程でパリティビットは取り除かれるためだと思われます。
ここまでで、鍵の準備ができました。
鍵の準備ができたので内部認証を行います。
内部認証は、FeliCa Lite-SからIDとCKVとMAC_Aを読み出して、FeliCa Lite-Sから読み出したMACと、自分で算出したMACが一致することで認証となります。
今回の動作確認で使用したFeliCa Lite-SのIDです。
ID | 値 |
---|---|
ID | 0x01 0x2E 0x50 0xE7 0xDA 0xC7 0x8B 0x47 |
カード鍵バージョン(CKV)は
0x00
としています。
ランダムチャレンジ(RC1)とセッション鍵(SK1、SK2)と受信データから生成したMACは下記になります。
MAC | 値 |
---|---|
MAC | 0x68 0x1B 0x71 0xBD 0x41 0xC5 0x03 0x01 |
FeliCa Lite-Sから取得したMAC_Aの値と一致すれば内部認証が完了となります。
MACの生成方法は、
FeliCa Lite-S ユーザーズマニュアル
5.2.1 読み出し時のMAC生成方法
となります。
MACの生成について
MACを生成するときは、受信データを使用しますが、MAC_Aの受信データは使用しません。
MACを生成する際にブロック番号を使用しますが、こちらについては、MAC_Aのブロック番号も使用します。
今回は、IDとCKVとMAC_Aを読み出したので、MACを生成するのに使用するブロック番号は
0x82 0x00 0x86 0x00 0x91 0x00 0xFF 0xFF
となります。
MACの生成にMAC_Aの受信データは使用しないので、MACの生成にはIDとCKVの受信データを使用します。今回の場合は、
IDの受信データ
0x01 0x2E 0x50 0xE7 0xDA 0xC7 0x8B 0x47
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
CKVの受信データ
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
となります。
編集後記
次回は、MACつき書き込みを行ってみたいと思います。