Перейти к содержанию
    

бесконтактная карта MIFARE 1k где взять описание протокола

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

 

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

 

Заставил работать считыватель.

Послал карте REQA.

Получил ее UID.

Послал SELECT с полным UID.

Получил SAK=08.

 

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

 

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

 

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

 

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

 

с почтеньем,

Родион

Изменено пользователем RodionGork

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

p.s. ключи в чистой карте зашиты по дефолту.

MIFARE_Interface_Platform_Type_Identification_Procedure.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Если кто застрянет на том же самом месте - пишите в мыло - попробую подсказать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наша организация 5 лет назад заключала договор NDA с Филипсом. Тогда мы сделали считыватель с карточками Mifare Std 1K (MF1 IC S50). Теперь нужно научиться общаться с карточками DESFire 4K (MF3 IC D41).

Как узнать пароли на закодированные PDFники на сайте Филипса? Нужно писать им в тех. поддержку ссылаясь на номер договора и просить пароли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наша организация 5 лет назад заключала договор NDA с Филипсом. Тогда мы сделали считыватель с карточками Mifare Std 1K (MF1 IC S50). Теперь нужно научиться общаться с карточками DESFire 4K (MF3 IC D41).

Как узнать пароли на закодированные PDFники на сайте Филипса? Нужно писать им в тех. поддержку ссылаясь на номер договора и просить пароли?

Надо заполнить специальную форму, pdf файл для запроса конкретной иформации по конкретному изделию находите на сайте Филипса, и посылаете Е-Маилом. Отвечают довольно лперативно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В блоках типа 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-х байтовое число?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Кто работал с этой картой подскажите, пожалуйста, что не так.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...