реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> бесконтактная карта MIFARE 1k где взять описание протокола
RodionGork
сообщение Jul 16 2008, 13:09
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 239
Регистрация: 30-10-07
Из: Санкт-Петербург
Пользователь №: 31 866



Привет, товарищи!

Тут творится считыватель бесконтактных смарт-карт (на микросхеме MF RC531) и имеется пачка карт типа MIFARE 1K S50 (более точно MF1 MOA2 S50).

Заставил работать считыватель.
Послал карте REQA.
Получил ее UID.
Послал SELECT с полным UID.
Получил SAK=08.

Это все было в рамках стандарта ISO 14443-3.

Теперь надо обращаться к блокам памяти и как-то с доступом разбираться. Но карта не поддерживает протокола обмена ISO 14443-4, поэтому я не знаю, что с ней дальше делать.

По-видимому мне нужны команды authentication, записи и чтения данных. Да и ключ KeyA хорошо бы знать (хотя я подозреваю, какой он изначально).

Прошу помочь, если у кого есть описание протокола от NXP для этих карт или ссылка на него.

с почтеньем,
Родион

Сообщение отредактировал RodionGork - Jul 16 2008, 13:12
Go to the top of the page
 
+Quote Post
navy2000
сообщение Jul 17 2008, 06:14
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 17-07-06
Пользователь №: 18 874



Вся документация предоставляется NXP по договору NDA. Если у вас есть такой договор с ними, то нет проблем у них на сайте в закрытых pdf-ках все есть. Давно занимался этой проблемой, по моему вам нужно искать ISO14443-3. В принципе все семейство гостов 14443 я в свое время нашел в открытом доступе. От себя могу приложить один общий документ, он вроте как Public.
p.s. ключи в чистой карте зашиты по дефолту.
Прикрепленные файлы
Прикрепленный файл  MIFARE_Interface_Platform_Type_Identification_Procedure.pdf ( 394.24 килобайт ) Кол-во скачиваний: 1282
 
Go to the top of the page
 
+Quote Post
RodionGork
сообщение Jul 19 2008, 10:48
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 239
Регистрация: 30-10-07
Из: Санкт-Петербург
Пользователь №: 31 866



Спасибо за интересный ответ, хотя, похоже я недостаточно ясно написал свой интересный вопрос. То что было по 14443-3 я все сделал уже на тот момент.

Информация о дальнейшем общении с картой (том протоколе, что вместо 14443-4 используется данной картой) организацией NXP не распространяется (за исключением впрочем, одной библиотечки без описания). Однако все же я что нужно отыскал и разобрался на следующий день - теперь карты пишутся, читаются, шифруются, ключи меняются. В общем, всем спасибо. ;-)

Если кто застрянет на том же самом месте - пишите в мыло - попробую подсказать.
Go to the top of the page
 
+Quote Post
Zlumd
сообщение Mar 23 2009, 11:41
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



Наша организация 5 лет назад заключала договор NDA с Филипсом. Тогда мы сделали считыватель с карточками Mifare Std 1K (MF1 IC S50). Теперь нужно научиться общаться с карточками DESFire 4K (MF3 IC D41).
Как узнать пароли на закодированные PDFники на сайте Филипса? Нужно писать им в тех. поддержку ссылаясь на номер договора и просить пароли?
Go to the top of the page
 
+Quote Post
woodman
сообщение Mar 26 2009, 02:28
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 30-05-05
Пользователь №: 5 537



Цитата(Zlumd @ Mar 23 2009, 14:41) *
Наша организация 5 лет назад заключала договор NDA с Филипсом. Тогда мы сделали считыватель с карточками Mifare Std 1K (MF1 IC S50). Теперь нужно научиться общаться с карточками DESFire 4K (MF3 IC D41).
Как узнать пароли на закодированные PDFники на сайте Филипса? Нужно писать им в тех. поддержку ссылаясь на номер договора и просить пароли?

Надо заполнить специальную форму, pdf файл для запроса конкретной иформации по конкретному изделию находите на сайте Филипса, и посылаете Е-Маилом. Отвечают довольно лперативно.
Go to the top of the page
 
+Quote Post
Zlumd
сообщение Apr 15 2009, 02:17
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



