Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: бесконтактная карта MIFARE 1k где взять описание протокола
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
RodionGork
Привет, товарищи!

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

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

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

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

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

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

с почтеньем,
Родион
navy2000
Вся документация предоставляется NXP по договору NDA. Если у вас есть такой договор с ними, то нет проблем у них на сайте в закрытых pdf-ках все есть. Давно занимался этой проблемой, по моему вам нужно искать ISO14443-3. В принципе все семейство гостов 14443 я в свое время нашел в открытом доступе. От себя могу приложить один общий документ, он вроте как Public.
p.s. ключи в чистой карте зашиты по дефолту.
RodionGork
Спасибо за интересный ответ, хотя, похоже я недостаточно ясно написал свой интересный вопрос. То что было по 14443-3 я все сделал уже на тот момент.

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

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

Надо заполнить специальную форму, pdf файл для запроса конкретной иформации по конкретному изделию находите на сайте Филипса, и посылаете Е-Маилом. Отвечают довольно лперативно.
Zlumd
В блоках типа 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-х байтовое число?
Jhohn
На карте 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);
Jhohn
Разобрался. Надо внимательней смотреть примеры.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.