Da quello che ho capito, è abbastanza semplice da realizzare. Le "one time password" le generi come preferisci... costruendo un file contenente una serie di password per il singolo utente, oppure creando al volo la singola password quando l'utente ne fa richiesta e memorizzandola in un database, controllando che questa non sia gia stata usata in precedenza (perlomeno, che non sia gia presente nel database come password ancora attiva per qualche altro utente).

Ho scritto una funzione, non molto tempo fa, per scaricare i files in automatico senza che l'utente possa vedere l'url reale. Gli url, quindi, te li gestisci internamente e l'utente non potrà riscaricare quel file oppure passarne l'url a terzi, perchè non è in grado di conoscerlo.

La funzione la trovi qua:
http://www.codeflower.com/index.php?a=showCode&id=29

Come esempio di funzionamento clicca sul link "Download" in quella stessa pagina (in alto a destra). Supporta sia files gia presenti sul server in modo stabile (dei quali devi passare il path), sia files creati al volo dalla funzione stessa (ad esempio, se costruisci un testo in modo dinamico dipendente da alcuni parametri passati dall'utente, e vuoi fare in modo che l'utente possa scaricare il testo risultante senza che questo venga conservato in modo stabile sul server).

Fammi sapere se hai problemi.
Cristian.