В блоках типа Value в картах Mifare Std 1K можно хранить одно 4-х байтовое число Value и одно однобайтовое число Adr в следующем формате:

4 байта Value
4 байта инверсное Value
4 байта Value
1 байт Adr
1 байт инверсный Adr
1 байт Adr
1 байт инверсный Adr

Подскажите, для чего нужны поля Adr в блоках типа Value. Как их может использовать сама карточка?
Можно ли вместо Adr, ~Adr, Adr, ~Adr хранить произвольное 4-х байтовое число?
Go to the top of the page
 
+Quote Post
Jhohn
сообщение Aug 23 2016, 12:51
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-08
Пользователь №: 41 579



На карте DESFire Mifare у меня проблемы с аутинтификацией (функцией phalMfdf_AuthenticateISO() ).
Кто работал с этой картой подскажите, пожалуйста, что не так.

CODE
uint8_t bLength; /**< Length */
uint8_t aSak[1]; /**< Select Acknowledge; uint8_t. */
uint8_t aUid[10]; /**< complete Uid; uint8_t[4/7/10]. */
uint8_t bMoreCardsAvaliable; /**< more card available */


#define NUMBER_OF_KEYVERSIONPAIRS 1 //! for Classic

/* Initialize the keystore component */
status = phKeyStore_Sw_Init(
&pKeyStore,
sizeof(phKeyStore_Sw_DataParams_t),
&sKeyEntries[0],
0xFF,
&sKeyVersionPairs[0],
NUMBER_OF_KEYVERSIONPAIRS,
&sKUCEntries[0],
0xFF);
CHECK_SUCCESS(status);







/* Default PICC key */
static uint8_t bDefaultPICCKey[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };


#define PICCKEY_ADDRESS 0x15 /* PICC Key entry number in key store. */

#define SL_3_AES_KEY_VERSION 0x00 /**< SL2 key version in keystore */


phalMfdf_Sw_DataParams_t alMfdf;


phCryptoSym_Sw_DataParams_t CryptoEnc;
phCryptoSym_Sw_DataParams_t CryptoMac;
phCryptoSym_Sw_DataParams_t CryptoDiv;
phCryptoSym_Sw_DataParams_t CryptoRngCrypto;
phCryptoRng_Sw_DataParams_t CryptoRng;




/* initialise Crypto components */
status = phCryptoSym_Sw_Init(&CryptoEnc, sizeof(CryptoEnc), &pKeyStore);
CHECK_SUCCESS(status);
status = phCryptoSym_Sw_Init(&CryptoMac, sizeof(CryptoMac), &pKeyStore);
CHECK_SUCCESS(status);
status = phCryptoSym_Sw_Init(&CryptoDiv, sizeof(CryptoDiv), &pKeyStore);
CHECK_SUCCESS(status);
status = phCryptoSym_Sw_Init(&CryptoRngCrypto, sizeof(CryptoRngCrypto), &pKeyStore);
CHECK_SUCCESS(status);

/* initialise Crypto Rng component */
status = phCryptoRng_Sw_Init(&CryptoRng, sizeof(CryptoRng), &CryptoRngCrypto);
CHECK_SUCCESS(status);











/*Intialize the crypto components */
status = phCryptoSym_Sw_Init(&CryptoEnc, /**< [In] Pointer to this layer's parameter structure. */
sizeof(phCryptoSym_Sw_DataParams_t), /**< [In] Specifies the size of the data parameter structure */
&pKeyStore); /**< [In] Pointer to a key store structure (can be null).*/
CHECK_SUCCESS(status);

status = phCryptoSym_Sw_Init(&CryptoRngCrypto, /**< [In] Pointer to this layer's parameter structure. */
sizeof(phCryptoSym_Sw_DataParams_t), /**< [In] Specifies the size of the data parameter structure */
&pKeyStore); /**< [In] Pointer to a key store structure (can be null).*/
CHECK_SUCCESS(status);

status = phCryptoRng_Sw_Init(&CryptoRng, /**< [In] Pointer to this layer's parameter structure. */
sizeof(phCryptoRng_Sw_DataParams_t), /**< [In] Specifies the size of the data parameter structure */
&CryptoRngCrypto); /**< [In] Pointer to the parameter structure of the symmetric crypto layer. */
CHECK_SUCCESS(status);

