xNT as computer login?


#1

I’m looking to simply use an xNT as a means of logging into my Mac. Is there a reader on the market that is compatible with Mac and would work for this purpose?


#2

Logging into Apple devices is not very fun. Apple is slowly creating some native smart card support, but this is only applicable to traditional smart cards. We are working on a solution based on VivoKey that involves developing a compatible VivoKey java card applet. At the moment, there doesn’t appear to be any native options for logging into OS X using any non-smart RFID/NFC tags.

When it comes to a reader, I would suggest looking at the ACR122U… but this is just the reader and drivers. You would still need to secure a 3rd party authentication app that would enable logon using a simple RFID/NFC tag. The security of this would be suspect of course, and who knows if it would survive an OS update… a common problem with Apple’s OS releases breaking certain types of 3rd party solutions without warning.

If you come across any ideas in your search, post them and I’d be happy to offer my thoughts.


#3

What all was used in this video for waking and unlocking OSX with the xNT?


#5

The OSX login was performed by someone else. We did not create that video segment. It uses an Arduino and NFC reader (PN532 I believe) to “type” a password into OSX via USB HID profile… so basically present the correct NFC tag, the Arduino looks up an internally stored password for that UID and “types” it to OSX. It’s a proof of concept more than it is a robust solution.


#6

I have meddled with this and have succeeded in creating a rather neat device. It is an arduino nano powered off a teensy 3.2. The teensy is a keyboard simulator which is programmed to press the command key on the mac (to wake the screen), insert my password, and select enter. The arduino is connected to an nfc sensor (522) and when the correct tag is read it sends a signal to the teensy to start its program. Here is a pic and the code (the code is a mess and there are two different communication pins because my soldering was sh!t and something was shorted). The cool thing about this is that no software is needed on the computer end.

Teensy code:
void setup() {
pinMode(2,INPUT);
}

void loop() {
if(digitalRead(2) == HIGH){
Keyboard.set_modifier(MODIFIERKEY_GUI);
Keyboard.send_now();
Keyboard.set_modifier(0);
Keyboard.send_now();
delay(1000);
Keyboard.print(“Da passwd”);
Keyboard.set_key1(KEY_ENTER);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
delay(5000);
}
}

Arduino code:
#include “SPI.h”
#include “MFRC522.h”
//RST D9
//SPI SS D10
//SPI MOSI D11
//SPI MISO D12
//SPI SCK D13
#define SS_PIN 10
#define RST_PIN 9
#define ON_PIN 3
#define OFF_PIN 7
MFRC522 rfid(SS_PIN, RST_PIN);
int counter = 0;

MFRC522::MIFARE_Key key;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(ON_PIN, OUTPUT);
pinMode(OFF_PIN, OUTPUT);
Serial.println(“I am waiting for card…”);
}

void loop() {
// put your main code here, to run repeatedly:
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;

// Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// Serial.println(rfid.PICC_GetTypeName(piccType));

// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F(“Your tag is not of type MIFARE Classic.”));
return;
}
String strID = “”;
for (byte i = 0; i < 4; i++) {
strID +=
(rfid.uid.uidByte[i] < 0x10 ? “0” : “”) +
String(rfid.uid.uidByte[i], HEX) +
(i != 3 ? “:” : “”);
}

strID.toUpperCase();
Serial.print("Tap card key: ");
Serial.println(strID);
delay(1000);

if (strID.indexOf(“65:5B:E9:BE”) >= 0) { //put your own tap card key;
Serial.println(“");
Serial.println(“Authorised acces”);
Serial.println("
”);
digitalWrite(ON_PIN, HIGH);
digitalWrite(OFF_PIN, HIGH);
delay(1000);
digitalWrite(ON_PIN, LOW);
digitalWrite(OFF_PIN, LOW);
return;
}
else {
Serial.println(“");
Serial.println(“Acces denied”);
Serial.println("
”);
return;
}
}

Pictures:

Sensor is on the back