0

Omnikey 5321 リーダーを使用して、Mifare DESFire EV1 タグと通信しています。標準データ ファイルで 40 バイトを読み取りたい。Winscard DLL (c++) を使用して、ISO 7816 APDU メッセージ構造でネイティブ desfire コマンドをラップしています。

アプリ選択もAES認証もOK。データ読み取りコマンドに問題があります。通信設定は 0x03 (完全暗号化) に設定されます。

APDU sended :
0x90 BD 00 00 07 01 00 00 00 28 00 00 00

48 データ バイトと "0x9100" ステータス コードを受け取りました。データの復号化に使用する IV を計算するには:

最初に XOR (0xBD 01 00 00 00 28 00 00 80 00 00 00 00 00 00 00) と AES 認証後に計算されたサブキー 2)。

次に、Init Vector を 0x00 に設定し、セッション キーを使用して結果を暗号化します。暗号化されたデータは IV と見なされます。

最後に、IV とセッション キーで受信した 48 データ バイトを復号化します。

I get :
40 data bytes + 4 CRC bytes + 4 padding bytes (0x00 00 00 00)

40 データ バイトは良い場合もあれば、間違っている場合もあります。なぜいつも同じ結果にならないのかわかりません。復号化された CRC は常に同じであり、パディングも同じです。

別のファイルのプレーン データを読み込もうとしても、問題はありません。ですから、問題なのは解読だと思います。ただし、CRC とパディングは常に同じとは限りません。

いくつかのヘルプは非常に便利です

4

1 に答える 1

1

さて、私は推測を危険にさらします: CBC モードで AES 復号化を使用していますか? その場合は、正しい IV と復号化するための正しいキーが必要です。

正しいキーを持っていても、IV が間違っている場合、暗号文を復号化できますが、復号化された平文の最初の 16 バイトは正しくありません。CRC とパディング バイトは最初の 16 バイトに含まれていないため、IV が間違っていても、常に正しくなります。不正な IV は、復号化出力の最初の 16 バイトのみを破損します。

したがって、データ バイトが間違っている場合、最初の 16 バイトだけが間違っている場合、および CBC モードを使用している場合は興味深いでしょう。その場合は、IV を参照してください。

于 2014-06-11T00:50:52.270 に答える