status = phhalHw_FieldReset(&sHal_Nfc_Ic.sHal); /**< [In] Pointer to the parameter structure of the underlying HAL layer. */
CHECK_SUCCESS(status);

/* Activate Layer 3 card. In loop till a card is detected. */
status = phpalI14443p3a_ActivateCard(&spalI14443p3a, /**< [In] PAL-ISO14443P3A parameter structure */
NULL, /**< [In] Known Uid */
0x00, /**< [In] Known Uid length */
aUid, /**< [Out] Complete Uid */
&bLength, /**< [Out] Lenght Uid **/
&aSak, /**< [out] SAK */
&bMoreCardsAvaliable); /**< [Out] Whether there are more cards in the field or not */
CHECK_SUCCESS(status);

/* Send RATS */
status = phpalI14443p4a_Rats(&spalI14443p4, /**< [In] PAL-ISO14443P4A parameter structure */
0x08, /**< [In] Frame size integer */
0x01, /**< [In] Card Identifier */
pAts); /**< [Out] Answer to select */
CHECK_SUCCESS(status);

/* Send PPS */
status = phpalI14443p4a_Pps(&spalI14443p4, /**< [In] PAL-ISO14443P4A parameter structure */
0x00, /**< [In] Divisor Receive (PCD to PICC) Integer */
0x00); /**< [In] Divisor Send (PICC to PCD) Integer */
CHECK_SUCCESS(status);



// status = StoreKeysInKeyStore_desfire(&pKeyStore);

/* Set the default PICC Master key in the key store */
status = phKeyStore_FormatKeyEntry(&pKeyStore, PICCKEY_ADDRESS, PH_CRYPTOSYM_KEY_TYPE_2K3DES);
CHECK_SUCCESS(status);

status = phKeyStore_SetKeyAtPos(&pKeyStore,
PICCKEY_ADDRESS,
0x00,
PH_CRYPTOSYM_KEY_TYPE_2K3DES,
bDefaultPICCKey,
0x00);
CHECK_SUCCESS(status);


// /* Authenticating the Desfire Ev1 with PICC Master key stored above */
// status = phalMfdf_AuthenticateAES(&alMfdf, /* [In] Pointer to parameters data structure */
// PHAL_MFDF_NO_DIVERSIFICATION, /* [In] Diversification option */
// PICCKEY_ADDRESS, /* [In]KEY number in key store */
// 0x00, /* [In] Key version in key store */
// 0x00, /* [In] Key number on Card */
// NULL, /* [In] Diversification input */
// 0); /* [In] Diversification input length */
// CHECK_SUCCESS(status);

//status = phhalHw_FieldReset(&sHal_Nfc_Ic.sHal); /**< [In] Pointer to the parameter structure of the underlying HAL layer. */
//CHECK_SUCCESS(status);

status = phalMfdf_AuthenticateISO(&alMfdf, /* [In] Pointer to parameters data structure */
PHAL_MFDF_NO_DIVERSIFICATION, /* [In] Diversification option */
PICCKEY_ADDRESS, /* [In]KEY number in key store */
0x00, /* [In] Key version in key store */
0x00, /* [In] Key number on Card */
NULL, /* [In] Diversification input */
0); /* [In] Diversification input length */
CHECK_SUCCESS(status);
/* Pre personalization */
//status = PrePersonalization_AFCApp(&alMfdf, bCardUid);
CHECK_SUCCESS(status);


/* Authenticate with the PICC Master key */
status = phalMfdf_AuthenticateISO(&alMfdf, /* [In] Pointer to parameters data structure */
PHAL_MFDF_NO_DIVERSIFICATION, /* [In] Diversification option */
PICCKEY_ADDRESS, /* [In]KEY number in key store */
0x00, /* [In] Key version in key store */
0x00, /* [In] Key number on Card */
NULL, /* [In] Diversification input */
0); /* [In] Diversification input length */
CHECK_SUCCESS(status);


Сообщение отредактировал l1l1l1 - Aug 24 2016, 17:44
Go to the top of the page
 
+Quote Post
Jhohn
сообщение Aug 24 2016, 09:35
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-08
Пользователь №: 41 579



Разобрался. Надо внимательней смотреть примеры.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 18:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016