l'idea di fornire chiavi usb è ottima, infatti la utilizzo pure io ... però non nel modo che pensi tu

ogni chiave USB ha un numero seriale (non mi riferisco al filesystem o simili ma proprio all'hardware del pen drive) ... di conseguenza se utilizzi quel codice per identificare l'utente autorizzato ed utilizzi il codice seriale per codificare un GUID (Global Unique Identifier) costituito dalle informazioni del pc sei apposto

per fare questo giochino, semplicemente, scrivi un'applicativo, anche in php stesso, che installato sul pc del cliente si connette tramite un webservice al server e "autentica" il pc al quale è collegato quel dato pennino

ovviamente il webservice dovrà controllare sia il seriale del pennino usb per vedere se è abilitato sia il GUID cosi da vedere se per caso il pennino è stato spostato un pc ad un altro

io uso una soluzione (molto) più complessa ma volendo questo che ti ho detto è abbastanza semplice da realizzare